Clean up some code, fix ItemStacks with damages being counted as two different items when sorting blocks for the top stack (Swords for example) and switch to vanilla's way of handling saving items to Byte data.

This commit is contained in:
alexbegt 2017-05-27 21:49:53 -04:00
parent 767528115e
commit 63047fb477
9 changed files with 44 additions and 64 deletions

View File

@ -47,10 +47,9 @@ public class BlockIronChest extends Block
public BlockIronChest()
{
super(Material.IRON);
this.setRegistryName(new ResourceLocation(IronChest.MOD_ID, "BlockIronChest"));
this.setDefaultState(this.blockState.getBaseState().withProperty(VARIANT_PROP, IronChestType.IRON));
this.setHardness(3.0F);
this.setUnlocalizedName("IronChest");
this.setCreativeTab(CreativeTabs.DECORATIONS);
@ -103,6 +102,7 @@ public class BlockIronChest extends Block
}
player.openGui(IronChest.instance, ((TileEntityIronChest) te).getType().ordinal(), world, pos.getX(), pos.getY(), pos.getZ());
return true;
}
@ -153,6 +153,7 @@ public class BlockIronChest extends Block
public void onBlockAdded(World world, BlockPos pos, IBlockState blockState)
{
super.onBlockAdded(world, pos, blockState);
world.notifyBlockUpdate(pos, blockState, blockState, 3);
}
@ -160,11 +161,14 @@ public class BlockIronChest extends Block
public void onBlockPlacedBy(World world, BlockPos pos, IBlockState blockState, EntityLivingBase entityliving, ItemStack itemStack)
{
TileEntity te = world.getTileEntity(pos);
if (te != null && te instanceof TileEntityIronChest)
{
TileEntityIronChest teic = (TileEntityIronChest) te;
teic.wasPlaced(entityliving, itemStack);
teic.setFacing(entityliving.getHorizontalFacing().getOpposite());
world.notifyBlockUpdate(pos, blockState, blockState, 3);
}
}
@ -186,6 +190,7 @@ public class BlockIronChest extends Block
InventoryHelper.dropInventoryItems(worldIn, pos, tileentity);
}
super.breakBlock(worldIn, pos, state);
}
@ -193,14 +198,17 @@ public class BlockIronChest extends Block
public float getExplosionResistance(World world, BlockPos pos, Entity exploder, Explosion explosion)
{
TileEntity te = world.getTileEntity(pos);
if (te instanceof TileEntityIronChest)
{
TileEntityIronChest teic = (TileEntityIronChest) te;
if (teic.getType().isExplosionResistant())
{
return 10000F;
}
}
return super.getExplosionResistance(world, pos, exploder, explosion);
}
@ -214,10 +222,12 @@ public class BlockIronChest extends Block
public int getComparatorInputOverride(IBlockState blockState, World world, BlockPos pos)
{
TileEntity te = world.getTileEntity(pos);
if (te instanceof IInventory)
{
return Container.calcRedstoneFromInventory((IInventory) te);
}
return 0;
}
@ -236,14 +246,18 @@ public class BlockIronChest extends Block
{
return false;
}
if (axis == EnumFacing.UP || axis == EnumFacing.DOWN)
{
TileEntity tileEntity = worldObj.getTileEntity(pos);
if (tileEntity instanceof TileEntityIronChest)
{
TileEntityIronChest icte = (TileEntityIronChest) tileEntity;
icte.rotateAround();
}
return true;
}
return false;
@ -254,7 +268,9 @@ public class BlockIronChest extends Block
public boolean eventReceived(IBlockState state, World worldIn, BlockPos pos, int id, int param)
{
super.eventReceived(state, worldIn, pos, id, param);
TileEntity tileentity = worldIn.getTileEntity(pos);
return tileentity != null && tileentity.receiveClientEvent(id, param);
}
}

View File

@ -57,8 +57,11 @@ public enum ChestChangerType
public ItemChestChanger buildItem()
{
this.item = new ItemChestChanger(this);
this.item.setRegistryName(this.itemName);
GameRegistry.register(this.item);
return this.item;
}

View File

@ -45,10 +45,12 @@ public class ContainerIronChest extends Container
{
ItemStack itemstack = null;
Slot slot = this.inventorySlots.get(i);
if (slot != null && slot.getHasStack())
{
ItemStack itemstack1 = slot.getStack();
itemstack = itemstack1.copy();
if (i < this.type.size)
{
if (!this.mergeItemStack(itemstack1, this.type.size, this.inventorySlots.size(), true))
@ -73,6 +75,7 @@ public class ContainerIronChest extends Container
slot.onSlotChanged();
}
}
return itemstack;
}
@ -80,6 +83,7 @@ public class ContainerIronChest extends Container
public void onContainerClosed(EntityPlayer entityplayer)
{
super.onContainerClosed(entityplayer);
this.chest.closeInventory(entityplayer);
}
@ -101,12 +105,14 @@ public class ContainerIronChest extends Container
}
int leftCol = (xSize - 162) / 2 + 1;
for (int playerInvRow = 0; playerInvRow < 3; playerInvRow++)
{
for (int playerInvCol = 0; playerInvCol < 9; playerInvCol++)
{
this.addSlotToContainer(
new Slot(playerInventory, playerInvCol + playerInvRow * 9 + 9, leftCol + playerInvCol * 18, ySize - (4 - playerInvRow) * 18 - 10));
//@formatter:off
this.addSlotToContainer(new Slot(playerInventory, playerInvCol + playerInvRow * 9 + 9, leftCol + playerInvCol * 18, ySize - (4 - playerInvRow) * 18 - 10));
//@formatter:on
}
}

