From 39f86c8b0c19e9242caa5ee4c7043b9f419d7b98 Mon Sep 17 00:00:00 2001 From: boubou19 Date: Sat, 19 Jul 2025 00:22:10 +0200 Subject: [PATCH] Speed up forge event registration (#64) Co-authored-by: Alexdoru <57050655+Alexdoru@users.noreply.github.com> --- src/main/java/binnie/botany/Botany.java | 264 +++++++++--------- src/main/java/binnie/core/AbstractMod.java | 5 +- src/main/java/binnie/core/BinnieCore.java | 59 ++-- src/main/java/binnie/core/IInitializable.java | 2 + .../binnie/core/genetics/BreedingSystem.java | 17 +- .../binnie/core/genetics/ManagerGenetics.java | 19 +- .../java/binnie/core/item/ModuleItems.java | 59 ++-- .../extratrees/carpentry/BlockDesign.java | 64 +++-- .../extratrees/carpentry/ModuleCarpentry.java | 16 +- 9 files changed, 271 insertions(+), 234 deletions(-) diff --git a/src/main/java/binnie/botany/Botany.java b/src/main/java/binnie/botany/Botany.java index 76b0ee96..3ae6a944 100644 --- a/src/main/java/binnie/botany/Botany.java +++ b/src/main/java/binnie/botany/Botany.java @@ -6,6 +6,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; +import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.player.BonemealEvent; import net.minecraftforge.event.entity.player.PlayerInteractEvent; import net.minecraftforge.event.world.BlockEvent; @@ -92,6 +93,7 @@ public class Botany extends AbstractMod { public Botany() { Botany.instance = this; + MinecraftForge.EVENT_BUS.register(new EventHandler()); } @Mod.EventHandler @@ -142,118 +144,6 @@ public class Botany extends AbstractMod { return PacketHandler.class; } - @SubscribeEvent - public void onShearFlower(PlayerInteractEvent event) { - if (event.action != PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK) { - return; - } - - if (event.entityPlayer != null && event.entityPlayer.getHeldItem() != null - && event.entityPlayer.getHeldItem().getItem() == Items.shears) { - TileEntity tile = event.world.getTileEntity(event.x, event.y, event.z); - if (tile instanceof TileEntityFlower tileFlower) { - tileFlower.onShear(); - event.entityPlayer.getHeldItem().damageItem(1, event.entityPlayer); - } - } - - if (event.entityPlayer != null && event.entityPlayer.getHeldItem() != null - && event.entityPlayer.getHeldItem().getItem() == Botany.pollen) { - TileEntity tile = event.world.getTileEntity(event.x, event.y, event.z); - if (tile instanceof TileEntityFlower tileFlower) { - IFlower pollen = BotanyCore.getFlowerRoot().getMember(event.entityPlayer.getHeldItem()); - if (pollen != null && tileFlower.canMateWith(pollen)) { - tileFlower.mateWith(pollen); - if (!event.entityPlayer.capabilities.isCreativeMode) { - ItemStack heldItem = event.entityPlayer.getHeldItem(); - heldItem.stackSize--; - } - } - } - } - } - - @SubscribeEvent - public void onFertiliseSoil(PlayerInteractEvent event) { - if (event.action != PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK || event.world == null) { - return; - } - - if (event.entityPlayer == null || event.entityPlayer.getHeldItem() == null) { - return; - } - - int y = event.y; - Block block = event.world.getBlock(event.x, y, event.z); - if (!Gardening.isSoil(block)) { - block = event.world.getBlock(event.x, --y, event.z); - } - if (!Gardening.isSoil(block)) { - return; - } - - IBlockSoil soil = (IBlockSoil) block; - if (Gardening.isNutrientFertiliser(event.entityPlayer.getHeldItem()) - && soil.getType(event.world, event.x, y, event.z) != EnumSoilType.FLOWERBED) { - EnumSoilType type = soil.getType(event.world, event.x, y, event.z); - int next = Math.min(type.ordinal() + Gardening.getFertiliserStrength(event.entityPlayer.getHeldItem()), 2); - if (soil.fertilise(event.world, event.x, y, event.z, EnumSoilType.values()[next]) - && !event.entityPlayer.capabilities.isCreativeMode) { - ItemStack heldItem = event.entityPlayer.getHeldItem(); - heldItem.stackSize--; - return; - } - } - - if (Gardening.isAcidFertiliser(event.entityPlayer.getHeldItem()) - && soil.getPH(event.world, event.x, y, event.z) != EnumAcidity.ACID) { - EnumAcidity pH = soil.getPH(event.world, event.x, y, event.z); - int next = Math.max(pH.ordinal() - Gardening.getFertiliserStrength(event.entityPlayer.getHeldItem()), 0); - if (soil.setPH(event.world, event.x, y, event.z, EnumAcidity.values()[next]) - && !event.entityPlayer.capabilities.isCreativeMode) { - ItemStack heldItem2 = event.entityPlayer.getHeldItem(); - heldItem2.stackSize--; - return; - } - } - - if (Gardening.isAlkalineFertiliser(event.entityPlayer.getHeldItem()) - && soil.getPH(event.world, event.x, y, event.z) != EnumAcidity.ALKALINE) { - EnumAcidity pH = soil.getPH(event.world, event.x, y, event.z); - int next = Math.min(pH.ordinal() + Gardening.getFertiliserStrength(event.entityPlayer.getHeldItem()), 2); - if (soil.setPH(event.world, event.x, y, event.z, EnumAcidity.values()[next]) - && !event.entityPlayer.capabilities.isCreativeMode) { - ItemStack heldItem3 = event.entityPlayer.getHeldItem(); - heldItem3.stackSize--; - return; - } - } - - if (Gardening.isWeedkiller(event.entityPlayer.getHeldItem()) - && Gardening.addWeedKiller(event.world, event.x, y, event.z) - && !event.entityPlayer.capabilities.isCreativeMode) { - ItemStack heldItem4 = event.entityPlayer.getHeldItem(); - heldItem4.stackSize--; - } - } - - @SubscribeEvent - public void plantVanilla(BlockEvent.PlaceEvent event) { - World world = event.world; - int x = event.x; - int y = event.y; - int z = event.z; - Block block = world.getBlock(x, y - 1, z); - if (!(block instanceof IBlockSoil)) { - return; - } - - IFlower flower = BotanyCore.getFlowerRoot().getConversion(event.itemInHand); - if (flower != null) { - Gardening.plant(world, x, y, z, flower, event.player.getGameProfile()); - } - } - @Deprecated public void onPlantVanilla(PlayerInteractEvent event) { if (!BinnieCore.proxy.isSimulating(event.world) @@ -287,22 +177,6 @@ public class Botany extends AbstractMod { } } - @SubscribeEvent - public void onBonemeal(BonemealEvent event) { - Block block = event.world.getBlock(event.x, event.y, event.z); - if (Gardening.isSoil(block)) { - IBlockSoil soil = (IBlockSoil) block; - if (soil.fertilise(event.world, event.x, event.y, event.z, EnumSoilType.LOAM)) { - event.setResult(Event.Result.ALLOW); - } - } - - TileEntity tile = event.world.getTileEntity(event.x, event.y, event.z); - if (tile instanceof TileEntityFlower && ((TileEntityFlower) tile).onBonemeal()) { - event.setResult(Event.Result.ALLOW); - } - } - @Mod.EventHandler public void onIMC(FMLInterModComms.IMCEvent event) { for (FMLInterModComms.IMCMessage message : event.getMessages()) { @@ -333,4 +207,138 @@ public class Botany extends AbstractMod { super(Botany.instance); } } + + public static class EventHandler { + + @SubscribeEvent + public void onShearFlower(PlayerInteractEvent event) { + if (event.action != PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK) { + return; + } + + if (event.entityPlayer != null && event.entityPlayer.getHeldItem() != null + && event.entityPlayer.getHeldItem().getItem() == Items.shears) { + TileEntity tile = event.world.getTileEntity(event.x, event.y, event.z); + if (tile instanceof TileEntityFlower tileFlower) { + tileFlower.onShear(); + event.entityPlayer.getHeldItem().damageItem(1, event.entityPlayer); + } + } + + if (event.entityPlayer != null && event.entityPlayer.getHeldItem() != null + && event.entityPlayer.getHeldItem().getItem() == Botany.pollen) { + TileEntity tile = event.world.getTileEntity(event.x, event.y, event.z); + if (tile instanceof TileEntityFlower tileFlower) { + IFlower pollen = BotanyCore.getFlowerRoot().getMember(event.entityPlayer.getHeldItem()); + if (pollen != null && tileFlower.canMateWith(pollen)) { + tileFlower.mateWith(pollen); + if (!event.entityPlayer.capabilities.isCreativeMode) { + ItemStack heldItem = event.entityPlayer.getHeldItem(); + heldItem.stackSize--; + } + } + } + } + } + + @SubscribeEvent + public void onFertiliseSoil(PlayerInteractEvent event) { + if (event.action != PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK || event.world == null) { + return; + } + + if (event.entityPlayer == null || event.entityPlayer.getHeldItem() == null) { + return; + } + + int y = event.y; + Block block = event.world.getBlock(event.x, y, event.z); + if (!Gardening.isSoil(block)) { + block = event.world.getBlock(event.x, --y, event.z); + } + if (!Gardening.isSoil(block)) { + return; + } + + IBlockSoil soil = (IBlockSoil) block; + if (Gardening.isNutrientFertiliser(event.entityPlayer.getHeldItem()) + && soil.getType(event.world, event.x, y, event.z) != EnumSoilType.FLOWERBED) { + EnumSoilType type = soil.getType(event.world, event.x, y, event.z); + int next = Math + .min(type.ordinal() + Gardening.getFertiliserStrength(event.entityPlayer.getHeldItem()), 2); + if (soil.fertilise(event.world, event.x, y, event.z, EnumSoilType.values()[next]) + && !event.entityPlayer.capabilities.isCreativeMode) { + ItemStack heldItem = event.entityPlayer.getHeldItem(); + heldItem.stackSize--; + return; + } + } + + if (Gardening.isAcidFertiliser(event.entityPlayer.getHeldItem()) + && soil.getPH(event.world, event.x, y, event.z) != EnumAcidity.ACID) { + EnumAcidity pH = soil.getPH(event.world, event.x, y, event.z); + int next = Math + .max(pH.ordinal() - Gardening.getFertiliserStrength(event.entityPlayer.getHeldItem()), 0); + if (soil.setPH(event.world, event.x, y, event.z, EnumAcidity.values()[next]) + && !event.entityPlayer.capabilities.isCreativeMode) { + ItemStack heldItem2 = event.entityPlayer.getHeldItem(); + heldItem2.stackSize--; + return; + } + } + + if (Gardening.isAlkalineFertiliser(event.entityPlayer.getHeldItem()) + && soil.getPH(event.world, event.x, y, event.z) != EnumAcidity.ALKALINE) { + EnumAcidity pH = soil.getPH(event.world, event.x, y, event.z); + int next = Math + .min(pH.ordinal() + Gardening.getFertiliserStrength(event.entityPlayer.getHeldItem()), 2); + if (soil.setPH(event.world, event.x, y, event.z, EnumAcidity.values()[next]) + && !event.entityPlayer.capabilities.isCreativeMode) { + ItemStack heldItem3 = event.entityPlayer.getHeldItem(); + heldItem3.stackSize--; + return; + } + } + + if (Gardening.isWeedkiller(event.entityPlayer.getHeldItem()) + && Gardening.addWeedKiller(event.world, event.x, y, event.z) + && !event.entityPlayer.capabilities.isCreativeMode) { + ItemStack heldItem4 = event.entityPlayer.getHeldItem(); + heldItem4.stackSize--; + } + } + + @SubscribeEvent + public void plantVanilla(BlockEvent.PlaceEvent event) { + World world = event.world; + int x = event.x; + int y = event.y; + int z = event.z; + Block block = world.getBlock(x, y - 1, z); + if (!(block instanceof IBlockSoil)) { + return; + } + + IFlower flower = BotanyCore.getFlowerRoot().getConversion(event.itemInHand); + if (flower != null) { + Gardening.plant(world, x, y, z, flower, event.player.getGameProfile()); + } + } + + @SubscribeEvent + public void onBonemeal(BonemealEvent event) { + Block block = event.world.getBlock(event.x, event.y, event.z); + if (Gardening.isSoil(block)) { + IBlockSoil soil = (IBlockSoil) block; + if (soil.fertilise(event.world, event.x, event.y, event.z, EnumSoilType.LOAM)) { + event.setResult(Event.Result.ALLOW); + } + } + + TileEntity tile = event.world.getTileEntity(event.x, event.y, event.z); + if (tile instanceof TileEntityFlower && ((TileEntityFlower) tile).onBonemeal()) { + event.setResult(Event.Result.ALLOW); + } + } + } } diff --git a/src/main/java/binnie/core/AbstractMod.java b/src/main/java/binnie/core/AbstractMod.java index 11622846..a5d2054d 100644 --- a/src/main/java/binnie/core/AbstractMod.java +++ b/src/main/java/binnie/core/AbstractMod.java @@ -6,8 +6,6 @@ import java.util.Collections; import java.util.LinkedHashSet; import java.util.List; -import net.minecraftforge.common.MinecraftForge; - import binnie.core.gui.IBinnieGUID; import binnie.core.mod.parser.FieldParser; import binnie.core.network.BinniePacketHandler; @@ -29,7 +27,6 @@ public abstract class AbstractMod implements IPacketProvider, IInitializable { fields = new LinkedHashSet<>(); modules = new ArrayList<>(); BinnieCore.registerMod(this); - MinecraftForge.EVENT_BUS.register(this); } public boolean isActive() { @@ -131,6 +128,6 @@ public abstract class AbstractMod implements IPacketProvider, IInitializable { protected void addModule(IInitializable init) { modules.add(init); - MinecraftForge.EVENT_BUS.register(init); + init.registerEventHandler(); } } diff --git a/src/main/java/binnie/core/BinnieCore.java b/src/main/java/binnie/core/BinnieCore.java index 01fb049c..41128eec 100644 --- a/src/main/java/binnie/core/BinnieCore.java +++ b/src/main/java/binnie/core/BinnieCore.java @@ -5,9 +5,9 @@ import java.util.List; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.Item; -import net.minecraft.nbt.NBTTagCompound; import net.minecraft.server.MinecraftServer; import net.minecraftforge.client.event.TextureStitchEvent; +import net.minecraftforge.common.MinecraftForge; import binnie.Binnie; import binnie.core.block.MultipassBlockRenderer; @@ -69,6 +69,10 @@ public class BinnieCore extends AbstractMod { public static ItemGenesis genesis; public static ItemFieldKit fieldKit; + public BinnieCore() { + MinecraftForge.EVENT_BUS.register(new EventHandler()); + } + @Mod.EventHandler public void preInit(FMLPreInitializationEvent event) { for (ManagerBase baseManager : Binnie.Managers) { @@ -161,23 +165,6 @@ public class BinnieCore extends AbstractMod { return list; } - @SubscribeEvent - @SideOnly(Side.CLIENT) - public void handleSpeciesDiscovered(ForestryEvent.SpeciesDiscovered event) { - try { - EntityPlayerMP player = MinecraftServer.getServer().getConfigurationManager() - .func_152612_a(event.username.getName()); - if (player == null) { - return; - } - event.tracker.synchToPlayer(player); - NBTTagCompound nbt = new NBTTagCompound(); - nbt.setString("species", event.species.getUID()); - } catch (Exception ex) { - // ignored - } - } - @Override public String getChannel() { return "BIN"; @@ -198,15 +185,6 @@ public class BinnieCore extends AbstractMod { return BinnieCorePacketID.values(); } - @SubscribeEvent - @SideOnly(Side.CLIENT) - public void handleTextureRemap(TextureStitchEvent.Pre event) { - if (event.map.getTextureType() == 0) { - Binnie.Liquid.reloadIcons(event.map); - } - Binnie.Resource.registerIcons(event.map, event.map.getTextureType()); - } - @Override protected Class getPacketHandler() { return PacketHandler.class; @@ -223,4 +201,31 @@ public class BinnieCore extends AbstractMod { super(instance); } } + + public static class EventHandler { + + @SubscribeEvent + @SideOnly(Side.CLIENT) + public void handleSpeciesDiscovered(ForestryEvent.SpeciesDiscovered event) { + try { + EntityPlayerMP player = MinecraftServer.getServer().getConfigurationManager() + .func_152612_a(event.username.getName()); + if (player == null) { + return; + } + event.tracker.synchToPlayer(player); + } catch (Exception ex) { + // ignored + } + } + + @SubscribeEvent + @SideOnly(Side.CLIENT) + public void handleTextureRemap(TextureStitchEvent.Pre event) { + if (event.map.getTextureType() == 0) { + Binnie.Liquid.reloadIcons(event.map); + } + Binnie.Resource.registerIcons(event.map, event.map.getTextureType()); + } + } } diff --git a/src/main/java/binnie/core/IInitializable.java b/src/main/java/binnie/core/IInitializable.java index 03e7b013..f71384ed 100644 --- a/src/main/java/binnie/core/IInitializable.java +++ b/src/main/java/binnie/core/IInitializable.java @@ -7,4 +7,6 @@ public interface IInitializable { void init(); void postInit(); + + default void registerEventHandler() {} } diff --git a/src/main/java/binnie/core/genetics/BreedingSystem.java b/src/main/java/binnie/core/genetics/BreedingSystem.java index bdeafa12..2066ed5f 100644 --- a/src/main/java/binnie/core/genetics/BreedingSystem.java +++ b/src/main/java/binnie/core/genetics/BreedingSystem.java @@ -57,7 +57,7 @@ public abstract class BreedingSystem implements IItemStackRepresentative { public BreedingSystem() { Binnie.Genetics.registerBreedingSystem(this); - MinecraftForge.EVENT_BUS.register(this); + MinecraftForge.EVENT_BUS.register(new EventHandler()); } public String getChromosomeName(IChromosomeType chromo) { @@ -294,13 +294,16 @@ public abstract class BreedingSystem implements IItemStackRepresentative { public abstract Class getTrackerClass(); - @SubscribeEvent - public void onSyncBreedingTracker(ForestryEvent.SyncedBreedingTracker event) { - IBreedingTracker tracker = event.tracker; - if (!getTrackerClass().isInstance(tracker)) { - return; + public class EventHandler { + + @SubscribeEvent + public void onSyncBreedingTracker(ForestryEvent.SyncedBreedingTracker event) { + IBreedingTracker tracker = event.tracker; + if (!getTrackerClass().isInstance(tracker)) { + return; + } + syncTracker(tracker); } - syncTracker(tracker); } public void syncTracker(IBreedingTracker tracker) { diff --git a/src/main/java/binnie/core/genetics/ManagerGenetics.java b/src/main/java/binnie/core/genetics/ManagerGenetics.java index 8d2c3b6f..a054867e 100644 --- a/src/main/java/binnie/core/genetics/ManagerGenetics.java +++ b/src/main/java/binnie/core/genetics/ManagerGenetics.java @@ -9,6 +9,7 @@ import java.util.Map; import java.util.TreeSet; import net.minecraft.item.ItemStack; +import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.world.WorldEvent; import binnie.Binnie; @@ -67,6 +68,11 @@ public class ManagerGenetics extends ManagerBase { refreshData(); } + @Override + public void registerEventHandler() { + MinecraftForge.EVENT_BUS.register(new EventHandler()); + } + public ITreeRoot getTreeRoot() { return (ITreeRoot) AlleleManager.alleleRegistry.getSpeciesRoot("rootTrees"); } @@ -140,11 +146,6 @@ public class ManagerGenetics extends ManagerBase { return (system == null) ? null : system.getConversion(stack); } - @SubscribeEvent - public void onWorldLoad(WorldEvent.Load event) { - refreshData(); - } - private void refreshData() { loadAlleles(); for (BreedingSystem system : Binnie.Genetics.getActiveSystems()) { @@ -219,4 +220,12 @@ public class ManagerGenetics extends ManagerBase { return o1.getUID().compareTo(o2.getUID()); } } + + public class EventHandler { + + @SubscribeEvent + public void onWorldLoad(WorldEvent.Load event) { + refreshData(); + } + } } diff --git a/src/main/java/binnie/core/item/ModuleItems.java b/src/main/java/binnie/core/item/ModuleItems.java index bcc771c4..2d0fa577 100644 --- a/src/main/java/binnie/core/item/ModuleItems.java +++ b/src/main/java/binnie/core/item/ModuleItems.java @@ -6,6 +6,7 @@ import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.player.PlayerInteractEvent; import binnie.botany.Botany; @@ -49,36 +50,44 @@ public class ModuleItems implements IInitializable { new ItemStack(Items.dye, 1)); } - @SubscribeEvent - public void onUseFieldKit(PlayerInteractEvent event) { - if (event.action != PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK) { - return; - } + @Override + public void registerEventHandler() { + MinecraftForge.EVENT_BUS.register(new EventHandler()); + } - EntityPlayer player = event.entityPlayer; - if (player != null && player.getHeldItem() != null - && player.getHeldItem().getItem() == BinnieCore.fieldKit - && player.isSneaking()) { - TileEntity tile = event.world.getTileEntity(event.x, event.y, event.z); - if (!(tile instanceof TileEntityFlower tileFlower)) { + public static class EventHandler { + + @SubscribeEvent + public void onUseFieldKit(PlayerInteractEvent event) { + if (event.action != PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK) { return; } - IFlower flower = tileFlower.getFlower(); - if (flower == null) { - return; - } + EntityPlayer player = event.entityPlayer; + if (player != null && player.getHeldItem() != null + && player.getHeldItem().getItem() == BinnieCore.fieldKit + && player.isSneaking()) { + TileEntity tile = event.world.getTileEntity(event.x, event.y, event.z); + if (!(tile instanceof TileEntityFlower tileFlower)) { + return; + } - NBTTagCompound info = new NBTTagCompound(); - info.setString("Species", flower.getGenome().getPrimary().getUID()); - info.setString("Species2", flower.getGenome().getSecondary().getUID()); - info.setFloat("Age", flower.getAge() / flower.getGenome().getLifespan()); - info.setShort("Colour", (short) flower.getGenome().getPrimaryColor().getID()); - info.setShort("Colour2", (short) flower.getGenome().getSecondaryColor().getID()); - info.setBoolean("Wilting", flower.isWilted()); - info.setBoolean("Flowered", flower.hasFlowered()); - Botany.proxy.sendToPlayer(new MessageNBT(PacketID.FieldKit.ordinal(), info), event.entityPlayer); - event.entityPlayer.getHeldItem().damageItem(1, event.entityPlayer); + IFlower flower = tileFlower.getFlower(); + if (flower == null) { + return; + } + + NBTTagCompound info = new NBTTagCompound(); + info.setString("Species", flower.getGenome().getPrimary().getUID()); + info.setString("Species2", flower.getGenome().getSecondary().getUID()); + info.setFloat("Age", flower.getAge() / flower.getGenome().getLifespan()); + info.setShort("Colour", (short) flower.getGenome().getPrimaryColor().getID()); + info.setShort("Colour2", (short) flower.getGenome().getSecondaryColor().getID()); + info.setBoolean("Wilting", flower.isWilted()); + info.setBoolean("Flowered", flower.hasFlowered()); + Botany.proxy.sendToPlayer(new MessageNBT(PacketID.FieldKit.ordinal(), info), event.entityPlayer); + event.entityPlayer.getHeldItem().damageItem(1, event.entityPlayer); + } } } } diff --git a/src/main/java/binnie/extratrees/carpentry/BlockDesign.java b/src/main/java/binnie/extratrees/carpentry/BlockDesign.java index b27e5133..65273652 100644 --- a/src/main/java/binnie/extratrees/carpentry/BlockDesign.java +++ b/src/main/java/binnie/extratrees/carpentry/BlockDesign.java @@ -11,6 +11,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; +import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.event.entity.player.PlayerInteractEvent; @@ -40,36 +41,12 @@ public abstract class BlockDesign extends BlockMetadata implements IMultipassBlo designSystem = system; } - public static int getMetadata(int plank1, int plank2, int design) { - return plank1 + (plank2 << 9) + (design << 18); + public void registerHandler() { + MinecraftForge.EVENT_BUS.register(new EventHandler()); } - @SubscribeEvent - public void onClick(PlayerInteractEvent event) { - if (event.action != PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK) { - return; - } - - World world = event.entityPlayer.worldObj; - EntityPlayer player = event.entityPlayer; - int x = event.x; - int y = event.y; - int z = event.z; - if (!(world.getBlock(x, y, z) instanceof BlockDesign blockDesign)) { - return; - } - - ItemStack item = player.getHeldItem(); - if (item == null || !(item.getItem() instanceof IToolHammer) - || !((IToolHammer) item.getItem()).isActive(item)) { - return; - } - - DesignBlock carpentryBlock = blockDesign.getCarpentryBlock(world, x, y, z); - TileEntityMetadata tile = (TileEntityMetadata) world.getTileEntity(x, y, z); - carpentryBlock.rotate(event.face, item, player, world, x, y, z); - int meta = carpentryBlock.getBlockMetadata(blockDesign.getDesignSystem()); - tile.setTileMetadata(meta, true); + public static int getMetadata(int plank1, int plank2, int design) { + return plank1 + (plank2 << 9) + (design << 18); } public abstract ItemStack getCreativeStack(IDesign design); @@ -160,4 +137,35 @@ public abstract class BlockDesign extends BlockMetadata implements IMultipassBlo public int getNumberOfPasses() { return 2; } + + public static class EventHandler { + + @SubscribeEvent + public void onClick(PlayerInteractEvent event) { + if (event.action != PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK) { + return; + } + + World world = event.entityPlayer.worldObj; + EntityPlayer player = event.entityPlayer; + int x = event.x; + int y = event.y; + int z = event.z; + if (!(world.getBlock(x, y, z) instanceof BlockDesign blockDesign)) { + return; + } + + ItemStack item = player.getHeldItem(); + if (item == null || !(item.getItem() instanceof IToolHammer) + || !((IToolHammer) item.getItem()).isActive(item)) { + return; + } + + DesignBlock carpentryBlock = blockDesign.getCarpentryBlock(world, x, y, z); + TileEntityMetadata tile = (TileEntityMetadata) world.getTileEntity(x, y, z); + carpentryBlock.rotate(event.face, item, player, world, x, y, z); + int meta = carpentryBlock.getBlockMetadata(blockDesign.getDesignSystem()); + tile.setTileMetadata(meta, true); + } + } } diff --git a/src/main/java/binnie/extratrees/carpentry/ModuleCarpentry.java b/src/main/java/binnie/extratrees/carpentry/ModuleCarpentry.java index 7dec990d..b02c2bee 100644 --- a/src/main/java/binnie/extratrees/carpentry/ModuleCarpentry.java +++ b/src/main/java/binnie/extratrees/carpentry/ModuleCarpentry.java @@ -2,7 +2,6 @@ package binnie.extratrees.carpentry; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.util.ForgeDirection; import binnie.core.BinnieCore; @@ -81,21 +80,18 @@ public class ModuleCarpentry implements IInitializable { @Override public void preInit() { + // spotless:off ExtraTrees.blockCarpentry = new BlockCarpentry(); ExtraTrees.blockPanel = new BlockCarpentryPanel(); ExtraTrees.blockStained = new BlockStainedDesign(); GameRegistry.registerBlock(ExtraTrees.blockCarpentry, ItemMetadata.class, "carpentry"); GameRegistry.registerBlock(ExtraTrees.blockPanel, ItemMetadata.class, "panel"); GameRegistry.registerBlock(ExtraTrees.blockStained, ItemMetadata.class, "stainedglass"); - BinnieCore.proxy.registerCustomItemRenderer( - Item.getItemFromBlock(ExtraTrees.blockCarpentry), - new MultipassItemRenderer()); - BinnieCore.proxy.registerCustomItemRenderer( - Item.getItemFromBlock(ExtraTrees.blockStained), - new MultipassItemRenderer()); - MinecraftForge.EVENT_BUS.register(ExtraTrees.blockCarpentry); - BinnieCore.proxy - .registerCustomItemRenderer(Item.getItemFromBlock(ExtraTrees.blockPanel), new MultipassItemRenderer()); + BinnieCore.proxy.registerCustomItemRenderer(Item.getItemFromBlock(ExtraTrees.blockCarpentry), new MultipassItemRenderer()); + BinnieCore.proxy.registerCustomItemRenderer(Item.getItemFromBlock(ExtraTrees.blockStained), new MultipassItemRenderer()); + ExtraTrees.blockCarpentry.registerHandler(); + BinnieCore.proxy.registerCustomItemRenderer(Item.getItemFromBlock(ExtraTrees.blockPanel), new MultipassItemRenderer()); + // spotless:on } @Override