Jump to content

[1.14.4] DispenserBehavior extended


Kirderf

Recommended Posts

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;
             }
        });
    }

}


 

 

 

 

 

Link to comment
Share on other sites

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

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