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.
This commit is contained in:
alexbegt 2019-01-15 22:22:27 -05:00
parent 5eee1e224c
commit 620a6b3e1d
17 changed files with 281 additions and 146 deletions

View File

@ -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

View File

@ -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

View File

@ -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()

View File

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

View File

@ -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
* <p>
* Contributors:
* cpw - initial API and implementation
******************************************************************************/
package cpw.mods.ironchest.client.renderer;
import cpw.mods.ironchest.common.blocks.BlockChest;

View File

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

View File

@ -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<Block> event)
@Mod.EventBusSubscriber(modid = IronChest.MOD_ID)
public static class Registration
{
IForgeRegistry<Block> blockRegistry = event.getRegistry();
@SubscribeEvent
public static void registerBlocks(final RegistryEvent.Register<Block> event)
{
IForgeRegistry<Block> 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<Item> event)
{
IForgeRegistry<Item> itemRegistry = event.getRegistry();
@SubscribeEvent
public static void registerItems(final RegistryEvent.Register<Item> event)
{
IForgeRegistry<Item> 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));
}
}
}

View File

@ -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
* <p>
* 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<Item> event)
@Mod.EventBusSubscriber(modid = IronChest.MOD_ID)
public static class Registration
{
IForgeRegistry<Item> itemRegistry = event.getRegistry();
@SubscribeEvent
public static void registerItems(final RegistryEvent.Register<Item> event)
{
IForgeRegistry<Item> 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));
}
}
}

View File

@ -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;

View File

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

View File

@ -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
* <p>
* 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);
}
}
}

View File

@ -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
* <p>
* 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<ItemStack> topStacks;
public PacketTopStackSyncChest(int dimension, BlockPos pos, NonNullList<ItemStack> 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<ItemStack> topStacks = NonNullList.<ItemStack>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<NetworkEvent.Context> 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);
}
}
});
}
}
}

View File

@ -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<TileEntityType<?>> 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<TileEntityType<?>> 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 extends TileEntityType<?>> T registerTileEntityType(IForgeRegistry<TileEntityType<?>> registry, T tileEntityType, String name)

View File

@ -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<ItemStack> 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<ItemStack> 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<ItemStack> topStacks)

View File

@ -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

View File

@ -62,6 +62,7 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements IChes
private int ticksSinceSync;
private IronChestType chestType;
private Block blockToUse;
public TileEntityIronChest()

View File

@ -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