Posted November 4, 20196 yr 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 Edited November 4, 20196 yr by Kirderf
November 4, 20196 yr Author 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; } }); } }
November 4, 20196 yr DeferredWorkQueue is flagged as deprecated. Is it still the best way to do this?
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.