Perform some minor code clean ups (Such as cleaning up imports, some lines of code, etc) Move the entire TopStacks code to the Crystal versions of the chests/Shulker Boxes to match 1.13 code, Fix chests and Shulker Boxes losing their custom names on upgrading. Finally fix the inventories missing due to tinker construct smelteries. Closes #162
This commit is contained in:
parent
e24b7b5980
commit
930ea9a725
|
|
@ -37,15 +37,19 @@ public class ClientProxy extends CommonProxy
|
||||||
for (IronChestType type : IronChestType.values())
|
for (IronChestType type : IronChestType.values())
|
||||||
{
|
{
|
||||||
if (type.clazz != null)
|
if (type.clazz != null)
|
||||||
|
{
|
||||||
ClientRegistry.bindTileEntitySpecialRenderer(type.clazz, new TileEntityIronChestRenderer());
|
ClientRegistry.bindTileEntitySpecialRenderer(type.clazz, new TileEntityIronChestRenderer());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (IronShulkerBoxType type : IronShulkerBoxType.values())
|
for (IronShulkerBoxType type : IronShulkerBoxType.values())
|
||||||
{
|
{
|
||||||
if (type.clazz != null)
|
if (type.clazz != null)
|
||||||
|
{
|
||||||
ClientRegistry.bindTileEntitySpecialRenderer(type.clazz, new TileEntityIronShulkerBoxRenderer());
|
ClientRegistry.bindTileEntitySpecialRenderer(type.clazz, new TileEntityIronShulkerBoxRenderer());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z)
|
public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z)
|
||||||
|
|
|
||||||
|
|
@ -10,13 +10,11 @@
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package cpw.mods.ironchest.client.renderer.chest;
|
package cpw.mods.ironchest.client.renderer.chest;
|
||||||
|
|
||||||
import java.util.Random;
|
|
||||||
|
|
||||||
import com.google.common.primitives.SignedBytes;
|
import com.google.common.primitives.SignedBytes;
|
||||||
|
|
||||||
import cpw.mods.ironchest.common.blocks.chest.BlockIronChest;
|
import cpw.mods.ironchest.common.blocks.chest.BlockIronChest;
|
||||||
import cpw.mods.ironchest.common.blocks.chest.IronChestType;
|
import cpw.mods.ironchest.common.blocks.chest.IronChestType;
|
||||||
import cpw.mods.ironchest.common.core.IronChestBlocks;
|
import cpw.mods.ironchest.common.core.IronChestBlocks;
|
||||||
|
import cpw.mods.ironchest.common.tileentity.chest.TileEntityCrystalChest;
|
||||||
import cpw.mods.ironchest.common.tileentity.chest.TileEntityIronChest;
|
import cpw.mods.ironchest.common.tileentity.chest.TileEntityIronChest;
|
||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
|
|
@ -28,6 +26,8 @@ import net.minecraft.entity.item.EntityItem;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer<TileEntityIronChest>
|
public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer<TileEntityIronChest>
|
||||||
{
|
{
|
||||||
private Random random;
|
private Random random;
|
||||||
|
|
@ -174,7 +174,7 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer<TileE
|
||||||
float blockScale = 0.70F;
|
float blockScale = 0.70F;
|
||||||
float timeD = (float) (360D * (System.currentTimeMillis() & 0x3FFFL) / 0x3FFFL) - partialTicks;
|
float timeD = (float) (360D * (System.currentTimeMillis() & 0x3FFFL) / 0x3FFFL) - partialTicks;
|
||||||
|
|
||||||
if (te.getTopItems().get(1).isEmpty())
|
if (((TileEntityCrystalChest) te).getTopItems().get(1).isEmpty())
|
||||||
{
|
{
|
||||||
shift = 8;
|
shift = 8;
|
||||||
blockScale = 0.85F;
|
blockScale = 0.85F;
|
||||||
|
|
@ -190,7 +190,7 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer<TileE
|
||||||
|
|
||||||
customItem.hoverStart = 0F;
|
customItem.hoverStart = 0F;
|
||||||
|
|
||||||
for (ItemStack item : te.getTopItems())
|
for (ItemStack item : ((TileEntityCrystalChest) te).getTopItems())
|
||||||
{
|
{
|
||||||
if (shift > shifts.length || shift > 8)
|
if (shift > shifts.length || shift > 8)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ import com.google.common.primitives.SignedBytes;
|
||||||
|
|
||||||
import cpw.mods.ironchest.common.blocks.shulker.BlockIronShulkerBox;
|
import cpw.mods.ironchest.common.blocks.shulker.BlockIronShulkerBox;
|
||||||
import cpw.mods.ironchest.common.blocks.shulker.IronShulkerBoxType;
|
import cpw.mods.ironchest.common.blocks.shulker.IronShulkerBoxType;
|
||||||
|
import cpw.mods.ironchest.common.tileentity.shulker.TileEntityCrystalShulkerBox;
|
||||||
import cpw.mods.ironchest.common.tileentity.shulker.TileEntityIronShulkerBox;
|
import cpw.mods.ironchest.common.tileentity.shulker.TileEntityIronShulkerBox;
|
||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
|
|
@ -165,7 +166,7 @@ public class TileEntityIronShulkerBoxRenderer extends TileEntitySpecialRenderer<
|
||||||
float blockScale = 0.70F;
|
float blockScale = 0.70F;
|
||||||
float timeD = (float) (360D * (System.currentTimeMillis() & 0x3FFFL) / 0x3FFFL) - partialTicks;
|
float timeD = (float) (360D * (System.currentTimeMillis() & 0x3FFFL) / 0x3FFFL) - partialTicks;
|
||||||
|
|
||||||
if (te.getTopItems().get(1).isEmpty())
|
if (((TileEntityCrystalShulkerBox) te).getTopItems().get(1).isEmpty())
|
||||||
{
|
{
|
||||||
shift = 8;
|
shift = 8;
|
||||||
blockScale = 0.85F;
|
blockScale = 0.85F;
|
||||||
|
|
@ -181,7 +182,7 @@ public class TileEntityIronShulkerBoxRenderer extends TileEntitySpecialRenderer<
|
||||||
|
|
||||||
customItem.hoverStart = 0F;
|
customItem.hoverStart = 0F;
|
||||||
|
|
||||||
for (ItemStack item : te.getTopItems())
|
for (ItemStack item : ((TileEntityCrystalShulkerBox) te).getTopItems())
|
||||||
{
|
{
|
||||||
if (shift > shifts.length || shift > 8)
|
if (shift > shifts.length || shift > 8)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -10,10 +10,6 @@
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package cpw.mods.ironchest.common.blocks.chest;
|
package cpw.mods.ironchest.common.blocks.chest;
|
||||||
|
|
||||||
import java.util.Random;
|
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
|
|
||||||
import cpw.mods.ironchest.IronChest;
|
import cpw.mods.ironchest.IronChest;
|
||||||
import cpw.mods.ironchest.common.core.IronChestCreativeTabs;
|
import cpw.mods.ironchest.common.core.IronChestCreativeTabs;
|
||||||
import cpw.mods.ironchest.common.tileentity.chest.TileEntityIronChest;
|
import cpw.mods.ironchest.common.tileentity.chest.TileEntityIronChest;
|
||||||
|
|
@ -53,6 +49,9 @@ import net.minecraft.world.World;
|
||||||
import net.minecraftforge.fml.relauncher.Side;
|
import net.minecraftforge.fml.relauncher.Side;
|
||||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
public class BlockIronChest extends Block
|
public class BlockIronChest extends Block
|
||||||
{
|
{
|
||||||
public static final PropertyEnum<IronChestType> VARIANT_PROP = PropertyEnum.create("variant", IronChestType.class);
|
public static final PropertyEnum<IronChestType> VARIANT_PROP = PropertyEnum.create("variant", IronChestType.class);
|
||||||
|
|
|
||||||
|
|
@ -10,10 +10,6 @@
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package cpw.mods.ironchest.common.blocks.shulker;
|
package cpw.mods.ironchest.common.blocks.shulker;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
|
|
||||||
import cpw.mods.ironchest.IronChest;
|
import cpw.mods.ironchest.IronChest;
|
||||||
import cpw.mods.ironchest.common.core.IronChestBlocks;
|
import cpw.mods.ironchest.common.core.IronChestBlocks;
|
||||||
import cpw.mods.ironchest.common.core.IronChestCreativeTabs;
|
import cpw.mods.ironchest.common.core.IronChestCreativeTabs;
|
||||||
|
|
@ -50,6 +46,9 @@ import net.minecraft.world.World;
|
||||||
import net.minecraftforge.fml.relauncher.Side;
|
import net.minecraftforge.fml.relauncher.Side;
|
||||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public class BlockIronShulkerBox extends Block
|
public class BlockIronShulkerBox extends Block
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,10 @@
|
||||||
package cpw.mods.ironchest.common.config;
|
package cpw.mods.ironchest.common.config;
|
||||||
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
|
||||||
import org.apache.logging.log4j.Logger;
|
|
||||||
|
|
||||||
import cpw.mods.ironchest.IronChest;
|
import cpw.mods.ironchest.IronChest;
|
||||||
import net.minecraftforge.common.config.Configuration;
|
import net.minecraftforge.common.config.Configuration;
|
||||||
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
public final class Config
|
public final class Config
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
package cpw.mods.ironchest.common.core;
|
package cpw.mods.ironchest.common.core;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
|
||||||
|
|
||||||
import cpw.mods.ironchest.common.blocks.chest.IronChestType;
|
import cpw.mods.ironchest.common.blocks.chest.IronChestType;
|
||||||
import cpw.mods.ironchest.common.util.CreativeTabItems;
|
import cpw.mods.ironchest.common.util.CreativeTabItems;
|
||||||
import net.minecraft.creativetab.CreativeTabs;
|
import net.minecraft.creativetab.CreativeTabs;
|
||||||
|
|
@ -11,6 +9,8 @@ import net.minecraft.util.NonNullList;
|
||||||
import net.minecraftforge.fml.relauncher.Side;
|
import net.minecraftforge.fml.relauncher.Side;
|
||||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
public final class IronChestCreativeTabs
|
public final class IronChestCreativeTabs
|
||||||
{
|
{
|
||||||
private IronChestCreativeTabs()
|
private IronChestCreativeTabs()
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,13 @@
|
||||||
package cpw.mods.ironchest.common.crafting.condition;
|
package cpw.mods.ironchest.common.crafting.condition;
|
||||||
|
|
||||||
import java.util.function.BooleanSupplier;
|
|
||||||
|
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
|
|
||||||
import cpw.mods.ironchest.common.config.Config;
|
import cpw.mods.ironchest.common.config.Config;
|
||||||
import net.minecraft.util.JsonUtils;
|
import net.minecraft.util.JsonUtils;
|
||||||
import net.minecraftforge.common.crafting.IConditionFactory;
|
import net.minecraftforge.common.crafting.IConditionFactory;
|
||||||
import net.minecraftforge.common.crafting.JsonContext;
|
import net.minecraftforge.common.crafting.JsonContext;
|
||||||
|
|
||||||
|
import java.util.function.BooleanSupplier;
|
||||||
|
|
||||||
public class IsConfigOptionEnabledConditionFactory implements IConditionFactory
|
public class IsConfigOptionEnabledConditionFactory implements IConditionFactory
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,6 @@
|
||||||
package cpw.mods.ironchest.common.crafting.recipe;
|
package cpw.mods.ironchest.common.crafting.recipe;
|
||||||
|
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
|
|
||||||
import cpw.mods.ironchest.common.blocks.shulker.BlockIronShulkerBox;
|
import cpw.mods.ironchest.common.blocks.shulker.BlockIronShulkerBox;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.init.Items;
|
import net.minecraft.init.Items;
|
||||||
|
|
|
||||||
|
|
@ -10,10 +10,7 @@
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package cpw.mods.ironchest.common.crafting.recipe;
|
package cpw.mods.ironchest.common.crafting.recipe;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
|
||||||
|
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
|
|
||||||
import cpw.mods.ironchest.IronChest;
|
import cpw.mods.ironchest.IronChest;
|
||||||
import cpw.mods.ironchest.common.blocks.shulker.BlockIronShulkerBox;
|
import cpw.mods.ironchest.common.blocks.shulker.BlockIronShulkerBox;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
|
|
@ -28,6 +25,8 @@ import net.minecraftforge.common.crafting.IRecipeFactory;
|
||||||
import net.minecraftforge.common.crafting.JsonContext;
|
import net.minecraftforge.common.crafting.JsonContext;
|
||||||
import net.minecraftforge.oredict.ShapedOreRecipe;
|
import net.minecraftforge.oredict.ShapedOreRecipe;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
public class ShulkerBoxRecipeFactory implements IRecipeFactory
|
public class ShulkerBoxRecipeFactory implements IRecipeFactory
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -114,8 +114,7 @@ public class ContainerIronChest extends Container
|
||||||
{
|
{
|
||||||
for (int playerInvCol = 0; playerInvCol < 9; playerInvCol++)
|
for (int playerInvCol = 0; playerInvCol < 9; playerInvCol++)
|
||||||
{
|
{
|
||||||
this.addSlotToContainer(
|
this.addSlotToContainer(new Slot(playerInventory, playerInvCol + playerInvRow * 9 + 9, leftCol + playerInvCol * 18, ySize - (4 - playerInvRow) * 18 - 10));
|
||||||
new Slot(playerInventory, playerInvCol + playerInvRow * 9 + 9, leftCol + playerInvCol * 18, ySize - (4 - playerInvRow) * 18 - 10));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -53,9 +53,7 @@ public class ContainerIronShulkerBox extends Container
|
||||||
{
|
{
|
||||||
for (int playerInvCol = 0; playerInvCol < 9; playerInvCol++)
|
for (int playerInvCol = 0; playerInvCol < 9; playerInvCol++)
|
||||||
{
|
{
|
||||||
//@formatter:off
|
|
||||||
this.addSlotToContainer(new Slot(playerInventory, playerInvCol + playerInvRow * 9 + 9, leftCol + playerInvCol * 18, ySize - (4 - playerInvRow) * 18 - 10));
|
this.addSlotToContainer(new Slot(playerInventory, playerInvCol + playerInvRow * 9 + 9, leftCol + playerInvCol * 18, ySize - (4 - playerInvRow) * 18 - 10));
|
||||||
//@formatter:on
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,8 +27,6 @@ public class ValidatingShulkerBoxSlot extends Slot
|
||||||
@Override
|
@Override
|
||||||
public boolean isItemValid(ItemStack stack)
|
public boolean isItemValid(ItemStack stack)
|
||||||
{
|
{
|
||||||
//@formatter:off
|
|
||||||
return !(Block.getBlockFromItem(stack.getItem()) instanceof BlockIronShulkerBox) && !(Block.getBlockFromItem(stack.getItem()) instanceof BlockShulkerBox);
|
return !(Block.getBlockFromItem(stack.getItem()) instanceof BlockIronShulkerBox) && !(Block.getBlockFromItem(stack.getItem()) instanceof BlockShulkerBox);
|
||||||
//@formatter:on
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,11 @@
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package cpw.mods.ironchest.common.items;
|
package cpw.mods.ironchest.common.items;
|
||||||
|
|
||||||
|
import cpw.mods.ironchest.common.blocks.chest.IronChestType;
|
||||||
|
import cpw.mods.ironchest.common.items.chest.ItemChestChanger;
|
||||||
|
import net.minecraft.item.Item;
|
||||||
|
import net.minecraftforge.registries.IForgeRegistry;
|
||||||
|
|
||||||
import static cpw.mods.ironchest.common.blocks.chest.IronChestType.COPPER;
|
import static cpw.mods.ironchest.common.blocks.chest.IronChestType.COPPER;
|
||||||
import static cpw.mods.ironchest.common.blocks.chest.IronChestType.CRYSTAL;
|
import static cpw.mods.ironchest.common.blocks.chest.IronChestType.CRYSTAL;
|
||||||
import static cpw.mods.ironchest.common.blocks.chest.IronChestType.DIAMOND;
|
import static cpw.mods.ironchest.common.blocks.chest.IronChestType.DIAMOND;
|
||||||
|
|
@ -15,11 +20,6 @@ import static cpw.mods.ironchest.common.blocks.chest.IronChestType.OBSIDIAN;
|
||||||
import static cpw.mods.ironchest.common.blocks.chest.IronChestType.SILVER;
|
import static cpw.mods.ironchest.common.blocks.chest.IronChestType.SILVER;
|
||||||
import static cpw.mods.ironchest.common.blocks.chest.IronChestType.WOOD;
|
import static cpw.mods.ironchest.common.blocks.chest.IronChestType.WOOD;
|
||||||
|
|
||||||
import cpw.mods.ironchest.common.blocks.chest.IronChestType;
|
|
||||||
import cpw.mods.ironchest.common.items.chest.ItemChestChanger;
|
|
||||||
import net.minecraft.item.Item;
|
|
||||||
import net.minecraftforge.registries.IForgeRegistry;
|
|
||||||
|
|
||||||
public enum ChestChangerType
|
public enum ChestChangerType
|
||||||
{
|
{
|
||||||
//@formatter:off
|
//@formatter:off
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,11 @@
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package cpw.mods.ironchest.common.items;
|
package cpw.mods.ironchest.common.items;
|
||||||
|
|
||||||
|
import cpw.mods.ironchest.common.blocks.shulker.IronShulkerBoxType;
|
||||||
|
import cpw.mods.ironchest.common.items.shulker.ItemShulkerBoxChanger;
|
||||||
|
import net.minecraft.item.Item;
|
||||||
|
import net.minecraftforge.registries.IForgeRegistry;
|
||||||
|
|
||||||
import static cpw.mods.ironchest.common.blocks.shulker.IronShulkerBoxType.COPPER;
|
import static cpw.mods.ironchest.common.blocks.shulker.IronShulkerBoxType.COPPER;
|
||||||
import static cpw.mods.ironchest.common.blocks.shulker.IronShulkerBoxType.CRYSTAL;
|
import static cpw.mods.ironchest.common.blocks.shulker.IronShulkerBoxType.CRYSTAL;
|
||||||
import static cpw.mods.ironchest.common.blocks.shulker.IronShulkerBoxType.DIAMOND;
|
import static cpw.mods.ironchest.common.blocks.shulker.IronShulkerBoxType.DIAMOND;
|
||||||
|
|
@ -15,11 +20,6 @@ import static cpw.mods.ironchest.common.blocks.shulker.IronShulkerBoxType.OBSIDI
|
||||||
import static cpw.mods.ironchest.common.blocks.shulker.IronShulkerBoxType.SILVER;
|
import static cpw.mods.ironchest.common.blocks.shulker.IronShulkerBoxType.SILVER;
|
||||||
import static cpw.mods.ironchest.common.blocks.shulker.IronShulkerBoxType.VANILLA;
|
import static cpw.mods.ironchest.common.blocks.shulker.IronShulkerBoxType.VANILLA;
|
||||||
|
|
||||||
import cpw.mods.ironchest.common.blocks.shulker.IronShulkerBoxType;
|
|
||||||
import cpw.mods.ironchest.common.items.shulker.ItemShulkerBoxChanger;
|
|
||||||
import net.minecraft.item.Item;
|
|
||||||
import net.minecraftforge.registries.IForgeRegistry;
|
|
||||||
|
|
||||||
public enum ShulkerBoxChangerType
|
public enum ShulkerBoxChangerType
|
||||||
{
|
{
|
||||||
//@formatter:off
|
//@formatter:off
|
||||||
|
|
|
||||||
|
|
@ -10,8 +10,6 @@
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package cpw.mods.ironchest.common.items.chest;
|
package cpw.mods.ironchest.common.items.chest;
|
||||||
|
|
||||||
import java.util.Locale;
|
|
||||||
|
|
||||||
import cpw.mods.ironchest.common.blocks.chest.BlockIronChest;
|
import cpw.mods.ironchest.common.blocks.chest.BlockIronChest;
|
||||||
import cpw.mods.ironchest.common.blocks.chest.IronChestType;
|
import cpw.mods.ironchest.common.blocks.chest.IronChestType;
|
||||||
import cpw.mods.ironchest.common.core.IronChestBlocks;
|
import cpw.mods.ironchest.common.core.IronChestBlocks;
|
||||||
|
|
@ -32,6 +30,8 @@ import net.minecraft.util.NonNullList;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
public class ItemChestChanger extends ItemTooltip
|
public class ItemChestChanger extends ItemTooltip
|
||||||
{
|
{
|
||||||
public final ChestChangerType type;
|
public final ChestChangerType type;
|
||||||
|
|
@ -48,9 +48,7 @@ public class ItemChestChanger extends ItemTooltip
|
||||||
* Called when a Block is right-clicked with this Item
|
* Called when a Block is right-clicked with this Item
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
//@formatter:off
|
|
||||||
public EnumActionResult onItemUseFirst(EntityPlayer playerIn, World worldIn, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, EnumHand hand)
|
public EnumActionResult onItemUseFirst(EntityPlayer playerIn, World worldIn, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, EnumHand hand)
|
||||||
//@formatter:on
|
|
||||||
{
|
{
|
||||||
ItemStack itemstack = playerIn.getHeldItem(hand);
|
ItemStack itemstack = playerIn.getHeldItem(hand);
|
||||||
|
|
||||||
|
|
@ -81,6 +79,8 @@ public class ItemChestChanger extends ItemTooltip
|
||||||
|
|
||||||
NonNullList<ItemStack> chestContents = NonNullList.<ItemStack>withSize(27, ItemStack.EMPTY);
|
NonNullList<ItemStack> chestContents = NonNullList.<ItemStack>withSize(27, ItemStack.EMPTY);
|
||||||
EnumFacing chestFacing = EnumFacing.DOWN;
|
EnumFacing chestFacing = EnumFacing.DOWN;
|
||||||
|
boolean hasCustomName = false;
|
||||||
|
String customName = "";
|
||||||
|
|
||||||
if (te != null)
|
if (te != null)
|
||||||
{
|
{
|
||||||
|
|
@ -88,6 +88,13 @@ public class ItemChestChanger extends ItemTooltip
|
||||||
{
|
{
|
||||||
chestContents = ((TileEntityIronChest) te).getItems();
|
chestContents = ((TileEntityIronChest) te).getItems();
|
||||||
chestFacing = ((TileEntityIronChest) te).getFacing();
|
chestFacing = ((TileEntityIronChest) te).getFacing();
|
||||||
|
|
||||||
|
if (((TileEntityIronChest) te).hasCustomName())
|
||||||
|
{
|
||||||
|
hasCustomName = true;
|
||||||
|
customName = ((TileEntityIronChest) te).getName();
|
||||||
|
}
|
||||||
|
|
||||||
newchest = this.type.target.makeEntity();
|
newchest = this.type.target.makeEntity();
|
||||||
|
|
||||||
if (newchest == null)
|
if (newchest == null)
|
||||||
|
|
@ -117,6 +124,12 @@ public class ItemChestChanger extends ItemTooltip
|
||||||
chestContents.set(i, chest.getStackInSlot(i));
|
chestContents.set(i, chest.getStackInSlot(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (chest.hasCustomName())
|
||||||
|
{
|
||||||
|
hasCustomName = true;
|
||||||
|
customName = chest.getName();
|
||||||
|
}
|
||||||
|
|
||||||
newchest = this.type.target.makeEntity();
|
newchest = this.type.target.makeEntity();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -144,6 +157,11 @@ public class ItemChestChanger extends ItemTooltip
|
||||||
{
|
{
|
||||||
((TileEntityIronChest) te2).setContents(chestContents);
|
((TileEntityIronChest) te2).setContents(chestContents);
|
||||||
((TileEntityIronChest) te2).setFacing(chestFacing);
|
((TileEntityIronChest) te2).setFacing(chestFacing);
|
||||||
|
|
||||||
|
if (hasCustomName)
|
||||||
|
{
|
||||||
|
((TileEntityIronChest) te2).setCustomName(customName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!playerIn.capabilities.isCreativeMode)
|
if (!playerIn.capabilities.isCreativeMode)
|
||||||
|
|
|
||||||
|
|
@ -10,13 +10,13 @@
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package cpw.mods.ironchest.common.items.chest;
|
package cpw.mods.ironchest.common.items.chest;
|
||||||
|
|
||||||
import java.util.Locale;
|
|
||||||
|
|
||||||
import cpw.mods.ironchest.common.blocks.chest.IronChestType;
|
import cpw.mods.ironchest.common.blocks.chest.IronChestType;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.item.ItemBlock;
|
import net.minecraft.item.ItemBlock;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
public class ItemIronChest extends ItemBlock
|
public class ItemIronChest extends ItemBlock
|
||||||
{
|
{
|
||||||
public ItemIronChest(Block block)
|
public ItemIronChest(Block block)
|
||||||
|
|
|
||||||
|
|
@ -10,14 +10,14 @@
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package cpw.mods.ironchest.common.items.shulker;
|
package cpw.mods.ironchest.common.items.shulker;
|
||||||
|
|
||||||
import java.util.Locale;
|
|
||||||
|
|
||||||
import cpw.mods.ironchest.common.blocks.shulker.IronShulkerBoxType;
|
import cpw.mods.ironchest.common.blocks.shulker.IronShulkerBoxType;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.item.EnumDyeColor;
|
import net.minecraft.item.EnumDyeColor;
|
||||||
import net.minecraft.item.ItemBlock;
|
import net.minecraft.item.ItemBlock;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
public class ItemIronShulkerBox extends ItemBlock
|
public class ItemIronShulkerBox extends ItemBlock
|
||||||
{
|
{
|
||||||
private final String colorName;
|
private final String colorName;
|
||||||
|
|
|
||||||
|
|
@ -10,8 +10,6 @@
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package cpw.mods.ironchest.common.items.shulker;
|
package cpw.mods.ironchest.common.items.shulker;
|
||||||
|
|
||||||
import java.util.Locale;
|
|
||||||
|
|
||||||
import cpw.mods.ironchest.common.blocks.shulker.BlockIronShulkerBox;
|
import cpw.mods.ironchest.common.blocks.shulker.BlockIronShulkerBox;
|
||||||
import cpw.mods.ironchest.common.blocks.shulker.IronShulkerBoxType;
|
import cpw.mods.ironchest.common.blocks.shulker.IronShulkerBoxType;
|
||||||
import cpw.mods.ironchest.common.core.IronChestCreativeTabs;
|
import cpw.mods.ironchest.common.core.IronChestCreativeTabs;
|
||||||
|
|
@ -34,6 +32,8 @@ import net.minecraft.util.NonNullList;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
public class ItemShulkerBoxChanger extends ItemTooltip
|
public class ItemShulkerBoxChanger extends ItemTooltip
|
||||||
{
|
{
|
||||||
public final ShulkerBoxChangerType type;
|
public final ShulkerBoxChangerType type;
|
||||||
|
|
@ -88,9 +88,7 @@ public class ItemShulkerBoxChanger extends ItemTooltip
|
||||||
* Called when a Block is right-clicked with this Item
|
* Called when a Block is right-clicked with this Item
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
//@formatter:off
|
|
||||||
public EnumActionResult onItemUseFirst(EntityPlayer playerIn, World worldIn, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, EnumHand hand)
|
public EnumActionResult onItemUseFirst(EntityPlayer playerIn, World worldIn, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, EnumHand hand)
|
||||||
//@formatter:on
|
|
||||||
{
|
{
|
||||||
ItemStack itemstack = playerIn.getHeldItem(hand);
|
ItemStack itemstack = playerIn.getHeldItem(hand);
|
||||||
|
|
||||||
|
|
@ -130,6 +128,8 @@ public class ItemShulkerBoxChanger extends ItemTooltip
|
||||||
NonNullList<ItemStack> shulkerBoxContents = NonNullList.<ItemStack>withSize(27, ItemStack.EMPTY);
|
NonNullList<ItemStack> shulkerBoxContents = NonNullList.<ItemStack>withSize(27, ItemStack.EMPTY);
|
||||||
EnumFacing shulkerBoxFacing = EnumFacing.UP;
|
EnumFacing shulkerBoxFacing = EnumFacing.UP;
|
||||||
EnumDyeColor shulkerBoxColor = EnumDyeColor.PURPLE;
|
EnumDyeColor shulkerBoxColor = EnumDyeColor.PURPLE;
|
||||||
|
boolean hasCustomName = false;
|
||||||
|
String customName = "";
|
||||||
|
|
||||||
if (te != null)
|
if (te != null)
|
||||||
{
|
{
|
||||||
|
|
@ -140,6 +140,12 @@ public class ItemShulkerBoxChanger extends ItemTooltip
|
||||||
shulkerBoxColor = getColorFromTileEntity(te, worldIn);
|
shulkerBoxColor = getColorFromTileEntity(te, worldIn);
|
||||||
((TileEntityIronShulkerBox) te).setHasBeenUpgraded();
|
((TileEntityIronShulkerBox) te).setHasBeenUpgraded();
|
||||||
|
|
||||||
|
if (((TileEntityIronShulkerBox) te).hasCustomName())
|
||||||
|
{
|
||||||
|
hasCustomName = true;
|
||||||
|
customName = ((TileEntityIronShulkerBox) te).getName();
|
||||||
|
}
|
||||||
|
|
||||||
newShulkerBox = this.type.target.makeEntity(shulkerBoxColor);
|
newShulkerBox = this.type.target.makeEntity(shulkerBoxColor);
|
||||||
|
|
||||||
if (newShulkerBox == null)
|
if (newShulkerBox == null)
|
||||||
|
|
@ -165,6 +171,12 @@ public class ItemShulkerBoxChanger extends ItemTooltip
|
||||||
shulkerBoxContents.set(i, shulkerBox.getStackInSlot(i));
|
shulkerBoxContents.set(i, shulkerBox.getStackInSlot(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (shulkerBox.hasCustomName())
|
||||||
|
{
|
||||||
|
hasCustomName = true;
|
||||||
|
customName = shulkerBox.getName();
|
||||||
|
}
|
||||||
|
|
||||||
shulkerBoxColor = getColorFromTileEntity(te, worldIn);
|
shulkerBoxColor = getColorFromTileEntity(te, worldIn);
|
||||||
|
|
||||||
shulkerBox.clear();
|
shulkerBox.clear();
|
||||||
|
|
@ -202,6 +214,11 @@ public class ItemShulkerBoxChanger extends ItemTooltip
|
||||||
{
|
{
|
||||||
((TileEntityIronShulkerBox) te2).setContents(shulkerBoxContents);
|
((TileEntityIronShulkerBox) te2).setContents(shulkerBoxContents);
|
||||||
((TileEntityIronShulkerBox) te2).setFacing(shulkerBoxFacing);
|
((TileEntityIronShulkerBox) te2).setFacing(shulkerBoxFacing);
|
||||||
|
|
||||||
|
if (hasCustomName)
|
||||||
|
{
|
||||||
|
((TileEntityIronShulkerBox) te2).setCustomName(customName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!playerIn.capabilities.isCreativeMode)
|
if (!playerIn.capabilities.isCreativeMode)
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,6 @@
|
||||||
package cpw.mods.ironchest.common.lib;
|
package cpw.mods.ironchest.common.lib;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
import cpw.mods.ironchest.common.core.IronChestBlocks;
|
import cpw.mods.ironchest.common.core.IronChestBlocks;
|
||||||
import cpw.mods.ironchest.common.util.BehaviorDispenseIronShulkerBox;
|
import cpw.mods.ironchest.common.util.BehaviorDispenseIronShulkerBox;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
|
|
@ -12,6 +9,8 @@ import net.minecraft.init.Blocks;
|
||||||
import net.minecraft.item.EnumDyeColor;
|
import net.minecraft.item.EnumDyeColor;
|
||||||
import net.minecraft.item.ItemBlock;
|
import net.minecraft.item.ItemBlock;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class BlockLists
|
public class BlockLists
|
||||||
{
|
{
|
||||||
//@formatter:off
|
//@formatter:off
|
||||||
|
|
|
||||||
|
|
@ -8,14 +8,14 @@
|
||||||
|
|
||||||
package cpw.mods.ironchest.common.lib;
|
package cpw.mods.ironchest.common.lib;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
|
||||||
|
|
||||||
import cpw.mods.ironchest.common.tileentity.chest.TileEntityIronChest;
|
import cpw.mods.ironchest.common.tileentity.chest.TileEntityIronChest;
|
||||||
import net.minecraft.inventory.IInventory;
|
import net.minecraft.inventory.IInventory;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraftforge.items.IItemHandlerModifiable;
|
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||||
import net.minecraftforge.items.ItemHandlerHelper;
|
import net.minecraftforge.items.ItemHandlerHelper;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
public class ICChestInventoryHandler implements IItemHandlerModifiable
|
public class ICChestInventoryHandler implements IItemHandlerModifiable
|
||||||
{
|
{
|
||||||
TileEntityIronChest inv;
|
TileEntityIronChest inv;
|
||||||
|
|
@ -41,29 +41,36 @@ public class ICChestInventoryHandler implements IItemHandlerModifiable
|
||||||
public ItemStack insertItem(int slot, ItemStack stack, boolean simulate)
|
public ItemStack insertItem(int slot, ItemStack stack, boolean simulate)
|
||||||
{
|
{
|
||||||
if (stack.isEmpty())
|
if (stack.isEmpty())
|
||||||
|
{
|
||||||
return stack;
|
return stack;
|
||||||
|
}
|
||||||
|
|
||||||
stack = stack.copy();
|
stack = stack.copy();
|
||||||
|
|
||||||
if (!inv.isItemValidForSlot(slot, stack))
|
if (!this.inv.isItemValidForSlot(slot, stack))
|
||||||
|
{
|
||||||
return stack;
|
return stack;
|
||||||
|
}
|
||||||
|
|
||||||
int offsetSlot = slot;
|
ItemStack currentStack = this.inv.getItems().get(slot);
|
||||||
ItemStack currentStack = inv.getItems().get(offsetSlot);
|
|
||||||
|
|
||||||
if (currentStack.isEmpty())
|
if (currentStack.isEmpty())
|
||||||
{
|
{
|
||||||
int accepted = Math.min(stack.getMaxStackSize(), inv.getInventoryStackLimit());
|
int accepted = Math.min(stack.getMaxStackSize(), this.inv.getInventoryStackLimit());
|
||||||
|
|
||||||
if (accepted < stack.getCount())
|
if (accepted < stack.getCount())
|
||||||
{
|
{
|
||||||
if (!simulate)
|
if (!simulate)
|
||||||
{
|
{
|
||||||
inv.getItems().set(offsetSlot, stack.splitStack(accepted));
|
this.inv.getItems().set(slot, stack.splitStack(accepted));
|
||||||
inv.markDirty();
|
this.inv.markDirty();
|
||||||
|
|
||||||
return stack;
|
return stack;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
stack.shrink(accepted);
|
stack.shrink(accepted);
|
||||||
|
|
||||||
return stack;
|
return stack;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -71,18 +78,21 @@ public class ICChestInventoryHandler implements IItemHandlerModifiable
|
||||||
{
|
{
|
||||||
if (!simulate)
|
if (!simulate)
|
||||||
{
|
{
|
||||||
inv.getItems().set(offsetSlot, stack);
|
this.inv.getItems().set(slot, stack);
|
||||||
inv.markDirty();
|
this.inv.markDirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
return ItemStack.EMPTY;
|
return ItemStack.EMPTY;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int accepted = Math.min(stack.getMaxStackSize(), inv.getInventoryStackLimit()) - currentStack.getCount();
|
int accepted = Math.min(stack.getMaxStackSize(), this.inv.getInventoryStackLimit()) - currentStack.getCount();
|
||||||
|
|
||||||
if (accepted <= 0 || !ItemHandlerHelper.canItemStacksStack(stack, currentStack))
|
if (accepted <= 0 || !ItemHandlerHelper.canItemStacksStack(stack, currentStack))
|
||||||
|
{
|
||||||
return stack;
|
return stack;
|
||||||
|
}
|
||||||
|
|
||||||
if (accepted < stack.getCount())
|
if (accepted < stack.getCount())
|
||||||
{
|
{
|
||||||
|
|
@ -90,13 +100,15 @@ public class ICChestInventoryHandler implements IItemHandlerModifiable
|
||||||
{
|
{
|
||||||
ItemStack newStack = stack.splitStack(accepted);
|
ItemStack newStack = stack.splitStack(accepted);
|
||||||
newStack.grow(currentStack.getCount());
|
newStack.grow(currentStack.getCount());
|
||||||
inv.getItems().set(offsetSlot, newStack);
|
this.inv.getItems().set(slot, newStack);
|
||||||
inv.markDirty();
|
this.inv.markDirty();
|
||||||
|
|
||||||
return stack;
|
return stack;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
stack.shrink(accepted);
|
stack.shrink(accepted);
|
||||||
|
|
||||||
return stack;
|
return stack;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -106,9 +118,10 @@ public class ICChestInventoryHandler implements IItemHandlerModifiable
|
||||||
{
|
{
|
||||||
ItemStack newStack = stack.copy();
|
ItemStack newStack = stack.copy();
|
||||||
newStack.grow(currentStack.getCount());
|
newStack.grow(currentStack.getCount());
|
||||||
inv.getItems().set(offsetSlot, newStack);
|
this.inv.getItems().set(slot, newStack);
|
||||||
inv.markDirty();
|
this.inv.markDirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
return ItemStack.EMPTY;
|
return ItemStack.EMPTY;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -118,45 +131,55 @@ public class ICChestInventoryHandler implements IItemHandlerModifiable
|
||||||
public ItemStack extractItem(int slot, int amount, boolean simulate)
|
public ItemStack extractItem(int slot, int amount, boolean simulate)
|
||||||
{
|
{
|
||||||
if (amount == 0)
|
if (amount == 0)
|
||||||
|
{
|
||||||
return ItemStack.EMPTY;
|
return ItemStack.EMPTY;
|
||||||
|
}
|
||||||
|
|
||||||
int offsetSlot = slot;
|
ItemStack currentStack = this.inv.getItems().get(slot);
|
||||||
ItemStack currentStack = inv.getItems().get(offsetSlot);
|
|
||||||
|
|
||||||
if (currentStack.isEmpty())
|
if (currentStack.isEmpty())
|
||||||
|
{
|
||||||
return ItemStack.EMPTY;
|
return ItemStack.EMPTY;
|
||||||
|
}
|
||||||
|
|
||||||
int extracted = Math.min(currentStack.getCount(), amount);
|
int extracted = Math.min(currentStack.getCount(), amount);
|
||||||
|
|
||||||
ItemStack copy = currentStack.copy();
|
ItemStack copy = currentStack.copy();
|
||||||
copy.setCount(extracted);
|
copy.setCount(extracted);
|
||||||
|
|
||||||
if (!simulate)
|
if (!simulate)
|
||||||
{
|
{
|
||||||
if (extracted < currentStack.getCount())
|
if (extracted < currentStack.getCount())
|
||||||
|
{
|
||||||
currentStack.shrink(extracted);
|
currentStack.shrink(extracted);
|
||||||
else
|
|
||||||
currentStack = ItemStack.EMPTY;
|
|
||||||
inv.getItems().set(offsetSlot, currentStack);
|
|
||||||
inv.markDirty();
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
currentStack = ItemStack.EMPTY;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.inv.getItems().set(slot, currentStack);
|
||||||
|
this.inv.markDirty();
|
||||||
|
}
|
||||||
|
|
||||||
return copy;
|
return copy;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getSlotLimit(int slot)
|
public int getSlotLimit(int slot)
|
||||||
{
|
{
|
||||||
return getInv().getInventoryStackLimit();
|
return this.getInv().getInventoryStackLimit();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setStackInSlot(int slot, @Nonnull ItemStack stack)
|
public void setStackInSlot(int slot, @Nonnull ItemStack stack)
|
||||||
{
|
{
|
||||||
inv.getItems().set(slot, stack);
|
this.inv.getItems().set(slot, stack);
|
||||||
inv.markDirty();
|
this.inv.markDirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public IInventory getInv()
|
public IInventory getInv()
|
||||||
{
|
{
|
||||||
return inv;
|
return this.inv;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,14 +8,14 @@
|
||||||
|
|
||||||
package cpw.mods.ironchest.common.lib;
|
package cpw.mods.ironchest.common.lib;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
|
||||||
|
|
||||||
import cpw.mods.ironchest.common.tileentity.shulker.TileEntityIronShulkerBox;
|
import cpw.mods.ironchest.common.tileentity.shulker.TileEntityIronShulkerBox;
|
||||||
import net.minecraft.inventory.IInventory;
|
import net.minecraft.inventory.IInventory;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraftforge.items.IItemHandlerModifiable;
|
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||||
import net.minecraftforge.items.ItemHandlerHelper;
|
import net.minecraftforge.items.ItemHandlerHelper;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
public class ICShulkerInventoryHandler implements IItemHandlerModifiable
|
public class ICShulkerInventoryHandler implements IItemHandlerModifiable
|
||||||
{
|
{
|
||||||
TileEntityIronShulkerBox inv;
|
TileEntityIronShulkerBox inv;
|
||||||
|
|
@ -41,29 +41,36 @@ public class ICShulkerInventoryHandler implements IItemHandlerModifiable
|
||||||
public ItemStack insertItem(int slot, ItemStack stack, boolean simulate)
|
public ItemStack insertItem(int slot, ItemStack stack, boolean simulate)
|
||||||
{
|
{
|
||||||
if (stack.isEmpty())
|
if (stack.isEmpty())
|
||||||
|
{
|
||||||
return stack;
|
return stack;
|
||||||
|
}
|
||||||
|
|
||||||
stack = stack.copy();
|
stack = stack.copy();
|
||||||
|
|
||||||
if (!inv.isItemValidForSlot(slot, stack))
|
if (!this.inv.isItemValidForSlot(slot, stack))
|
||||||
|
{
|
||||||
return stack;
|
return stack;
|
||||||
|
}
|
||||||
|
|
||||||
int offsetSlot = slot;
|
ItemStack currentStack = this.inv.getItems().get(slot);
|
||||||
ItemStack currentStack = inv.getItems().get(offsetSlot);
|
|
||||||
|
|
||||||
if (currentStack.isEmpty())
|
if (currentStack.isEmpty())
|
||||||
{
|
{
|
||||||
int accepted = Math.min(stack.getMaxStackSize(), inv.getInventoryStackLimit());
|
int accepted = Math.min(stack.getMaxStackSize(), this.inv.getInventoryStackLimit());
|
||||||
|
|
||||||
if (accepted < stack.getCount())
|
if (accepted < stack.getCount())
|
||||||
{
|
{
|
||||||
if (!simulate)
|
if (!simulate)
|
||||||
{
|
{
|
||||||
inv.getItems().set(offsetSlot, stack.splitStack(accepted));
|
this.inv.getItems().set(slot, stack.splitStack(accepted));
|
||||||
inv.markDirty();
|
this.inv.markDirty();
|
||||||
|
|
||||||
return stack;
|
return stack;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
stack.shrink(accepted);
|
stack.shrink(accepted);
|
||||||
|
|
||||||
return stack;
|
return stack;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -71,18 +78,21 @@ public class ICShulkerInventoryHandler implements IItemHandlerModifiable
|
||||||
{
|
{
|
||||||
if (!simulate)
|
if (!simulate)
|
||||||
{
|
{
|
||||||
inv.getItems().set(offsetSlot, stack);
|
this.inv.getItems().set(slot, stack);
|
||||||
inv.markDirty();
|
this.inv.markDirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
return ItemStack.EMPTY;
|
return ItemStack.EMPTY;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int accepted = Math.min(stack.getMaxStackSize(), inv.getInventoryStackLimit()) - currentStack.getCount();
|
int accepted = Math.min(stack.getMaxStackSize(), this.inv.getInventoryStackLimit()) - currentStack.getCount();
|
||||||
|
|
||||||
if (accepted <= 0 || !ItemHandlerHelper.canItemStacksStack(stack, currentStack))
|
if (accepted <= 0 || !ItemHandlerHelper.canItemStacksStack(stack, currentStack))
|
||||||
|
{
|
||||||
return stack;
|
return stack;
|
||||||
|
}
|
||||||
|
|
||||||
if (accepted < stack.getCount())
|
if (accepted < stack.getCount())
|
||||||
{
|
{
|
||||||
|
|
@ -90,13 +100,15 @@ public class ICShulkerInventoryHandler implements IItemHandlerModifiable
|
||||||
{
|
{
|
||||||
ItemStack newStack = stack.splitStack(accepted);
|
ItemStack newStack = stack.splitStack(accepted);
|
||||||
newStack.grow(currentStack.getCount());
|
newStack.grow(currentStack.getCount());
|
||||||
inv.getItems().set(offsetSlot, newStack);
|
this.inv.getItems().set(slot, newStack);
|
||||||
inv.markDirty();
|
this.inv.markDirty();
|
||||||
|
|
||||||
return stack;
|
return stack;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
stack.shrink(accepted);
|
stack.shrink(accepted);
|
||||||
|
|
||||||
return stack;
|
return stack;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -106,9 +118,10 @@ public class ICShulkerInventoryHandler implements IItemHandlerModifiable
|
||||||
{
|
{
|
||||||
ItemStack newStack = stack.copy();
|
ItemStack newStack = stack.copy();
|
||||||
newStack.grow(currentStack.getCount());
|
newStack.grow(currentStack.getCount());
|
||||||
inv.getItems().set(offsetSlot, newStack);
|
this.inv.getItems().set(slot, newStack);
|
||||||
inv.markDirty();
|
this.inv.markDirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
return ItemStack.EMPTY;
|
return ItemStack.EMPTY;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -118,45 +131,55 @@ public class ICShulkerInventoryHandler implements IItemHandlerModifiable
|
||||||
public ItemStack extractItem(int slot, int amount, boolean simulate)
|
public ItemStack extractItem(int slot, int amount, boolean simulate)
|
||||||
{
|
{
|
||||||
if (amount == 0)
|
if (amount == 0)
|
||||||
|
{
|
||||||
return ItemStack.EMPTY;
|
return ItemStack.EMPTY;
|
||||||
|
}
|
||||||
|
|
||||||
int offsetSlot = slot;
|
ItemStack currentStack = this.inv.getItems().get(slot);
|
||||||
ItemStack currentStack = inv.getItems().get(offsetSlot);
|
|
||||||
|
|
||||||
if (currentStack.isEmpty())
|
if (currentStack.isEmpty())
|
||||||
|
{
|
||||||
return ItemStack.EMPTY;
|
return ItemStack.EMPTY;
|
||||||
|
}
|
||||||
|
|
||||||
int extracted = Math.min(currentStack.getCount(), amount);
|
int extracted = Math.min(currentStack.getCount(), amount);
|
||||||
|
|
||||||
ItemStack copy = currentStack.copy();
|
ItemStack copy = currentStack.copy();
|
||||||
copy.setCount(extracted);
|
copy.setCount(extracted);
|
||||||
|
|
||||||
if (!simulate)
|
if (!simulate)
|
||||||
{
|
{
|
||||||
if (extracted < currentStack.getCount())
|
if (extracted < currentStack.getCount())
|
||||||
|
{
|
||||||
currentStack.shrink(extracted);
|
currentStack.shrink(extracted);
|
||||||
else
|
|
||||||
currentStack = ItemStack.EMPTY;
|
|
||||||
inv.getItems().set(offsetSlot, currentStack);
|
|
||||||
inv.markDirty();
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
currentStack = ItemStack.EMPTY;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.inv.getItems().set(slot, currentStack);
|
||||||
|
this.inv.markDirty();
|
||||||
|
}
|
||||||
|
|
||||||
return copy;
|
return copy;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getSlotLimit(int slot)
|
public int getSlotLimit(int slot)
|
||||||
{
|
{
|
||||||
return getInv().getInventoryStackLimit();
|
return this.getInv().getInventoryStackLimit();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setStackInSlot(int slot, @Nonnull ItemStack stack)
|
public void setStackInSlot(int slot, @Nonnull ItemStack stack)
|
||||||
{
|
{
|
||||||
inv.getItems().set(slot, stack);
|
this.inv.getItems().set(slot, stack);
|
||||||
inv.markDirty();
|
this.inv.markDirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public IInventory getInv()
|
public IInventory getInv()
|
||||||
{
|
{
|
||||||
return inv;
|
return this.inv;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@
|
||||||
package cpw.mods.ironchest.common.network;
|
package cpw.mods.ironchest.common.network;
|
||||||
|
|
||||||
import cpw.mods.ironchest.IronChest;
|
import cpw.mods.ironchest.IronChest;
|
||||||
|
import cpw.mods.ironchest.common.tileentity.chest.TileEntityCrystalChest;
|
||||||
import cpw.mods.ironchest.common.tileentity.chest.TileEntityIronChest;
|
import cpw.mods.ironchest.common.tileentity.chest.TileEntityIronChest;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
|
@ -26,14 +27,21 @@ import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
|
||||||
public class MessageCrystalChestSync implements IMessage
|
public class MessageCrystalChestSync implements IMessage
|
||||||
{
|
{
|
||||||
int dimension;
|
int dimension;
|
||||||
|
|
||||||
BlockPos pos;
|
BlockPos pos;
|
||||||
|
|
||||||
private NonNullList<ItemStack> topStacks;
|
private NonNullList<ItemStack> topStacks;
|
||||||
|
|
||||||
public MessageCrystalChestSync(TileEntityIronChest tile, NonNullList<ItemStack> stack)
|
public MessageCrystalChestSync(int dimensionId, BlockPos tilePos, NonNullList<ItemStack> stackList)
|
||||||
{
|
{
|
||||||
this.dimension = tile.getWorld().provider.getDimension();
|
this.dimension = dimensionId;
|
||||||
this.pos = tile.getPos();
|
this.pos = tilePos;
|
||||||
this.topStacks = stack;
|
this.topStacks = stackList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MessageCrystalChestSync(TileEntityIronChest tile, NonNullList<ItemStack> stacklist)
|
||||||
|
{
|
||||||
|
this(tile.getWorld().provider.getDimension(), tile.getPos(), stacklist);
|
||||||
}
|
}
|
||||||
|
|
||||||
public MessageCrystalChestSync()
|
public MessageCrystalChestSync()
|
||||||
|
|
@ -83,8 +91,10 @@ public class MessageCrystalChestSync implements IMessage
|
||||||
{
|
{
|
||||||
TileEntity tile = world.getTileEntity(message.pos);
|
TileEntity tile = world.getTileEntity(message.pos);
|
||||||
|
|
||||||
if (tile instanceof TileEntityIronChest)
|
if (tile instanceof TileEntityCrystalChest)
|
||||||
((TileEntityIronChest) tile).receiveMessageFromServer(message.topStacks);
|
{
|
||||||
|
((TileEntityCrystalChest) tile).receiveMessageFromServer(message.topStacks);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@
|
||||||
package cpw.mods.ironchest.common.network;
|
package cpw.mods.ironchest.common.network;
|
||||||
|
|
||||||
import cpw.mods.ironchest.IronChest;
|
import cpw.mods.ironchest.IronChest;
|
||||||
|
import cpw.mods.ironchest.common.tileentity.shulker.TileEntityCrystalShulkerBox;
|
||||||
import cpw.mods.ironchest.common.tileentity.shulker.TileEntityIronShulkerBox;
|
import cpw.mods.ironchest.common.tileentity.shulker.TileEntityIronShulkerBox;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
|
@ -31,11 +32,16 @@ public class MessageCrystalShulkerSync implements IMessage
|
||||||
|
|
||||||
private NonNullList<ItemStack> topStacks;
|
private NonNullList<ItemStack> topStacks;
|
||||||
|
|
||||||
public MessageCrystalShulkerSync(TileEntityIronShulkerBox tile, NonNullList<ItemStack> stack)
|
public MessageCrystalShulkerSync(int dimensionId, BlockPos tilePos, NonNullList<ItemStack> stackList)
|
||||||
{
|
{
|
||||||
this.dimension = tile.getWorld().provider.getDimension();
|
this.dimension = dimensionId;
|
||||||
this.pos = tile.getPos();
|
this.pos = tilePos;
|
||||||
this.topStacks = stack;
|
this.topStacks = stackList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MessageCrystalShulkerSync(TileEntityIronShulkerBox tile, NonNullList<ItemStack> stacklist)
|
||||||
|
{
|
||||||
|
this(tile.getWorld().provider.getDimension(), tile.getPos(), stacklist);
|
||||||
}
|
}
|
||||||
|
|
||||||
public MessageCrystalShulkerSync()
|
public MessageCrystalShulkerSync()
|
||||||
|
|
@ -85,8 +91,10 @@ public class MessageCrystalShulkerSync implements IMessage
|
||||||
{
|
{
|
||||||
TileEntity tile = world.getTileEntity(message.pos);
|
TileEntity tile = world.getTileEntity(message.pos);
|
||||||
|
|
||||||
if (tile instanceof TileEntityIronShulkerBox)
|
if (tile instanceof TileEntityCrystalShulkerBox)
|
||||||
((TileEntityIronShulkerBox) tile).receiveMessageFromServer(message.topStacks);
|
{
|
||||||
|
((TileEntityCrystalShulkerBox) tile).receiveMessageFromServer(message.topStacks);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
|
|
||||||
|
|
@ -10,16 +10,238 @@
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package cpw.mods.ironchest.common.tileentity.chest;
|
package cpw.mods.ironchest.common.tileentity.chest;
|
||||||
|
|
||||||
|
import cpw.mods.ironchest.IronChest;
|
||||||
import cpw.mods.ironchest.common.blocks.chest.IronChestType;
|
import cpw.mods.ironchest.common.blocks.chest.IronChestType;
|
||||||
|
import cpw.mods.ironchest.common.network.MessageCrystalChestSync;
|
||||||
|
import net.minecraft.block.state.IBlockState;
|
||||||
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
import net.minecraft.util.NonNullList;
|
||||||
import net.minecraft.util.datafix.DataFixer;
|
import net.minecraft.util.datafix.DataFixer;
|
||||||
import net.minecraft.util.datafix.FixTypes;
|
import net.minecraft.util.datafix.FixTypes;
|
||||||
import net.minecraft.util.datafix.walkers.ItemStackDataLists;
|
import net.minecraft.util.datafix.walkers.ItemStackDataLists;
|
||||||
|
import net.minecraftforge.fml.common.network.NetworkRegistry;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
|
||||||
public class TileEntityCrystalChest extends TileEntityIronChest
|
public class TileEntityCrystalChest extends TileEntityIronChest
|
||||||
{
|
{
|
||||||
|
/** Crystal Chest top stacks */
|
||||||
|
private NonNullList<ItemStack> topStacks;
|
||||||
|
|
||||||
|
/** If the inventory got touched */
|
||||||
|
private boolean inventoryTouched;
|
||||||
|
|
||||||
|
/** If the inventory had items */
|
||||||
|
private boolean hadStuff;
|
||||||
|
|
||||||
public TileEntityCrystalChest()
|
public TileEntityCrystalChest()
|
||||||
{
|
{
|
||||||
super(IronChestType.CRYSTAL);
|
super(IronChestType.CRYSTAL);
|
||||||
|
this.topStacks = NonNullList.<ItemStack>withSize(8, ItemStack.EMPTY);
|
||||||
|
}
|
||||||
|
|
||||||
|
public NonNullList<ItemStack> getTopItems()
|
||||||
|
{
|
||||||
|
return this.topStacks;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setContents(NonNullList<ItemStack> contents)
|
||||||
|
{
|
||||||
|
super.setContents(contents);
|
||||||
|
|
||||||
|
this.inventoryTouched = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemStack getStackInSlot(int index)
|
||||||
|
{
|
||||||
|
this.fillWithLoot((EntityPlayer) null);
|
||||||
|
|
||||||
|
this.inventoryTouched = true;
|
||||||
|
|
||||||
|
return this.getItems().get(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void markDirty()
|
||||||
|
{
|
||||||
|
super.markDirty();
|
||||||
|
|
||||||
|
this.sortTopStacks();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readFromNBT(NBTTagCompound compound)
|
||||||
|
{
|
||||||
|
super.readFromNBT(compound);
|
||||||
|
|
||||||
|
this.sortTopStacks();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update()
|
||||||
|
{
|
||||||
|
super.update();
|
||||||
|
|
||||||
|
if (!this.world.isRemote && this.inventoryTouched)
|
||||||
|
{
|
||||||
|
this.inventoryTouched = false;
|
||||||
|
|
||||||
|
this.sortTopStacks();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void sortTopStacks()
|
||||||
|
{
|
||||||
|
if (!this.getType().isTransparent() || (this.world != null && this.world.isRemote))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
NonNullList<ItemStack> tempCopy = NonNullList.<ItemStack>withSize(this.getSizeInventory(), ItemStack.EMPTY);
|
||||||
|
|
||||||
|
boolean hasStuff = false;
|
||||||
|
|
||||||
|
int compressedIdx = 0;
|
||||||
|
|
||||||
|
mainLoop:
|
||||||
|
for (int i = 0; i < this.getSizeInventory(); i++)
|
||||||
|
{
|
||||||
|
ItemStack itemStack = this.getItems().get(i);
|
||||||
|
|
||||||
|
if (!itemStack.isEmpty())
|
||||||
|
{
|
||||||
|
for (int j = 0; j < compressedIdx; j++)
|
||||||
|
{
|
||||||
|
ItemStack tempCopyStack = tempCopy.get(j);
|
||||||
|
|
||||||
|
if (ItemStack.areItemsEqualIgnoreDurability(tempCopyStack, itemStack))
|
||||||
|
{
|
||||||
|
if (itemStack.getCount() != tempCopyStack.getCount())
|
||||||
|
{
|
||||||
|
tempCopyStack.grow(itemStack.getCount());
|
||||||
|
}
|
||||||
|
|
||||||
|
continue mainLoop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tempCopy.set(compressedIdx, itemStack.copy());
|
||||||
|
|
||||||
|
compressedIdx++;
|
||||||
|
|
||||||
|
hasStuff = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!hasStuff && this.hadStuff)
|
||||||
|
{
|
||||||
|
this.hadStuff = false;
|
||||||
|
|
||||||
|
for (int i = 0; i < this.getTopItems().size(); i++)
|
||||||
|
{
|
||||||
|
this.getTopItems().set(i, ItemStack.EMPTY);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.world != null)
|
||||||
|
{
|
||||||
|
IBlockState iblockstate = this.world.getBlockState(this.pos);
|
||||||
|
|
||||||
|
this.world.notifyBlockUpdate(this.pos, iblockstate, iblockstate, 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.hadStuff = true;
|
||||||
|
|
||||||
|
Collections.sort(tempCopy, (stack1, stack2) -> {
|
||||||
|
if (stack1.isEmpty())
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else if (stack2.isEmpty())
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return stack2.getCount() - stack1.getCount();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
int p = 0;
|
||||||
|
|
||||||
|
for (ItemStack element : tempCopy)
|
||||||
|
{
|
||||||
|
if (!element.isEmpty() && element.getCount() > 0)
|
||||||
|
{
|
||||||
|
if (p == this.getTopItems().size())
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.getTopItems().set(p, element);
|
||||||
|
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = p; i < this.getTopItems().size(); i++)
|
||||||
|
{
|
||||||
|
this.getTopItems().set(i, ItemStack.EMPTY);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.world != null)
|
||||||
|
{
|
||||||
|
IBlockState iblockstate = this.world.getBlockState(this.pos);
|
||||||
|
|
||||||
|
this.world.notifyBlockUpdate(this.pos, iblockstate, iblockstate, 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.sendTopStacksPacket();
|
||||||
|
}
|
||||||
|
|
||||||
|
public NonNullList<ItemStack> buildItemStackDataList()
|
||||||
|
{
|
||||||
|
if (this.getType().isTransparent())
|
||||||
|
{
|
||||||
|
NonNullList<ItemStack> sortList = NonNullList.<ItemStack>withSize(this.getTopItems().size(), ItemStack.EMPTY);
|
||||||
|
|
||||||
|
int pos = 0;
|
||||||
|
|
||||||
|
for (ItemStack is : this.topStacks)
|
||||||
|
{
|
||||||
|
if (!is.isEmpty())
|
||||||
|
{
|
||||||
|
sortList.set(pos, is);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sortList.set(pos, ItemStack.EMPTY);
|
||||||
|
}
|
||||||
|
|
||||||
|
pos++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return sortList;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NonNullList.<ItemStack>withSize(this.getTopItems().size(), ItemStack.EMPTY);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void sendTopStacksPacket()
|
||||||
|
{
|
||||||
|
NonNullList<ItemStack> stacks = this.buildItemStackDataList();
|
||||||
|
IronChest.packetHandler.sendToAllAround(new MessageCrystalChestSync(this.getWorld().provider.getDimension(), this.getPos(), stacks), new NetworkRegistry.TargetPoint(world.provider.getDimension(), getPos().getX(), getPos().getY(), getPos().getZ(), 128));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void receiveMessageFromServer(NonNullList<ItemStack> topStacks)
|
||||||
|
{
|
||||||
|
this.topStacks = topStacks;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void registerFixesChest(DataFixer fixer)
|
public static void registerFixesChest(DataFixer fixer)
|
||||||
|
|
|
||||||
|
|
@ -10,16 +10,11 @@
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package cpw.mods.ironchest.common.tileentity.chest;
|
package cpw.mods.ironchest.common.tileentity.chest;
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Comparator;
|
|
||||||
|
|
||||||
import cpw.mods.ironchest.IronChest;
|
|
||||||
import cpw.mods.ironchest.common.blocks.chest.BlockIronChest;
|
import cpw.mods.ironchest.common.blocks.chest.BlockIronChest;
|
||||||
import cpw.mods.ironchest.common.blocks.chest.IronChestType;
|
import cpw.mods.ironchest.common.blocks.chest.IronChestType;
|
||||||
import cpw.mods.ironchest.common.core.IronChestBlocks;
|
import cpw.mods.ironchest.common.core.IronChestBlocks;
|
||||||
import cpw.mods.ironchest.common.gui.chest.ContainerIronChest;
|
import cpw.mods.ironchest.common.gui.chest.ContainerIronChest;
|
||||||
import cpw.mods.ironchest.common.lib.ICChestInventoryHandler;
|
import cpw.mods.ironchest.common.lib.ICChestInventoryHandler;
|
||||||
import cpw.mods.ironchest.common.network.MessageCrystalChestSync;
|
|
||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
import net.minecraft.entity.EntityLivingBase;
|
import net.minecraft.entity.EntityLivingBase;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
|
@ -42,7 +37,6 @@ import net.minecraft.util.datafix.walkers.ItemStackDataLists;
|
||||||
import net.minecraft.util.math.AxisAlignedBB;
|
import net.minecraft.util.math.AxisAlignedBB;
|
||||||
import net.minecraftforge.common.capabilities.Capability;
|
import net.minecraftforge.common.capabilities.Capability;
|
||||||
import net.minecraftforge.common.util.Constants;
|
import net.minecraftforge.common.util.Constants;
|
||||||
import net.minecraftforge.fml.common.network.NetworkRegistry.TargetPoint;
|
|
||||||
import net.minecraftforge.items.CapabilityItemHandler;
|
import net.minecraftforge.items.CapabilityItemHandler;
|
||||||
import net.minecraftforge.items.IItemHandler;
|
import net.minecraftforge.items.IItemHandler;
|
||||||
|
|
||||||
|
|
@ -51,9 +45,6 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements ITick
|
||||||
/** Chest Contents */
|
/** Chest Contents */
|
||||||
public NonNullList<ItemStack> chestContents;
|
public NonNullList<ItemStack> chestContents;
|
||||||
|
|
||||||
/** Crystal Chest top stacks */
|
|
||||||
private NonNullList<ItemStack> topStacks;
|
|
||||||
|
|
||||||
/** The current angle of the lid (between 0 and 1) */
|
/** The current angle of the lid (between 0 and 1) */
|
||||||
public float lidAngle;
|
public float lidAngle;
|
||||||
|
|
||||||
|
|
@ -69,12 +60,6 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements ITick
|
||||||
/** Direction chest is facing */
|
/** Direction chest is facing */
|
||||||
private EnumFacing facing;
|
private EnumFacing facing;
|
||||||
|
|
||||||
/** If the inventory got touched */
|
|
||||||
private boolean inventoryTouched;
|
|
||||||
|
|
||||||
/** If the inventory had items */
|
|
||||||
private boolean hadStuff;
|
|
||||||
|
|
||||||
private String customName;
|
private String customName;
|
||||||
|
|
||||||
private IronChestType chestType;
|
private IronChestType chestType;
|
||||||
|
|
@ -88,14 +73,13 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements ITick
|
||||||
{
|
{
|
||||||
super();
|
super();
|
||||||
this.chestType = type;
|
this.chestType = type;
|
||||||
this.chestContents = NonNullList.<ItemStack> withSize(type.size, ItemStack.EMPTY);
|
this.chestContents = NonNullList.withSize(type.size, ItemStack.EMPTY);
|
||||||
this.topStacks = NonNullList.<ItemStack> withSize(8, ItemStack.EMPTY);
|
|
||||||
this.facing = EnumFacing.NORTH;
|
this.facing = EnumFacing.NORTH;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setContents(NonNullList<ItemStack> contents)
|
public void setContents(NonNullList<ItemStack> contents)
|
||||||
{
|
{
|
||||||
this.chestContents = NonNullList.<ItemStack> withSize(this.getType().size, ItemStack.EMPTY);
|
this.chestContents = NonNullList.withSize(this.getType().size, ItemStack.EMPTY);
|
||||||
|
|
||||||
for (int i = 0; i < contents.size(); i++)
|
for (int i = 0; i < contents.size(); i++)
|
||||||
{
|
{
|
||||||
|
|
@ -104,8 +88,6 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements ITick
|
||||||
this.getItems().set(i, contents.get(i));
|
this.getItems().set(i, contents.get(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.inventoryTouched = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -139,9 +121,7 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements ITick
|
||||||
@Override
|
@Override
|
||||||
public ItemStack getStackInSlot(int index)
|
public ItemStack getStackInSlot(int index)
|
||||||
{
|
{
|
||||||
this.fillWithLoot((EntityPlayer) null);
|
this.fillWithLoot(null);
|
||||||
|
|
||||||
this.inventoryTouched = true;
|
|
||||||
|
|
||||||
return this.getItems().get(index);
|
return this.getItems().get(index);
|
||||||
}
|
}
|
||||||
|
|
@ -150,124 +130,6 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements ITick
|
||||||
public void markDirty()
|
public void markDirty()
|
||||||
{
|
{
|
||||||
super.markDirty();
|
super.markDirty();
|
||||||
|
|
||||||
this.sortTopStacks();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void sortTopStacks()
|
|
||||||
{
|
|
||||||
if (!this.getType().isTransparent() || (this.world != null && this.world.isRemote))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
NonNullList<ItemStack> tempCopy = NonNullList.<ItemStack> withSize(this.getSizeInventory(), ItemStack.EMPTY);
|
|
||||||
|
|
||||||
boolean hasStuff = false;
|
|
||||||
|
|
||||||
int compressedIdx = 0;
|
|
||||||
|
|
||||||
mainLoop:
|
|
||||||
for (int i = 0; i < this.getSizeInventory(); i++)
|
|
||||||
{
|
|
||||||
ItemStack itemStack = this.getItems().get(i);
|
|
||||||
|
|
||||||
if (!itemStack.isEmpty())
|
|
||||||
{
|
|
||||||
for (int j = 0; j < compressedIdx; j++)
|
|
||||||
{
|
|
||||||
ItemStack tempCopyStack = tempCopy.get(j);
|
|
||||||
|
|
||||||
if (ItemStack.areItemsEqualIgnoreDurability(tempCopyStack, itemStack))
|
|
||||||
{
|
|
||||||
if (itemStack.getCount() != tempCopyStack.getCount())
|
|
||||||
{
|
|
||||||
tempCopyStack.grow(itemStack.getCount());
|
|
||||||
}
|
|
||||||
|
|
||||||
continue mainLoop;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tempCopy.set(compressedIdx, itemStack.copy());
|
|
||||||
|
|
||||||
compressedIdx++;
|
|
||||||
|
|
||||||
hasStuff = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!hasStuff && this.hadStuff)
|
|
||||||
{
|
|
||||||
this.hadStuff = false;
|
|
||||||
|
|
||||||
for (int i = 0; i < this.getTopItems().size(); i++)
|
|
||||||
{
|
|
||||||
this.getTopItems().set(i, ItemStack.EMPTY);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.world != null)
|
|
||||||
{
|
|
||||||
IBlockState iblockstate = this.world.getBlockState(this.pos);
|
|
||||||
|
|
||||||
this.world.notifyBlockUpdate(this.pos, iblockstate, iblockstate, 3);
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.hadStuff = true;
|
|
||||||
|
|
||||||
Collections.sort(tempCopy, new Comparator<ItemStack>()
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public int compare(ItemStack stack1, ItemStack stack2)
|
|
||||||
{
|
|
||||||
if (stack1.isEmpty())
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (stack2.isEmpty())
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return stack2.getCount() - stack1.getCount();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
int p = 0;
|
|
||||||
|
|
||||||
for (ItemStack element : tempCopy)
|
|
||||||
{
|
|
||||||
if (!element.isEmpty() && element.getCount() > 0)
|
|
||||||
{
|
|
||||||
if (p == this.getTopItems().size())
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.getTopItems().set(p, element);
|
|
||||||
|
|
||||||
p++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = p; i < this.getTopItems().size(); i++)
|
|
||||||
{
|
|
||||||
this.getTopItems().set(i, ItemStack.EMPTY);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.world != null)
|
|
||||||
{
|
|
||||||
IBlockState iblockstate = this.world.getBlockState(this.pos);
|
|
||||||
|
|
||||||
this.world.notifyBlockUpdate(this.pos, iblockstate, iblockstate, 3);
|
|
||||||
}
|
|
||||||
|
|
||||||
sendTopStacksPacket();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -293,7 +155,7 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements ITick
|
||||||
{
|
{
|
||||||
super.readFromNBT(compound);
|
super.readFromNBT(compound);
|
||||||
|
|
||||||
this.chestContents = NonNullList.<ItemStack> withSize(this.getSizeInventory(), ItemStack.EMPTY);
|
this.chestContents = NonNullList.withSize(this.getSizeInventory(), ItemStack.EMPTY);
|
||||||
|
|
||||||
if (compound.hasKey("CustomName", Constants.NBT.TAG_STRING))
|
if (compound.hasKey("CustomName", Constants.NBT.TAG_STRING))
|
||||||
{
|
{
|
||||||
|
|
@ -306,8 +168,6 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements ITick
|
||||||
}
|
}
|
||||||
|
|
||||||
this.facing = EnumFacing.VALUES[compound.getByte("facing")];
|
this.facing = EnumFacing.VALUES[compound.getByte("facing")];
|
||||||
|
|
||||||
this.sortTopStacks();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -355,18 +215,17 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements ITick
|
||||||
@Override
|
@Override
|
||||||
public void update()
|
public void update()
|
||||||
{
|
{
|
||||||
|
int x = this.pos.getX();
|
||||||
|
int y = this.pos.getY();
|
||||||
|
int z = this.pos.getZ();
|
||||||
|
++this.ticksSinceSync;
|
||||||
|
|
||||||
// Resynchronizes clients with the server state
|
// Resynchronizes clients with the server state
|
||||||
//@formatter:off
|
if (this.world != null && !this.world.isRemote && this.numPlayersUsing != 0 && (this.ticksSinceSync + x + y + z) % 200 == 0)
|
||||||
if (this.world != null && !this.world.isRemote && this.numPlayersUsing != 0 && (this.ticksSinceSync + this.pos.getX() + this.pos.getY() + this.pos.getZ()) % 200 == 0)
|
|
||||||
//@formatter:on
|
|
||||||
{
|
{
|
||||||
this.numPlayersUsing = 0;
|
this.numPlayersUsing = 0;
|
||||||
|
|
||||||
float f = 5.0F;
|
for (EntityPlayer player : this.world.getEntitiesWithinAABB(EntityPlayer.class, new AxisAlignedBB(x - 5.0F, y - 5.0F, z - 5.0F, x + 1 + 5.0F, y + 1 + 5.0F, z + 1 + 5.0F)))
|
||||||
|
|
||||||
//@formatter:off
|
|
||||||
for (EntityPlayer player : this.world.getEntitiesWithinAABB(EntityPlayer.class, new AxisAlignedBB(this.pos.getX() - f, this.pos.getY() - f, this.pos.getZ() - f, this.pos.getX() + 1 + f, this.pos.getY() + 1 + f, this.pos.getZ() + 1 + f)))
|
|
||||||
//@formatter:on
|
|
||||||
{
|
{
|
||||||
if (player.openContainer instanceof ContainerIronChest)
|
if (player.openContainer instanceof ContainerIronChest)
|
||||||
{
|
{
|
||||||
|
|
@ -380,26 +239,16 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements ITick
|
||||||
this.world.addBlockEvent(this.pos, IronChestBlocks.ironChestBlock, 3, ((this.numPlayersUsing << 3) & 0xF8) | (this.facing.ordinal() & 0x7));
|
this.world.addBlockEvent(this.pos, IronChestBlocks.ironChestBlock, 3, ((this.numPlayersUsing << 3) & 0xF8) | (this.facing.ordinal() & 0x7));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.world.isRemote && this.inventoryTouched)
|
|
||||||
{
|
|
||||||
this.inventoryTouched = false;
|
|
||||||
|
|
||||||
this.sortTopStacks();
|
|
||||||
}
|
|
||||||
|
|
||||||
this.ticksSinceSync++;
|
|
||||||
|
|
||||||
this.prevLidAngle = this.lidAngle;
|
this.prevLidAngle = this.lidAngle;
|
||||||
|
|
||||||
float angle = 0.1F;
|
float angle = 0.1F;
|
||||||
|
|
||||||
if (this.numPlayersUsing > 0 && this.lidAngle == 0.0F)
|
if (this.numPlayersUsing > 0 && this.lidAngle == 0.0F)
|
||||||
{
|
{
|
||||||
double x = this.pos.getX() + 0.5D;
|
double soundX = x + 0.5D;
|
||||||
double y = this.pos.getY() + 0.5D;
|
double soundY = y + 0.5D;
|
||||||
double z = this.pos.getZ() + 0.5D;
|
double soundZ = z + 0.5D;
|
||||||
|
|
||||||
this.world.playSound(null, x, y, z, SoundEvents.BLOCK_CHEST_OPEN, SoundCategory.BLOCKS, 0.5F, this.world.rand.nextFloat() * 0.1F + 0.9F);
|
this.world.playSound(null, soundX, soundY, soundZ, SoundEvents.BLOCK_CHEST_OPEN, SoundCategory.BLOCKS, 0.5F, this.world.rand.nextFloat() * 0.1F + 0.9F);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.numPlayersUsing == 0 && this.lidAngle > 0.0F || this.numPlayersUsing > 0 && this.lidAngle < 1.0F)
|
if (this.numPlayersUsing == 0 && this.lidAngle > 0.0F || this.numPlayersUsing > 0 && this.lidAngle < 1.0F)
|
||||||
|
|
@ -424,11 +273,11 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements ITick
|
||||||
|
|
||||||
if (this.lidAngle < maxAngle && currentAngle >= maxAngle)
|
if (this.lidAngle < maxAngle && currentAngle >= maxAngle)
|
||||||
{
|
{
|
||||||
double x = this.pos.getX() + 0.5D;
|
double soundX = x + 0.5D;
|
||||||
double y = this.pos.getY() + 0.5D;
|
double soundY = y + 0.5D;
|
||||||
double z = this.pos.getZ() + 0.5D;
|
double soundZ = z + 0.5D;
|
||||||
|
|
||||||
this.world.playSound(null, x, y, z, SoundEvents.BLOCK_CHEST_CLOSE, SoundCategory.BLOCKS, 0.5F, this.world.rand.nextFloat() * 0.1F + 0.9F);
|
this.world.playSound(null, soundX, soundY, soundZ, SoundEvents.BLOCK_CHEST_CLOSE, SoundCategory.BLOCKS, 0.5F, this.world.rand.nextFloat() * 0.1F + 0.9F);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.lidAngle < 0.0F)
|
if (this.lidAngle < 0.0F)
|
||||||
|
|
@ -455,7 +304,7 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements ITick
|
||||||
this.numPlayersUsing = (type & 0xF8) >> 3;
|
this.numPlayersUsing = (type & 0xF8) >> 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return super.receiveClientEvent(id, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -463,11 +312,6 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements ITick
|
||||||
{
|
{
|
||||||
if (!player.isSpectator())
|
if (!player.isSpectator())
|
||||||
{
|
{
|
||||||
if (this.world == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.numPlayersUsing < 0)
|
if (this.numPlayersUsing < 0)
|
||||||
{
|
{
|
||||||
this.numPlayersUsing = 0;
|
this.numPlayersUsing = 0;
|
||||||
|
|
@ -477,7 +321,6 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements ITick
|
||||||
|
|
||||||
this.world.addBlockEvent(this.pos, IronChestBlocks.ironChestBlock, 1, this.numPlayersUsing);
|
this.world.addBlockEvent(this.pos, IronChestBlocks.ironChestBlock, 1, this.numPlayersUsing);
|
||||||
this.world.notifyNeighborsOfStateChange(this.pos, IronChestBlocks.ironChestBlock, false);
|
this.world.notifyNeighborsOfStateChange(this.pos, IronChestBlocks.ironChestBlock, false);
|
||||||
this.world.notifyNeighborsOfStateChange(this.pos.down(), IronChestBlocks.ironChestBlock, false);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -486,16 +329,10 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements ITick
|
||||||
{
|
{
|
||||||
if (!player.isSpectator())
|
if (!player.isSpectator())
|
||||||
{
|
{
|
||||||
if (this.world == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
--this.numPlayersUsing;
|
--this.numPlayersUsing;
|
||||||
|
|
||||||
this.world.addBlockEvent(this.pos, IronChestBlocks.ironChestBlock, 1, this.numPlayersUsing);
|
this.world.addBlockEvent(this.pos, IronChestBlocks.ironChestBlock, 1, this.numPlayersUsing);
|
||||||
this.world.notifyNeighborsOfStateChange(this.pos, IronChestBlocks.ironChestBlock, false);
|
this.world.notifyNeighborsOfStateChange(this.pos, IronChestBlocks.ironChestBlock, false);
|
||||||
this.world.notifyNeighborsOfStateChange(this.pos.down(), IronChestBlocks.ironChestBlock, false);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -525,34 +362,6 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements ITick
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public NonNullList<ItemStack> buildItemStackDataList()
|
|
||||||
{
|
|
||||||
if (this.getType().isTransparent())
|
|
||||||
{
|
|
||||||
NonNullList<ItemStack> sortList = NonNullList.<ItemStack> withSize(this.getTopItems().size(), ItemStack.EMPTY);
|
|
||||||
|
|
||||||
int pos = 0;
|
|
||||||
|
|
||||||
for (ItemStack is : this.topStacks)
|
|
||||||
{
|
|
||||||
if (!is.isEmpty())
|
|
||||||
{
|
|
||||||
sortList.set(pos, is);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
sortList.set(pos, ItemStack.EMPTY);
|
|
||||||
}
|
|
||||||
|
|
||||||
pos++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return sortList;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NonNullList.<ItemStack> withSize(this.getTopItems().size(), ItemStack.EMPTY);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isItemValidForSlot(int index, ItemStack stack)
|
public boolean isItemValidForSlot(int index, ItemStack stack)
|
||||||
{
|
{
|
||||||
|
|
@ -598,7 +407,19 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements ITick
|
||||||
public NBTTagCompound getUpdateTag()
|
public NBTTagCompound getUpdateTag()
|
||||||
{
|
{
|
||||||
NBTTagCompound compound = super.getUpdateTag();
|
NBTTagCompound compound = super.getUpdateTag();
|
||||||
|
|
||||||
|
if (!this.checkLootAndWrite(compound))
|
||||||
|
{
|
||||||
|
ItemStackHelper.saveAllItems(compound, this.chestContents);
|
||||||
|
}
|
||||||
|
|
||||||
compound.setByte("facing", (byte) this.facing.ordinal());
|
compound.setByte("facing", (byte) this.facing.ordinal());
|
||||||
|
|
||||||
|
if (this.hasCustomName())
|
||||||
|
{
|
||||||
|
compound.setString("CustomName", this.customName);
|
||||||
|
}
|
||||||
|
|
||||||
return compound;
|
return compound;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -608,11 +429,6 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements ITick
|
||||||
return this.chestContents;
|
return this.chestContents;
|
||||||
}
|
}
|
||||||
|
|
||||||
public NonNullList<ItemStack> getTopItems()
|
|
||||||
{
|
|
||||||
return this.topStacks;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isEmpty()
|
public boolean isEmpty()
|
||||||
{
|
{
|
||||||
|
|
@ -627,29 +443,18 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements ITick
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
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
|
|
||||||
}
|
|
||||||
|
|
||||||
public void receiveMessageFromServer(NonNullList<ItemStack> topStacks)
|
|
||||||
{
|
|
||||||
this.topStacks = topStacks;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void registerFixesChest(DataFixer fixer)
|
public static void registerFixesChest(DataFixer fixer)
|
||||||
{
|
{
|
||||||
fixer.registerWalker(FixTypes.BLOCK_ENTITY, new ItemStackDataLists(TileEntityIronChest.class, new String[] { "Items" }));
|
fixer.registerWalker(FixTypes.BLOCK_ENTITY, new ItemStackDataLists(TileEntityIronChest.class, "Items"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasCapability(Capability<?> capability, EnumFacing facing)
|
public boolean hasCapability(Capability<?> capability, EnumFacing facing)
|
||||||
{
|
{
|
||||||
if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
|
if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
|
||||||
|
{
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
return super.hasCapability(capability, facing);
|
return super.hasCapability(capability, facing);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -666,7 +471,9 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements ITick
|
||||||
public <T> T getCapability(Capability<T> capability, EnumFacing facing)
|
public <T> T getCapability(Capability<T> capability, EnumFacing facing)
|
||||||
{
|
{
|
||||||
if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
|
if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
|
||||||
return (T) (itemHandler == null ? (itemHandler = createUnSidedHandler()) : itemHandler);
|
{
|
||||||
|
return (T) (this.itemHandler == null ? (this.itemHandler = this.createUnSidedHandler()) : this.itemHandler);
|
||||||
|
}
|
||||||
return super.getCapability(capability, facing);
|
return super.getCapability(capability, facing);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,14 +10,14 @@
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package cpw.mods.ironchest.common.tileentity.shulker;
|
package cpw.mods.ironchest.common.tileentity.shulker;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
|
|
||||||
import cpw.mods.ironchest.common.blocks.shulker.IronShulkerBoxType;
|
import cpw.mods.ironchest.common.blocks.shulker.IronShulkerBoxType;
|
||||||
import net.minecraft.item.EnumDyeColor;
|
import net.minecraft.item.EnumDyeColor;
|
||||||
import net.minecraft.util.datafix.DataFixer;
|
import net.minecraft.util.datafix.DataFixer;
|
||||||
import net.minecraft.util.datafix.FixTypes;
|
import net.minecraft.util.datafix.FixTypes;
|
||||||
import net.minecraft.util.datafix.walkers.ItemStackDataLists;
|
import net.minecraft.util.datafix.walkers.ItemStackDataLists;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
public class TileEntityCopperShulkerBox extends TileEntityIronShulkerBox
|
public class TileEntityCopperShulkerBox extends TileEntityIronShulkerBox
|
||||||
{
|
{
|
||||||
public TileEntityCopperShulkerBox()
|
public TileEntityCopperShulkerBox()
|
||||||
|
|
|
||||||
|
|
@ -10,16 +10,32 @@
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package cpw.mods.ironchest.common.tileentity.shulker;
|
package cpw.mods.ironchest.common.tileentity.shulker;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import cpw.mods.ironchest.IronChest;
|
||||||
|
|
||||||
import cpw.mods.ironchest.common.blocks.shulker.IronShulkerBoxType;
|
import cpw.mods.ironchest.common.blocks.shulker.IronShulkerBoxType;
|
||||||
|
import cpw.mods.ironchest.common.network.MessageCrystalShulkerSync;
|
||||||
import net.minecraft.item.EnumDyeColor;
|
import net.minecraft.item.EnumDyeColor;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
import net.minecraft.util.NonNullList;
|
||||||
import net.minecraft.util.datafix.DataFixer;
|
import net.minecraft.util.datafix.DataFixer;
|
||||||
import net.minecraft.util.datafix.FixTypes;
|
import net.minecraft.util.datafix.FixTypes;
|
||||||
import net.minecraft.util.datafix.walkers.ItemStackDataLists;
|
import net.minecraft.util.datafix.walkers.ItemStackDataLists;
|
||||||
|
import net.minecraftforge.fml.common.network.NetworkRegistry;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import java.util.Collections;
|
||||||
|
|
||||||
public class TileEntityCrystalShulkerBox extends TileEntityIronShulkerBox
|
public class TileEntityCrystalShulkerBox extends TileEntityIronShulkerBox
|
||||||
{
|
{
|
||||||
|
/** Crystal Shulker Boxes top stacks */
|
||||||
|
private NonNullList<ItemStack> topStacks;
|
||||||
|
|
||||||
|
/** If the inventory got touched */
|
||||||
|
private boolean inventoryTouched;
|
||||||
|
|
||||||
|
/** If the inventory had items */
|
||||||
|
private boolean hadStuff;
|
||||||
|
|
||||||
public TileEntityCrystalShulkerBox()
|
public TileEntityCrystalShulkerBox()
|
||||||
{
|
{
|
||||||
this(null);
|
this(null);
|
||||||
|
|
@ -28,10 +44,199 @@ public class TileEntityCrystalShulkerBox extends TileEntityIronShulkerBox
|
||||||
public TileEntityCrystalShulkerBox(@Nullable EnumDyeColor colorIn)
|
public TileEntityCrystalShulkerBox(@Nullable EnumDyeColor colorIn)
|
||||||
{
|
{
|
||||||
super(colorIn, IronShulkerBoxType.CRYSTAL);
|
super(colorIn, IronShulkerBoxType.CRYSTAL);
|
||||||
|
this.topStacks = NonNullList.withSize(8, ItemStack.EMPTY);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setContents(NonNullList<ItemStack> contents)
|
||||||
|
{
|
||||||
|
super.setContents(contents);
|
||||||
|
|
||||||
|
this.inventoryTouched = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemStack getStackInSlot(int index)
|
||||||
|
{
|
||||||
|
this.fillWithLoot(null);
|
||||||
|
|
||||||
|
this.inventoryTouched = true;
|
||||||
|
|
||||||
|
return this.getItems().get(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void markDirty()
|
||||||
|
{
|
||||||
|
super.markDirty();
|
||||||
|
|
||||||
|
this.sortTopStacks();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void loadFromNbt(NBTTagCompound compound)
|
||||||
|
{
|
||||||
|
super.loadFromNbt(compound);
|
||||||
|
|
||||||
|
this.sortTopStacks();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update()
|
||||||
|
{
|
||||||
|
super.update();
|
||||||
|
|
||||||
|
if (!this.world.isRemote && this.inventoryTouched)
|
||||||
|
{
|
||||||
|
this.inventoryTouched = false;
|
||||||
|
|
||||||
|
this.sortTopStacks();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void sortTopStacks()
|
||||||
|
{
|
||||||
|
if (!this.getType().isTransparent() || (this.world != null && this.world.isRemote))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
NonNullList<ItemStack> tempCopy = NonNullList.withSize(this.getSizeInventory(), ItemStack.EMPTY);
|
||||||
|
|
||||||
|
boolean hasStuff = false;
|
||||||
|
|
||||||
|
int compressedIdx = 0;
|
||||||
|
|
||||||
|
mainLoop:
|
||||||
|
for (int i = 0; i < this.getSizeInventory(); i++)
|
||||||
|
{
|
||||||
|
ItemStack itemStack = this.getItems().get(i);
|
||||||
|
|
||||||
|
if (!itemStack.isEmpty())
|
||||||
|
{
|
||||||
|
for (int j = 0; j < compressedIdx; j++)
|
||||||
|
{
|
||||||
|
ItemStack tempCopyStack = tempCopy.get(j);
|
||||||
|
|
||||||
|
if (ItemStack.areItemsEqualIgnoreDurability(tempCopyStack, itemStack))
|
||||||
|
{
|
||||||
|
if (itemStack.getCount() != tempCopyStack.getCount())
|
||||||
|
{
|
||||||
|
tempCopyStack.grow(itemStack.getCount());
|
||||||
|
}
|
||||||
|
|
||||||
|
continue mainLoop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tempCopy.set(compressedIdx, itemStack.copy());
|
||||||
|
|
||||||
|
compressedIdx++;
|
||||||
|
|
||||||
|
hasStuff = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!hasStuff && this.hadStuff)
|
||||||
|
{
|
||||||
|
this.hadStuff = false;
|
||||||
|
|
||||||
|
for (int i = 0; i < this.getTopItems().size(); i++)
|
||||||
|
{
|
||||||
|
this.getTopItems().set(i, ItemStack.EMPTY);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.hadStuff = true;
|
||||||
|
|
||||||
|
Collections.sort(tempCopy, (stack1, stack2) -> {
|
||||||
|
if (stack1.isEmpty())
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else if (stack2.isEmpty())
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return stack2.getCount() - stack1.getCount();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
int p = 0;
|
||||||
|
|
||||||
|
for (ItemStack element : tempCopy)
|
||||||
|
{
|
||||||
|
if (!element.isEmpty() && element.getCount() > 0)
|
||||||
|
{
|
||||||
|
if (p == this.getTopItems().size())
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.getTopItems().set(p, element);
|
||||||
|
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = p; i < this.getTopItems().size(); i++)
|
||||||
|
{
|
||||||
|
this.getTopItems().set(i, ItemStack.EMPTY);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.sendTopStacksPacket();
|
||||||
|
}
|
||||||
|
|
||||||
|
public NonNullList<ItemStack> getTopItems()
|
||||||
|
{
|
||||||
|
return this.topStacks;
|
||||||
|
}
|
||||||
|
|
||||||
|
public NonNullList<ItemStack> buildItemStackDataList()
|
||||||
|
{
|
||||||
|
if (this.getType().isTransparent())
|
||||||
|
{
|
||||||
|
NonNullList<ItemStack> sortList = NonNullList.withSize(this.getTopItems().size(), ItemStack.EMPTY);
|
||||||
|
|
||||||
|
int pos = 0;
|
||||||
|
|
||||||
|
for (ItemStack is : this.topStacks)
|
||||||
|
{
|
||||||
|
if (!is.isEmpty())
|
||||||
|
{
|
||||||
|
sortList.set(pos, is);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sortList.set(pos, ItemStack.EMPTY);
|
||||||
|
}
|
||||||
|
|
||||||
|
pos++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return sortList;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NonNullList.withSize(this.getTopItems().size(), ItemStack.EMPTY);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void sendTopStacksPacket()
|
||||||
|
{
|
||||||
|
NonNullList<ItemStack> stacks = this.buildItemStackDataList();
|
||||||
|
IronChest.packetHandler.sendToAllAround(new MessageCrystalShulkerSync(this.getWorld().provider.getDimension(), this.getPos(), stacks), new NetworkRegistry.TargetPoint(this.world.provider.getDimension(), this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), 128));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void receiveMessageFromServer(NonNullList<ItemStack> topStacks)
|
||||||
|
{
|
||||||
|
this.topStacks = topStacks;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void registerFixesShulkerBox(DataFixer fixer)
|
public static void registerFixesShulkerBox(DataFixer fixer)
|
||||||
{
|
{
|
||||||
fixer.registerWalker(FixTypes.BLOCK_ENTITY, new ItemStackDataLists(TileEntityCrystalShulkerBox.class, new String[] { "Items" }));
|
fixer.registerWalker(FixTypes.BLOCK_ENTITY, new ItemStackDataLists(TileEntityCrystalShulkerBox.class, "Items"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,14 +10,14 @@
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package cpw.mods.ironchest.common.tileentity.shulker;
|
package cpw.mods.ironchest.common.tileentity.shulker;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
|
|
||||||
import cpw.mods.ironchest.common.blocks.shulker.IronShulkerBoxType;
|
import cpw.mods.ironchest.common.blocks.shulker.IronShulkerBoxType;
|
||||||
import net.minecraft.item.EnumDyeColor;
|
import net.minecraft.item.EnumDyeColor;
|
||||||
import net.minecraft.util.datafix.DataFixer;
|
import net.minecraft.util.datafix.DataFixer;
|
||||||
import net.minecraft.util.datafix.FixTypes;
|
import net.minecraft.util.datafix.FixTypes;
|
||||||
import net.minecraft.util.datafix.walkers.ItemStackDataLists;
|
import net.minecraft.util.datafix.walkers.ItemStackDataLists;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
public class TileEntityDiamondShulkerBox extends TileEntityIronShulkerBox
|
public class TileEntityDiamondShulkerBox extends TileEntityIronShulkerBox
|
||||||
{
|
{
|
||||||
public TileEntityDiamondShulkerBox()
|
public TileEntityDiamondShulkerBox()
|
||||||
|
|
|
||||||
|
|
@ -10,14 +10,14 @@
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package cpw.mods.ironchest.common.tileentity.shulker;
|
package cpw.mods.ironchest.common.tileentity.shulker;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
|
|
||||||
import cpw.mods.ironchest.common.blocks.shulker.IronShulkerBoxType;
|
import cpw.mods.ironchest.common.blocks.shulker.IronShulkerBoxType;
|
||||||
import net.minecraft.item.EnumDyeColor;
|
import net.minecraft.item.EnumDyeColor;
|
||||||
import net.minecraft.util.datafix.DataFixer;
|
import net.minecraft.util.datafix.DataFixer;
|
||||||
import net.minecraft.util.datafix.FixTypes;
|
import net.minecraft.util.datafix.FixTypes;
|
||||||
import net.minecraft.util.datafix.walkers.ItemStackDataLists;
|
import net.minecraft.util.datafix.walkers.ItemStackDataLists;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
public class TileEntityGoldShulkerBox extends TileEntityIronShulkerBox
|
public class TileEntityGoldShulkerBox extends TileEntityIronShulkerBox
|
||||||
{
|
{
|
||||||
public TileEntityGoldShulkerBox()
|
public TileEntityGoldShulkerBox()
|
||||||
|
|
|
||||||
|
|
@ -10,18 +10,10 @@
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package cpw.mods.ironchest.common.tileentity.shulker;
|
package cpw.mods.ironchest.common.tileentity.shulker;
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
|
|
||||||
import cpw.mods.ironchest.IronChest;
|
|
||||||
import cpw.mods.ironchest.common.blocks.shulker.BlockIronShulkerBox;
|
import cpw.mods.ironchest.common.blocks.shulker.BlockIronShulkerBox;
|
||||||
import cpw.mods.ironchest.common.blocks.shulker.IronShulkerBoxType;
|
import cpw.mods.ironchest.common.blocks.shulker.IronShulkerBoxType;
|
||||||
import cpw.mods.ironchest.common.gui.shulker.ContainerIronShulkerBox;
|
import cpw.mods.ironchest.common.gui.shulker.ContainerIronShulkerBox;
|
||||||
import cpw.mods.ironchest.common.lib.ICShulkerInventoryHandler;
|
import cpw.mods.ironchest.common.lib.ICShulkerInventoryHandler;
|
||||||
import cpw.mods.ironchest.common.network.MessageCrystalShulkerSync;
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockShulkerBox;
|
import net.minecraft.block.BlockShulkerBox;
|
||||||
import net.minecraft.block.material.EnumPushReaction;
|
import net.minecraft.block.material.EnumPushReaction;
|
||||||
|
|
@ -50,12 +42,14 @@ import net.minecraft.util.datafix.FixTypes;
|
||||||
import net.minecraft.util.datafix.walkers.ItemStackDataLists;
|
import net.minecraft.util.datafix.walkers.ItemStackDataLists;
|
||||||
import net.minecraft.util.math.AxisAlignedBB;
|
import net.minecraft.util.math.AxisAlignedBB;
|
||||||
import net.minecraftforge.common.capabilities.Capability;
|
import net.minecraftforge.common.capabilities.Capability;
|
||||||
import net.minecraftforge.fml.common.network.NetworkRegistry.TargetPoint;
|
|
||||||
import net.minecraftforge.fml.relauncher.Side;
|
import net.minecraftforge.fml.relauncher.Side;
|
||||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||||
import net.minecraftforge.items.CapabilityItemHandler;
|
import net.minecraftforge.items.CapabilityItemHandler;
|
||||||
import net.minecraftforge.items.IItemHandler;
|
import net.minecraftforge.items.IItemHandler;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class TileEntityIronShulkerBox extends TileEntityLockableLoot implements ITickable, ISidedInventory
|
public class TileEntityIronShulkerBox extends TileEntityLockableLoot implements ITickable, ISidedInventory
|
||||||
{
|
{
|
||||||
private final int[] SLOTS;
|
private final int[] SLOTS;
|
||||||
|
|
@ -63,21 +57,12 @@ public class TileEntityIronShulkerBox extends TileEntityLockableLoot implements
|
||||||
/** Shulker Box Contents */
|
/** Shulker Box Contents */
|
||||||
private NonNullList<ItemStack> items;
|
private NonNullList<ItemStack> items;
|
||||||
|
|
||||||
/** Crystal Shulker Boxes top stacks */
|
|
||||||
private NonNullList<ItemStack> topStacks;
|
|
||||||
|
|
||||||
/** Direction Shulker ox is facing */
|
/** Direction Shulker ox is facing */
|
||||||
private EnumFacing facing;
|
private EnumFacing facing;
|
||||||
|
|
||||||
/** If the inventory got touched */
|
|
||||||
private boolean inventoryTouched;
|
|
||||||
|
|
||||||
/** Server sync counter (once per 20 ticks) */
|
/** Server sync counter (once per 20 ticks) */
|
||||||
private int ticksSinceSync;
|
private int ticksSinceSync;
|
||||||
|
|
||||||
/** If the inventory had items */
|
|
||||||
private boolean hadStuff;
|
|
||||||
|
|
||||||
private boolean hasBeenCleared;
|
private boolean hasBeenCleared;
|
||||||
|
|
||||||
private int openCount;
|
private int openCount;
|
||||||
|
|
@ -115,8 +100,7 @@ public class TileEntityIronShulkerBox extends TileEntityLockableLoot implements
|
||||||
|
|
||||||
this.SLOTS = new int[typeIn.size];
|
this.SLOTS = new int[typeIn.size];
|
||||||
|
|
||||||
this.items = NonNullList.<ItemStack> withSize(typeIn.size, ItemStack.EMPTY);
|
this.items = NonNullList.withSize(typeIn.size, ItemStack.EMPTY);
|
||||||
this.topStacks = NonNullList.<ItemStack> withSize(8, ItemStack.EMPTY);
|
|
||||||
|
|
||||||
this.animationStatus = AnimationStatus.CLOSED;
|
this.animationStatus = AnimationStatus.CLOSED;
|
||||||
this.color = colorIn;
|
this.color = colorIn;
|
||||||
|
|
@ -128,7 +112,7 @@ public class TileEntityIronShulkerBox extends TileEntityLockableLoot implements
|
||||||
|
|
||||||
public void setContents(NonNullList<ItemStack> contents)
|
public void setContents(NonNullList<ItemStack> contents)
|
||||||
{
|
{
|
||||||
this.items = NonNullList.<ItemStack> withSize(this.getType().size, ItemStack.EMPTY);
|
this.items = NonNullList.withSize(this.getType().size, ItemStack.EMPTY);
|
||||||
|
|
||||||
for (int i = 0; i < contents.size(); i++)
|
for (int i = 0; i < contents.size(); i++)
|
||||||
{
|
{
|
||||||
|
|
@ -137,8 +121,6 @@ public class TileEntityIronShulkerBox extends TileEntityLockableLoot implements
|
||||||
this.getItems().set(i, contents.get(i));
|
this.getItems().set(i, contents.get(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.inventoryTouched = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -172,9 +154,7 @@ public class TileEntityIronShulkerBox extends TileEntityLockableLoot implements
|
||||||
@Override
|
@Override
|
||||||
public ItemStack getStackInSlot(int index)
|
public ItemStack getStackInSlot(int index)
|
||||||
{
|
{
|
||||||
this.fillWithLoot((EntityPlayer) null);
|
this.fillWithLoot(null);
|
||||||
|
|
||||||
this.inventoryTouched = true;
|
|
||||||
|
|
||||||
return this.getItems().get(index);
|
return this.getItems().get(index);
|
||||||
}
|
}
|
||||||
|
|
@ -183,110 +163,6 @@ public class TileEntityIronShulkerBox extends TileEntityLockableLoot implements
|
||||||
public void markDirty()
|
public void markDirty()
|
||||||
{
|
{
|
||||||
super.markDirty();
|
super.markDirty();
|
||||||
|
|
||||||
this.sortTopStacks();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void sortTopStacks()
|
|
||||||
{
|
|
||||||
if (!this.getType().isTransparent() || (this.world != null && this.world.isRemote))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
NonNullList<ItemStack> tempCopy = NonNullList.<ItemStack> withSize(this.getSizeInventory(), ItemStack.EMPTY);
|
|
||||||
|
|
||||||
boolean hasStuff = false;
|
|
||||||
|
|
||||||
int compressedIdx = 0;
|
|
||||||
|
|
||||||
mainLoop:
|
|
||||||
for (int i = 0; i < this.getSizeInventory(); i++)
|
|
||||||
{
|
|
||||||
ItemStack itemStack = this.getItems().get(i);
|
|
||||||
|
|
||||||
if (!itemStack.isEmpty())
|
|
||||||
{
|
|
||||||
for (int j = 0; j < compressedIdx; j++)
|
|
||||||
{
|
|
||||||
ItemStack tempCopyStack = tempCopy.get(j);
|
|
||||||
|
|
||||||
if (ItemStack.areItemsEqualIgnoreDurability(tempCopyStack, itemStack))
|
|
||||||
{
|
|
||||||
if (itemStack.getCount() != tempCopyStack.getCount())
|
|
||||||
{
|
|
||||||
tempCopyStack.grow(itemStack.getCount());
|
|
||||||
}
|
|
||||||
|
|
||||||
continue mainLoop;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tempCopy.set(compressedIdx, itemStack.copy());
|
|
||||||
|
|
||||||
compressedIdx++;
|
|
||||||
|
|
||||||
hasStuff = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!hasStuff && this.hadStuff)
|
|
||||||
{
|
|
||||||
this.hadStuff = false;
|
|
||||||
|
|
||||||
for (int i = 0; i < this.getTopItems().size(); i++)
|
|
||||||
{
|
|
||||||
this.getTopItems().set(i, ItemStack.EMPTY);
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.hadStuff = true;
|
|
||||||
|
|
||||||
Collections.sort(tempCopy, new Comparator<ItemStack>()
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public int compare(ItemStack stack1, ItemStack stack2)
|
|
||||||
{
|
|
||||||
if (stack1.isEmpty())
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (stack2.isEmpty())
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return stack2.getCount() - stack1.getCount();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
int p = 0;
|
|
||||||
|
|
||||||
for (ItemStack element : tempCopy)
|
|
||||||
{
|
|
||||||
if (!element.isEmpty() && element.getCount() > 0)
|
|
||||||
{
|
|
||||||
if (p == this.getTopItems().size())
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.getTopItems().set(p, element);
|
|
||||||
|
|
||||||
p++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = p; i < this.getTopItems().size(); i++)
|
|
||||||
{
|
|
||||||
this.getTopItems().set(i, ItemStack.EMPTY);
|
|
||||||
}
|
|
||||||
|
|
||||||
sendTopStacksPacket();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -316,7 +192,7 @@ public class TileEntityIronShulkerBox extends TileEntityLockableLoot implements
|
||||||
|
|
||||||
public void loadFromNbt(NBTTagCompound compound)
|
public void loadFromNbt(NBTTagCompound compound)
|
||||||
{
|
{
|
||||||
this.items = NonNullList.<ItemStack> withSize(this.getSizeInventory(), ItemStack.EMPTY);
|
this.items = NonNullList.withSize(this.getSizeInventory(), ItemStack.EMPTY);
|
||||||
|
|
||||||
if (!this.checkLootAndRead(compound) && compound.hasKey("Items", 9))
|
if (!this.checkLootAndRead(compound) && compound.hasKey("Items", 9))
|
||||||
{
|
{
|
||||||
|
|
@ -329,8 +205,6 @@ public class TileEntityIronShulkerBox extends TileEntityLockableLoot implements
|
||||||
}
|
}
|
||||||
|
|
||||||
this.facing = EnumFacing.VALUES[compound.getByte("facing")];
|
this.facing = EnumFacing.VALUES[compound.getByte("facing")];
|
||||||
|
|
||||||
this.sortTopStacks();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public NBTTagCompound saveToNbt(NBTTagCompound compound)
|
public NBTTagCompound saveToNbt(NBTTagCompound compound)
|
||||||
|
|
@ -384,13 +258,6 @@ public class TileEntityIronShulkerBox extends TileEntityLockableLoot implements
|
||||||
this.world.addBlockEvent(this.pos, this.getBlockType(), 3, ((this.openCount << 3) & 0xF8) | (this.facing.ordinal() & 0x7));
|
this.world.addBlockEvent(this.pos, this.getBlockType(), 3, ((this.openCount << 3) & 0xF8) | (this.facing.ordinal() & 0x7));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.world.isRemote && this.inventoryTouched)
|
|
||||||
{
|
|
||||||
this.inventoryTouched = false;
|
|
||||||
|
|
||||||
this.sortTopStacks();
|
|
||||||
}
|
|
||||||
|
|
||||||
this.ticksSinceSync++;
|
this.ticksSinceSync++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -461,7 +328,7 @@ public class TileEntityIronShulkerBox extends TileEntityLockableLoot implements
|
||||||
{
|
{
|
||||||
EnumFacing enumfacing = this.getFacing();
|
EnumFacing enumfacing = this.getFacing();
|
||||||
AxisAlignedBB axisalignedbb = this.getTopBoundingBox(enumfacing).offset(this.pos);
|
AxisAlignedBB axisalignedbb = this.getTopBoundingBox(enumfacing).offset(this.pos);
|
||||||
List<Entity> list = this.world.getEntitiesWithinAABBExcludingEntity((Entity) null, axisalignedbb);
|
List<Entity> list = this.world.getEntitiesWithinAABBExcludingEntity(null, axisalignedbb);
|
||||||
|
|
||||||
if (!list.isEmpty())
|
if (!list.isEmpty())
|
||||||
{
|
{
|
||||||
|
|
@ -518,9 +385,7 @@ public class TileEntityIronShulkerBox extends TileEntityLockableLoot implements
|
||||||
d2 = d2 + 0.01D;
|
d2 = d2 + 0.01D;
|
||||||
}
|
}
|
||||||
|
|
||||||
//@formatter:off
|
|
||||||
entity.move(MoverType.SHULKER_BOX, d0 * enumfacing.getFrontOffsetX(), d1 * enumfacing.getFrontOffsetY(), d2 * enumfacing.getFrontOffsetZ());
|
entity.move(MoverType.SHULKER_BOX, d0 * enumfacing.getFrontOffsetX(), d1 * enumfacing.getFrontOffsetY(), d2 * enumfacing.getFrontOffsetZ());
|
||||||
//@formatter:on
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -582,9 +447,7 @@ public class TileEntityIronShulkerBox extends TileEntityLockableLoot implements
|
||||||
|
|
||||||
if (this.openCount == 1)
|
if (this.openCount == 1)
|
||||||
{
|
{
|
||||||
//@formatter:off
|
this.world.playSound(null, this.pos, SoundEvents.BLOCK_SHULKER_BOX_OPEN, SoundCategory.BLOCKS, 0.5F, this.world.rand.nextFloat() * 0.1F + 0.9F);
|
||||||
this.world.playSound((EntityPlayer) null, this.pos, SoundEvents.BLOCK_SHULKER_BOX_OPEN, SoundCategory.BLOCKS, 0.5F, this.world.rand.nextFloat() * 0.1F + 0.9F);
|
|
||||||
//@formatter:on
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -600,9 +463,7 @@ public class TileEntityIronShulkerBox extends TileEntityLockableLoot implements
|
||||||
|
|
||||||
if (this.openCount <= 0)
|
if (this.openCount <= 0)
|
||||||
{
|
{
|
||||||
//@formatter:off
|
this.world.playSound(null, this.pos, SoundEvents.BLOCK_SHULKER_BOX_CLOSE, SoundCategory.BLOCKS, 0.5F, this.world.rand.nextFloat() * 0.1F + 0.9F);
|
||||||
this.world.playSound((EntityPlayer) null, this.pos, SoundEvents.BLOCK_SHULKER_BOX_CLOSE, SoundCategory.BLOCKS, 0.5F, this.world.rand.nextFloat() * 0.1F + 0.9F);
|
|
||||||
//@formatter:on
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -634,34 +495,6 @@ public class TileEntityIronShulkerBox extends TileEntityLockableLoot implements
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public NonNullList<ItemStack> buildItemStackDataList()
|
|
||||||
{
|
|
||||||
if (this.getType().isTransparent())
|
|
||||||
{
|
|
||||||
NonNullList<ItemStack> sortList = NonNullList.<ItemStack> withSize(this.getTopItems().size(), ItemStack.EMPTY);
|
|
||||||
|
|
||||||
int pos = 0;
|
|
||||||
|
|
||||||
for (ItemStack is : this.topStacks)
|
|
||||||
{
|
|
||||||
if (!is.isEmpty())
|
|
||||||
{
|
|
||||||
sortList.set(pos, is);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
sortList.set(pos, ItemStack.EMPTY);
|
|
||||||
}
|
|
||||||
|
|
||||||
pos++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return sortList;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NonNullList.<ItemStack> withSize(this.getTopItems().size(), ItemStack.EMPTY);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Container createContainer(InventoryPlayer playerInventory, EntityPlayer playerIn)
|
public Container createContainer(InventoryPlayer playerInventory, EntityPlayer playerIn)
|
||||||
{
|
{
|
||||||
|
|
@ -686,7 +519,19 @@ public class TileEntityIronShulkerBox extends TileEntityLockableLoot implements
|
||||||
public NBTTagCompound getUpdateTag()
|
public NBTTagCompound getUpdateTag()
|
||||||
{
|
{
|
||||||
NBTTagCompound compound = super.getUpdateTag();
|
NBTTagCompound compound = super.getUpdateTag();
|
||||||
|
|
||||||
|
if (!this.checkLootAndWrite(compound))
|
||||||
|
{
|
||||||
|
ItemStackHelper.saveAllItems(compound, this.items, false);
|
||||||
|
}
|
||||||
|
|
||||||
compound.setByte("facing", (byte) this.facing.ordinal());
|
compound.setByte("facing", (byte) this.facing.ordinal());
|
||||||
|
|
||||||
|
if (this.hasCustomName())
|
||||||
|
{
|
||||||
|
compound.setString("CustomName", this.customName);
|
||||||
|
}
|
||||||
|
|
||||||
return compound;
|
return compound;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -696,11 +541,6 @@ public class TileEntityIronShulkerBox extends TileEntityLockableLoot implements
|
||||||
return this.items;
|
return this.items;
|
||||||
}
|
}
|
||||||
|
|
||||||
public NonNullList<ItemStack> getTopItems()
|
|
||||||
{
|
|
||||||
return this.topStacks;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isEmpty()
|
public boolean isEmpty()
|
||||||
{
|
{
|
||||||
|
|
@ -718,7 +558,7 @@ public class TileEntityIronShulkerBox extends TileEntityLockableLoot implements
|
||||||
@Override
|
@Override
|
||||||
public int[] getSlotsForFace(EnumFacing side)
|
public int[] getSlotsForFace(EnumFacing side)
|
||||||
{
|
{
|
||||||
return SLOTS;
|
return this.SLOTS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -821,27 +661,14 @@ public class TileEntityIronShulkerBox extends TileEntityLockableLoot implements
|
||||||
return ItemStack.EMPTY;
|
return ItemStack.EMPTY;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void sendTopStacksPacket()
|
public enum AnimationStatus
|
||||||
{
|
{
|
||||||
NonNullList<ItemStack> stacks = this.buildItemStackDataList();
|
CLOSED, OPENING, OPENED, CLOSING
|
||||||
//@formatter:off
|
|
||||||
IronChest.packetHandler.sendToAllAround(new MessageCrystalShulkerSync(this, stacks), new TargetPoint(world.provider.getDimension(), getPos().getX(), getPos().getY(), getPos().getZ(), 128));
|
|
||||||
//@formatter:on
|
|
||||||
}
|
|
||||||
|
|
||||||
public void receiveMessageFromServer(NonNullList<ItemStack> topStacks)
|
|
||||||
{
|
|
||||||
this.topStacks = topStacks;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static enum AnimationStatus
|
|
||||||
{
|
|
||||||
CLOSED, OPENING, OPENED, CLOSING;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void registerFixesShulkerBox(DataFixer fixer)
|
public static void registerFixesShulkerBox(DataFixer fixer)
|
||||||
{
|
{
|
||||||
fixer.registerWalker(FixTypes.BLOCK_ENTITY, new ItemStackDataLists(TileEntityIronShulkerBox.class, new String[] { "Items" }));
|
fixer.registerWalker(FixTypes.BLOCK_ENTITY, new ItemStackDataLists(TileEntityIronShulkerBox.class, "Items"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private IItemHandler itemHandler;
|
private IItemHandler itemHandler;
|
||||||
|
|
@ -857,7 +684,9 @@ public class TileEntityIronShulkerBox extends TileEntityLockableLoot implements
|
||||||
public <T> T getCapability(Capability<T> capability, EnumFacing facing)
|
public <T> T getCapability(Capability<T> capability, EnumFacing facing)
|
||||||
{
|
{
|
||||||
if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
|
if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
|
||||||
return (T) (itemHandler == null ? (itemHandler = createUnSidedHandler()) : itemHandler);
|
{
|
||||||
|
return (T) (this.itemHandler == null ? (this.itemHandler = this.createUnSidedHandler()) : this.itemHandler);
|
||||||
|
}
|
||||||
return super.getCapability(capability, facing);
|
return super.getCapability(capability, facing);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,14 +10,14 @@
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package cpw.mods.ironchest.common.tileentity.shulker;
|
package cpw.mods.ironchest.common.tileentity.shulker;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
|
|
||||||
import cpw.mods.ironchest.common.blocks.shulker.IronShulkerBoxType;
|
import cpw.mods.ironchest.common.blocks.shulker.IronShulkerBoxType;
|
||||||
import net.minecraft.item.EnumDyeColor;
|
import net.minecraft.item.EnumDyeColor;
|
||||||
import net.minecraft.util.datafix.DataFixer;
|
import net.minecraft.util.datafix.DataFixer;
|
||||||
import net.minecraft.util.datafix.FixTypes;
|
import net.minecraft.util.datafix.FixTypes;
|
||||||
import net.minecraft.util.datafix.walkers.ItemStackDataLists;
|
import net.minecraft.util.datafix.walkers.ItemStackDataLists;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
public class TileEntityObsidianShulkerBox extends TileEntityIronShulkerBox
|
public class TileEntityObsidianShulkerBox extends TileEntityIronShulkerBox
|
||||||
{
|
{
|
||||||
public TileEntityObsidianShulkerBox()
|
public TileEntityObsidianShulkerBox()
|
||||||
|
|
|
||||||
|
|
@ -10,14 +10,14 @@
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package cpw.mods.ironchest.common.tileentity.shulker;
|
package cpw.mods.ironchest.common.tileentity.shulker;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
|
|
||||||
import cpw.mods.ironchest.common.blocks.shulker.IronShulkerBoxType;
|
import cpw.mods.ironchest.common.blocks.shulker.IronShulkerBoxType;
|
||||||
import net.minecraft.item.EnumDyeColor;
|
import net.minecraft.item.EnumDyeColor;
|
||||||
import net.minecraft.util.datafix.DataFixer;
|
import net.minecraft.util.datafix.DataFixer;
|
||||||
import net.minecraft.util.datafix.FixTypes;
|
import net.minecraft.util.datafix.FixTypes;
|
||||||
import net.minecraft.util.datafix.walkers.ItemStackDataLists;
|
import net.minecraft.util.datafix.walkers.ItemStackDataLists;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
public class TileEntitySilverShulkerBox extends TileEntityIronShulkerBox
|
public class TileEntitySilverShulkerBox extends TileEntityIronShulkerBox
|
||||||
{
|
{
|
||||||
public TileEntitySilverShulkerBox()
|
public TileEntitySilverShulkerBox()
|
||||||
|
|
|
||||||
|
|
@ -10,12 +10,7 @@
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package cpw.mods.ironchest.common.util;
|
package cpw.mods.ironchest.common.util;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
import net.minecraft.client.util.ITooltipFlag;
|
import net.minecraft.client.util.ITooltipFlag;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
|
@ -25,6 +20,9 @@ import net.minecraft.world.World;
|
||||||
import net.minecraftforge.fml.relauncher.Side;
|
import net.minecraftforge.fml.relauncher.Side;
|
||||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public class ItemTooltip extends Item
|
public class ItemTooltip extends Item
|
||||||
{
|
{
|
||||||
|
|
@ -58,7 +56,9 @@ public class ItemTooltip extends Item
|
||||||
{
|
{
|
||||||
List<String> list = Lists.newLinkedList();
|
List<String> list = Lists.newLinkedList();
|
||||||
if (text == null)
|
if (text == null)
|
||||||
|
{
|
||||||
return list;
|
return list;
|
||||||
|
}
|
||||||
int j = 0;
|
int j = 0;
|
||||||
int k;
|
int k;
|
||||||
while ((k = text.indexOf("\\n", j)) >= 0)
|
while ((k = text.indexOf("\\n", j)) >= 0)
|
||||||
|
|
|
||||||
|
|
@ -10,8 +10,6 @@
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package cpw.mods.ironchest.common.util;
|
package cpw.mods.ironchest.common.util;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
|
@ -20,6 +18,8 @@ import net.minecraftforge.event.RegistryEvent.MissingMappings.Mapping;
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.common.registry.ForgeRegistries;
|
import net.minecraftforge.fml.common.registry.ForgeRegistries;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
public class MissingMappingsHandler
|
public class MissingMappingsHandler
|
||||||
{
|
{
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
|
|
|
||||||
|
|
@ -10,8 +10,6 @@
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package cpw.mods.ironchest.common.util;
|
package cpw.mods.ironchest.common.util;
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
|
|
||||||
import cpw.mods.ironchest.common.ai.IronChestAIOcelotSit;
|
import cpw.mods.ironchest.common.ai.IronChestAIOcelotSit;
|
||||||
import net.minecraft.entity.ai.EntityAIOcelotSit;
|
import net.minecraft.entity.ai.EntityAIOcelotSit;
|
||||||
import net.minecraft.entity.ai.EntityAITasks.EntityAITaskEntry;
|
import net.minecraft.entity.ai.EntityAITasks.EntityAITaskEntry;
|
||||||
|
|
@ -19,6 +17,8 @@ import net.minecraft.entity.passive.EntityOcelot;
|
||||||
import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent;
|
import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent;
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
|
||||||
public class OcelotsSitOnChestsHandler
|
public class OcelotsSitOnChestsHandler
|
||||||
{
|
{
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue