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