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