View File

@ -52,6 +52,7 @@ public class IronChest
String minor = properties.getProperty("IronChest.build.minor.number");
String rev = properties.getProperty("IronChest.build.revision.number");
String build = properties.getProperty("IronChest.build.number");
event.getModMetadata().version = String.format("%s.%s.%s build %s", major, minor, rev, build);
}

View File

@ -109,11 +109,13 @@ public enum IronChestType implements IStringSerializable
public static void registerBlocksAndRecipes(BlockIronChest blockResult)
{
Object previous = "chestWood";
for (IronChestType typ : values())
{
generateRecipesForType(blockResult, previous, typ);
ItemStack chest = new ItemStack(blockResult, 1, typ.ordinal());
// if (typ.isValidForCreativeMode()) GameRegistry.registerCustomItemStack(typ.friendlyName, chest);//TODO fix this!!
if (typ.tieredChest)
{
previous = chest;
@ -152,12 +154,14 @@ public enum IronChestType implements IStringSerializable
{
return Blocks.DIRT;
}
return mat;
}
public static void addRecipe(ItemStack is, Object... parts)
{
ShapedOreRecipe oreRecipe = new ShapedOreRecipe(is, parts);
GameRegistry.addRecipe(oreRecipe);
}

View File

@ -168,7 +168,7 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements ITick
{
ItemStack tempCopyStack = tempCopy[j];
if (ItemStack.areItemsEqual(tempCopyStack, itemStack))
if (ItemStack.areItemsEqualIgnoreDurability(tempCopyStack, itemStack))
{
if (itemStack.stackSize != tempCopyStack.stackSize)
{
@ -196,13 +196,6 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements ITick
this.topStacks[i] = null;
}
if (this.world != null)
{
IBlockState iblockstate = this.world.getBlockState(this.pos);
this.world.notifyBlockUpdate(this.pos, iblockstate, iblockstate, 3);
}
return;
}
@ -249,13 +242,6 @@ public class TileEntityIronChest extends TileEntityLockableLoot implements ITick
this.topStacks[i] = null;
}
if (this.world != null)
{
IBlockState iblockstate = this.world.getBlockState(this.pos);
this.world.notifyBlockUpdate(this.pos, iblockstate, iblockstate, 3);
}
sendTopStacksPacket();
}

View File

@ -66,6 +66,7 @@ public class ClientProxy extends CommonProxy
public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z)
{
TileEntity te = world.getTileEntity(new BlockPos(x, y, z));
if (te != null && te instanceof TileEntityIronChest)
{
return GUIChest.GUI.buildGUI(IronChestType.values()[ID], player.inventory, (TileEntityIronChest) te);

View File

@ -91,10 +91,12 @@ public class GUIChest extends GuiContainer
protected void drawGuiContainerBackgroundLayer(float f, int i, int j)
{
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
// new "bind tex"
this.mc.getTextureManager().bindTexture(this.type.guiResourceList.location);
int x = (this.width - this.xSize) / 2;
int y = (this.height - this.ySize) / 2;
this.drawTexturedModalRect(x, y, 0, 0, this.xSize, this.ySize);
}
}

View File

@ -3,7 +3,6 @@ package cpw.mods.ironchest.network;
import cpw.mods.ironchest.IronChest;
import cpw.mods.ironchest.TileEntityIronChest;
import io.netty.buffer.ByteBuf;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
@ -38,18 +37,9 @@ public class MessageCrystalChestSync implements IMessage
int size = buf.readInt();
this.topStacks = new ItemStack[size];
int stackListSize = buf.readInt();
for (int i = 0; i < stackListSize; i++)
for (int i = 0; i < size; i++)
{
if (i < stackListSize)
{
this.topStacks[i] = readItemStack(buf);
}
else
{
this.topStacks[i] = null;
}
this.topStacks[i] = ByteBufUtils.readItemStack(buf);
}
}
@ -62,42 +52,12 @@ public class MessageCrystalChestSync implements IMessage
buf.writeInt(this.pos.getZ());
buf.writeInt(topStacks.length);
int stackListSize = 0;
for (ItemStack stack : topStacks)
{
if (stack != null)
{
stackListSize++;
ByteBufUtils.writeItemStack(buf, stack);
}
}
buf.writeInt(stackListSize);
for (ItemStack stack : topStacks)
{
if (stack != null)
{
writeItemStack(buf, stack);
}
}
}
public static void writeItemStack(ByteBuf buf, ItemStack stack)
{
buf.writeInt(Item.getIdFromItem(stack.getItem()));
buf.writeInt(stack.stackSize);
buf.writeInt(stack.getItemDamage());
ByteBufUtils.writeTag(buf, stack.getItem().getNBTShareTag(stack));
}
public static ItemStack readItemStack(ByteBuf buf)
{
ItemStack stack = new ItemStack(Item.getItemById(buf.readInt()), buf.readInt(), buf.readInt());
stack.setTagCompound(ByteBufUtils.readTag(buf));
return stack;
}
public static class Handler implements IMessageHandler<MessageCrystalChestSync, IMessage>
{
@Override
@ -112,6 +72,7 @@ public class MessageCrystalChestSync implements IMessage
if (tile instanceof TileEntityIronChest)
((TileEntityIronChest) tile).receiveMessageFromServer(message.topStacks);
}
return null;
}
}