From 620a6b3e1d97dabc22911c23dea797d683fb5092 Mon Sep 17 00:00:00 2001 From: alexbegt Date: Tue, 15 Jan 2019 22:22:27 -0500 Subject: [PATCH] Update to the latest forge, Implement the packet to sync the topstacks of the crystal chests, move to EventBusSubscriber for all registration, and make sure all classes have CPWs copyright on them. TODO: Move to @ObjectHolder. --- build.gradle | 24 +---- gradle.properties | 2 +- .../java/cpw/mods/ironchest/IronChest.java | 16 +--- .../mods/ironchest/client/ClientProxy.java | 8 ++ .../TileEntityIronChestItemRenderer.java | 10 ++ .../mods/ironchest/common/ServerProxy.java | 6 ++ .../common/core/IronChestBlocks.java | 56 ++++++----- .../ironchest/common/core/IronChestItems.java | 42 ++++++--- .../common/items/ChestChangerType.java | 3 - .../common/items/ItemChestChanger.java | 2 - .../common/network/PacketHandler.java | 47 ++++++++++ .../packets/PacketTopStackSyncChest.java | 92 +++++++++++++++++++ .../tileentity/IronChestEntityType.java | 82 +++++------------ .../tileentity/TileEntityCrystalChest.java | 24 ++++- .../tileentity/TileEntityDirtChest.java | 10 +- .../tileentity/TileEntityIronChest.java | 1 + src/main/resources/META-INF/mods.toml | 2 +- 17 files changed, 281 insertions(+), 146 deletions(-) create mode 100644 src/main/java/cpw/mods/ironchest/common/network/PacketHandler.java create mode 100644 src/main/java/cpw/mods/ironchest/common/network/packets/PacketTopStackSyncChest.java diff --git a/build.gradle b/build.gradle index 0ef8e4c..3956ee4 100755 --- a/build.gradle +++ b/build.gradle @@ -38,43 +38,23 @@ group = "cpw.mods" // http://maven.apache.org/guides/mini/guide-naming-conventio // This is our actual project within the group. Note: FML has "fml" here. But this is ironchest. archivesBaseName = "ironchest" -sourceCompatibility = targetCompatibility = '1.8' // Need this here so eclipse task generates correctly. -compileJava { - sourceCompatibility = targetCompatibility = '1.8' -} - minecraft { mappings channel: 'snapshot', version: mappings_version runs { client = { - main "net.minecraftforge.userdev.UserdevLauncher" workingDirectory = project.file("run").canonicalPath - environment "target", "fmluserdevclient" - environment "assetDirectory", downloadAssets.output.absolutePath - environment "FORGE_VERSION", forge_version - environment "FORGE_GROUP", forge_group - environment "MCP_VERSION", mappings_version - environment "MC_VERSION", minecraft_version - environment "MOD_CLASSES", "${sourceSets.main.output.resourcesDir}${File.pathSeparator}${sourceSets.main.output.classesDirs.join(File.pathSeparator)}" + source sourceSets.main } server = { - main "net.minecraftforge.userdev.UserdevLauncher" workingDirectory = project.file("run").canonicalPath - environment "target", "fmluserdevserver" - environment "assetDirectory", downloadAssets.output.absolutePath - environment "FORGE_VERSION", forge_version - environment "FORGE_GROUP", forge_group - environment "MCP_VERSION", mappings_version - environment "MC_VERSION", minecraft_version - environment "MOD_CLASSES", "${sourceSets.main.output.resourcesDir}${File.pathSeparator}${sourceSets.main.output.classesDirs.join(File.pathSeparator)}" + source sourceSets.main } } } dependencies { minecraft 'net.minecraftforge.test:forge:' + minecraft_version + '-' + forge_version - compile 'net.minecraftforge.test:forge:' + minecraft_version + '-' + forge_version + ':launcher' } // IronChest uses git tagging to mark major versions. This sets up the project version to that version data diff --git a/gradle.properties b/gradle.properties index ffb6a46..516e5ee 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,7 +7,7 @@ minecraft_version=1.13 minecraft_version_toml=13 # Forge Version Information -forge_version=24.0.61-1.13-pre +forge_version=24.0.81-1.13-pre forge_version_toml=24 forge_group=net.minecraftforge.test diff --git a/src/main/java/cpw/mods/ironchest/IronChest.java b/src/main/java/cpw/mods/ironchest/IronChest.java index 9b1a330..0975236 100644 --- a/src/main/java/cpw/mods/ironchest/IronChest.java +++ b/src/main/java/cpw/mods/ironchest/IronChest.java @@ -14,9 +14,7 @@ import cpw.mods.ironchest.client.ClientProxy; import cpw.mods.ironchest.common.ServerProxy; import cpw.mods.ironchest.common.ai.OcelotsSitOnChestsHandler; import cpw.mods.ironchest.common.blocks.BlockChest; -import cpw.mods.ironchest.common.core.IronChestBlocks; -import cpw.mods.ironchest.common.core.IronChestItems; -import cpw.mods.ironchest.common.tileentity.IronChestEntityType; +import cpw.mods.ironchest.common.network.PacketHandler; import cpw.mods.ironchest.common.util.BlockNames; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; @@ -24,7 +22,7 @@ import net.minecraft.util.EnumFacing; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreRegistrationEvent; import net.minecraftforge.fml.javafmlmod.FMLModLoadingContext; @Mod(value = IronChest.MOD_ID) @@ -38,19 +36,14 @@ public class IronChest public static ServerProxy proxy = DistExecutor.runForDist(() -> ClientProxy::new, () -> ServerProxy::new); - public IronChestEntityType ironChestEntityType = new IronChestEntityType(); - public IronChest() { instance = this; FMLModLoadingContext.get().getModEventBus().addListener(this::preInit); MinecraftForge.EVENT_BUS.register(new OcelotsSitOnChestsHandler()); - MinecraftForge.EVENT_BUS.register(new IronChestBlocks()); - MinecraftForge.EVENT_BUS.register(new IronChestItems()); - MinecraftForge.EVENT_BUS.register(new IronChestEntityType()); } - private void preInit(final FMLPreInitializationEvent event) + private void preInit(final FMLPreRegistrationEvent event) { proxy.preInit(); @@ -59,8 +52,7 @@ public class IronChest debugPrints(); } - ironChestEntityType.registerTileEntities(); - ironChestEntityType.createEntries(); + PacketHandler.register(); } private void debugPrints() diff --git a/src/main/java/cpw/mods/ironchest/client/ClientProxy.java b/src/main/java/cpw/mods/ironchest/client/ClientProxy.java index 10520e8..935f41e 100644 --- a/src/main/java/cpw/mods/ironchest/client/ClientProxy.java +++ b/src/main/java/cpw/mods/ironchest/client/ClientProxy.java @@ -13,6 +13,8 @@ package cpw.mods.ironchest.client; import cpw.mods.ironchest.client.renderer.TileEntityIronChestRenderer; import cpw.mods.ironchest.common.ServerProxy; import cpw.mods.ironchest.common.blocks.IronChestType; +import net.minecraft.client.Minecraft; +import net.minecraft.world.World; import net.minecraftforge.fml.client.registry.ClientRegistry; public class ClientProxy extends ServerProxy @@ -36,4 +38,10 @@ public class ClientProxy extends ServerProxy } } } + + @Override + public World getClientWorld() + { + return Minecraft.getInstance().world; + } } diff --git a/src/main/java/cpw/mods/ironchest/client/renderer/TileEntityIronChestItemRenderer.java b/src/main/java/cpw/mods/ironchest/client/renderer/TileEntityIronChestItemRenderer.java index e961c53..16e95fe 100644 --- a/src/main/java/cpw/mods/ironchest/client/renderer/TileEntityIronChestItemRenderer.java +++ b/src/main/java/cpw/mods/ironchest/client/renderer/TileEntityIronChestItemRenderer.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + *

+ * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ package cpw.mods.ironchest.client.renderer; import cpw.mods.ironchest.common.blocks.BlockChest; diff --git a/src/main/java/cpw/mods/ironchest/common/ServerProxy.java b/src/main/java/cpw/mods/ironchest/common/ServerProxy.java index 7ccf778..13950fc 100644 --- a/src/main/java/cpw/mods/ironchest/common/ServerProxy.java +++ b/src/main/java/cpw/mods/ironchest/common/ServerProxy.java @@ -10,10 +10,16 @@ ******************************************************************************/ package cpw.mods.ironchest.common; +import net.minecraft.world.World; + public class ServerProxy { public void preInit() { + } + public World getClientWorld() + { + return null; } } diff --git a/src/main/java/cpw/mods/ironchest/common/core/IronChestBlocks.java b/src/main/java/cpw/mods/ironchest/common/core/IronChestBlocks.java index cf1faa6..2ecffbb 100644 --- a/src/main/java/cpw/mods/ironchest/common/core/IronChestBlocks.java +++ b/src/main/java/cpw/mods/ironchest/common/core/IronChestBlocks.java @@ -10,6 +10,7 @@ ******************************************************************************/ package cpw.mods.ironchest.common.core; +import cpw.mods.ironchest.IronChest; import cpw.mods.ironchest.client.renderer.TileEntityIronChestItemRenderer; import cpw.mods.ironchest.common.blocks.BlockChest; import cpw.mods.ironchest.common.blocks.BlockCopperChest; @@ -27,6 +28,7 @@ import net.minecraft.item.Item; import net.minecraft.item.Item.Builder; import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; import net.minecraftforge.registries.IForgeRegistry; public class IronChestBlocks @@ -70,35 +72,39 @@ public class IronChestBlocks } - @SubscribeEvent - public void registerBlocks(final RegistryEvent.Register event) + @Mod.EventBusSubscriber(modid = IronChest.MOD_ID) + public static class Registration { - IForgeRegistry blockRegistry = event.getRegistry(); + @SubscribeEvent + public static void registerBlocks(final RegistryEvent.Register event) + { + IForgeRegistry blockRegistry = event.getRegistry(); - blockRegistry.register(ironChestBlock = new BlockIronChest(Block.Builder.create(Material.IRON).hardnessAndResistance(3.0F, 3.0F))); - blockRegistry.register(goldChestBlock = new BlockGoldChest(Block.Builder.create(Material.IRON).hardnessAndResistance(3.0F, 3.0F))); - blockRegistry.register(diamondChestBlock = new BlockDiamondChest(Block.Builder.create(Material.IRON).hardnessAndResistance(3.0F, 3.0F))); - blockRegistry.register(copperChestBlock = new BlockCopperChest(Block.Builder.create(Material.IRON).hardnessAndResistance(3.0F, 3.0F))); - blockRegistry.register(silverChestBlock = new BlockSilverChest(Block.Builder.create(Material.IRON).hardnessAndResistance(3.0F, 3.0F))); - blockRegistry.register(crystalChestBlock = new BlockCrystalChest(Block.Builder.create(Material.IRON).hardnessAndResistance(3.0F, 3.0F))); - blockRegistry.register(obsidianChestBlock = new BlockObsidianChest(Block.Builder.create(Material.IRON).hardnessAndResistance(3.0F, 3.0F))); - blockRegistry.register(dirtChestBlock = new BlockDirtChest(Block.Builder.create(Material.IRON).hardnessAndResistance(3.0F, 3.0F))); - } + blockRegistry.register(ironChestBlock = new BlockIronChest(Block.Builder.create(Material.IRON).hardnessAndResistance(3.0F, 3.0F))); + blockRegistry.register(goldChestBlock = new BlockGoldChest(Block.Builder.create(Material.IRON).hardnessAndResistance(3.0F, 3.0F))); + blockRegistry.register(diamondChestBlock = new BlockDiamondChest(Block.Builder.create(Material.IRON).hardnessAndResistance(3.0F, 3.0F))); + blockRegistry.register(copperChestBlock = new BlockCopperChest(Block.Builder.create(Material.IRON).hardnessAndResistance(3.0F, 3.0F))); + blockRegistry.register(silverChestBlock = new BlockSilverChest(Block.Builder.create(Material.IRON).hardnessAndResistance(3.0F, 3.0F))); + blockRegistry.register(crystalChestBlock = new BlockCrystalChest(Block.Builder.create(Material.IRON).hardnessAndResistance(3.0F, 3.0F))); + blockRegistry.register(obsidianChestBlock = new BlockObsidianChest(Block.Builder.create(Material.IRON).hardnessAndResistance(3.0F, 3.0F))); + blockRegistry.register(dirtChestBlock = new BlockDirtChest(Block.Builder.create(Material.IRON).hardnessAndResistance(3.0F, 3.0F))); + } - @SubscribeEvent - public void registerItems(final RegistryEvent.Register event) - { - IForgeRegistry itemRegistry = event.getRegistry(); + @SubscribeEvent + public static void registerItems(final RegistryEvent.Register event) + { + IForgeRegistry itemRegistry = event.getRegistry(); - itemBuilder = (new Builder()).group(IronChestCreativeTabs.IRON_CHESTS).setTEISR(() -> TileEntityIronChestItemRenderer::new); + itemBuilder = (new Builder()).group(IronChestCreativeTabs.IRON_CHESTS).setTEISR(() -> TileEntityIronChestItemRenderer::new); - itemRegistry.register(ironChestItemBlock = new ItemChest(ironChestBlock, itemBuilder)); - itemRegistry.register(goldChestItemBlock = new ItemChest(goldChestBlock, itemBuilder)); - itemRegistry.register(diamondChestItemBlock = new ItemChest(diamondChestBlock, itemBuilder)); - itemRegistry.register(copperChestItemBlock = new ItemChest(copperChestBlock, itemBuilder)); - itemRegistry.register(silverChestItemBlock = new ItemChest(silverChestBlock, itemBuilder)); - itemRegistry.register(crystalChestItemBlock = new ItemChest(crystalChestBlock, itemBuilder)); - itemRegistry.register(obsidianChestItemBlock = new ItemChest(obsidianChestBlock, itemBuilder)); - itemRegistry.register(dirtChestItemBlock = new ItemChest(dirtChestBlock, itemBuilder)); + itemRegistry.register(ironChestItemBlock = new ItemChest(ironChestBlock, itemBuilder)); + itemRegistry.register(goldChestItemBlock = new ItemChest(goldChestBlock, itemBuilder)); + itemRegistry.register(diamondChestItemBlock = new ItemChest(diamondChestBlock, itemBuilder)); + itemRegistry.register(copperChestItemBlock = new ItemChest(copperChestBlock, itemBuilder)); + itemRegistry.register(silverChestItemBlock = new ItemChest(silverChestBlock, itemBuilder)); + itemRegistry.register(crystalChestItemBlock = new ItemChest(crystalChestBlock, itemBuilder)); + itemRegistry.register(obsidianChestItemBlock = new ItemChest(obsidianChestBlock, itemBuilder)); + itemRegistry.register(dirtChestItemBlock = new ItemChest(dirtChestBlock, itemBuilder)); + } } } diff --git a/src/main/java/cpw/mods/ironchest/common/core/IronChestItems.java b/src/main/java/cpw/mods/ironchest/common/core/IronChestItems.java index 44d53f7..d7dddcf 100644 --- a/src/main/java/cpw/mods/ironchest/common/core/IronChestItems.java +++ b/src/main/java/cpw/mods/ironchest/common/core/IronChestItems.java @@ -1,11 +1,23 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + *

+ * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ package cpw.mods.ironchest.common.core; +import cpw.mods.ironchest.IronChest; import cpw.mods.ironchest.common.items.ChestChangerType; import cpw.mods.ironchest.common.items.ItemChestChanger; import net.minecraft.item.Item; import net.minecraft.item.Item.Builder; import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; import net.minecraftforge.registries.IForgeRegistry; public class IronChestItems @@ -35,21 +47,25 @@ public class IronChestItems } - @SubscribeEvent - public void registerItems(final RegistryEvent.Register event) + @Mod.EventBusSubscriber(modid = IronChest.MOD_ID) + public static class Registration { - IForgeRegistry itemRegistry = event.getRegistry(); + @SubscribeEvent + public static void registerItems(final RegistryEvent.Register event) + { + IForgeRegistry itemRegistry = event.getRegistry(); - itemBuilder = (new Builder()).group(IronChestCreativeTabs.IRON_CHESTS).maxStackSize(1); + itemBuilder = (new Builder()).group(IronChestCreativeTabs.IRON_CHESTS).maxStackSize(1); - itemRegistry.register(ironToGoldUpgrade = new ItemChestChanger(itemBuilder, ChestChangerType.IRON_GOLD)); - itemRegistry.register(goldToDiamondUpgrade = new ItemChestChanger(itemBuilder, ChestChangerType.GOLD_DIAMOND)); - itemRegistry.register(copperToSilverUpgrade = new ItemChestChanger(itemBuilder, ChestChangerType.COPPER_SILVER)); - itemRegistry.register(silverToGoldUpgrade = new ItemChestChanger(itemBuilder, ChestChangerType.SILVER_GOLD)); - itemRegistry.register(copperToIronUpgrade = new ItemChestChanger(itemBuilder, ChestChangerType.COPPER_IRON)); - itemRegistry.register(diamondToCrystalUpgrade = new ItemChestChanger(itemBuilder, ChestChangerType.DIAMOND_CRYSTAL)); - itemRegistry.register(woodToIronUpgrade = new ItemChestChanger(itemBuilder, ChestChangerType.WOOD_IRON)); - itemRegistry.register(woodToCopperUpgrade = new ItemChestChanger(itemBuilder, ChestChangerType.WOOD_COPPER)); - itemRegistry.register(diamondToObsidianUpgrade = new ItemChestChanger(itemBuilder, ChestChangerType.DIAMOND_OBSIDIAN)); + itemRegistry.register(ironToGoldUpgrade = new ItemChestChanger(itemBuilder, ChestChangerType.IRON_GOLD)); + itemRegistry.register(goldToDiamondUpgrade = new ItemChestChanger(itemBuilder, ChestChangerType.GOLD_DIAMOND)); + itemRegistry.register(copperToSilverUpgrade = new ItemChestChanger(itemBuilder, ChestChangerType.COPPER_SILVER)); + itemRegistry.register(silverToGoldUpgrade = new ItemChestChanger(itemBuilder, ChestChangerType.SILVER_GOLD)); + itemRegistry.register(copperToIronUpgrade = new ItemChestChanger(itemBuilder, ChestChangerType.COPPER_IRON)); + itemRegistry.register(diamondToCrystalUpgrade = new ItemChestChanger(itemBuilder, ChestChangerType.DIAMOND_CRYSTAL)); + itemRegistry.register(woodToIronUpgrade = new ItemChestChanger(itemBuilder, ChestChangerType.WOOD_IRON)); + itemRegistry.register(woodToCopperUpgrade = new ItemChestChanger(itemBuilder, ChestChangerType.WOOD_COPPER)); + itemRegistry.register(diamondToObsidianUpgrade = new ItemChestChanger(itemBuilder, ChestChangerType.DIAMOND_OBSIDIAN)); + } } } diff --git a/src/main/java/cpw/mods/ironchest/common/items/ChestChangerType.java b/src/main/java/cpw/mods/ironchest/common/items/ChestChangerType.java index edf9966..8d67f8b 100644 --- a/src/main/java/cpw/mods/ironchest/common/items/ChestChangerType.java +++ b/src/main/java/cpw/mods/ironchest/common/items/ChestChangerType.java @@ -12,10 +12,7 @@ package cpw.mods.ironchest.common.items; import cpw.mods.ironchest.IronChest; import cpw.mods.ironchest.common.blocks.IronChestType; -import cpw.mods.ironchest.common.core.IronChestCreativeTabs; -import net.minecraft.item.Item; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.registries.IForgeRegistry; import static cpw.mods.ironchest.common.blocks.IronChestType.COPPER; import static cpw.mods.ironchest.common.blocks.IronChestType.CRYSTAL; diff --git a/src/main/java/cpw/mods/ironchest/common/items/ItemChestChanger.java b/src/main/java/cpw/mods/ironchest/common/items/ItemChestChanger.java index 9af4b50..5c812bf 100644 --- a/src/main/java/cpw/mods/ironchest/common/items/ItemChestChanger.java +++ b/src/main/java/cpw/mods/ironchest/common/items/ItemChestChanger.java @@ -127,8 +127,6 @@ public class ItemChestChanger extends ItemTooltip IBlockState iBlockState = IronChestType.get(this.type.target).with(BlockIronChest.FACING, chestFacing); - System.out.println(iBlockState); - world.setTileEntity(blockPos, newChest); world.setBlockState(blockPos, iBlockState, 3); diff --git a/src/main/java/cpw/mods/ironchest/common/network/PacketHandler.java b/src/main/java/cpw/mods/ironchest/common/network/PacketHandler.java new file mode 100644 index 0000000..5e359f9 --- /dev/null +++ b/src/main/java/cpw/mods/ironchest/common/network/PacketHandler.java @@ -0,0 +1,47 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + *

+ * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ +package cpw.mods.ironchest.common.network; + +import cpw.mods.ironchest.IronChest; +import cpw.mods.ironchest.common.network.packets.PacketTopStackSyncChest; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.util.FakePlayer; +import net.minecraftforge.fml.network.NetworkDirection; +import net.minecraftforge.fml.network.NetworkRegistry; +import net.minecraftforge.fml.network.simple.SimpleChannel; + +public final class PacketHandler +{ + private static final String PROTOCOL_VERSION = Integer.toString(1); + + private static final SimpleChannel HANDLER = NetworkRegistry.ChannelBuilder.named(new ResourceLocation(IronChest.MOD_ID, "main_channel")) + .clientAcceptedVersions(PROTOCOL_VERSION::equals) + .serverAcceptedVersions(PROTOCOL_VERSION::equals) + .networkProtocolVersion(() -> PROTOCOL_VERSION) + .simpleChannel(); + + public static void register() + { + int disc = 0; + + HANDLER.registerMessage(disc++, PacketTopStackSyncChest.class, PacketTopStackSyncChest::encode, PacketTopStackSyncChest::decode, + PacketTopStackSyncChest.Handler::handle); + } + + public static void sendTo(Object msg, EntityPlayerMP player) + { + if (!(player instanceof FakePlayer)) + { + HANDLER.sendTo(msg, player.connection.netManager, NetworkDirection.PLAY_TO_CLIENT); + } + } +} diff --git a/src/main/java/cpw/mods/ironchest/common/network/packets/PacketTopStackSyncChest.java b/src/main/java/cpw/mods/ironchest/common/network/packets/PacketTopStackSyncChest.java new file mode 100644 index 0000000..0946040 --- /dev/null +++ b/src/main/java/cpw/mods/ironchest/common/network/packets/PacketTopStackSyncChest.java @@ -0,0 +1,92 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + *

+ * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ +package cpw.mods.ironchest.common.network.packets; + +import cpw.mods.ironchest.IronChest; +import cpw.mods.ironchest.common.tileentity.TileEntityCrystalChest; +import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketBuffer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.network.NetworkEvent; + +import java.util.function.Supplier; + +public class PacketTopStackSyncChest +{ + private final int dimension; + + private final BlockPos pos; + + private final NonNullList topStacks; + + public PacketTopStackSyncChest(int dimension, BlockPos pos, NonNullList topStacks) + { + this.dimension = dimension; + this.pos = pos; + this.topStacks = topStacks; + } + + public static void encode(PacketTopStackSyncChest msg, PacketBuffer buf) + { + buf.writeInt(msg.dimension); + buf.writeInt(msg.pos.getX()); + buf.writeInt(msg.pos.getY()); + buf.writeInt(msg.pos.getZ()); + buf.writeInt(msg.topStacks.size()); + + for (ItemStack stack : msg.topStacks) + { + buf.writeItemStack(stack); + } + } + + public static PacketTopStackSyncChest decode(PacketBuffer buf) + { + int dimension = buf.readInt(); + BlockPos pos = new BlockPos(buf.readInt(), buf.readInt(), buf.readInt()); + + int size = buf.readInt(); + NonNullList topStacks = NonNullList.withSize(size, ItemStack.EMPTY); + + for (int item = 0; item < size; item++) + { + ItemStack itemStack = buf.readItemStack(); + + topStacks.set(item, itemStack); + } + + return new PacketTopStackSyncChest(dimension, pos, topStacks); + } + + public static class Handler + { + public static void handle(final PacketTopStackSyncChest message, Supplier ctx) + { + ctx.get().enqueueWork(() -> { + World world = IronChest.proxy.getClientWorld(); + + if (world != null) + { + TileEntity tile = world.getTileEntity(message.pos); + + if (tile instanceof TileEntityCrystalChest) + { + ((TileEntityCrystalChest) tile).receiveMessageFromServer(message.topStacks); + } + } + }); + } + } + +} diff --git a/src/main/java/cpw/mods/ironchest/common/tileentity/IronChestEntityType.java b/src/main/java/cpw/mods/ironchest/common/tileentity/IronChestEntityType.java index c9d78c2..c4c15c2 100644 --- a/src/main/java/cpw/mods/ironchest/common/tileentity/IronChestEntityType.java +++ b/src/main/java/cpw/mods/ironchest/common/tileentity/IronChestEntityType.java @@ -12,6 +12,7 @@ package cpw.mods.ironchest.common.tileentity; import com.mojang.datafixers.DataFixUtils; import com.mojang.datafixers.types.Type; +import cpw.mods.ironchest.IronChest; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.ResourceLocation; @@ -20,7 +21,7 @@ import net.minecraft.util.datafix.DataFixesManager; import net.minecraft.util.datafix.TypeReferences; import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.registry.GameRegistry; +import net.minecraftforge.fml.common.Mod; import net.minecraftforge.registries.IForgeRegistry; import net.minecraftforge.registries.IForgeRegistryEntry; @@ -47,64 +48,29 @@ public class IronChestEntityType } - @SuppressWarnings("unchecked") - public void registerTileEntities() + @Mod.EventBusSubscriber(modid = IronChest.MOD_ID) + public static class Registration { - IForgeRegistry e = GameRegistry.findRegistry(TileEntityType.class); - registerTileEntityType(e, register("iron_chest", TileEntityType.Builder.create(TileEntityIronChest::new)), "iron_chest"); - registerTileEntityType(e, register("gold_chest", TileEntityType.Builder.create(TileEntityGoldChest::new)), "gold_chest"); - registerTileEntityType(e, register("diamond_chest", TileEntityType.Builder.create(TileEntityDiamondChest::new)), "diamond_chest"); - registerTileEntityType(e, register("crystal_chest", TileEntityType.Builder.create(TileEntityCrystalChest::new)), "crystal_chest"); - registerTileEntityType(e, register("dirt_chest", TileEntityType.Builder.create(TileEntityDirtChest::new)), "dirt_chest"); - registerTileEntityType(e, register("copper_chest", TileEntityType.Builder.create(TileEntityCopperChest::new)), "copper_chest"); - registerTileEntityType(e, register("silver_chest", TileEntityType.Builder.create(TileEntitySilverChest::new)), "silver_chest"); - registerTileEntityType(e, register("obsidian_chest", TileEntityType.Builder.create(TileEntityObsidianChest::new)), "obsidian_chest"); - } - - @SubscribeEvent - public void onTileEntityRegistry(final RegistryEvent.Register> e) - { - System.out.println("hello from onTileEntityRegistry"); - IronChestEntityType.IRON_CHEST = registerTileEntityType(e.getRegistry(), - register("iron_chest", TileEntityType.Builder.create(TileEntityIronChest::new)), "iron_chest"); - IronChestEntityType.GOLD_CHEST = registerTileEntityType(e.getRegistry(), - register("gold_chest", TileEntityType.Builder.create(TileEntityGoldChest::new)), "gold_chest"); - IronChestEntityType.DIAMOND_CHEST = registerTileEntityType(e.getRegistry(), - register("diamond_chest", TileEntityType.Builder.create(TileEntityDiamondChest::new)), "diamond_chest"); - IronChestEntityType.CRYSTAL_CHEST = registerTileEntityType(e.getRegistry(), - register("crystal_chest", TileEntityType.Builder.create(TileEntityCrystalChest::new)), "crystal_chest"); - IronChestEntityType.DIRT_CHEST = registerTileEntityType(e.getRegistry(), - register("dirt_chest", TileEntityType.Builder.create(TileEntityDirtChest::new)), "dirt_chest"); - IronChestEntityType.COPPER_CHEST = registerTileEntityType(e.getRegistry(), - register("copper_chest", TileEntityType.Builder.create(TileEntityCopperChest::new)), "copper_chest"); - IronChestEntityType.SILVER_CHEST = registerTileEntityType(e.getRegistry(), - register("silver_chest", TileEntityType.Builder.create(TileEntitySilverChest::new)), "silver_chest"); - IronChestEntityType.OBSIDIAN_CHEST = registerTileEntityType(e.getRegistry(), - register("obsidian_chest", TileEntityType.Builder.create(TileEntityObsidianChest::new)), "obsidian_chest"); - - IronChestEntityType.IRON_CHEST = e.getRegistry().getValue(new ResourceLocation("ironchest", "iron_chest")); - IronChestEntityType.GOLD_CHEST = e.getRegistry().getValue(new ResourceLocation("ironchest", "gold_chest")); - IronChestEntityType.DIAMOND_CHEST = e.getRegistry().getValue(new ResourceLocation("ironchest", "diamond_chest")); - IronChestEntityType.CRYSTAL_CHEST = e.getRegistry().getValue(new ResourceLocation("ironchest", "crystal_chest")); - IronChestEntityType.DIRT_CHEST = e.getRegistry().getValue(new ResourceLocation("ironchest", "dirt_chest")); - IronChestEntityType.COPPER_CHEST = e.getRegistry().getValue(new ResourceLocation("ironchest", "copper_chest")); - IronChestEntityType.SILVER_CHEST = e.getRegistry().getValue(new ResourceLocation("ironchest", "silver_chest")); - IronChestEntityType.OBSIDIAN_CHEST = e.getRegistry().getValue(new ResourceLocation("ironchest", "obsidian_chest")); - } - - @SuppressWarnings("unchecked") - public void createEntries() - { - IForgeRegistry e = GameRegistry.findRegistry(TileEntityType.class); - - IronChestEntityType.IRON_CHEST = (TileEntityType) e.getValue(new ResourceLocation("ironchest", "iron_chest")); - IronChestEntityType.GOLD_CHEST = (TileEntityType) e.getValue(new ResourceLocation("ironchest", "gold_chest")); - IronChestEntityType.DIAMOND_CHEST = (TileEntityType) e.getValue(new ResourceLocation("ironchest", "diamond_chest")); - IronChestEntityType.CRYSTAL_CHEST = (TileEntityType) e.getValue(new ResourceLocation("ironchest", "crystal_chest")); - IronChestEntityType.DIRT_CHEST = (TileEntityType) e.getValue(new ResourceLocation("ironchest", "dirt_chest")); - IronChestEntityType.COPPER_CHEST = (TileEntityType) e.getValue(new ResourceLocation("ironchest", "copper_chest")); - IronChestEntityType.SILVER_CHEST = (TileEntityType) e.getValue(new ResourceLocation("ironchest", "silver_chest")); - IronChestEntityType.OBSIDIAN_CHEST = (TileEntityType) e.getValue(new ResourceLocation("ironchest", "obsidian_chest")); + @SubscribeEvent + public static void onTileEntityRegistry(final RegistryEvent.Register> e) + { + IronChestEntityType.IRON_CHEST = registerTileEntityType(e.getRegistry(), + register("iron_chest", TileEntityType.Builder.create(TileEntityIronChest::new)), "iron_chest"); + IronChestEntityType.GOLD_CHEST = registerTileEntityType(e.getRegistry(), + register("gold_chest", TileEntityType.Builder.create(TileEntityGoldChest::new)), "gold_chest"); + IronChestEntityType.DIAMOND_CHEST = registerTileEntityType(e.getRegistry(), + register("diamond_chest", TileEntityType.Builder.create(TileEntityDiamondChest::new)), "diamond_chest"); + IronChestEntityType.CRYSTAL_CHEST = registerTileEntityType(e.getRegistry(), + register("crystal_chest", TileEntityType.Builder.create(TileEntityCrystalChest::new)), "crystal_chest"); + IronChestEntityType.DIRT_CHEST = registerTileEntityType(e.getRegistry(), + register("dirt_chest", TileEntityType.Builder.create(TileEntityDirtChest::new)), "dirt_chest"); + IronChestEntityType.COPPER_CHEST = registerTileEntityType(e.getRegistry(), + register("copper_chest", TileEntityType.Builder.create(TileEntityCopperChest::new)), "copper_chest"); + IronChestEntityType.SILVER_CHEST = registerTileEntityType(e.getRegistry(), + register("silver_chest", TileEntityType.Builder.create(TileEntitySilverChest::new)), "silver_chest"); + IronChestEntityType.OBSIDIAN_CHEST = registerTileEntityType(e.getRegistry(), + register("obsidian_chest", TileEntityType.Builder.create(TileEntityObsidianChest::new)), "obsidian_chest"); + } } protected static > T registerTileEntityType(IForgeRegistry> registry, T tileEntityType, String name) diff --git a/src/main/java/cpw/mods/ironchest/common/tileentity/TileEntityCrystalChest.java b/src/main/java/cpw/mods/ironchest/common/tileentity/TileEntityCrystalChest.java index 85f877c..441a0a1 100644 --- a/src/main/java/cpw/mods/ironchest/common/tileentity/TileEntityCrystalChest.java +++ b/src/main/java/cpw/mods/ironchest/common/tileentity/TileEntityCrystalChest.java @@ -12,10 +12,14 @@ package cpw.mods.ironchest.common.tileentity; import cpw.mods.ironchest.common.blocks.IronChestType; import cpw.mods.ironchest.common.core.IronChestBlocks; +import cpw.mods.ironchest.common.network.PacketHandler; +import cpw.mods.ironchest.common.network.packets.PacketTopStackSyncChest; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraft.util.NonNullList; +import net.minecraftforge.fml.server.ServerLifecycleHooks; import java.util.Collections; import java.util.Comparator; @@ -219,10 +223,22 @@ public class TileEntityCrystalChest extends TileEntityIronChest protected void sendTopStacksPacket() { - //NonNullList stacks = this.buildItemStackDataList(); - //@formatter:off - //IronChest.packetHandler.sendToAllAround(new MessageCrystalChestSync(this, stacks), new TargetPoint(world.provider.getDimension(), getPos().getX(), getPos().getY(), getPos().getZ(), 128)); - //@formatter:on + NonNullList stacks = this.buildItemStackDataList(); + + for (EntityPlayerMP player : ServerLifecycleHooks.getCurrentServer().getPlayerList().getPlayers()) + { + if (player.dimension == world.getDimension().getId()) + { + double d4 = getPos().getX() - player.posX; + double d5 = getPos().getY() - player.posY; + double d6 = getPos().getZ() - player.posZ; + + if (d4 * d4 + d5 * d5 + d6 * d6 < 16384) + { + PacketHandler.sendTo(new PacketTopStackSyncChest(this.getWorld().getDimension().getId(), this.getPos(), stacks), player); + } + } + } } public void receiveMessageFromServer(NonNullList topStacks) diff --git a/src/main/java/cpw/mods/ironchest/common/tileentity/TileEntityDirtChest.java b/src/main/java/cpw/mods/ironchest/common/tileentity/TileEntityDirtChest.java index 56bec1a..19efa5f 100644 --- a/src/main/java/cpw/mods/ironchest/common/tileentity/TileEntityDirtChest.java +++ b/src/main/java/cpw/mods/ironchest/common/tileentity/TileEntityDirtChest.java @@ -30,11 +30,6 @@ public class TileEntityDirtChest extends TileEntityIronChest public TileEntityDirtChest() { super(IronChestEntityType.DIRT_CHEST, IronChestType.DIRTCHEST9000, IronChestBlocks.dirtChestBlock); - - if (!bookDataCreated) - { - createBookData(); - } } @Override @@ -44,6 +39,11 @@ public class TileEntityDirtChest extends TileEntityIronChest { this.setInventorySlotContents(0, dirtChest9000GuideBook.copy()); } + + if (!bookDataCreated) + { + createBookData(); + } } @Override diff --git a/src/main/java/cpw/mods/ironchest/common/tileentity/TileEntityIronChest.java b/src/main/java/cpw/mods/ironchest/common/tileentity/TileEntityIronChest.java index 3afd372..4fd8fc7 100644 --- a/src/main/java/cpw/mods/ironchest/common/tileentity/TileEntityIronChest.java +++ b/src/main/java/cpw/mods/ironchest/common/tileentity/TileEntityIronChest.java @@ -62,6 +62,7 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements IChes private int ticksSinceSync; private IronChestType chestType; + private Block blockToUse; public TileEntityIronChest() diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index c8cc7dc..929188d 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -2,12 +2,12 @@ modLoader="javafml" loaderVersion="[24,)" issueTrackerURL="https://github.com/progwml6/ironchest/issues" displayURL="https://minecraft.curseforge.com/projects/iron-chests" -authors="CPW, alexbegt, progwml6" [[mods]] modId="ironchest" version="${version}" displayName="Iron Chests" + authors="cpw,alexbegt,progwml6" description=''' New chests with larger sizes, with in-place upgrade items. The feature chest is the crystal chest, which is transparent - some inventory contents are visible without opening the chest