Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Kirderf

Members
  • Joined

  • Last visited

  1. Thank you for your advice. I fixed the problem now. @diesieben07
  2. package com.kirderf.compactxpbottles; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import com.kirderf.compactxpbottles.dispenser.CustumDispenseBehavior; import com.kirderf.compactxpbottles.entity.CustomExperienceBottleEntity; import com.kirderf.compactxpbottles.lists.ItemList; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.entity.SpriteRenderer; import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.client.registry.RenderingRegistry; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.registries.ObjectHolder; @Mod("compactxpbottles") public class compactxpbottles { public static compactxpbottles instance; private static final Logger logger = LogManager.getLogger("compactxpbottles"); public static final String MODID = "compactxpbottles"; public static ItemGroup KirderfCreativeTab = new KirderfCreativeTab("compactxpbottles"); public compactxpbottles() { instance = this; FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup); FMLJavaModLoadingContext.get().getModEventBus().addListener(this::clientRegisteries); MinecraftForge.EVENT_BUS.register(this); } private void setup(final FMLCommonSetupEvent event) { CustumDispenseBehavior.init(); logger.info("Setup method registered"); } private void clientRegisteries(final FMLClientSetupEvent event) { logger.info("ClientRegisteries method registered"); } @Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD) @ObjectHolder(compactxpbottles.MODID) public static class RegistryEvents { @SubscribeEvent public static void RegistryItems(final RegistryEvent.Register<Item> event) { event.getRegistry().registerAll( ItemList.x4experiencebottle.setRegistryName(location("x4experiencebottle")), ItemList.x16experiencebottle.setRegistryName(location("x16experiencebottle")), ItemList.x64experiencebottle.setRegistryName(location("x64experiencebottle")), ItemList.x256experiencebottle.setRegistryName(location("x256experiencebottle"))); logger.info("Items registered"); } public static ResourceLocation location(String name) { return new ResourceLocation("compactxpbottles", name); } } } public abstract class CustumDispenseBehavior extends DefaultDispenseItemBehavior implements ICustomDiespenseItemBehavior{ @Override public ItemStack dispenseStack(IBlockSource source, ItemStack stack) { Direction direction = source.getBlockState().get(DispenserBlock.FACING); IPosition iposition = DispenserBlock.getDispensePosition(source); ItemStack itemstack = stack.split(1); doDispense(source.getWorld(), itemstack, 6, direction, iposition); return stack; } public static void init() { } } package com.kirderf.compactxpbottles.dispenser; import com.kirderf.compactxpbottles.entity.CustomExperienceBottleEntity; import com.kirderf.compactxpbottles.lists.ItemList; import net.minecraft.block.DispenserBlock; import net.minecraft.dispenser.IBlockSource; import net.minecraft.dispenser.IDispenseItemBehavior; import net.minecraft.dispenser.IPosition; import net.minecraft.dispenser.ProjectileDispenseBehavior; import net.minecraft.entity.IProjectile; import net.minecraft.item.ItemStack; import net.minecraft.util.Util; import net.minecraft.world.World; public interface ICustomDiespenseItemBehavior extends IDispenseItemBehavior { ICustomDiespenseItemBehavior NOOP = (p_210297_0_, p_210297_1_) -> { return p_210297_1_; }; ItemStack dispense(IBlockSource p_dispense_1_, ItemStack p_dispense_2_); static void init() { DispenserBlock.registerDispenseBehavior(ItemList.x4experiencebottle, new ProjectileDispenseBehavior() { protected IProjectile getProjectileEntity(World worldIn, IPosition position, ItemStack stackIn) { return Util.make(new CustomExperienceBottleEntity(worldIn, position.getX(), position.getY(), position.getZ(), 4), (p_218410_1_) -> { p_218410_1_.func_213884_b(stackIn); }); } protected float getProjectileInaccuracy() { return super.getProjectileInaccuracy() * 0.5F; } protected float getProjectileVelocity() { return super.getProjectileVelocity() * 1.25F; } }); DispenserBlock.registerDispenseBehavior(ItemList.x16experiencebottle, new ProjectileDispenseBehavior() { protected IProjectile getProjectileEntity(World worldIn, IPosition position, ItemStack stackIn) { return Util.make(new CustomExperienceBottleEntity(worldIn, position.getX(), position.getY(), position.getZ(), 16), (p_218410_1_) -> { p_218410_1_.func_213884_b(stackIn); }); } protected float getProjectileInaccuracy() { return super.getProjectileInaccuracy() * 0.5F; } protected float getProjectileVelocity() { return super.getProjectileVelocity() * 1.25F; } }); DispenserBlock.registerDispenseBehavior(ItemList.x64experiencebottle, new ProjectileDispenseBehavior() { protected IProjectile getProjectileEntity(World worldIn, IPosition position, ItemStack stackIn) { return Util.make(new CustomExperienceBottleEntity(worldIn, position.getX(), position.getY(), position.getZ(), 64), (p_218410_1_) -> { p_218410_1_.func_213884_b(stackIn); }); } protected float getProjectileInaccuracy() { return super.getProjectileInaccuracy() * 0.5F; } protected float getProjectileVelocity() { return super.getProjectileVelocity() * 1.25F; } }); DispenserBlock.registerDispenseBehavior(ItemList.x256experiencebottle, new ProjectileDispenseBehavior() { protected IProjectile getProjectileEntity(World worldIn, IPosition position, ItemStack stackIn) { return Util.make(new CustomExperienceBottleEntity(worldIn, position.getX(), position.getY(), position.getZ(), 256), (p_218410_1_) -> { p_218410_1_.func_213884_b(stackIn); }); } protected float getProjectileInaccuracy() { return super.getProjectileInaccuracy() * 0.5F; } protected float getProjectileVelocity() { return super.getProjectileVelocity() * 1.25F; } }); } }
  3. When does Minecraft handle DispenserBehavior? Trying to extend DefaultDispenserBehavior to add my entity Do I need a registry event ? Added some files for clarification CustomExperienceBottleEntity.java compactxpbottles.java CustumDispenseBehavior.java ICustomDiespenseItemBehavior.java

Important Information

By using this site, you agree to our Terms of Use.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.