From 6c1459cc3668b75274d33b2f96ac8474e65f3f44 Mon Sep 17 00:00:00 2001 From: Ugachaga Date: Mon, 26 Feb 2018 09:44:38 +0700 Subject: [PATCH 1/5] Inventory refactoring started --- .../block/TileAdventureBackpack.java | 223 ++++++++---------- .../entity/EntityInflatableBoat.java | 12 + .../inventory/ContainerBackpack.java | 50 ++-- .../inventory/IAsynchronousInventory.java | 6 +- .../IInventoryAdventureBackpack.java | 16 +- .../inventory/IInventoryTanks.java | 17 +- .../inventory/InventoryAdventureBackpack.java | 92 +++++++- .../inventory/InventoryBackpack.java | 172 +++----------- .../inventory/InventoryCoalJetpack.java | 163 ++++--------- .../inventory/InventoryCopterPack.java | 124 +++------- .../inventory/SlotCraftResult.java | 4 +- 11 files changed, 365 insertions(+), 514 deletions(-) diff --git a/src/main/java/com/darkona/adventurebackpack/block/TileAdventureBackpack.java b/src/main/java/com/darkona/adventurebackpack/block/TileAdventureBackpack.java index 837b9200..9a39e0c3 100644 --- a/src/main/java/com/darkona/adventurebackpack/block/TileAdventureBackpack.java +++ b/src/main/java/com/darkona/adventurebackpack/block/TileAdventureBackpack.java @@ -1,5 +1,7 @@ package com.darkona.adventurebackpack.block; +import javax.annotation.Nullable; + import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.ISidedInventory; @@ -54,51 +56,65 @@ */ public class TileAdventureBackpack extends TileEntity implements IInventoryAdventureBackpack, ISidedInventory { + private BackpackTypes type = BackpackTypes.STANDARD; private ItemStack[] inventory = new ItemStack[Constants.INVENTORY_SIZE]; private FluidTank leftTank = new FluidTank(Constants.BASIC_TANK_CAPACITY); private FluidTank rightTank = new FluidTank(Constants.BASIC_TANK_CAPACITY); + private NBTTagCompound extendedProperties = new NBTTagCompound(); - private BackpackTypes type; private NBTTagList ench; - private NBTTagCompound extendedProperties; private boolean disableCycling; private boolean disableNVision; - private int lastTime; + private int lastTime = 0; private boolean sleepingBagDeployed; private int sbdir; private int sbx; private int sby; private int sbz; - private int luminosity; + private int luminosity = 0; private int checkTime = 0; public TileAdventureBackpack() { sleepingBagDeployed = false; - setType(BackpackTypes.STANDARD); - luminosity = 0; - lastTime = 0; - checkTime = 0; - extendedProperties = new NBTTagCompound(); } - public int getLuminosity() + @Override + public BackpackTypes getType() { - return luminosity; + return type; } @Override - public int getLastTime() + public ItemStack[] getInventory() { - return lastTime; + return inventory; } @Override - public void setLastTime(int lastTime) + public FluidTank getLeftTank() { - this.lastTime = lastTime; + return leftTank; + } + + @Override + public FluidTank getRightTank() + { + return rightTank; + } + + @Override + public FluidTank[] getTanksArray() + { + return new FluidTank[]{leftTank, rightTank}; + } + + @Override + public int[] getSlotsOnClosingArray() + { + return new int[]{BUCKET_IN_LEFT, BUCKET_IN_RIGHT, BUCKET_OUT_LEFT, BUCKET_OUT_RIGHT}; } @Override @@ -107,6 +123,23 @@ public NBTTagCompound getExtendedProperties() return extendedProperties; } + public int getLuminosity() + { + return luminosity; + } + + @Override + public int getLastTime() + { + return lastTime; + } + + @Override + public void setLastTime(int lastTime) + { + this.lastTime = lastTime; + } + public boolean deploySleepingBag(EntityPlayer player, World world, int meta, int cX, int cY, int cZ) { if (world.isRemote) @@ -149,20 +182,6 @@ public boolean removeSleepingBag(World world) return false; } - //=====================================================GETTERS====================================================// - - @Override - public BackpackTypes getType() - { - return type; - } - - @Override - public ItemStack[] getInventory() - { - return this.inventory; - } - @Override public int getSizeInventory() { @@ -182,36 +201,17 @@ public String getInventoryName() } @Override - public int getInventoryStackLimit() - { - return 64; - } - - @Override - public FluidTank getLeftTank() + public boolean hasCustomInventoryName() { - return leftTank; + return getInventoryName() != null && !getInventoryName().isEmpty(); } @Override - public FluidTank getRightTank() + public int getInventoryStackLimit() { - return rightTank; + return 64; } - //=====================================================SETTERS====================================================// - - public void setType(BackpackTypes type) - { - this.type = type; - } - - //=====================================================BOOLEANS===================================================// - @Override - public boolean hasCustomInventoryName() - { - return false; - } @Override public boolean isUseableByPlayer(EntityPlayer player) @@ -330,17 +330,11 @@ public void saveToNBT(NBTTagCompound compound) compound.setTag(TAG_WEARABLE_COMPOUND, backpackTag); } - @Override - public FluidTank[] getTanksArray() - { - return new FluidTank[]{leftTank, rightTank}; - } - //====================================================INVENTORY===================================================// @Override public void openInventory() { - + // } @Override @@ -359,47 +353,74 @@ public boolean isItemValidForSlot(int slot, ItemStack stack) return (slot == TOOL_UPPER || slot == TOOL_LOWER) && SlotTool.isValidTool(stack); } + @Nullable @Override - public ItemStack decrStackSize(int i, int count) + public ItemStack decrStackSize(int slot, int quantity) { - ItemStack itemstack = getStackInSlot(i); - - if (itemstack != null) + ItemStack stack = getStackInSlot(slot); + if (stack != null) { - if (itemstack.stackSize <= count) - { - setInventorySlotContents(i, null); - } + if (stack.stackSize <= quantity) + setInventorySlotContents(slot, null); else - { - itemstack = itemstack.splitStack(count); - } + stack = stack.splitStack(quantity); } markDirty(); - return itemstack; + return stack; } + @Override - public ItemStack getStackInSlotOnClosing(int slot) + public void setInventorySlotContents(int slot, @Nullable ItemStack stack) { - if (slot == BUCKET_IN_LEFT || slot == BUCKET_IN_RIGHT || slot == BUCKET_OUT_LEFT || slot == BUCKET_OUT_RIGHT) + setInventorySlotContentsNoSave(slot, stack); + markDirty(); + } + + @Nullable + @Override + public ItemStack decrStackSizeNoSave(int slot, int quantity) + { + ItemStack stack = getStackInSlot(slot); + if (stack != null) { - return inventory[slot]; + if (stack.stackSize <= quantity) + setInventorySlotContentsNoSave(slot, null); + else + stack = stack.splitStack(quantity); } - return null; + return stack; } @Override - public void setInventorySlotContents(int slot, ItemStack stack) + public void setInventorySlotContentsNoSave(int slot, @Nullable ItemStack stack) { - inventory[slot] = stack; - if (stack != null && stack.stackSize > getInventoryStackLimit()) + if (slot >= getSizeInventory()) + return; + + if (stack != null) { - stack.stackSize = getInventoryStackLimit(); + if (stack.stackSize > getInventoryStackLimit()) + stack.stackSize = getInventoryStackLimit(); + + if (stack.stackSize == 0) + stack = null; } - markDirty(); + + getInventory()[slot] = stack; + } + + @Override + public ItemStack getStackInSlotOnClosing(int slot) + { + if (slot == BUCKET_IN_LEFT || slot == BUCKET_IN_RIGHT || slot == BUCKET_OUT_LEFT || slot == BUCKET_OUT_RIGHT) + { + return inventory[slot]; + } + return null; } + @Override public void markDirty() { @@ -428,36 +449,6 @@ public boolean updateTankSlots() return result; } - @Override - public void setInventorySlotContentsNoSave(int slot, ItemStack itemstack) - { - if (slot > inventory.length) return; - inventory[slot] = itemstack; - if (itemstack != null && itemstack.stackSize > getInventoryStackLimit()) - { - itemstack.stackSize = getInventoryStackLimit(); - } - } - - @Override - public ItemStack decrStackSizeNoSave(int slot, int amount) - { - ItemStack stack = getStackInSlot(slot); - - if (stack != null) - { - if (stack.stackSize <= amount) - { - setInventorySlotContentsNoSave(slot, null); - } - else - { - stack = stack.splitStack(amount); - } - } - return stack; - } - @Override public boolean hasItem(Item item) { @@ -524,18 +515,6 @@ public void updateEntity() } } - @Override - public TileAdventureBackpack getTile() - { - return this; - } - - @Override - public ItemStack getParentItemStack() - { - return null; - } - private ItemStack transferToItemStack(ItemStack stack) { NBTTagCompound compound = new NBTTagCompound(); diff --git a/src/main/java/com/darkona/adventurebackpack/entity/EntityInflatableBoat.java b/src/main/java/com/darkona/adventurebackpack/entity/EntityInflatableBoat.java index c396ecc9..b710babc 100644 --- a/src/main/java/com/darkona/adventurebackpack/entity/EntityInflatableBoat.java +++ b/src/main/java/com/darkona/adventurebackpack/entity/EntityInflatableBoat.java @@ -487,12 +487,24 @@ public void saveToNBT(NBTTagCompound compound) } + @Override + public ItemStack[] getInventory() + { + return new ItemStack[0]; + } + @Override public FluidTank[] getTanksArray() { return new FluidTank[0]; } + @Override + public int[] getSlotsOnClosingArray() + { + return new int[0]; + } + @Override public void dirtyInventory() { diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/ContainerBackpack.java b/src/main/java/com/darkona/adventurebackpack/inventory/ContainerBackpack.java index 0fef433d..4612d08e 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/ContainerBackpack.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/ContainerBackpack.java @@ -27,7 +27,6 @@ * * @author Darkona */ -//@invtweaks.api.container.ChestContainer (showButtons=true, rowSize=8) public class ContainerBackpack extends ContainerAdventureBackpack { private static final int BACK_INV_ROWS = 6; @@ -110,7 +109,7 @@ private void makeSlots(InventoryPlayer invPlayer) } } addSlotToContainer(new SlotCraftResult(this, invPlayer.player, craftMatrix, craftResult, 0, 226, 97)); // craftResult [99] - syncCraftMatrixToInventory(); + syncCraftMatrixWithInventory(true); } @Override @@ -270,7 +269,7 @@ else if (leftStackOut == null && rightStackOut == null && SlotBackpack.isValidIt public ItemStack slotClick(int slot, int button, int flag, EntityPlayer player) { final ItemStack result = super.slotClick(slot, button, flag, player); - syncCraftMatrixToInventory(); + syncCraftMatrixWithInventory(true); return result; } @@ -298,36 +297,41 @@ public void onCraftMatrixChanged(IInventory inventory) craftResult.setInventorySlotContents(0, CraftingManager.getInstance().findMatchingRecipe(craftMatrix, player.worldObj)); } - protected void syncCraftMatrixToInventory() + protected void syncCraftMatrixWithInventory(boolean preCraft) { + boolean changesMade = false; + for (int craftSlotID = 0; craftSlotID < CRAFT_MATRIX_EMULATION.length; craftSlotID++) { int invSlotID = CRAFT_MATRIX_EMULATION[craftSlotID]; - final ItemStack invStack = inventory.getStackInSlot(invSlotID); - craftMatrix.setInventorySlotContentsNoUpdate(craftSlotID, invStack); + ItemStack invStack = inventory.getStackInSlot(invSlotID); + ItemStack craftStack = craftMatrix.getStackInSlot(craftSlotID); + + if (!ItemStack.areItemStacksEqual(invStack, craftStack)) + { + if (preCraft) + { + craftStack = invStack == null ? null : invStack.copy(); + craftMatrix.setInventorySlotContentsNoUpdate(craftSlotID, craftStack); + } + else + { + invStack = craftStack == null ? null : craftStack.copy(); + inventory.setInventorySlotContentsNoSave(invSlotID, invStack); + } + changesMade = true; + } } - onCraftMatrixChanged(craftMatrix); - } - protected void syncInventoryToCraftMatrix() - { - for (int craftSlotID = 0; craftSlotID < CRAFT_MATRIX_EMULATION.length; craftSlotID++) + if (changesMade) { - int invSlotID = CRAFT_MATRIX_EMULATION[craftSlotID]; - final ItemStack craftStack = craftMatrix.getStackInSlot(craftSlotID); - inventory.setInventorySlotContentsNoSave(invSlotID, craftStack); + if (preCraft) + onCraftMatrixChanged(craftMatrix); + else + inventory.markDirty(); } - inventory.markDirty(); } - /*@ContainerSectionCallback //TODO deal with invTweaks - public Map> getContainerSections() - { - Map> slotMap = new HashMap<>(); - slotMap.put(ContainerSection.CHEST, inventorySlots.subList(BACK_INV_START, BACK_INV_END + 1)); - return slotMap; - }*/ - /** * Returns the array of inventory slotIDs, emulates the craftMatrix in the lower right corner of the inventory. */ diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/IAsynchronousInventory.java b/src/main/java/com/darkona/adventurebackpack/inventory/IAsynchronousInventory.java index 1ac1abdc..3e8a6d33 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/IAsynchronousInventory.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/IAsynchronousInventory.java @@ -1,5 +1,7 @@ package com.darkona.adventurebackpack.inventory; +import javax.annotation.Nullable; + import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; @@ -10,7 +12,7 @@ */ public interface IAsynchronousInventory extends IInventory { - void setInventorySlotContentsNoSave(int slot, ItemStack stack); //TODO rework realisations, see InventoryBackpack + void setInventorySlotContentsNoSave(int slot, @Nullable ItemStack stack); - ItemStack decrStackSizeNoSave(int slot, int amount); //TODO whats the point and diff with decrStackSize? + ItemStack decrStackSizeNoSave(int slot, int amount); } diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/IInventoryAdventureBackpack.java b/src/main/java/com/darkona/adventurebackpack/inventory/IInventoryAdventureBackpack.java index 9a45f731..dff151fd 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/IInventoryAdventureBackpack.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/IInventoryAdventureBackpack.java @@ -1,11 +1,9 @@ package com.darkona.adventurebackpack.inventory; import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.fluids.FluidTank; -import com.darkona.adventurebackpack.block.TileAdventureBackpack; import com.darkona.adventurebackpack.reference.BackpackTypes; /** @@ -13,28 +11,26 @@ */ public interface IInventoryAdventureBackpack extends IInventoryTanks { + BackpackTypes getType(); + FluidTank getLeftTank(); FluidTank getRightTank(); - ItemStack[] getInventory(); + NBTTagCompound getExtendedProperties(); - TileAdventureBackpack getTile(); + //TODO - ItemStack getParentItemStack(); - BackpackTypes getType(); - int getLastTime(); + boolean isSleepingBagDeployed(); - NBTTagCompound getExtendedProperties(); + int getLastTime(); boolean hasItem(Item item); void consumeInventoryItem(Item item); - boolean isSleepingBagDeployed(); - void setLastTime(int time); void dirtyTime(); diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/IInventoryTanks.java b/src/main/java/com/darkona/adventurebackpack/inventory/IInventoryTanks.java index 97e54b5e..1d93b7e8 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/IInventoryTanks.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/IInventoryTanks.java @@ -1,5 +1,6 @@ package com.darkona.adventurebackpack.inventory; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.fluids.FluidTank; @@ -10,15 +11,23 @@ */ public interface IInventoryTanks extends IAsynchronousInventory { - boolean updateTankSlots(); + ItemStack[] getInventory(); + + FluidTank[] getTanksArray(); + + int[] getSlotsOnClosingArray(); + + //TODO + + void loadFromNBT(NBTTagCompound compound); void saveToNBT(NBTTagCompound compound); - FluidTank[] getTanksArray(); - - void dirtyInventory(); + boolean updateTankSlots(); void dirtyTanks(); + + void dirtyInventory(); } diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryAdventureBackpack.java b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryAdventureBackpack.java index 34fd8758..80acb2f0 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryAdventureBackpack.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryAdventureBackpack.java @@ -1,5 +1,7 @@ package com.darkona.adventurebackpack.inventory; +import javax.annotation.Nullable; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; @@ -12,6 +14,54 @@ abstract class InventoryAdventureBackpack implements IInventoryTanks { ItemStack containerStack; + /** IInventory START --- */ + + @Override + public int getSizeInventory() + { + return getInventory().length; + } + + @Override + public ItemStack getStackInSlot(int slot) + { + return getInventory()[slot]; + } + + @Nullable + @Override + public ItemStack decrStackSize(int slot, int quantity) + { + ItemStack stack = getStackInSlot(slot); + if (stack != null) + { + if (stack.stackSize <= quantity) + setInventorySlotContents(slot, null); + else + stack = stack.splitStack(quantity); + } + return stack; + } + + @Nullable + @Override + public ItemStack getStackInSlotOnClosing(int slot) + { + for (int s : getSlotsOnClosingArray()) + if (slot == s) + return getInventory()[slot]; + + return null; + } + + @Override + public void setInventorySlotContents(int slot, @Nullable ItemStack stack) + { + setInventorySlotContentsNoSave(slot, stack); + dirtyInventory(); + } + + @Override public String getInventoryName() { @@ -21,7 +71,7 @@ public String getInventoryName() @Override public boolean hasCustomInventoryName() { - return false; + return getInventoryName() != null && !getInventoryName().isEmpty(); } @Override @@ -59,4 +109,44 @@ public boolean isItemValidForSlot(int slot, ItemStack stack) { return false; } + + /* --- IInventory END || IAsynchronousInventory START --- */ + + @Nullable + @Override + public ItemStack decrStackSizeNoSave(int slot, int quantity) + { + ItemStack stack = getStackInSlot(slot); + if (stack != null) + { + if (stack.stackSize <= quantity) + setInventorySlotContentsNoSave(slot, null); + else + stack = stack.splitStack(quantity); + } + return stack; + } + + @Override + public void setInventorySlotContentsNoSave(int slot, @Nullable ItemStack stack) + { + if (slot >= getSizeInventory()) + return; + + if (stack != null) + { + if (stack.stackSize > getInventoryStackLimit()) + stack.stackSize = getInventoryStackLimit(); + + if (stack.stackSize == 0) + stack = null; + } + + getInventory()[slot] = stack; + } + + /* --- IAsynchronousInventory END || IInventoryTanks START --- */ + + //TODO + } diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryBackpack.java b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryBackpack.java index e5a60edd..dd53dc0d 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryBackpack.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryBackpack.java @@ -10,7 +10,6 @@ import net.minecraftforge.common.util.Constants.NBT; import net.minecraftforge.fluids.FluidTank; -import com.darkona.adventurebackpack.block.TileAdventureBackpack; import com.darkona.adventurebackpack.common.Constants; import com.darkona.adventurebackpack.init.ModBlocks; import com.darkona.adventurebackpack.reference.BackpackTypes; @@ -63,25 +62,16 @@ public InventoryBackpack(ItemStack backpack) openInventory(); } - private void detectAndConvertFromOldNBTFormat(NBTTagCompound compound) // backwards compatibility + @Override + public BackpackTypes getType() { - if (compound == null || !compound.hasKey("backpackData")) - return; - - NBTTagCompound oldBackpackTag = compound.getCompoundTag("backpackData"); - NBTTagList oldItems = oldBackpackTag.getTagList("ABPItems", NBT.TAG_COMPOUND); - leftTank.readFromNBT(oldBackpackTag.getCompoundTag("leftTank")); - rightTank.readFromNBT(oldBackpackTag.getCompoundTag("rightTank")); - type = BackpackTypes.getType(oldBackpackTag.getString("colorName")); - - NBTTagCompound newBackpackTag = new NBTTagCompound(); - newBackpackTag.setTag(TAG_INVENTORY, oldItems); - newBackpackTag.setTag(TAG_RIGHT_TANK, rightTank.writeToNBT(new NBTTagCompound())); - newBackpackTag.setTag(TAG_LEFT_TANK, leftTank.writeToNBT(new NBTTagCompound())); - newBackpackTag.setByte(TAG_TYPE, BackpackTypes.getMeta(type)); + return type; + } - compound.setTag(TAG_WEARABLE_COMPOUND, newBackpackTag); - compound.removeTag("backpackData"); + @Override + public ItemStack[] getInventory() + { + return inventory; } @Override @@ -97,28 +87,24 @@ public FluidTank getRightTank() } @Override - public ItemStack[] getInventory() + public FluidTank[] getTanksArray() { - return inventory; + return new FluidTank[]{leftTank, rightTank}; } @Override - public TileAdventureBackpack getTile() + public int[] getSlotsOnClosingArray() { - return null; + return new int[]{BUCKET_IN_LEFT, BUCKET_IN_RIGHT, BUCKET_OUT_LEFT, BUCKET_OUT_RIGHT}; } @Override - public ItemStack getParentItemStack() + public NBTTagCompound getExtendedProperties() { - return this.containerStack; + return extendedProperties; } - @Override - public BackpackTypes getType() - { - return type; - } + @Override public int getLastTime() @@ -126,12 +112,6 @@ public int getLastTime() return this.lastTime; } - @Override - public NBTTagCompound getExtendedProperties() - { - return extendedProperties; - } - @Override public boolean hasItem(Item item) { @@ -199,42 +179,6 @@ public void dirtyExtended() //TODO is it redundant? containerStack.stackTagCompound.getCompoundTag(TAG_WEARABLE_COMPOUND).setTag(TAG_EXTENDED_COMPOUND, extendedProperties); } - @Override - public void setInventorySlotContentsNoSave(int slot, ItemStack stack) - { - if (slot >= this.getSizeInventory()) - return; - - if (stack != null) - { - if (stack.stackSize > this.getInventoryStackLimit()) - stack.stackSize = this.getInventoryStackLimit(); - - if (stack.stackSize == 0) - stack = null; - } - - this.inventory[slot] = stack; - } - - @Override - public ItemStack decrStackSizeNoSave(int slot, int quantity) - { - ItemStack stack = getStackInSlot(slot); - if (stack != null) - { - if (stack.stackSize <= quantity) - { - setInventorySlotContentsNoSave(slot, null); - } - else - { - stack = stack.splitStack(quantity); - } - } - return stack; - } - @Override public void loadFromNBT(NBTTagCompound compound) { @@ -315,12 +259,6 @@ public void saveToNBT(NBTTagCompound compound) compound.setTag(TAG_WEARABLE_COMPOUND, backpackTag); } - @Override - public FluidTank[] getTanksArray() - { - return new FluidTank[]{leftTank, rightTank}; - } - @Override public boolean updateTankSlots() { @@ -362,65 +300,6 @@ public void dirtyTanks() containerStack.stackTagCompound.getCompoundTag(TAG_WEARABLE_COMPOUND).setTag(TAG_RIGHT_TANK, rightTank.writeToNBT(new NBTTagCompound())); } - @Override - public int getSizeInventory() - { - return inventory.length; - } - - @Override - public ItemStack getStackInSlot(int slot) - { - return inventory[slot]; - } - - @Override - public ItemStack decrStackSize(int slot, int quantity) - { - ItemStack itemstack = getStackInSlot(slot); - if (itemstack != null) - { - if (itemstack.stackSize <= quantity) - { - setInventorySlotContents(slot, null); - } - else - { - itemstack = itemstack.splitStack(quantity); - } - } - return itemstack; - } - - @Override - public ItemStack getStackInSlotOnClosing(int slot) - { - if (slot == BUCKET_IN_LEFT || slot == BUCKET_IN_RIGHT || slot == BUCKET_OUT_LEFT || slot == BUCKET_OUT_RIGHT) - { - return inventory[slot]; - } - return null; - } - - @Override - public void setInventorySlotContents(int slot, ItemStack stack) - { - if (slot >= this.getSizeInventory()) - return; - - if (stack != null) - { - if (stack.stackSize > this.getInventoryStackLimit()) - stack.stackSize = this.getInventoryStackLimit(); - - if(stack.stackSize == 0) - stack = null; - } - - this.inventory[slot] = stack; - this.dirtyInventory(); - } - public boolean hasBlock(Block block) { return InventoryActions.hasBlockItem(this, block); @@ -445,4 +324,25 @@ public void setDisableNVision(boolean b) { this.disableNVision = b; } + + private void detectAndConvertFromOldNBTFormat(NBTTagCompound compound) // backwards compatibility + { + if (compound == null || !compound.hasKey("backpackData")) + return; + + NBTTagCompound oldBackpackTag = compound.getCompoundTag("backpackData"); + NBTTagList oldItems = oldBackpackTag.getTagList("ABPItems", NBT.TAG_COMPOUND); + leftTank.readFromNBT(oldBackpackTag.getCompoundTag("leftTank")); + rightTank.readFromNBT(oldBackpackTag.getCompoundTag("rightTank")); + type = BackpackTypes.getType(oldBackpackTag.getString("colorName")); + + NBTTagCompound newBackpackTag = new NBTTagCompound(); + newBackpackTag.setTag(TAG_INVENTORY, oldItems); + newBackpackTag.setTag(TAG_RIGHT_TANK, rightTank.writeToNBT(new NBTTagCompound())); + newBackpackTag.setTag(TAG_LEFT_TANK, leftTank.writeToNBT(new NBTTagCompound())); + newBackpackTag.setByte(TAG_TYPE, BackpackTypes.getMeta(type)); + + compound.setTag(TAG_WEARABLE_COMPOUND, newBackpackTag); + compound.removeTag("backpackData"); + } } \ No newline at end of file diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryCoalJetpack.java b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryCoalJetpack.java index eada35d9..2242f6b3 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryCoalJetpack.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryCoalJetpack.java @@ -46,25 +46,35 @@ public InventoryCoalJetpack(final ItemStack jetpack) openInventory(); } - private void detectAndConvertFromOldNBTFormat(NBTTagCompound compound) // backwards compatibility + @Override + public ItemStack[] getInventory() { - if (compound == null || !compound.hasKey("jetpackData")) - return; + return inventory; + } - NBTTagCompound oldJetpackTag = compound.getCompoundTag("jetpackData"); - NBTTagList oldItems = oldJetpackTag.getTagList("inventory", NBT.TAG_COMPOUND); - waterTank.readFromNBT(oldJetpackTag.getCompoundTag("waterTank")); - steamTank.readFromNBT(oldJetpackTag.getCompoundTag("steamTank")); + public FluidTank getWaterTank() + { + return waterTank; + } - NBTTagCompound newJetpackTag = new NBTTagCompound(); - newJetpackTag.setTag(TAG_INVENTORY, oldItems); - newJetpackTag.setTag(TAG_WATER_TANK, waterTank.writeToNBT(new NBTTagCompound())); - newJetpackTag.setTag(TAG_STEAM_TANK, steamTank.writeToNBT(new NBTTagCompound())); + public FluidTank getSteamTank() + { + return steamTank; + } - compound.setTag(TAG_WEARABLE_COMPOUND, newJetpackTag); - compound.removeTag("jetpackData"); + @Override + public FluidTank[] getTanksArray() + { + return new FluidTank[]{waterTank, steamTank}; + } + + @Override + public int[] getSlotsOnClosingArray() + { + return new int[]{BUCKET_IN, BUCKET_OUT}; } + public int getBurnTimeRemainingScaled(int scale) { if (this.currentItemBurnTime == 0) @@ -133,12 +143,6 @@ public void saveToNBT(NBTTagCompound compound) compound.setTag(TAG_WEARABLE_COMPOUND, jetpackTag); } - @Override - public FluidTank[] getTanksArray() - { - return new FluidTank[]{waterTank, steamTank}; - } - @Override public boolean updateTankSlots() { @@ -209,103 +213,11 @@ private boolean isFuel(ItemStack stack) return TileEntityFurnace.isItemFuel(stack); } - @Override - public void setInventorySlotContentsNoSave(int slot, ItemStack stack) - { - if (slot > inventory.length) return; - inventory[slot] = stack; - if (stack != null && stack.stackSize > this.getInventoryStackLimit()) - { - stack.stackSize = this.getInventoryStackLimit(); - } - } - - @Override - public ItemStack decrStackSizeNoSave(int slot, int amount) - { - if (slot < inventory.length && inventory[slot] != null) - { - if (inventory[slot].stackSize > amount) - { - return inventory[slot].splitStack(amount); - } - ItemStack stack = inventory[slot]; - setInventorySlotContentsNoSave(slot, null); - return stack; - } - return null; - } - - @Override - public int getSizeInventory() - { - return inventory.length; - } - - @Override - public ItemStack getStackInSlot(int slot) - { - return inventory[slot]; - } - - @Override - public ItemStack decrStackSize(int slot, int quantity) - { - ItemStack itemstack = getStackInSlot(slot); - - if (itemstack != null) - { - if (itemstack.stackSize <= quantity) - { - if (slot == FUEL_SLOT) - { - setInventorySlotContents(slot, itemstack.getItem().getContainerItem(itemstack)); - } - else - { - setInventorySlotContents(slot, null); - } - } - else - { - itemstack = itemstack.splitStack(quantity); - } - } - return itemstack; - } - - @Override - public ItemStack getStackInSlotOnClosing(int slot) - { - return (slot == BUCKET_IN || slot == BUCKET_OUT) ? inventory[slot] : null; - } - - @Override - public void setInventorySlotContents(int slot, ItemStack stack) - { - inventory[slot] = stack; - if (stack != null && stack.stackSize > getInventoryStackLimit()) - { - stack.stackSize = getInventoryStackLimit(); - } - dirtyInventory(); - } - public ItemStack getParentItemStack() { return containerStack; } - public FluidTank getWaterTank() - { - return waterTank; - } - - public FluidTank getSteamTank() - { - return steamTank; - } - public boolean getStatus() { return status; @@ -376,16 +288,6 @@ public void setBurnTicks(int burnTicks) this.burnTicks = burnTicks; } - public ItemStack[] getInventory() - { - return inventory; - } - - public void setInventory(ItemStack[] inventory) - { - this.inventory = inventory; //TODO wtf - } - public int getIncreasingFactor() { if (temperature < 50) return 20; @@ -426,4 +328,23 @@ public void calculateLostTime() { long elapsedTimesince = System.currentTimeMillis() - systemTime; } + + private void detectAndConvertFromOldNBTFormat(NBTTagCompound compound) // backwards compatibility + { + if (compound == null || !compound.hasKey("jetpackData")) + return; + + NBTTagCompound oldJetpackTag = compound.getCompoundTag("jetpackData"); + NBTTagList oldItems = oldJetpackTag.getTagList("inventory", NBT.TAG_COMPOUND); + waterTank.readFromNBT(oldJetpackTag.getCompoundTag("waterTank")); + steamTank.readFromNBT(oldJetpackTag.getCompoundTag("steamTank")); + + NBTTagCompound newJetpackTag = new NBTTagCompound(); + newJetpackTag.setTag(TAG_INVENTORY, oldItems); + newJetpackTag.setTag(TAG_WATER_TANK, waterTank.writeToNBT(new NBTTagCompound())); + newJetpackTag.setTag(TAG_STEAM_TANK, steamTank.writeToNBT(new NBTTagCompound())); + + compound.setTag(TAG_WEARABLE_COMPOUND, newJetpackTag); + compound.removeTag("jetpackData"); + } } \ No newline at end of file diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryCopterPack.java b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryCopterPack.java index 659bb88b..062d56e9 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryCopterPack.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryCopterPack.java @@ -34,23 +34,10 @@ public InventoryCopterPack(ItemStack copterPack) openInventory(); } - private void detectAndConvertFromOldNBTFormat(NBTTagCompound compound) // backwards compatibility + @Override + public ItemStack[] getInventory() { - if (compound == null || compound.hasKey(TAG_WEARABLE_COMPOUND)) - return; - - if (compound.hasKey("status")) - compound.removeTag("status"); - if (compound.hasKey("tickCounter")) - compound.removeTag("tickCounter"); - - fuelTank.readFromNBT(compound.getCompoundTag("fuelTank")); - - NBTTagCompound newCopterTag = new NBTTagCompound(); - newCopterTag.setTag(TAG_FUEL_TANK, fuelTank.writeToNBT(new NBTTagCompound())); - - compound.setTag(TAG_WEARABLE_COMPOUND, newCopterTag); - compound.removeTag("fuelTank"); + return inventory; } public FluidTank getFuelTank() @@ -58,90 +45,28 @@ public FluidTank getFuelTank() return fuelTank; } - public void consumeFuel(int quantity) - { - fuelTank.drain(quantity, true); - dirtyTanks(); - } - - public boolean canConsumeFuel(int quantity) - { - return fuelTank.drain(quantity, false) != null && fuelTank.drain(quantity, false).amount > 0; - } - - @Override - public int getSizeInventory() - { - return inventory.length; - } - - @Override - public ItemStack getStackInSlot(int i) - { - return inventory[i]; - } - @Override - public ItemStack decrStackSize(int slot, int quantity) + public FluidTank[] getTanksArray() { - ItemStack itemstack = getStackInSlot(slot); - - if (itemstack != null) - { - if (itemstack.stackSize <= quantity) - { - setInventorySlotContents(slot, null); - } - else - { - itemstack = itemstack.splitStack(quantity); - } - } - return itemstack; + return new FluidTank[]{fuelTank}; } @Override - public ItemStack getStackInSlotOnClosing(int slot) + public int[] getSlotsOnClosingArray() { - return (slot == BUCKET_IN || slot == BUCKET_OUT) ? inventory[slot] : null; + return new int[]{BUCKET_IN, BUCKET_OUT}; } - @Override - public void setInventorySlotContents(int slot, ItemStack stack) - { - inventory[slot] = stack; - if (stack != null && stack.stackSize > getInventoryStackLimit()) - { - stack.stackSize = getInventoryStackLimit(); - } - dirtyInventory(); - } - @Override - public void setInventorySlotContentsNoSave(int slot, ItemStack stack) + public void consumeFuel(int quantity) { - if (slot > inventory.length) return; - inventory[slot] = stack; - if (stack != null && stack.stackSize > this.getInventoryStackLimit()) - { - stack.stackSize = this.getInventoryStackLimit(); - } + fuelTank.drain(quantity, true); + dirtyTanks(); } - @Override - public ItemStack decrStackSizeNoSave(int slot, int amount) + public boolean canConsumeFuel(int quantity) { - if (slot < inventory.length && inventory[slot] != null) - { - if (inventory[slot].stackSize > amount) - { - return inventory[slot].splitStack(amount); - } - ItemStack stack = inventory[slot]; - setInventorySlotContentsNoSave(slot, null); - return stack; - } - return null; + return fuelTank.drain(quantity, false) != null && fuelTank.drain(quantity, false).amount > 0; } public int getTickCounter() @@ -183,12 +108,6 @@ public void saveToNBT(NBTTagCompound compound) compound.setTag(TAG_WEARABLE_COMPOUND, copterTag); } - @Override - public FluidTank[] getTanksArray() - { - return new FluidTank[]{fuelTank}; - } - @Override public boolean updateTankSlots() { @@ -219,4 +138,23 @@ public void dirtyStatus() { containerStack.stackTagCompound.getCompoundTag(TAG_WEARABLE_COMPOUND).setByte(TAG_STATUS, status); } + + private void detectAndConvertFromOldNBTFormat(NBTTagCompound compound) // backwards compatibility + { + if (compound == null || compound.hasKey(TAG_WEARABLE_COMPOUND)) + return; + + if (compound.hasKey("status")) + compound.removeTag("status"); + if (compound.hasKey("tickCounter")) + compound.removeTag("tickCounter"); + + fuelTank.readFromNBT(compound.getCompoundTag("fuelTank")); + + NBTTagCompound newCopterTag = new NBTTagCompound(); + newCopterTag.setTag(TAG_FUEL_TANK, fuelTank.writeToNBT(new NBTTagCompound())); + + compound.setTag(TAG_WEARABLE_COMPOUND, newCopterTag); + compound.removeTag("fuelTank"); + } } diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/SlotCraftResult.java b/src/main/java/com/darkona/adventurebackpack/inventory/SlotCraftResult.java index 32ef03e5..dfb1352f 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/SlotCraftResult.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/SlotCraftResult.java @@ -23,8 +23,8 @@ public SlotCraftResult(ContainerBackpack container, EntityPlayer player, IInvent @Override public void onPickupFromSlot(EntityPlayer player, ItemStack stack) { - eventHandler.syncCraftMatrixToInventory(); // pre craft sync + eventHandler.syncCraftMatrixWithInventory(true); // pre craft sync super.onPickupFromSlot(player, stack); - eventHandler.syncInventoryToCraftMatrix(); // post craft sync + eventHandler.syncCraftMatrixWithInventory(false); // post craft sync } } From 56c18411f9479ef4d0f5bc781bc680d236703a12 Mon Sep 17 00:00:00 2001 From: Ugachaga Date: Mon, 26 Feb 2018 17:53:44 +0700 Subject: [PATCH 2/5] Augean stables --- .../block/TileAdventure.java | 149 +++++++++++++ .../block/TileAdventureBackpack.java | 210 ++++-------------- .../IInventoryAdventureBackpack.java | 2 +- .../inventory/InventoryAdventureBackpack.java | 2 +- 4 files changed, 199 insertions(+), 164 deletions(-) create mode 100644 src/main/java/com/darkona/adventurebackpack/block/TileAdventure.java diff --git a/src/main/java/com/darkona/adventurebackpack/block/TileAdventure.java b/src/main/java/com/darkona/adventurebackpack/block/TileAdventure.java new file mode 100644 index 00000000..85b85842 --- /dev/null +++ b/src/main/java/com/darkona/adventurebackpack/block/TileAdventure.java @@ -0,0 +1,149 @@ +package com.darkona.adventurebackpack.block; + +import javax.annotation.Nullable; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; + +import com.darkona.adventurebackpack.inventory.IInventoryTanks; + +/** + * Created on 26.02.2018 + * + * @author Ugachaga + */ +abstract class TileAdventure extends TileEntity implements IInventoryTanks +{ + /** IInventory START --- */ + + @Override + public int getSizeInventory() + { + return getInventory().length; + } + + @Override + public ItemStack getStackInSlot(int slot) + { + return getInventory()[slot]; + } + + @Nullable + @Override + public ItemStack decrStackSize(int slot, int quantity) + { + ItemStack stack = getStackInSlot(slot); + if (stack != null) + { + if (stack.stackSize <= quantity) + setInventorySlotContents(slot, null); + else + stack = stack.splitStack(quantity); + } + markDirty(); + return stack; + } + + @Nullable + @Override + public ItemStack getStackInSlotOnClosing(int slot) + { + for (int s : getSlotsOnClosingArray()) + if (slot == s) + return getInventory()[slot]; + + return null; + } + + @Override + public void setInventorySlotContents(int slot, @Nullable ItemStack stack) + { + setInventorySlotContentsNoSave(slot, stack); + markDirty(); + } + + @Override + public String getInventoryName() + { + return ""; + } + + @Override + public boolean hasCustomInventoryName() + { + return getInventoryName() != null && !getInventoryName().isEmpty(); + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + // we have to inherit markDirty() implemented in TileEntity.class + + @Override + public boolean isUseableByPlayer(EntityPlayer player) + { + return worldObj.getTileEntity(xCoord, yCoord, zCoord) == this + && player.getDistanceSq(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5) <= 64; + } + + @Override + public void openInventory() + { + // + } + + @Override + public void closeInventory() + { + markDirty(); + } + + @Override + public boolean isItemValidForSlot(int slot, ItemStack stack) + { + return false; // override when automation is allowed + } + + /* --- IInventory END || IAsynchronousInventory START --- */ + + @Nullable + @Override + public ItemStack decrStackSizeNoSave(int slot, int quantity) + { + ItemStack stack = getStackInSlot(slot); + if (stack != null) + { + if (stack.stackSize <= quantity) + setInventorySlotContentsNoSave(slot, null); + else + stack = stack.splitStack(quantity); + } + return stack; + } + + @Override + public void setInventorySlotContentsNoSave(int slot, @Nullable ItemStack stack) + { + if (slot >= getSizeInventory()) + return; + + if (stack != null) + { + if (stack.stackSize > getInventoryStackLimit()) + stack.stackSize = getInventoryStackLimit(); + + if (stack.stackSize == 0) + stack = null; + } + + getInventory()[slot] = stack; + } + + /* --- IAsynchronousInventory END || IInventoryTanks START --- */ + + +} diff --git a/src/main/java/com/darkona/adventurebackpack/block/TileAdventureBackpack.java b/src/main/java/com/darkona/adventurebackpack/block/TileAdventureBackpack.java index 9a39e0c3..9ee44778 100644 --- a/src/main/java/com/darkona/adventurebackpack/block/TileAdventureBackpack.java +++ b/src/main/java/com/darkona/adventurebackpack/block/TileAdventureBackpack.java @@ -1,7 +1,5 @@ package com.darkona.adventurebackpack.block; -import javax.annotation.Nullable; - import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.ISidedInventory; @@ -12,7 +10,6 @@ import net.minecraft.network.NetworkManager; import net.minecraft.network.Packet; import net.minecraft.network.play.server.S35PacketUpdateTileEntity; -import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ChatComponentTranslation; import net.minecraft.world.EnumSkyBlock; import net.minecraft.world.World; @@ -54,7 +51,7 @@ /** * Created by Darkona on 12/10/2014. */ -public class TileAdventureBackpack extends TileEntity implements IInventoryAdventureBackpack, ISidedInventory +public class TileAdventureBackpack extends TileAdventure implements IInventoryAdventureBackpack, ISidedInventory { private BackpackTypes type = BackpackTypes.STANDARD; private ItemStack[] inventory = new ItemStack[Constants.INVENTORY_SIZE]; @@ -123,6 +120,9 @@ public NBTTagCompound getExtendedProperties() return extendedProperties; } + + + public int getLuminosity() { return luminosity; @@ -140,6 +140,12 @@ public void setLastTime(int lastTime) this.lastTime = lastTime; } + @Override + public boolean isSleepingBagDeployed() + { + return this.sleepingBagDeployed; + } + public boolean deploySleepingBag(EntityPlayer player, World world, int meta, int cX, int cY, int cZ) { if (world.isRemote) @@ -182,49 +188,6 @@ public boolean removeSleepingBag(World world) return false; } - @Override - public int getSizeInventory() - { - return inventory.length; - } - - @Override - public ItemStack getStackInSlot(int slot) - { - return inventory[slot]; - } - - @Override - public String getInventoryName() - { - return ""; - } - - @Override - public boolean hasCustomInventoryName() - { - return getInventoryName() != null && !getInventoryName().isEmpty(); - } - - @Override - public int getInventoryStackLimit() - { - return 64; - } - - - @Override - public boolean isUseableByPlayer(EntityPlayer player) - { - return worldObj.getTileEntity(xCoord, yCoord, zCoord) == this && player.getDistanceSq(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5) <= 64; - } - - @Override - public boolean isSleepingBagDeployed() - { - return this.sleepingBagDeployed; - } - //=======================================================NBT======================================================// @Override public void readFromNBT(NBTTagCompound compound) @@ -252,24 +215,6 @@ public void writeToNBT(NBTTagCompound compound) compound.setInteger("lumen", luminosity); } - private void convertFromOldNBTFormat(NBTTagCompound compound) // backwards compatibility - { - NBTTagCompound oldBackpackTag = compound.getCompoundTag("backpackData"); - NBTTagList oldItems = oldBackpackTag.getTagList("ABPItems", NBT.TAG_COMPOUND); - leftTank.readFromNBT(oldBackpackTag.getCompoundTag("leftTank")); - rightTank.readFromNBT(oldBackpackTag.getCompoundTag("rightTank")); - type = BackpackTypes.getType(oldBackpackTag.getString("colorName")); - - NBTTagCompound newBackpackTag = new NBTTagCompound(); - newBackpackTag.setTag(TAG_INVENTORY, oldItems); - newBackpackTag.setTag(TAG_RIGHT_TANK, rightTank.writeToNBT(new NBTTagCompound())); - newBackpackTag.setTag(TAG_LEFT_TANK, leftTank.writeToNBT(new NBTTagCompound())); - newBackpackTag.setByte(TAG_TYPE, BackpackTypes.getMeta(type)); - - compound.setTag(TAG_WEARABLE_COMPOUND, newBackpackTag); - compound.removeTag("backpackData"); - } - @Override public void loadFromNBT(NBTTagCompound compound) { @@ -331,95 +276,6 @@ public void saveToNBT(NBTTagCompound compound) } //====================================================INVENTORY===================================================// - @Override - public void openInventory() - { - // - } - - @Override - public void closeInventory() - { - markDirty(); - } - - @Override - public boolean isItemValidForSlot(int slot, ItemStack stack) - { - if (slot <= Constants.END_OF_INVENTORY) - { - return SlotBackpack.isValidItem(stack); - } - return (slot == TOOL_UPPER || slot == TOOL_LOWER) && SlotTool.isValidTool(stack); - } - - @Nullable - @Override - public ItemStack decrStackSize(int slot, int quantity) - { - ItemStack stack = getStackInSlot(slot); - if (stack != null) - { - if (stack.stackSize <= quantity) - setInventorySlotContents(slot, null); - else - stack = stack.splitStack(quantity); - } - markDirty(); - return stack; - } - - - @Override - public void setInventorySlotContents(int slot, @Nullable ItemStack stack) - { - setInventorySlotContentsNoSave(slot, stack); - markDirty(); - } - - @Nullable - @Override - public ItemStack decrStackSizeNoSave(int slot, int quantity) - { - ItemStack stack = getStackInSlot(slot); - if (stack != null) - { - if (stack.stackSize <= quantity) - setInventorySlotContentsNoSave(slot, null); - else - stack = stack.splitStack(quantity); - } - return stack; - } - - @Override - public void setInventorySlotContentsNoSave(int slot, @Nullable ItemStack stack) - { - if (slot >= getSizeInventory()) - return; - - if (stack != null) - { - if (stack.stackSize > getInventoryStackLimit()) - stack.stackSize = getInventoryStackLimit(); - - if (stack.stackSize == 0) - stack = null; - } - - getInventory()[slot] = stack; - } - - @Override - public ItemStack getStackInSlotOnClosing(int slot) - { - if (slot == BUCKET_IN_LEFT || slot == BUCKET_IN_RIGHT || slot == BUCKET_OUT_LEFT || slot == BUCKET_OUT_RIGHT) - { - return inventory[slot]; - } - return null; - } - @Override public void markDirty() @@ -515,14 +371,6 @@ public void updateEntity() } } - private ItemStack transferToItemStack(ItemStack stack) - { - NBTTagCompound compound = new NBTTagCompound(); - saveToNBT(compound); - stack.setTagCompound(compound); - return stack; - } - //=====================================================BACKPACK===================================================// public boolean equip(World world, EntityPlayer player, int x, int y, int z) { @@ -575,6 +423,14 @@ public boolean drop(World world, EntityPlayer player, int x, int y, int z) return world.spawnEntityInWorld(droppedItem); } + private void transferToItemStack(ItemStack stack) + { + NBTTagCompound compound = new NBTTagCompound(); + saveToNBT(compound); + stack.setTagCompound(compound); + stack.setItemDamage(BackpackTypes.getMeta(type)); // save the meta, cuz why not + } + @Override public void dirtyTanks() { @@ -599,6 +455,18 @@ public void dirtyInventory() } + // AUTOMATION settings + + @Override + public boolean isItemValidForSlot(int slot, ItemStack stack) + { + if (slot <= Constants.END_OF_INVENTORY) + { + return SlotBackpack.isValidItem(stack); + } + return (slot == TOOL_UPPER || slot == TOOL_LOWER) && SlotTool.isValidTool(stack); + } + //=================================================ISidedInventory================================================// private static final int[] SLOTS = Utils.createSlotArray(0, Constants.INVENTORY_MAIN_SIZE); @@ -624,4 +492,22 @@ public boolean canExtractItem(int slot, ItemStack item, int side) { return true; } + + private void convertFromOldNBTFormat(NBTTagCompound compound) // backwards compatibility + { + NBTTagCompound oldBackpackTag = compound.getCompoundTag("backpackData"); + NBTTagList oldItems = oldBackpackTag.getTagList("ABPItems", NBT.TAG_COMPOUND); + leftTank.readFromNBT(oldBackpackTag.getCompoundTag("leftTank")); + rightTank.readFromNBT(oldBackpackTag.getCompoundTag("rightTank")); + type = BackpackTypes.getType(oldBackpackTag.getString("colorName")); + + NBTTagCompound newBackpackTag = new NBTTagCompound(); + newBackpackTag.setTag(TAG_INVENTORY, oldItems); + newBackpackTag.setTag(TAG_RIGHT_TANK, rightTank.writeToNBT(new NBTTagCompound())); + newBackpackTag.setTag(TAG_LEFT_TANK, leftTank.writeToNBT(new NBTTagCompound())); + newBackpackTag.setByte(TAG_TYPE, BackpackTypes.getMeta(type)); + + compound.setTag(TAG_WEARABLE_COMPOUND, newBackpackTag); + compound.removeTag("backpackData"); + } } \ No newline at end of file diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/IInventoryAdventureBackpack.java b/src/main/java/com/darkona/adventurebackpack/inventory/IInventoryAdventureBackpack.java index dff151fd..ee3c207a 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/IInventoryAdventureBackpack.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/IInventoryAdventureBackpack.java @@ -17,7 +17,7 @@ public interface IInventoryAdventureBackpack extends IInventoryTanks FluidTank getRightTank(); - NBTTagCompound getExtendedProperties(); + NBTTagCompound getExtendedProperties(); //TODO move to IInventoryTanks to use with Copter/Jet? //TODO diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryAdventureBackpack.java b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryAdventureBackpack.java index 80acb2f0..a5ef4e7d 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryAdventureBackpack.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryAdventureBackpack.java @@ -65,7 +65,7 @@ public void setInventorySlotContents(int slot, @Nullable ItemStack stack) @Override public String getInventoryName() { - return ""; + return ""; //TODO name heirs } @Override From d1688e8003721d403a3fcab92c71f93929ef87d3 Mon Sep 17 00:00:00 2001 From: Ugachaga Date: Mon, 26 Feb 2018 18:07:25 +0700 Subject: [PATCH 3/5] Some naming --- .../adventurebackpack/block/TileAdventureBackpack.java | 4 ++-- .../adventurebackpack/client/gui/GuiAdvBackpack.java | 4 ++-- .../client/models/ModelBackpackBlock.java | 6 +++--- .../adventurebackpack/common/BackpackAbilities.java | 2 +- ...inerAdventureBackpack.java => ContainerAdventure.java} | 2 +- .../adventurebackpack/inventory/ContainerBackpack.java | 8 ++++---- .../adventurebackpack/inventory/ContainerCopter.java | 2 +- .../adventurebackpack/inventory/ContainerJetpack.java | 2 +- ...toryAdventureBackpack.java => IInventoryBackpack.java} | 2 +- .../adventurebackpack/inventory/InventoryActions.java | 4 ++-- ...toryAdventureBackpack.java => InventoryAdventure.java} | 2 +- .../adventurebackpack/inventory/InventoryBackpack.java | 2 +- .../adventurebackpack/inventory/InventoryCoalJetpack.java | 2 +- .../adventurebackpack/inventory/InventoryCopterPack.java | 4 ++-- .../{SlotAdventureBackpack.java => SlotAdventure.java} | 4 ++-- .../darkona/adventurebackpack/inventory/SlotBackpack.java | 4 ++-- .../adventurebackpack/inventory/SlotCraftMatrix.java | 2 +- .../darkona/adventurebackpack/inventory/SlotFluid.java | 2 +- .../com/darkona/adventurebackpack/inventory/SlotFuel.java | 2 +- .../com/darkona/adventurebackpack/inventory/SlotTool.java | 2 +- .../adventurebackpack/network/CowAbilityPacket.java | 4 ++-- .../adventurebackpack/network/PlayerActionPacket.java | 4 ++-- .../com/darkona/adventurebackpack/util/Resources.java | 4 ++-- 23 files changed, 37 insertions(+), 37 deletions(-) rename src/main/java/com/darkona/adventurebackpack/inventory/{ContainerAdventureBackpack.java => ContainerAdventure.java} (99%) rename src/main/java/com/darkona/adventurebackpack/inventory/{IInventoryAdventureBackpack.java => IInventoryBackpack.java} (91%) rename src/main/java/com/darkona/adventurebackpack/inventory/{InventoryAdventureBackpack.java => InventoryAdventure.java} (97%) rename src/main/java/com/darkona/adventurebackpack/inventory/{SlotAdventureBackpack.java => SlotAdventure.java} (65%) diff --git a/src/main/java/com/darkona/adventurebackpack/block/TileAdventureBackpack.java b/src/main/java/com/darkona/adventurebackpack/block/TileAdventureBackpack.java index 9ee44778..d1e9b364 100644 --- a/src/main/java/com/darkona/adventurebackpack/block/TileAdventureBackpack.java +++ b/src/main/java/com/darkona/adventurebackpack/block/TileAdventureBackpack.java @@ -21,7 +21,7 @@ import com.darkona.adventurebackpack.config.ConfigHandler; import com.darkona.adventurebackpack.init.ModBlocks; import com.darkona.adventurebackpack.init.ModItems; -import com.darkona.adventurebackpack.inventory.IInventoryAdventureBackpack; +import com.darkona.adventurebackpack.inventory.IInventoryBackpack; import com.darkona.adventurebackpack.inventory.InventoryActions; import com.darkona.adventurebackpack.inventory.SlotBackpack; import com.darkona.adventurebackpack.inventory.SlotTool; @@ -51,7 +51,7 @@ /** * Created by Darkona on 12/10/2014. */ -public class TileAdventureBackpack extends TileAdventure implements IInventoryAdventureBackpack, ISidedInventory +public class TileAdventureBackpack extends TileAdventure implements IInventoryBackpack, ISidedInventory { private BackpackTypes type = BackpackTypes.STANDARD; private ItemStack[] inventory = new ItemStack[Constants.INVENTORY_SIZE]; diff --git a/src/main/java/com/darkona/adventurebackpack/client/gui/GuiAdvBackpack.java b/src/main/java/com/darkona/adventurebackpack/client/gui/GuiAdvBackpack.java index f0989d61..0d6cc736 100644 --- a/src/main/java/com/darkona/adventurebackpack/client/gui/GuiAdvBackpack.java +++ b/src/main/java/com/darkona/adventurebackpack/client/gui/GuiAdvBackpack.java @@ -17,7 +17,7 @@ import com.darkona.adventurebackpack.config.ConfigHandler; import com.darkona.adventurebackpack.init.ModNetwork; import com.darkona.adventurebackpack.inventory.ContainerBackpack; -import com.darkona.adventurebackpack.inventory.IInventoryAdventureBackpack; +import com.darkona.adventurebackpack.inventory.IInventoryBackpack; import com.darkona.adventurebackpack.inventory.InventoryBackpack; import com.darkona.adventurebackpack.network.PlayerActionPacket; import com.darkona.adventurebackpack.network.SleepingBagPacket; @@ -42,7 +42,7 @@ public class GuiAdvBackpack extends GuiWithTanks private static GuiTank tankLeft = new GuiTank(25, 7, 100, 16, ConfigHandler.typeTankRender); private static GuiTank tankRight = new GuiTank(207, 7, 100, 16, ConfigHandler.typeTankRender); - private IInventoryAdventureBackpack inventory; + private IInventoryBackpack inventory; private boolean isHoldingSpace; diff --git a/src/main/java/com/darkona/adventurebackpack/client/models/ModelBackpackBlock.java b/src/main/java/com/darkona/adventurebackpack/client/models/ModelBackpackBlock.java index b6cbea98..5cf69fd2 100644 --- a/src/main/java/com/darkona/adventurebackpack/client/models/ModelBackpackBlock.java +++ b/src/main/java/com/darkona/adventurebackpack/client/models/ModelBackpackBlock.java @@ -12,7 +12,7 @@ import codechicken.lib.vec.Vector3; import com.darkona.adventurebackpack.common.Constants; -import com.darkona.adventurebackpack.inventory.IInventoryAdventureBackpack; +import com.darkona.adventurebackpack.inventory.IInventoryBackpack; import com.darkona.adventurebackpack.reference.BackpackTypes; import static com.darkona.adventurebackpack.reference.BackpackTypes.*; @@ -268,7 +268,7 @@ public ModelBackpackBlock() this.pigNose.addBox(0.0F, 0.0F, 0.0F, 4, 3, 1); } - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float scale, IInventoryAdventureBackpack backpack) + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float scale, IInventoryBackpack backpack) { //scale*=0.9; boolean sleepingbag = backpack.isSleepingBagDeployed(); @@ -364,7 +364,7 @@ private void renderFluidsInTanks(FluidTank tankLeft, FluidTank tankRight, float } - private void renderBackpack(IInventoryAdventureBackpack backpack, float scale) + private void renderBackpack(IInventoryBackpack backpack, float scale) { BackpackTypes type = backpack.getType(); diff --git a/src/main/java/com/darkona/adventurebackpack/common/BackpackAbilities.java b/src/main/java/com/darkona/adventurebackpack/common/BackpackAbilities.java index 584f0fe0..8ff76208 100644 --- a/src/main/java/com/darkona/adventurebackpack/common/BackpackAbilities.java +++ b/src/main/java/com/darkona/adventurebackpack/common/BackpackAbilities.java @@ -741,6 +741,6 @@ public void tileMelon(World world, TileAdventureBackpack backpack) /*public void tileCow(World world, TileAdventureBackpack backpack) { - IInventoryAdventureBackpack inv = backpack; //TODO make CowBackpack (and others) working in tile form + IInventoryBackpack inv = backpack; //TODO make CowBackpack (and others) working in tile form }*/ } diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/ContainerAdventureBackpack.java b/src/main/java/com/darkona/adventurebackpack/inventory/ContainerAdventure.java similarity index 99% rename from src/main/java/com/darkona/adventurebackpack/inventory/ContainerAdventureBackpack.java rename to src/main/java/com/darkona/adventurebackpack/inventory/ContainerAdventure.java index 687d77c1..f53fc4c1 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/ContainerAdventureBackpack.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/ContainerAdventure.java @@ -15,7 +15,7 @@ * @author Ugachaga */ @SuppressWarnings("WeakerAccess") -abstract class ContainerAdventureBackpack extends Container +abstract class ContainerAdventure extends Container { protected static final int PLAYER_HOT_START = 0; protected static final int PLAYER_HOT_END = PLAYER_HOT_START + 8; diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/ContainerBackpack.java b/src/main/java/com/darkona/adventurebackpack/inventory/ContainerBackpack.java index 4612d08e..19271412 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/ContainerBackpack.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/ContainerBackpack.java @@ -27,7 +27,7 @@ * * @author Darkona */ -public class ContainerBackpack extends ContainerAdventureBackpack +public class ContainerBackpack extends ContainerAdventure { private static final int BACK_INV_ROWS = 6; private static final int BACK_INV_COLUMNS = 8; @@ -43,13 +43,13 @@ public class ContainerBackpack extends ContainerAdventureBackpack private InventoryCraftingBackpack craftMatrix = new InventoryCraftingBackpack(this, MATRIX_DIMENSION, MATRIX_DIMENSION); private IInventory craftResult = new InventoryCraftResult(); - private IInventoryAdventureBackpack inventory; + private IInventoryBackpack inventory; private int leftAmount; private int rightAmount; private int invCount; - public ContainerBackpack(EntityPlayer player, IInventoryAdventureBackpack backpack, Source source) + public ContainerBackpack(EntityPlayer player, IInventoryBackpack backpack, Source source) { this.player = player; inventory = backpack; @@ -58,7 +58,7 @@ public ContainerBackpack(EntityPlayer player, IInventoryAdventureBackpack backpa this.source = source; } - public IInventoryAdventureBackpack getInventoryBackpack() + public IInventoryBackpack getInventoryBackpack() { return inventory; } diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/ContainerCopter.java b/src/main/java/com/darkona/adventurebackpack/inventory/ContainerCopter.java index 92ec38ea..56388b3b 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/ContainerCopter.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/ContainerCopter.java @@ -15,7 +15,7 @@ * * @author Darkona */ -public class ContainerCopter extends ContainerAdventureBackpack +public class ContainerCopter extends ContainerAdventure { private static final int COPTER_INV_START = PLAYER_INV_END + 1; diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/ContainerJetpack.java b/src/main/java/com/darkona/adventurebackpack/inventory/ContainerJetpack.java index 9190ce52..c74b2f1b 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/ContainerJetpack.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/ContainerJetpack.java @@ -16,7 +16,7 @@ * * @author Darkona */ -public class ContainerJetpack extends ContainerAdventureBackpack +public class ContainerJetpack extends ContainerAdventure { private static final int JETPACK_INV_START = PLAYER_INV_END + 1; private static final int JETPACK_FUEL_START = PLAYER_INV_END + 3; diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/IInventoryAdventureBackpack.java b/src/main/java/com/darkona/adventurebackpack/inventory/IInventoryBackpack.java similarity index 91% rename from src/main/java/com/darkona/adventurebackpack/inventory/IInventoryAdventureBackpack.java rename to src/main/java/com/darkona/adventurebackpack/inventory/IInventoryBackpack.java index ee3c207a..f83c8848 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/IInventoryAdventureBackpack.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/IInventoryBackpack.java @@ -9,7 +9,7 @@ /** * Created by Darkona on 12/10/2014. */ -public interface IInventoryAdventureBackpack extends IInventoryTanks +public interface IInventoryBackpack extends IInventoryTanks { BackpackTypes getType(); diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryActions.java b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryActions.java index 6768c5c9..0eb43c99 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryActions.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryActions.java @@ -142,7 +142,7 @@ public static void consumeItemInInventory(IInventory backpack, Item item) } } - public static boolean hasItem(IInventoryAdventureBackpack backpack, Item item) + public static boolean hasItem(IInventoryBackpack backpack, Item item) { ItemStack[] inventory = backpack.getInventory(); for (ItemStack slotStack : inventory) @@ -155,7 +155,7 @@ public static boolean hasItem(IInventoryAdventureBackpack backpack, Item item) return false; } - public static boolean hasBlockItem(IInventoryAdventureBackpack backpack, Block item) + public static boolean hasBlockItem(IInventoryBackpack backpack, Block item) { ItemStack[] inventory = backpack.getInventory(); for (ItemStack slotStack : inventory) diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryAdventureBackpack.java b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryAdventure.java similarity index 97% rename from src/main/java/com/darkona/adventurebackpack/inventory/InventoryAdventureBackpack.java rename to src/main/java/com/darkona/adventurebackpack/inventory/InventoryAdventure.java index a5ef4e7d..c517e47c 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryAdventureBackpack.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryAdventure.java @@ -10,7 +10,7 @@ * * @author Ugachaga */ -abstract class InventoryAdventureBackpack implements IInventoryTanks +abstract class InventoryAdventure implements IInventoryTanks { ItemStack containerStack; diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryBackpack.java b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryBackpack.java index dd53dc0d..006909ad 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryBackpack.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryBackpack.java @@ -33,7 +33,7 @@ * * @author Darkona */ -public class InventoryBackpack extends InventoryAdventureBackpack implements IInventoryAdventureBackpack +public class InventoryBackpack extends InventoryAdventure implements IInventoryBackpack { private static final String TAG_IS_SLEEPING_BAG = "sleepingBag"; private static final String TAG_SLEEPING_BAG_X = "sleepingBagX"; diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryCoalJetpack.java b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryCoalJetpack.java index 2242f6b3..7d4964e2 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryCoalJetpack.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryCoalJetpack.java @@ -22,7 +22,7 @@ * * @author Darkona */ -public class InventoryCoalJetpack extends InventoryAdventureBackpack +public class InventoryCoalJetpack extends InventoryAdventure { public int currentItemBurnTime = 0; diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryCopterPack.java b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryCopterPack.java index 062d56e9..9ad08dc4 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryCopterPack.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryCopterPack.java @@ -19,7 +19,7 @@ * * @author Darkona */ -public class InventoryCopterPack extends InventoryAdventureBackpack +public class InventoryCopterPack extends InventoryAdventure { private FluidTank fuelTank = new FluidTank(Constants.Copter.FUEL_CAPACITY); private ItemStack[] inventory = new ItemStack[INVENTORY_SIZE]; @@ -132,7 +132,7 @@ public void dirtyTanks() containerStack.stackTagCompound.getCompoundTag(TAG_WEARABLE_COMPOUND).setTag(TAG_FUEL_TANK, fuelTank.writeToNBT(new NBTTagCompound())); } - //TODO to InventoryAdventureBackpack: getWearableCompound() { return containerStack.stackTagCompound.getCompoundTag(TAG_WEARABLE_COMPOUND);} + //TODO to InventoryAdventure: getWearableCompound() { return containerStack.stackTagCompound.getCompoundTag(TAG_WEARABLE_COMPOUND);} public void dirtyStatus() { diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/SlotAdventureBackpack.java b/src/main/java/com/darkona/adventurebackpack/inventory/SlotAdventure.java similarity index 65% rename from src/main/java/com/darkona/adventurebackpack/inventory/SlotAdventureBackpack.java rename to src/main/java/com/darkona/adventurebackpack/inventory/SlotAdventure.java index b7db9405..ef37fbcb 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/SlotAdventureBackpack.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/SlotAdventure.java @@ -8,9 +8,9 @@ * * @author Darkona */ -abstract class SlotAdventureBackpack extends Slot +abstract class SlotAdventure extends Slot { - SlotAdventureBackpack(IInventory inventory, int slotIndex, int posX, int posY) + SlotAdventure(IInventory inventory, int slotIndex, int posX, int posY) { super(inventory, slotIndex, posX, posY); } diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/SlotBackpack.java b/src/main/java/com/darkona/adventurebackpack/inventory/SlotBackpack.java index c35b1124..2ae8a923 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/SlotBackpack.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/SlotBackpack.java @@ -8,7 +8,7 @@ /** * Created by Darkona on 12/10/2014. */ -public class SlotBackpack extends SlotAdventureBackpack +public class SlotBackpack extends SlotAdventure { private static final String[] FORBIDDEN_CLASSES = { // Adventure Backpack 2 @@ -29,7 +29,7 @@ public class SlotBackpack extends SlotAdventureBackpack // Project Red Exploration Backpacks "mrtjp.projectred.exploration.ItemBackpack",}; - SlotBackpack(IInventoryAdventureBackpack inventory, int slotIndex, int posX, int posY) + SlotBackpack(IInventoryBackpack inventory, int slotIndex, int posX, int posY) { super(inventory, slotIndex, posX, posY); } diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/SlotCraftMatrix.java b/src/main/java/com/darkona/adventurebackpack/inventory/SlotCraftMatrix.java index 98394628..6fa01d8a 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/SlotCraftMatrix.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/SlotCraftMatrix.java @@ -9,7 +9,7 @@ * * @author Ugachaga */ -public class SlotCraftMatrix extends SlotAdventureBackpack +public class SlotCraftMatrix extends SlotAdventure { SlotCraftMatrix(IInventory craftMatrix, int slotIndex, int posX, int posY) { diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/SlotFluid.java b/src/main/java/com/darkona/adventurebackpack/inventory/SlotFluid.java index 62753326..896956a5 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/SlotFluid.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/SlotFluid.java @@ -15,7 +15,7 @@ * * @author Darkona */ -public class SlotFluid extends SlotAdventureBackpack +public class SlotFluid extends SlotAdventure { SlotFluid(IInventory inventory, int slotIndex, int posX, int posY) { diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/SlotFuel.java b/src/main/java/com/darkona/adventurebackpack/inventory/SlotFuel.java index 5afb2a6c..7c6a2a8a 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/SlotFuel.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/SlotFuel.java @@ -9,7 +9,7 @@ * * @author Darkona */ -public class SlotFuel extends SlotAdventureBackpack +public class SlotFuel extends SlotAdventure { SlotFuel(IInventory inventory, int slotIndex, int posX, int posY) { diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/SlotTool.java b/src/main/java/com/darkona/adventurebackpack/inventory/SlotTool.java index fdd65d68..7772541c 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/SlotTool.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/SlotTool.java @@ -18,7 +18,7 @@ * * @author Darkona */ -public class SlotTool extends SlotAdventureBackpack +public class SlotTool extends SlotAdventure { private static final String[] VALID_TOOL_NAMES = {"axe", "crowbar", "drill", "grafter", "hammer", "scoop", "shovel", "wrench",}; diff --git a/src/main/java/com/darkona/adventurebackpack/network/CowAbilityPacket.java b/src/main/java/com/darkona/adventurebackpack/network/CowAbilityPacket.java index 9b68175c..a64dc148 100644 --- a/src/main/java/com/darkona/adventurebackpack/network/CowAbilityPacket.java +++ b/src/main/java/com/darkona/adventurebackpack/network/CowAbilityPacket.java @@ -13,7 +13,7 @@ import cpw.mods.fml.common.network.simpleimpl.MessageContext; import com.darkona.adventurebackpack.inventory.ContainerBackpack; -import com.darkona.adventurebackpack.inventory.IInventoryAdventureBackpack; +import com.darkona.adventurebackpack.inventory.IInventoryBackpack; /** * Created on 16/10/2014 @@ -35,7 +35,7 @@ public IMessage onMessage(CowAbilityMessage message, MessageContext ctx) { ContainerBackpack cont = ((ContainerBackpack) player.openContainer); cont.detectAndSendChanges(); - IInventoryAdventureBackpack inv = cont.getInventoryBackpack(); + IInventoryBackpack inv = cont.getInventoryBackpack(); switch (message.action) { case CONSUME_WHEAT: diff --git a/src/main/java/com/darkona/adventurebackpack/network/PlayerActionPacket.java b/src/main/java/com/darkona/adventurebackpack/network/PlayerActionPacket.java index 1d1e7074..e151899c 100644 --- a/src/main/java/com/darkona/adventurebackpack/network/PlayerActionPacket.java +++ b/src/main/java/com/darkona/adventurebackpack/network/PlayerActionPacket.java @@ -10,7 +10,7 @@ import com.darkona.adventurebackpack.common.Constants; import com.darkona.adventurebackpack.entity.EntityFriendlySpider; import com.darkona.adventurebackpack.inventory.ContainerBackpack; -import com.darkona.adventurebackpack.inventory.IInventoryAdventureBackpack; +import com.darkona.adventurebackpack.inventory.IInventoryBackpack; import com.darkona.adventurebackpack.inventory.InventoryCoalJetpack; import com.darkona.adventurebackpack.util.Wearing; @@ -56,7 +56,7 @@ public IMessage onMessage(ActionMessage message, MessageContext ctx) { if (player.openContainer instanceof ContainerBackpack) { - IInventoryAdventureBackpack inv = ((ContainerBackpack) player.openContainer).getInventoryBackpack(); + IInventoryBackpack inv = ((ContainerBackpack) player.openContainer).getInventoryBackpack(); if (message.type == GUI_HOLDING_SPACE) { diff --git a/src/main/java/com/darkona/adventurebackpack/util/Resources.java b/src/main/java/com/darkona/adventurebackpack/util/Resources.java index 17cef1df..6e38cdc2 100644 --- a/src/main/java/com/darkona/adventurebackpack/util/Resources.java +++ b/src/main/java/com/darkona/adventurebackpack/util/Resources.java @@ -3,7 +3,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; -import com.darkona.adventurebackpack.inventory.IInventoryAdventureBackpack; +import com.darkona.adventurebackpack.inventory.IInventoryBackpack; import com.darkona.adventurebackpack.reference.BackpackTypes; import com.darkona.adventurebackpack.reference.ModInfo; @@ -31,7 +31,7 @@ public static ResourceLocation backpackTextureFromString(String color) return new ResourceLocation(TEXTURE_LOCATION, "textures/backpack/" + color + ".png"); } - public static ResourceLocation backpackTextureFromSkin(IInventoryAdventureBackpack adventureBackpack) + public static ResourceLocation backpackTextureFromSkin(IInventoryBackpack adventureBackpack) { return new ResourceLocation(TEXTURE_LOCATION, "textures/backpack/" + BackpackTypes.getSkinName(adventureBackpack.getType()) + ".png"); } From 36012ea947ca284fe50a4da1fc03b2a96282c6bd Mon Sep 17 00:00:00 2001 From: Ugachaga Date: Mon, 26 Feb 2018 21:59:30 +0700 Subject: [PATCH 4/5] Another attack on chaos in inventory --- .../block/TileAdventure.java | 38 +- .../block/TileAdventureBackpack.java | 361 +++++++++--------- .../adventurebackpack/common/Constants.java | 1 + .../entity/EntityInflatableBoat.java | 179 +-------- .../handlers/TooltipEventHandler.java | 4 +- .../inventory/IInventoryBackpack.java | 9 +- .../inventory/IInventoryTanks.java | 8 +- .../inventory/InventoryAdventure.java | 55 ++- .../inventory/InventoryBackpack.java | 268 ++++++------- .../inventory/InventoryCoalJetpack.java | 106 ++--- .../inventory/InventoryCopterPack.java | 86 ++--- .../item/ItemAdventureBackpack.java | 2 +- .../item/ItemCoalJetpack.java | 2 - 13 files changed, 456 insertions(+), 663 deletions(-) diff --git a/src/main/java/com/darkona/adventurebackpack/block/TileAdventure.java b/src/main/java/com/darkona/adventurebackpack/block/TileAdventure.java index 85b85842..ad2c0aab 100644 --- a/src/main/java/com/darkona/adventurebackpack/block/TileAdventure.java +++ b/src/main/java/com/darkona/adventurebackpack/block/TileAdventure.java @@ -4,19 +4,22 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; import com.darkona.adventurebackpack.inventory.IInventoryTanks; +import static com.darkona.adventurebackpack.common.Constants.TAG_SLOT; + /** * Created on 26.02.2018 * * @author Ugachaga */ +@SuppressWarnings("WeakerAccess") abstract class TileAdventure extends TileEntity implements IInventoryTanks { - /** IInventory START --- */ - @Override public int getSizeInventory() { @@ -108,8 +111,6 @@ public boolean isItemValidForSlot(int slot, ItemStack stack) return false; // override when automation is allowed } - /* --- IInventory END || IAsynchronousInventory START --- */ - @Nullable @Override public ItemStack decrStackSizeNoSave(int slot, int quantity) @@ -143,7 +144,34 @@ public void setInventorySlotContentsNoSave(int slot, @Nullable ItemStack stack) getInventory()[slot] = stack; } - /* --- IAsynchronousInventory END || IInventoryTanks START --- */ + protected void setInventoryFromTagList(NBTTagList items) + { + for (int i = 0; i < items.tagCount(); i++) + { + NBTTagCompound item = items.getCompoundTagAt(i); + byte slot = item.getByte(TAG_SLOT); + if (slot >= 0 && slot < getSizeInventory()) + { + getInventory()[slot] = ItemStack.loadItemStackFromNBT(item); + } + } + } + protected NBTTagList getInventoryTagList() + { + NBTTagList items = new NBTTagList(); + for (int i = 0; i < getSizeInventory(); i++) + { + ItemStack stack = getInventory()[i]; + if (stack != null) + { + NBTTagCompound item = new NBTTagCompound(); + item.setByte(TAG_SLOT, (byte) i); + stack.writeToNBT(item); + items.appendTag(item); + } + } + return items; + } } diff --git a/src/main/java/com/darkona/adventurebackpack/block/TileAdventureBackpack.java b/src/main/java/com/darkona/adventurebackpack/block/TileAdventureBackpack.java index d1e9b364..70265c3b 100644 --- a/src/main/java/com/darkona/adventurebackpack/block/TileAdventureBackpack.java +++ b/src/main/java/com/darkona/adventurebackpack/block/TileAdventureBackpack.java @@ -53,6 +53,8 @@ */ public class TileAdventureBackpack extends TileAdventure implements IInventoryBackpack, ISidedInventory { + private static final int[] MAIN_INVENTORY_SLOTS = Utils.createSlotArray(0, Constants.INVENTORY_MAIN_SIZE); + private BackpackTypes type = BackpackTypes.STANDARD; private ItemStack[] inventory = new ItemStack[Constants.INVENTORY_SIZE]; private FluidTank leftTank = new FluidTank(Constants.BASIC_TANK_CAPACITY); @@ -69,9 +71,9 @@ public class TileAdventureBackpack extends TileAdventure implements IInventoryBa private int sbx; private int sby; private int sbz; - private int luminosity = 0; private int checkTime = 0; + private int luminosity = 0; public TileAdventureBackpack() { @@ -120,75 +122,6 @@ public NBTTagCompound getExtendedProperties() return extendedProperties; } - - - - public int getLuminosity() - { - return luminosity; - } - - @Override - public int getLastTime() - { - return lastTime; - } - - @Override - public void setLastTime(int lastTime) - { - this.lastTime = lastTime; - } - - @Override - public boolean isSleepingBagDeployed() - { - return this.sleepingBagDeployed; - } - - public boolean deploySleepingBag(EntityPlayer player, World world, int meta, int cX, int cY, int cZ) - { - if (world.isRemote) - return false; - - sleepingBagDeployed = CoordsUtils.spawnSleepingBag(player, world, meta, cX, cY, cZ); - if (sleepingBagDeployed) - { - sbx = cX; - sby = cY; - sbz = cZ; - sbdir = meta; - world.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord); - } - return sleepingBagDeployed; - } - - public void setSleepingBagDeployed(boolean state) - { - this.sleepingBagDeployed = state; - } - - public boolean removeSleepingBag(World world) - { - if (sleepingBagDeployed) - { - if (world.getBlock(sbx, sby, sbz) == ModBlocks.blockSleepingBag) - { - world.func_147480_a(sbx, sby, sbz, false); - this.sleepingBagDeployed = false; - markDirty(); - return true; - } - } - else - { - this.sleepingBagDeployed = false; - markDirty(); - } - return false; - } - - //=======================================================NBT======================================================// @Override public void readFromNBT(NBTTagCompound compound) { @@ -202,19 +135,6 @@ public void readFromNBT(NBTTagCompound compound) luminosity = compound.getInteger("lumen"); } - @Override - public void writeToNBT(NBTTagCompound compound) - { - super.writeToNBT(compound); - saveToNBT(compound); - compound.setBoolean("sleepingbag", sleepingBagDeployed); - compound.setInteger("sbx", sbx); - compound.setInteger("sby", sby); - compound.setInteger("sbz", sbz); - compound.setInteger("sbdir", sbdir); - compound.setInteger("lumen", luminosity); - } - @Override public void loadFromNBT(NBTTagCompound compound) { @@ -226,16 +146,7 @@ public void loadFromNBT(NBTTagCompound compound) NBTTagCompound backpackTag = compound.getCompoundTag(TAG_WEARABLE_COMPOUND); type = BackpackTypes.getType(backpackTag.getByte(TAG_TYPE)); - NBTTagList items = backpackTag.getTagList(TAG_INVENTORY, NBT.TAG_COMPOUND); - for (int i = 0; i < items.tagCount(); i++) - { - NBTTagCompound item = items.getCompoundTagAt(i); - byte slot = item.getByte("Slot"); - if (slot >= 0 && slot < inventory.length) - { - inventory[slot] = ItemStack.loadItemStackFromNBT(item); - } - } + setInventoryFromTagList(backpackTag.getTagList(TAG_INVENTORY, NBT.TAG_COMPOUND)); leftTank.readFromNBT(backpackTag.getCompoundTag(TAG_LEFT_TANK)); rightTank.readFromNBT(backpackTag.getCompoundTag(TAG_RIGHT_TANK)); extendedProperties = backpackTag.getCompoundTag(TAG_EXTENDED_COMPOUND); @@ -244,6 +155,19 @@ public void loadFromNBT(NBTTagCompound compound) lastTime = backpackTag.getInteger("lastTime"); } + @Override + public void writeToNBT(NBTTagCompound compound) + { + super.writeToNBT(compound); + saveToNBT(compound); + compound.setBoolean("sleepingbag", sleepingBagDeployed); + compound.setInteger("sbx", sbx); + compound.setInteger("sby", sby); + compound.setInteger("sbz", sbz); + compound.setInteger("sbdir", sbdir); + compound.setInteger("lumen", luminosity); + } + @Override public void saveToNBT(NBTTagCompound compound) { @@ -252,19 +176,7 @@ public void saveToNBT(NBTTagCompound compound) NBTTagCompound backpackTag = new NBTTagCompound(); backpackTag.setByte(TAG_TYPE, BackpackTypes.getMeta(type)); - NBTTagList items = new NBTTagList(); - for (int i = 0; i < inventory.length; i++) - { - ItemStack stack = inventory[i]; - if (stack != null) - { - NBTTagCompound item = new NBTTagCompound(); - item.setByte("Slot", (byte) i); - stack.writeToNBT(item); - items.appendTag(item); - } - } - backpackTag.setTag(TAG_INVENTORY, items); + backpackTag.setTag(TAG_INVENTORY, getInventoryTagList()); backpackTag.setTag(TAG_RIGHT_TANK, rightTank.writeToNBT(new NBTTagCompound())); backpackTag.setTag(TAG_LEFT_TANK, leftTank.writeToNBT(new NBTTagCompound())); backpackTag.setTag(TAG_EXTENDED_COMPOUND, extendedProperties); @@ -275,7 +187,29 @@ public void saveToNBT(NBTTagCompound compound) compound.setTag(TAG_WEARABLE_COMPOUND, backpackTag); } - //====================================================INVENTORY===================================================// + + + + + + + public int getLuminosity() + { + return luminosity; + } + + @Override + public int getLastTime() + { + return lastTime; + } + + @Override + public void setLastTime(int lastTime) + { + this.lastTime = lastTime; + } + @Override public void markDirty() @@ -284,8 +218,8 @@ public void markDirty() { if (inventory[i] != null) { - if ((i == BUCKET_IN_LEFT || i == BUCKET_IN_RIGHT) - || (i == BUCKET_OUT_LEFT || i == BUCKET_OUT_RIGHT) && inventory[i].getItem() instanceof ItemHose) + if ((i == BUCKET_OUT_LEFT || i == BUCKET_OUT_RIGHT) && inventory[i].getItem() instanceof ItemHose + || (i == BUCKET_IN_LEFT || i == BUCKET_IN_RIGHT)) { updateTankSlots(); } @@ -297,12 +231,12 @@ public void markDirty() @Override public boolean updateTankSlots() { - boolean result = false; + boolean changesMade = false; while (InventoryActions.transferContainerTank(this, getLeftTank(), BUCKET_IN_LEFT)) - result = true; + changesMade = true; while (InventoryActions.transferContainerTank(this, getRightTank(), BUCKET_IN_RIGHT)) - result = true; - return result; + changesMade = true; + return changesMade; } @Override @@ -317,61 +251,39 @@ public void consumeInventoryItem(Item item) InventoryActions.consumeItemInInventory(this, item); } - //===================================================TILE ENTITY==================================================// - //SEND SYNC PACKET @Override - public Packet getDescriptionPacket() + public void dirtyTanks() { - NBTTagCompound compound = new NBTTagCompound(); - writeToNBT(compound); - return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, compound); + } - //RECEIV SYNC PACKET - This is necessary for the TileEntity to load the nbt as soon as it is loaded and be rendered - //properly when the custom renderer reads it @Override - public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) + public void dirtyTime() { - super.onDataPacket(net, pkt); - readFromNBT(pkt.func_148857_g()); + } @Override - public void updateEntity() + public void dirtyExtended() + { + + } + + @Override + public void dirtyInventory() { - //Execute this backpack's ability. No, seriously. You might not infer that from the code. Just sayin' - if (ConfigHandler.backpackAbilities && BackpackTypes.hasProperty(type, BackpackTypes.Props.TILE)) - { - BackpackAbilities.backpackAbilities.executeTileAbility(this.worldObj, this); - } - //Check for backpack luminosity and a deployed sleeping bag, just in case because i'm super paranoid. - if (checkTime == 0) - { - int lastLumen = luminosity; - int left = (leftTank.getFluid() != null) ? leftTank.getFluid().getFluid().getLuminosity() : 0; - int right = (rightTank.getFluid() != null) ? rightTank.getFluid().getFluid().getLuminosity() : 0; - luminosity = Math.max(left, right); - if (luminosity != lastLumen) - { - int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); - worldObj.setBlock(xCoord, yCoord, zCoord, ModBlocks.blockBackpack, meta, 3); - worldObj.setLightValue(EnumSkyBlock.Block, xCoord, yCoord, zCoord, luminosity); - } - if (worldObj.getBlock(sbx, sby, sbz) != ModBlocks.blockSleepingBag) - { - sleepingBagDeployed = false; - } - checkTime = 20; - } - else - { - checkTime--; - } } - //=====================================================BACKPACK===================================================// + + + + + + + + // Logic: from tile to item public boolean equip(World world, EntityPlayer player, int x, int y, int z) { ItemStack stacky = new ItemStack(ModItems.adventureBackpack, 1); @@ -381,23 +293,16 @@ public boolean equip(World world, EntityPlayer player, int x, int y, int z) { if (Wearing.isWearingWearable(player)) { - if (Wearing.isWearingBackpack(player)) - { - player.addChatComponentMessage(new ChatComponentTranslation("adventurebackpack:messages.already.equipped.backpack")); - } - else if (Wearing.isWearingCopter(player)) - { - player.addChatComponentMessage(new ChatComponentTranslation("adventurebackpack:messages.already.equipped.copterpack")); - } + String msg = "backpack"; + if (Wearing.isWearingCopter(player)) + msg = "copterpack"; else if (Wearing.isWearingJetpack(player)) - { - player.addChatComponentMessage(new ChatComponentTranslation("adventurebackpack:messages.already.equipped.jetpack")); - } + msg = "jetpack"; + player.addChatComponentMessage(new ChatComponentTranslation("adventurebackpack:messages.already.equipped." + msg)); } + if (!player.inventory.addItemStackToInventory(stacky)) - { return drop(world, player, x, y, z); - } } return true; } @@ -431,66 +336,142 @@ private void transferToItemStack(ItemStack stack) stack.setItemDamage(BackpackTypes.getMeta(type)); // save the meta, cuz why not } + // Sleeping Bag @Override - public void dirtyTanks() + public boolean isSleepingBagDeployed() { + return this.sleepingBagDeployed; + } + public void setSleepingBagDeployed(boolean state) + { + this.sleepingBagDeployed = state; } - @Override - public void dirtyTime() + public boolean deploySleepingBag(EntityPlayer player, World world, int meta, int cX, int cY, int cZ) { + if (world.isRemote) + return false; + sleepingBagDeployed = CoordsUtils.spawnSleepingBag(player, world, meta, cX, cY, cZ); + if (sleepingBagDeployed) + { + sbx = cX; + sby = cY; + sbz = cZ; + sbdir = meta; + world.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord); + } + return sleepingBagDeployed; } - @Override - public void dirtyExtended() + public boolean removeSleepingBag(World world) { - + if (sleepingBagDeployed) + { + if (world.getBlock(sbx, sby, sbz) == ModBlocks.blockSleepingBag) + { + world.func_147480_a(sbx, sby, sbz, false); + this.sleepingBagDeployed = false; + markDirty(); + return true; + } + } + else + { + this.sleepingBagDeployed = false; + markDirty(); + } + return false; } + // Automation @Override - public void dirtyInventory() + public int[] getAccessibleSlotsFromSide(int side) { + if (GeneralReference.isDimensionAllowed(worldObj.provider.dimensionId)) + return MAIN_INVENTORY_SLOTS; + return null; } - // AUTOMATION settings + @Override + public boolean canInsertItem(int slot, ItemStack item, int side) + { + return this.isItemValidForSlot(slot, item); + } @Override public boolean isItemValidForSlot(int slot, ItemStack stack) { if (slot <= Constants.END_OF_INVENTORY) - { return SlotBackpack.isValidItem(stack); - } + return (slot == TOOL_UPPER || slot == TOOL_LOWER) && SlotTool.isValidTool(stack); } - //=================================================ISidedInventory================================================// - - private static final int[] SLOTS = Utils.createSlotArray(0, Constants.INVENTORY_MAIN_SIZE); + @Override + public boolean canExtractItem(int slot, ItemStack item, int side) + { + return true; + } + /** + * Send sync packet. This is necessary for the TileEntity to load the nbt as soon as it is loaded + * and be rendered properly when the custom renderer reads it + */ @Override - public int[] getAccessibleSlotsFromSide(int side) + public Packet getDescriptionPacket() { - if (GeneralReference.isDimensionAllowed(this.worldObj.provider.dimensionId)) - { - return SLOTS; - } - return null; + NBTTagCompound compound = new NBTTagCompound(); + writeToNBT(compound); + return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, compound); } + /** + * Receive sync packet. This is necessary for the TileEntity to load the nbt as soon as it is loaded + * and be rendered properly when the custom renderer reads it + */ @Override - public boolean canInsertItem(int slot, ItemStack item, int side) + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { - return this.isItemValidForSlot(slot, item); + super.onDataPacket(net, pkt); + readFromNBT(pkt.func_148857_g()); } + // Ticking at World.updateEntities() @Override - public boolean canExtractItem(int slot, ItemStack item, int side) + public void updateEntity() { - return true; + //Execute this backpack's TILE ability. No, seriously. You might not infer that from the code. Just sayin' + if (ConfigHandler.backpackAbilities && BackpackTypes.hasProperty(type, BackpackTypes.Props.TILE)) + { + BackpackAbilities.backpackAbilities.executeTileAbility(this.worldObj, this); + } + + //Check for backpack luminosity and a deployed sleeping bag, just in case because i'm super paranoid. + if (checkTime > 0) + { + int lastLumen = luminosity; + int left = (leftTank.getFluid() != null) ? leftTank.getFluid().getFluid().getLuminosity() : 0; + int right = (rightTank.getFluid() != null) ? rightTank.getFluid().getFluid().getLuminosity() : 0; + luminosity = Math.max(left, right); + if (luminosity != lastLumen) + { + int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); + worldObj.setBlock(xCoord, yCoord, zCoord, ModBlocks.blockBackpack, meta, 3); + worldObj.setLightValue(EnumSkyBlock.Block, xCoord, yCoord, zCoord, luminosity); + } + if (worldObj.getBlock(sbx, sby, sbz) != ModBlocks.blockSleepingBag) + { + sleepingBagDeployed = false; + } + checkTime = 20; + } + else + { + checkTime--; + } } private void convertFromOldNBTFormat(NBTTagCompound compound) // backwards compatibility diff --git a/src/main/java/com/darkona/adventurebackpack/common/Constants.java b/src/main/java/com/darkona/adventurebackpack/common/Constants.java index 49cc2657..9ce11ba1 100644 --- a/src/main/java/com/darkona/adventurebackpack/common/Constants.java +++ b/src/main/java/com/darkona/adventurebackpack/common/Constants.java @@ -21,6 +21,7 @@ public enum Source //TODO move to separate class? public static final String TAG_WEARABLE_COMPOUND = "wearableData"; public static final String TAG_EXTENDED_COMPOUND = "extendedProperties"; public static final String TAG_INVENTORY = "inventory"; + public static final String TAG_SLOT = "Slot"; /** * ### Adventure Backpack ### diff --git a/src/main/java/com/darkona/adventurebackpack/entity/EntityInflatableBoat.java b/src/main/java/com/darkona/adventurebackpack/entity/EntityInflatableBoat.java index b710babc..e3c597b4 100644 --- a/src/main/java/com/darkona/adventurebackpack/entity/EntityInflatableBoat.java +++ b/src/main/java/com/darkona/adventurebackpack/entity/EntityInflatableBoat.java @@ -25,14 +25,13 @@ import cpw.mods.fml.relauncher.SideOnly; import com.darkona.adventurebackpack.init.ModItems; -import com.darkona.adventurebackpack.inventory.IInventoryTanks; /** * Created on 05/01/2015 * * @author Darkona */ -public class EntityInflatableBoat extends EntityBoat implements IInventoryTanks, IEntityAdditionalSpawnData +public class EntityInflatableBoat extends EntityBoat implements /*IInventoryTanks, */IEntityAdditionalSpawnData { private FluidTank fuelTank; private boolean isBoatEmpty; @@ -54,6 +53,8 @@ public class EntityInflatableBoat extends EntityBoat implements IInventoryTanks, private boolean motorized; + // boat is in EARLY ALPHA stage + public boolean isMotorized() { return motorized; @@ -469,180 +470,6 @@ public void setMotorized(boolean motorized) this.motorized = motorized; } - @Override - public boolean updateTankSlots() - { - return false; - } - - @Override - public void loadFromNBT(NBTTagCompound compound) - { - - } - - @Override - public void saveToNBT(NBTTagCompound compound) - { - - } - - @Override - public ItemStack[] getInventory() - { - return new ItemStack[0]; - } - - @Override - public FluidTank[] getTanksArray() - { - return new FluidTank[0]; - } - - @Override - public int[] getSlotsOnClosingArray() - { - return new int[0]; - } - - @Override - public void dirtyInventory() - { - - } - - @Override - public void dirtyTanks() - { - - } - - @Override - public void setInventorySlotContentsNoSave(int slot, ItemStack stack) - { - - } - - @Override - public ItemStack decrStackSizeNoSave(int slot, int amount) - { - return null; - } - - /** - * Returns the number of slots in the inventory. - */ - @Override - public int getSizeInventory() - { - return 0; - } - - /** - * Returns the stack in slot i - */ - @Override - public ItemStack getStackInSlot(int p_70301_1_) - { - return null; - } - - /** - * Removes from an inventory slot (first arg) up to a specified number (second arg) of items and returns them in a - * new stack. - */ - @Override - public ItemStack decrStackSize(int p_70298_1_, int p_70298_2_) - { - return null; - } - - /** - * When some containers are closed they call this on each slot, then drop whatever it returns as an EntityItem - - * like when you close a workbench GUI. - */ - @Override - public ItemStack getStackInSlotOnClosing(int p_70304_1_) - { - return null; - } - - /** - * Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections). - */ - @Override - public void setInventorySlotContents(int p_70299_1_, ItemStack p_70299_2_) - { - - } - - /** - * Returns the name of the inventory - */ - @Override - public String getInventoryName() - { - return null; - } - - /** - * Returns if the inventory is named - */ - @Override - public boolean hasCustomInventoryName() - { - return false; - } - - /** - * Returns the maximum stack size for a inventory slot. - */ - @Override - public int getInventoryStackLimit() - { - return 0; - } - - /** - * For tile entities, ensures the chunk containing the tile entity is saved to disk later - the game won't think it - * hasn't changed and skip it. - */ - @Override - public void markDirty() - { - - } - - /** - * Do not make give this method the name canInteractWith because it clashes with Container - */ - @Override - public boolean isUseableByPlayer(EntityPlayer p_70300_1_) - { - return false; - } - - @Override - public void openInventory() - { - - } - - @Override - public void closeInventory() - { - - } - - /** - * Returns true if automation is allowed to insert the given stack (ignoring stack size) into the given slot. - */ - @Override - public boolean isItemValidForSlot(int p_94041_1_, ItemStack p_94041_2_) - { - return false; - } - @Override public void writeSpawnData(ByteBuf data) { diff --git a/src/main/java/com/darkona/adventurebackpack/handlers/TooltipEventHandler.java b/src/main/java/com/darkona/adventurebackpack/handlers/TooltipEventHandler.java index e72cd703..5d88ff69 100644 --- a/src/main/java/com/darkona/adventurebackpack/handlers/TooltipEventHandler.java +++ b/src/main/java/com/darkona/adventurebackpack/handlers/TooltipEventHandler.java @@ -248,7 +248,7 @@ public static String inventoryTooltip(NBTTagList itemList) boolean toolSlotL = false; for (int i = itemCount - 1; i >= 0; i--) { - int slotAtI = itemList.getCompoundTagAt(i).getInteger("Slot"); + int slotAtI = itemList.getCompoundTagAt(i).getInteger(Constants.TAG_SLOT); if (slotAtI < Constants.TOOL_UPPER) break; else if (slotAtI == Constants.TOOL_UPPER) @@ -339,7 +339,7 @@ private static String slotStackTooltip(NBTTagList itemList, int slot) int slotID, slotMeta, slotCount = slotID = slotMeta = 0; for (int i = 0; i <= slot; i++) { - int slotAtI = itemList.getCompoundTagAt(i).getInteger("Slot"); + int slotAtI = itemList.getCompoundTagAt(i).getInteger(Constants.TAG_SLOT); if (slotAtI == slot) { slotID = itemList.getCompoundTagAt(i).getInteger("id"); diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/IInventoryBackpack.java b/src/main/java/com/darkona/adventurebackpack/inventory/IInventoryBackpack.java index f83c8848..a50550ee 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/IInventoryBackpack.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/IInventoryBackpack.java @@ -19,12 +19,8 @@ public interface IInventoryBackpack extends IInventoryTanks NBTTagCompound getExtendedProperties(); //TODO move to IInventoryTanks to use with Copter/Jet? - //TODO - - boolean isSleepingBagDeployed(); - int getLastTime(); boolean hasItem(Item item); @@ -36,4 +32,9 @@ public interface IInventoryBackpack extends IInventoryTanks void dirtyTime(); void dirtyExtended(); + + + + + boolean isSleepingBagDeployed(); } diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/IInventoryTanks.java b/src/main/java/com/darkona/adventurebackpack/inventory/IInventoryTanks.java index 1d93b7e8..a11aa3fb 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/IInventoryTanks.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/IInventoryTanks.java @@ -17,17 +17,13 @@ public interface IInventoryTanks extends IAsynchronousInventory int[] getSlotsOnClosingArray(); - //TODO - - - void loadFromNBT(NBTTagCompound compound); void saveToNBT(NBTTagCompound compound); + void dirtyInventory(); + boolean updateTankSlots(); void dirtyTanks(); - - void dirtyInventory(); } diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryAdventure.java b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryAdventure.java index c517e47c..b5c80b24 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryAdventure.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryAdventure.java @@ -4,18 +4,23 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; + +import static com.darkona.adventurebackpack.common.Constants.TAG_INVENTORY; +import static com.darkona.adventurebackpack.common.Constants.TAG_SLOT; +import static com.darkona.adventurebackpack.common.Constants.TAG_WEARABLE_COMPOUND; /** * Created on 15.07.2017 * * @author Ugachaga */ +@SuppressWarnings("WeakerAccess") abstract class InventoryAdventure implements IInventoryTanks { ItemStack containerStack; - /** IInventory START --- */ - @Override public int getSizeInventory() { @@ -110,8 +115,6 @@ public boolean isItemValidForSlot(int slot, ItemStack stack) return false; } - /* --- IInventory END || IAsynchronousInventory START --- */ - @Nullable @Override public ItemStack decrStackSizeNoSave(int slot, int quantity) @@ -145,8 +148,48 @@ public void setInventorySlotContentsNoSave(int slot, @Nullable ItemStack stack) getInventory()[slot] = stack; } - /* --- IAsynchronousInventory END || IInventoryTanks START --- */ + @Override + public void dirtyInventory() + { + if (updateTankSlots()) //TODO this can be generalized too + dirtyTanks(); //TODO and also this + + getWearableCompound().removeTag(TAG_INVENTORY); //TODO why? sync related? + getWearableCompound().setTag(TAG_INVENTORY, getInventoryTagList()); + } + + protected NBTTagCompound getWearableCompound() + { + return containerStack.stackTagCompound.getCompoundTag(TAG_WEARABLE_COMPOUND); + } - //TODO + protected void setInventoryFromTagList(NBTTagList items) + { + for (int i = 0; i < items.tagCount(); i++) + { + NBTTagCompound item = items.getCompoundTagAt(i); + byte slot = item.getByte(TAG_SLOT); + if (slot >= 0 && slot < getSizeInventory()) + { + getInventory()[slot] = ItemStack.loadItemStackFromNBT(item); + } + } + } + protected NBTTagList getInventoryTagList() + { + NBTTagList items = new NBTTagList(); + for (int i = 0; i < getSizeInventory(); i++) + { + ItemStack stack = getInventory()[i]; + if (stack != null) + { + NBTTagCompound item = new NBTTagCompound(); + item.setByte(TAG_SLOT, (byte) i); + stack.writeToNBT(item); + items.appendTag(item); + } + } + return items; + } } diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryBackpack.java b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryBackpack.java index 006909ad..910d825d 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryBackpack.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryBackpack.java @@ -104,81 +104,6 @@ public NBTTagCompound getExtendedProperties() return extendedProperties; } - - - @Override - public int getLastTime() - { - return this.lastTime; - } - - @Override - public boolean hasItem(Item item) - { - return InventoryActions.hasItem(this, item); - } - - @Override - public void consumeInventoryItem(Item item) - { - InventoryActions.consumeItemInInventory(this, item); - } - - @Override - public boolean isSleepingBagDeployed() - { - return sleepingBagDeployed; - } - - public boolean deploySleepingBag(EntityPlayer player, World world, int meta, int cX, int cY, int cZ) - { - if (world.isRemote) - return false; - - if (sleepingBagDeployed) - removeSleepingBag(world); - - sleepingBagDeployed = CoordsUtils.spawnSleepingBag(player, world, meta, cX, cY, cZ); - if (sleepingBagDeployed) - { - sleepingBagX = cX; - sleepingBagY = cY; - sleepingBagZ = cZ; - markDirty(); - } - return sleepingBagDeployed; - } - - public void removeSleepingBag(World world) - { - if (this.sleepingBagDeployed) - { - if (world.getBlock(sleepingBagX, sleepingBagY, sleepingBagZ) == ModBlocks.blockSleepingBag) - world.func_147480_a(sleepingBagX, sleepingBagY, sleepingBagZ, false); - } - this.sleepingBagDeployed = false; - markDirty(); - } - - @Override - public void setLastTime(int time) - { - this.lastTime = time; - } - - @Override - public void dirtyTime() - { - containerStack.stackTagCompound.getCompoundTag(TAG_WEARABLE_COMPOUND).setInteger("lastTime", lastTime); - } - - @Override - public void dirtyExtended() //TODO is it redundant? - { - containerStack.stackTagCompound.getCompoundTag(TAG_WEARABLE_COMPOUND).removeTag(TAG_EXTENDED_COMPOUND); - containerStack.stackTagCompound.getCompoundTag(TAG_WEARABLE_COMPOUND).setTag(TAG_EXTENDED_COMPOUND, extendedProperties); - } - @Override public void loadFromNBT(NBTTagCompound compound) { @@ -187,28 +112,11 @@ public void loadFromNBT(NBTTagCompound compound) NBTTagCompound backpackTag = compound.getCompoundTag(TAG_WEARABLE_COMPOUND); type = BackpackTypes.getType(backpackTag.getByte(TAG_TYPE)); - NBTTagList items = backpackTag.getTagList(TAG_INVENTORY, NBT.TAG_COMPOUND); - for (int i = 0; i < items.tagCount(); i++) - { - NBTTagCompound item = items.getCompoundTagAt(i); - byte slot = item.getByte("Slot"); - if (slot >= 0 && slot < inventory.length) - { - inventory[slot] = ItemStack.loadItemStackFromNBT(item); - } - } + setInventoryFromTagList(backpackTag.getTagList(TAG_INVENTORY, NBT.TAG_COMPOUND)); leftTank.readFromNBT(backpackTag.getCompoundTag(TAG_LEFT_TANK)); rightTank.readFromNBT(backpackTag.getCompoundTag(TAG_RIGHT_TANK)); extendedProperties = backpackTag.getCompoundTag(TAG_EXTENDED_COMPOUND); - { - sleepingBagDeployed = extendedProperties.getBoolean(TAG_IS_SLEEPING_BAG); - if (sleepingBagDeployed) - { - sleepingBagX = extendedProperties.getInteger(TAG_SLEEPING_BAG_X); - sleepingBagY = extendedProperties.getInteger(TAG_SLEEPING_BAG_Y); - sleepingBagZ = extendedProperties.getInteger(TAG_SLEEPING_BAG_Z); - } - } + loadSleepingBag(); disableCycling = backpackTag.getBoolean(TAG_DISABLE_CYCLING); disableNVision = backpackTag.getBoolean(TAG_DISABLE_NVISION); lastTime = backpackTag.getInteger("lastTime"); @@ -219,39 +127,11 @@ public void saveToNBT(NBTTagCompound compound) { NBTTagCompound backpackTag = new NBTTagCompound(); backpackTag.setByte(TAG_TYPE, BackpackTypes.getMeta(type)); - NBTTagList items = new NBTTagList(); - for (int i = 0; i < inventory.length; i++) - { - ItemStack stack = inventory[i]; - if (stack != null) - { - NBTTagCompound item = new NBTTagCompound(); - item.setByte("Slot", (byte) i); - stack.writeToNBT(item); - items.appendTag(item); - } - } - backpackTag.removeTag(TAG_INVENTORY); - backpackTag.setTag(TAG_INVENTORY, items); + backpackTag.setTag(TAG_INVENTORY, getInventoryTagList()); backpackTag.setTag(TAG_RIGHT_TANK, rightTank.writeToNBT(new NBTTagCompound())); backpackTag.setTag(TAG_LEFT_TANK, leftTank.writeToNBT(new NBTTagCompound())); backpackTag.setTag(TAG_EXTENDED_COMPOUND, extendedProperties); - { - if (sleepingBagDeployed) - { - extendedProperties.setBoolean(TAG_IS_SLEEPING_BAG, sleepingBagDeployed); - extendedProperties.setInteger(TAG_SLEEPING_BAG_X, sleepingBagX); - extendedProperties.setInteger(TAG_SLEEPING_BAG_Y, sleepingBagY); - extendedProperties.setInteger(TAG_SLEEPING_BAG_Z, sleepingBagZ); - } - else - { - extendedProperties.removeTag(TAG_IS_SLEEPING_BAG); - extendedProperties.removeTag(TAG_SLEEPING_BAG_X); - extendedProperties.removeTag(TAG_SLEEPING_BAG_Y); - extendedProperties.removeTag(TAG_SLEEPING_BAG_Z); - } - } + saveSleepingBag(); backpackTag.setBoolean(TAG_DISABLE_CYCLING, disableCycling); backpackTag.setBoolean(TAG_DISABLE_NVISION, disableNVision); backpackTag.setInteger("lastTime", lastTime); @@ -262,42 +142,59 @@ public void saveToNBT(NBTTagCompound compound) @Override public boolean updateTankSlots() { - boolean result = false; + boolean changesMade = false; while (InventoryActions.transferContainerTank(this, getLeftTank(), BUCKET_IN_LEFT)) - result = true; + changesMade = true; while (InventoryActions.transferContainerTank(this, getRightTank(), BUCKET_IN_RIGHT)) - result = true; - return result; + changesMade = true; + return changesMade; } @Override - public void dirtyInventory() + public void dirtyTanks() { - if (updateTankSlots()) - { - dirtyTanks(); - } - NBTTagList items = new NBTTagList(); - for (int i = 0; i < inventory.length; i++) - { - ItemStack stack = inventory[i]; - if (stack != null) - { - NBTTagCompound item = new NBTTagCompound(); - item.setByte("Slot", (byte) i); - stack.writeToNBT(item); - items.appendTag(item); - } - } - containerStack.stackTagCompound.getCompoundTag(TAG_WEARABLE_COMPOUND).removeTag(TAG_INVENTORY); - containerStack.stackTagCompound.getCompoundTag(TAG_WEARABLE_COMPOUND).setTag(TAG_INVENTORY, items); + getWearableCompound().setTag(TAG_LEFT_TANK, leftTank.writeToNBT(new NBTTagCompound())); + getWearableCompound().setTag(TAG_RIGHT_TANK, rightTank.writeToNBT(new NBTTagCompound())); + } + + + + + @Override + public int getLastTime() + { + return this.lastTime; } @Override - public void dirtyTanks() + public boolean hasItem(Item item) + { + return InventoryActions.hasItem(this, item); + } + + @Override + public void consumeInventoryItem(Item item) + { + InventoryActions.consumeItemInInventory(this, item); + } + + @Override + public void setLastTime(int time) + { + this.lastTime = time; + } + + @Override + public void dirtyTime() { - containerStack.stackTagCompound.getCompoundTag(TAG_WEARABLE_COMPOUND).setTag(TAG_LEFT_TANK, leftTank.writeToNBT(new NBTTagCompound())); - containerStack.stackTagCompound.getCompoundTag(TAG_WEARABLE_COMPOUND).setTag(TAG_RIGHT_TANK, rightTank.writeToNBT(new NBTTagCompound())); + getWearableCompound().setInteger("lastTime", lastTime); + } + + @Override + public void dirtyExtended() //TODO is it redundant? + { + getWearableCompound().removeTag(TAG_EXTENDED_COMPOUND); + getWearableCompound().setTag(TAG_EXTENDED_COMPOUND, extendedProperties); } public boolean hasBlock(Block block) @@ -305,6 +202,11 @@ public boolean hasBlock(Block block) return InventoryActions.hasBlockItem(this, block); } + + + + + public boolean getDisableCycling() { return disableCycling; @@ -325,6 +227,72 @@ public void setDisableNVision(boolean b) this.disableNVision = b; } + // Sleeping Bag + @Override + public boolean isSleepingBagDeployed() + { + return sleepingBagDeployed; + } + + private void loadSleepingBag() + { + sleepingBagDeployed = extendedProperties.getBoolean(TAG_IS_SLEEPING_BAG); + if (sleepingBagDeployed) + { + sleepingBagX = extendedProperties.getInteger(TAG_SLEEPING_BAG_X); + sleepingBagY = extendedProperties.getInteger(TAG_SLEEPING_BAG_Y); + sleepingBagZ = extendedProperties.getInteger(TAG_SLEEPING_BAG_Z); + } + } + + private void saveSleepingBag() + { + if (sleepingBagDeployed) + { + extendedProperties.setBoolean(TAG_IS_SLEEPING_BAG, sleepingBagDeployed); + extendedProperties.setInteger(TAG_SLEEPING_BAG_X, sleepingBagX); + extendedProperties.setInteger(TAG_SLEEPING_BAG_Y, sleepingBagY); + extendedProperties.setInteger(TAG_SLEEPING_BAG_Z, sleepingBagZ); + } + else + { + extendedProperties.removeTag(TAG_IS_SLEEPING_BAG); + extendedProperties.removeTag(TAG_SLEEPING_BAG_X); + extendedProperties.removeTag(TAG_SLEEPING_BAG_Y); + extendedProperties.removeTag(TAG_SLEEPING_BAG_Z); + } + } + + public boolean deploySleepingBag(EntityPlayer player, World world, int meta, int cX, int cY, int cZ) + { + if (world.isRemote) + return false; + + if (sleepingBagDeployed) + removeSleepingBag(world); + + sleepingBagDeployed = CoordsUtils.spawnSleepingBag(player, world, meta, cX, cY, cZ); + if (sleepingBagDeployed) + { + sleepingBagX = cX; + sleepingBagY = cY; + sleepingBagZ = cZ; + markDirty(); + } + return sleepingBagDeployed; + } + + public void removeSleepingBag(World world) + { + if (this.sleepingBagDeployed) + { + if (world.getBlock(sleepingBagX, sleepingBagY, sleepingBagZ) == ModBlocks.blockSleepingBag) + world.func_147480_a(sleepingBagX, sleepingBagY, sleepingBagZ, false); + } + this.sleepingBagDeployed = false; + markDirty(); + } + private void detectAndConvertFromOldNBTFormat(NBTTagCompound compound) // backwards compatibility { if (compound == null || !compound.hasKey("backpackData")) diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryCoalJetpack.java b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryCoalJetpack.java index 7d4964e2..e43df050 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryCoalJetpack.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryCoalJetpack.java @@ -9,12 +9,12 @@ import com.darkona.adventurebackpack.common.Constants; -import static com.darkona.adventurebackpack.common.Constants.TAG_INVENTORY; import static com.darkona.adventurebackpack.common.Constants.Jetpack.BUCKET_IN; import static com.darkona.adventurebackpack.common.Constants.Jetpack.BUCKET_OUT; import static com.darkona.adventurebackpack.common.Constants.Jetpack.FUEL_SLOT; import static com.darkona.adventurebackpack.common.Constants.Jetpack.TAG_STEAM_TANK; import static com.darkona.adventurebackpack.common.Constants.Jetpack.TAG_WATER_TANK; +import static com.darkona.adventurebackpack.common.Constants.TAG_INVENTORY; import static com.darkona.adventurebackpack.common.Constants.TAG_WEARABLE_COMPOUND; /** @@ -37,7 +37,6 @@ public class InventoryCoalJetpack extends InventoryAdventure private int temperature = 25; private int burnTicks = 0; private int coolTicks = 5000; - private long systemTime = 0; public InventoryCoalJetpack(final ItemStack jetpack) { @@ -74,116 +73,76 @@ public int[] getSlotsOnClosingArray() return new int[]{BUCKET_IN, BUCKET_OUT}; } - - public int getBurnTimeRemainingScaled(int scale) - { - if (this.currentItemBurnTime == 0) - { - this.currentItemBurnTime = 200; - } - - return this.burnTicks * scale / this.currentItemBurnTime; - } - @Override public void loadFromNBT(NBTTagCompound compound) { NBTTagCompound jetpackTag = compound.getCompoundTag(TAG_WEARABLE_COMPOUND); + setInventoryFromTagList(jetpackTag.getTagList(TAG_INVENTORY, NBT.TAG_COMPOUND)); waterTank.readFromNBT(jetpackTag.getCompoundTag(TAG_WATER_TANK)); steamTank.readFromNBT(jetpackTag.getCompoundTag(TAG_STEAM_TANK)); temperature = jetpackTag.getInteger("temperature"); status = jetpackTag.getBoolean("status"); burnTicks = jetpackTag.getInteger("burnTicks"); coolTicks = jetpackTag.getInteger("coolTicks"); - systemTime = jetpackTag.getLong("systemTime"); inUse = jetpackTag.getBoolean("inUse"); boiling = jetpackTag.getBoolean("boiling"); leaking = jetpackTag.getBoolean("leaking"); currentItemBurnTime = jetpackTag.getInteger("currentBurn"); - NBTTagList items = jetpackTag.getTagList(TAG_INVENTORY, NBT.TAG_COMPOUND); - for (int i = 0; i < items.tagCount(); i++) - { - NBTTagCompound item = items.getCompoundTagAt(i); - byte slot = item.getByte("Slot"); - if (slot >= 0 && slot < inventory.length) - { - inventory[slot] = ItemStack.loadItemStackFromNBT(item); - } - } } @Override public void saveToNBT(NBTTagCompound compound) { NBTTagCompound jetpackTag = compound.getCompoundTag(TAG_WEARABLE_COMPOUND); + jetpackTag.setTag(TAG_INVENTORY, getInventoryTagList()); jetpackTag.setTag(TAG_WATER_TANK, waterTank.writeToNBT(new NBTTagCompound())); jetpackTag.setTag(TAG_STEAM_TANK, steamTank.writeToNBT(new NBTTagCompound())); jetpackTag.setInteger("temperature", temperature); jetpackTag.setBoolean("status", status); jetpackTag.setInteger("burnTicks", burnTicks); jetpackTag.setInteger("coolTicks", coolTicks); - jetpackTag.setLong("systemTime", systemTime); jetpackTag.setBoolean("inUse", inUse); jetpackTag.setBoolean("boiling", boiling); jetpackTag.setBoolean("leaking", leaking); jetpackTag.setInteger("currentBurn", currentItemBurnTime); - NBTTagList items = new NBTTagList(); - for (int i = 0; i < inventory.length; i++) - { - ItemStack stack = inventory[i]; - if (stack != null) - { - NBTTagCompound item = new NBTTagCompound(); - item.setByte("Slot", (byte) i); - stack.writeToNBT(item); - items.appendTag(item); - } - } - jetpackTag.setTag(TAG_INVENTORY, items); compound.setTag(TAG_WEARABLE_COMPOUND, jetpackTag); } @Override public boolean updateTankSlots() { - boolean result = false; + boolean changesMade = false; while (InventoryActions.transferContainerTank(this, getWaterTank(), BUCKET_IN)) - result = true; - return result; + changesMade = true; + return changesMade; } @Override - public void dirtyInventory() + public void dirtyTanks() { - if (updateTankSlots()) - { - dirtyTanks(); - } - NBTTagList items = new NBTTagList(); - for (int i = 0; i < inventory.length; i++) - { - ItemStack stack = inventory[i]; - if (stack != null) - { - NBTTagCompound item = new NBTTagCompound(); - item.setByte("Slot", (byte) i); - stack.writeToNBT(item); - items.appendTag(item); - } - } - containerStack.stackTagCompound.getCompoundTag(TAG_WEARABLE_COMPOUND).setTag(TAG_INVENTORY, items); + getWearableCompound().setTag(TAG_WATER_TANK, waterTank.writeToNBT(new NBTTagCompound())); + getWearableCompound().setTag(TAG_STEAM_TANK, steamTank.writeToNBT(new NBTTagCompound())); } - @Override - public void dirtyTanks() + + + + + + + public int getBurnTimeRemainingScaled(int scale) { - containerStack.stackTagCompound.getCompoundTag(TAG_WEARABLE_COMPOUND).setTag(TAG_WATER_TANK, waterTank.writeToNBT(new NBTTagCompound())); - containerStack.stackTagCompound.getCompoundTag(TAG_WEARABLE_COMPOUND).setTag(TAG_STEAM_TANK, steamTank.writeToNBT(new NBTTagCompound())); + if (this.currentItemBurnTime == 0) + { + this.currentItemBurnTime = 200; + } + + return this.burnTicks * scale / this.currentItemBurnTime; } public void dirtyBoiler() { - NBTTagCompound jetpackTag = containerStack.stackTagCompound.getCompoundTag(TAG_WEARABLE_COMPOUND); + NBTTagCompound jetpackTag = getWearableCompound(); jetpackTag.setBoolean("boiling", boiling); jetpackTag.setBoolean("leaking", leaking); jetpackTag.setInteger("temperature", temperature); @@ -268,16 +227,6 @@ public void setLeaking(boolean leaking) this.leaking = leaking; } - public long getSystemTime() - { - return systemTime; - } - - public void setSystemTime(long systemTime) - { - this.systemTime = systemTime; - } - public int getBurnTicks() { return burnTicks; @@ -324,10 +273,11 @@ public void setContainerStack(ItemStack containerStack) this.containerStack = containerStack; } - public void calculateLostTime() - { - long elapsedTimesince = System.currentTimeMillis() - systemTime; - } + + + + + private void detectAndConvertFromOldNBTFormat(NBTTagCompound compound) // backwards compatibility { diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryCopterPack.java b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryCopterPack.java index 9ad08dc4..db47fbf2 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryCopterPack.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryCopterPack.java @@ -2,6 +2,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.Constants.NBT; import net.minecraftforge.fluids.FluidTank; import com.darkona.adventurebackpack.common.Constants; @@ -12,6 +13,7 @@ import static com.darkona.adventurebackpack.common.Constants.Copter.INVENTORY_SIZE; import static com.darkona.adventurebackpack.common.Constants.Copter.TAG_FUEL_TANK; import static com.darkona.adventurebackpack.common.Constants.Copter.TAG_STATUS; +import static com.darkona.adventurebackpack.common.Constants.TAG_INVENTORY; import static com.darkona.adventurebackpack.common.Constants.TAG_WEARABLE_COMPOUND; /** @@ -57,6 +59,45 @@ public int[] getSlotsOnClosingArray() return new int[]{BUCKET_IN, BUCKET_OUT}; } + @Override + public void loadFromNBT(NBTTagCompound compound) + { + NBTTagCompound copterTag = compound.getCompoundTag(TAG_WEARABLE_COMPOUND); + setInventoryFromTagList(copterTag.getTagList(TAG_INVENTORY, NBT.TAG_COMPOUND)); + fuelTank.readFromNBT(copterTag.getCompoundTag(TAG_FUEL_TANK)); + status = copterTag.getByte(TAG_STATUS); + tickCounter = copterTag.getInteger("tickCounter"); + } + + @Override + public void saveToNBT(NBTTagCompound compound) + { + NBTTagCompound copterTag = new NBTTagCompound(); + copterTag.setTag(TAG_INVENTORY, getInventoryTagList()); + copterTag.setTag(TAG_FUEL_TANK, fuelTank.writeToNBT(new NBTTagCompound())); + copterTag.setByte(TAG_STATUS, status); + copterTag.setInteger("tickCounter", this.tickCounter); + compound.setTag(TAG_WEARABLE_COMPOUND, copterTag); + } + + @Override + public boolean updateTankSlots() + { + boolean changesMade = false; + while (InventoryActions.transferContainerTank(this, getFuelTank(), BUCKET_IN)) + changesMade = true; + return changesMade; + } + + @Override + public void dirtyTanks() + { + getWearableCompound().setTag(TAG_FUEL_TANK, fuelTank.writeToNBT(new NBTTagCompound())); + } + + + + public void consumeFuel(int quantity) { @@ -89,55 +130,14 @@ public void setStatus(byte status) this.status = status; } - @Override - public void loadFromNBT(NBTTagCompound compound) - { - NBTTagCompound copterTag = compound.getCompoundTag(TAG_WEARABLE_COMPOUND); - fuelTank.readFromNBT(copterTag.getCompoundTag(TAG_FUEL_TANK)); - status = copterTag.getByte(TAG_STATUS); - tickCounter = copterTag.getInteger("tickCounter"); - } - - @Override - public void saveToNBT(NBTTagCompound compound) - { - NBTTagCompound copterTag = new NBTTagCompound(); - copterTag.setTag(TAG_FUEL_TANK, fuelTank.writeToNBT(new NBTTagCompound())); - copterTag.setByte(TAG_STATUS, status); - copterTag.setInteger("tickCounter", this.tickCounter); - compound.setTag(TAG_WEARABLE_COMPOUND, copterTag); - } - - @Override - public boolean updateTankSlots() + public void dirtyStatus() { - boolean result = false; - while (InventoryActions.transferContainerTank(this, getFuelTank(), BUCKET_IN)) - result = true; - return result; + getWearableCompound().setByte(TAG_STATUS, status); } - @Override - public void dirtyInventory() - { - if (updateTankSlots()) - { - dirtyTanks(); - } - } - @Override - public void dirtyTanks() - { - containerStack.stackTagCompound.getCompoundTag(TAG_WEARABLE_COMPOUND).setTag(TAG_FUEL_TANK, fuelTank.writeToNBT(new NBTTagCompound())); - } - //TODO to InventoryAdventure: getWearableCompound() { return containerStack.stackTagCompound.getCompoundTag(TAG_WEARABLE_COMPOUND);} - public void dirtyStatus() - { - containerStack.stackTagCompound.getCompoundTag(TAG_WEARABLE_COMPOUND).setByte(TAG_STATUS, status); - } private void detectAndConvertFromOldNBTFormat(NBTTagCompound compound) // backwards compatibility { diff --git a/src/main/java/com/darkona/adventurebackpack/item/ItemAdventureBackpack.java b/src/main/java/com/darkona/adventurebackpack/item/ItemAdventureBackpack.java index 740c3f57..bf7d48c9 100644 --- a/src/main/java/com/darkona/adventurebackpack/item/ItemAdventureBackpack.java +++ b/src/main/java/com/darkona/adventurebackpack/item/ItemAdventureBackpack.java @@ -281,7 +281,7 @@ private int getItemCount(ItemStack backpack) int itemCount = itemList.tagCount(); for (int i = itemCount - 1; i >= 0; i--) { - int slotAtI = itemList.getCompoundTagAt(i).getInteger("Slot"); + int slotAtI = itemList.getCompoundTagAt(i).getInteger(Constants.TAG_SLOT); if (slotAtI <= Constants.END_OF_INVENTORY) break; itemCount--; diff --git a/src/main/java/com/darkona/adventurebackpack/item/ItemCoalJetpack.java b/src/main/java/com/darkona/adventurebackpack/item/ItemCoalJetpack.java index 927ff458..414a60a4 100644 --- a/src/main/java/com/darkona/adventurebackpack/item/ItemCoalJetpack.java +++ b/src/main/java/com/darkona/adventurebackpack/item/ItemCoalJetpack.java @@ -79,7 +79,6 @@ public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer pla public void onEquipped(World world, EntityPlayer player, ItemStack stack) { InventoryCoalJetpack inv = new InventoryCoalJetpack(stack); - inv.calculateLostTime(); // debug artifact if (inv.getTemperature() == 0) inv.setTemperature(getBiomeMinTemp(player, world)); } @@ -270,7 +269,6 @@ public void onUnequipped(World world, EntityPlayer player, ItemStack stack) inv.setInUse(false); inv.setLeaking(false); inv.setStatus(false); - inv.setSystemTime(System.currentTimeMillis()); inv.markDirty(); } From 28068107c9ff02e3b7a4c1a7590970c5885992e2 Mon Sep 17 00:00:00 2001 From: Ugachaga Date: Tue, 27 Feb 2018 20:45:40 +0700 Subject: [PATCH 5/5] Inventories are more organized --- .../block/BlockSleepingBag.java | 1 + .../block/TileAdventure.java | 25 +++- .../block/TileAdventureBackpack.java | 129 +++++------------- .../inventory/ContainerBackpack.java | 8 +- .../inventory/IInventoryBackpack.java | 13 +- .../inventory/InventoryBackpack.java | 36 ++--- .../inventory/InventoryCoalJetpack.java | 118 +++++++--------- .../inventory/InventoryCopterPack.java | 30 ++-- .../item/ItemCoalJetpack.java | 6 +- .../item/ItemCopterPack.java | 2 +- .../EquipUnequipBackWearablePacket.java | 28 ++-- .../adventurebackpack/util/CoordsUtils.java | 41 ++---- .../adventurebackpack/util/Wearing.java | 26 ++++ 13 files changed, 191 insertions(+), 272 deletions(-) diff --git a/src/main/java/com/darkona/adventurebackpack/block/BlockSleepingBag.java b/src/main/java/com/darkona/adventurebackpack/block/BlockSleepingBag.java index a24a33f4..47c0fcdf 100644 --- a/src/main/java/com/darkona/adventurebackpack/block/BlockSleepingBag.java +++ b/src/main/java/com/darkona/adventurebackpack/block/BlockSleepingBag.java @@ -361,6 +361,7 @@ public void onBlockDestroyedByExplosion(World world, int x, int y, int z, Explos @Override public void onBlockDestroyedByPlayer(World world, int x, int y, int z, int meta) { + //TODO make it work if player destroyed head block of sleeping bag (so backpack 1 more tile away) //LogHelper.info("onBlockDestroyedByPlayer() : BlockSleepingBag"); int direction = getDirection(meta); int tileZ = z; diff --git a/src/main/java/com/darkona/adventurebackpack/block/TileAdventure.java b/src/main/java/com/darkona/adventurebackpack/block/TileAdventure.java index ad2c0aab..b14b0834 100644 --- a/src/main/java/com/darkona/adventurebackpack/block/TileAdventure.java +++ b/src/main/java/com/darkona/adventurebackpack/block/TileAdventure.java @@ -40,11 +40,15 @@ public ItemStack decrStackSize(int slot, int quantity) if (stack != null) { if (stack.stackSize <= quantity) + { setInventorySlotContents(slot, null); + } else + { stack = stack.splitStack(quantity); + dirtyInventory(); + } } - markDirty(); return stack; } @@ -63,7 +67,7 @@ public ItemStack getStackInSlotOnClosing(int slot) public void setInventorySlotContents(int slot, @Nullable ItemStack stack) { setInventorySlotContentsNoSave(slot, stack); - markDirty(); + dirtyInventory(); } @Override @@ -102,7 +106,7 @@ public void openInventory() @Override public void closeInventory() { - markDirty(); + dirtyInventory(); } @Override @@ -144,6 +148,21 @@ public void setInventorySlotContentsNoSave(int slot, @Nullable ItemStack stack) getInventory()[slot] = stack; } + @Override + public void dirtyInventory() + { + updateTankSlots(); + markDirty(); + } + + @Override + public void dirtyTanks() + { + // for now none is calling this for tile.backpack + // if we really want to use it, we have to re-implement it, more efficient way + dirtyInventory(); + } + protected void setInventoryFromTagList(NBTTagList items) { for (int i = 0; i < items.tagCount(); i++) diff --git a/src/main/java/com/darkona/adventurebackpack/block/TileAdventureBackpack.java b/src/main/java/com/darkona/adventurebackpack/block/TileAdventureBackpack.java index 70265c3b..c8716e75 100644 --- a/src/main/java/com/darkona/adventurebackpack/block/TileAdventureBackpack.java +++ b/src/main/java/com/darkona/adventurebackpack/block/TileAdventureBackpack.java @@ -25,7 +25,6 @@ import com.darkona.adventurebackpack.inventory.InventoryActions; import com.darkona.adventurebackpack.inventory.SlotBackpack; import com.darkona.adventurebackpack.inventory.SlotTool; -import com.darkona.adventurebackpack.item.ItemHose; import com.darkona.adventurebackpack.reference.BackpackTypes; import com.darkona.adventurebackpack.reference.GeneralReference; import com.darkona.adventurebackpack.util.BackpackUtils; @@ -187,47 +186,6 @@ public void saveToNBT(NBTTagCompound compound) compound.setTag(TAG_WEARABLE_COMPOUND, backpackTag); } - - - - - - - public int getLuminosity() - { - return luminosity; - } - - @Override - public int getLastTime() - { - return lastTime; - } - - @Override - public void setLastTime(int lastTime) - { - this.lastTime = lastTime; - } - - - @Override - public void markDirty() - { - for (int i = 0; i < inventory.length; i++) - { - if (inventory[i] != null) - { - if ((i == BUCKET_OUT_LEFT || i == BUCKET_OUT_RIGHT) && inventory[i].getItem() instanceof ItemHose - || (i == BUCKET_IN_LEFT || i == BUCKET_IN_RIGHT)) - { - updateTankSlots(); - } - } - } - super.markDirty(); - } - @Override public boolean updateTankSlots() { @@ -240,49 +198,45 @@ public boolean updateTankSlots() } @Override - public boolean hasItem(Item item) + public void dirtyExtended() { - return InventoryActions.hasItem(this, item); + // for now none is calling this for tile.backpack + // if we really want to use it, we have to re-implement it, more efficient way + dirtyInventory(); } @Override - public void consumeInventoryItem(Item item) + public void dirtyTime() { - InventoryActions.consumeItemInInventory(this, item); + // for now none is calling this for tile.backpack + // if we really want to use it, we have to re-implement it, more efficient way + dirtyInventory(); } - @Override - public void dirtyTanks() + public int getLastTime() { - + return lastTime; } @Override - public void dirtyTime() + public void setLastTime(int lastTime) { - + this.lastTime = lastTime; } @Override - public void dirtyExtended() + public boolean hasItem(Item item) { - + return InventoryActions.hasItem(this, item); } @Override - public void dirtyInventory() + public void consumeInventoryItem(Item item) { - + InventoryActions.consumeItemInInventory(this, item); } - - - - - - - // Logic: from tile to item public boolean equip(World world, EntityPlayer player, int x, int y, int z) { @@ -291,15 +245,9 @@ public boolean equip(World world, EntityPlayer player, int x, int y, int z) removeSleepingBag(world); if (BackpackUtils.equipWearable(stacky, player) != BackpackUtils.Reasons.SUCCESSFUL) { - if (Wearing.isWearingWearable(player)) - { - String msg = "backpack"; - if (Wearing.isWearingCopter(player)) - msg = "copterpack"; - else if (Wearing.isWearingJetpack(player)) - msg = "jetpack"; - player.addChatComponentMessage(new ChatComponentTranslation("adventurebackpack:messages.already.equipped." + msg)); - } + Wearing.WearableType wtype = Wearing.getWearingWearableType(player); + if (wtype != Wearing.WearableType.UNKNOWN) + player.addChatComponentMessage(new ChatComponentTranslation("adventurebackpack:messages.already.equipped." + wtype.name().toLowerCase())); if (!player.inventory.addItemStackToInventory(stacky)) return drop(world, player, x, y, z); @@ -313,14 +261,13 @@ public boolean drop(World world, EntityPlayer player, int x, int y, int z) if (player.capabilities.isCreativeMode) return true; ItemStack stacky = new ItemStack(ModItems.adventureBackpack, 1); transferToItemStack(stacky); + float spawnX = x + world.rand.nextFloat(); float spawnY = y + world.rand.nextFloat(); float spawnZ = z + world.rand.nextFloat(); - EntityItem droppedItem = new EntityItem(world, spawnX, spawnY, spawnZ, stacky); float mult = 0.05F; - droppedItem.motionX = (-0.5F + world.rand.nextFloat()) * mult; droppedItem.motionY = (4 + world.rand.nextFloat()) * mult; droppedItem.motionZ = (-0.5F + world.rand.nextFloat()) * mult; @@ -365,24 +312,13 @@ public boolean deploySleepingBag(EntityPlayer player, World world, int meta, int return sleepingBagDeployed; } - public boolean removeSleepingBag(World world) + public void removeSleepingBag(World world) { - if (sleepingBagDeployed) - { - if (world.getBlock(sbx, sby, sbz) == ModBlocks.blockSleepingBag) - { - world.func_147480_a(sbx, sby, sbz, false); - this.sleepingBagDeployed = false; - markDirty(); - return true; - } - } - else - { - this.sleepingBagDeployed = false; - markDirty(); - } - return false; + if (sleepingBagDeployed && world.getBlock(sbx, sby, sbz) == ModBlocks.blockSleepingBag) + world.func_147480_a(sbx, sby, sbz, false); + + sleepingBagDeployed = false; + markDirty(); } // Automation @@ -450,7 +386,7 @@ public void updateEntity() } //Check for backpack luminosity and a deployed sleeping bag, just in case because i'm super paranoid. - if (checkTime > 0) + if (checkTime == 0) { int lastLumen = luminosity; int left = (leftTank.getFluid() != null) ? leftTank.getFluid().getFluid().getLuminosity() : 0; @@ -462,10 +398,10 @@ public void updateEntity() worldObj.setBlock(xCoord, yCoord, zCoord, ModBlocks.blockBackpack, meta, 3); worldObj.setLightValue(EnumSkyBlock.Block, xCoord, yCoord, zCoord, luminosity); } - if (worldObj.getBlock(sbx, sby, sbz) != ModBlocks.blockSleepingBag) - { + + if (sleepingBagDeployed && worldObj.getBlock(sbx, sby, sbz) != ModBlocks.blockSleepingBag) sleepingBagDeployed = false; - } + checkTime = 20; } else @@ -474,6 +410,11 @@ public void updateEntity() } } + public int getLuminosity() + { + return luminosity; + } + private void convertFromOldNBTFormat(NBTTagCompound compound) // backwards compatibility { NBTTagCompound oldBackpackTag = compound.getCompoundTag("backpackData"); diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/ContainerBackpack.java b/src/main/java/com/darkona/adventurebackpack/inventory/ContainerBackpack.java index 19271412..b986d3f7 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/ContainerBackpack.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/ContainerBackpack.java @@ -114,6 +114,12 @@ private void makeSlots(InventoryPlayer invPlayer) @Override public void detectAndSendChanges() + { + syncCraftResultToServer(); + super.detectAndSendChanges(); + } + + private void syncCraftResultToServer() { ItemStack stackA = ((Slot) inventorySlots.get(CRAFT_RESULT)).getStack(); ItemStack stackB = (ItemStack) inventoryItemStacks.get(CRAFT_RESULT); @@ -126,8 +132,6 @@ public void detectAndSendChanges() if (player instanceof EntityPlayerMP) ((EntityPlayerMP) player).sendContainerAndContentsToPlayer(this, this.getInventory()); } - - super.detectAndSendChanges(); } @Override diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/IInventoryBackpack.java b/src/main/java/com/darkona/adventurebackpack/inventory/IInventoryBackpack.java index a50550ee..7404e5dc 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/IInventoryBackpack.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/IInventoryBackpack.java @@ -19,22 +19,17 @@ public interface IInventoryBackpack extends IInventoryTanks NBTTagCompound getExtendedProperties(); //TODO move to IInventoryTanks to use with Copter/Jet? + void dirtyExtended(); + void dirtyTime(); int getLastTime(); - boolean hasItem(Item item); - - void consumeInventoryItem(Item item); - void setLastTime(int time); - void dirtyTime(); - - void dirtyExtended(); - - + boolean hasItem(Item item); + void consumeInventoryItem(Item item); boolean isSleepingBagDeployed(); } diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryBackpack.java b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryBackpack.java index 910d825d..5aca48ed 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryBackpack.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryBackpack.java @@ -1,6 +1,5 @@ package com.darkona.adventurebackpack.inventory; -import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -157,25 +156,23 @@ public void dirtyTanks() getWearableCompound().setTag(TAG_RIGHT_TANK, rightTank.writeToNBT(new NBTTagCompound())); } - - - @Override - public int getLastTime() + public void dirtyExtended() //TODO is it redundant? { - return this.lastTime; + getWearableCompound().removeTag(TAG_EXTENDED_COMPOUND); //TODO again: why? + getWearableCompound().setTag(TAG_EXTENDED_COMPOUND, extendedProperties); } @Override - public boolean hasItem(Item item) + public void dirtyTime() { - return InventoryActions.hasItem(this, item); + getWearableCompound().setInteger("lastTime", lastTime); } @Override - public void consumeInventoryItem(Item item) + public int getLastTime() { - InventoryActions.consumeItemInInventory(this, item); + return this.lastTime; } @Override @@ -185,28 +182,17 @@ public void setLastTime(int time) } @Override - public void dirtyTime() + public boolean hasItem(Item item) { - getWearableCompound().setInteger("lastTime", lastTime); + return InventoryActions.hasItem(this, item); } @Override - public void dirtyExtended() //TODO is it redundant? - { - getWearableCompound().removeTag(TAG_EXTENDED_COMPOUND); - getWearableCompound().setTag(TAG_EXTENDED_COMPOUND, extendedProperties); - } - - public boolean hasBlock(Block block) + public void consumeInventoryItem(Item item) { - return InventoryActions.hasBlockItem(this, block); + InventoryActions.consumeItemInInventory(this, item); } - - - - - public boolean getDisableCycling() { return disableCycling; diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryCoalJetpack.java b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryCoalJetpack.java index e43df050..3ef396d1 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryCoalJetpack.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryCoalJetpack.java @@ -24,19 +24,18 @@ */ public class InventoryCoalJetpack extends InventoryAdventure { - public int currentItemBurnTime = 0; - private ItemStack[] inventory = new ItemStack[Constants.Jetpack.INVENTORY_SIZE]; private FluidTank waterTank = new FluidTank(Constants.Jetpack.WATER_CAPACITY); private FluidTank steamTank = new FluidTank(Constants.Jetpack.STEAM_CAPACITY); - private boolean boiling = false; private boolean inUse = false; - private boolean leaking = false; private boolean status = false; + private boolean boiling = false; + private boolean leaking = false; private int temperature = 25; private int burnTicks = 0; private int coolTicks = 5000; + private int currentItemBurnTime = 0; public InventoryCoalJetpack(final ItemStack jetpack) { @@ -80,13 +79,13 @@ public void loadFromNBT(NBTTagCompound compound) setInventoryFromTagList(jetpackTag.getTagList(TAG_INVENTORY, NBT.TAG_COMPOUND)); waterTank.readFromNBT(jetpackTag.getCompoundTag(TAG_WATER_TANK)); steamTank.readFromNBT(jetpackTag.getCompoundTag(TAG_STEAM_TANK)); - temperature = jetpackTag.getInteger("temperature"); - status = jetpackTag.getBoolean("status"); - burnTicks = jetpackTag.getInteger("burnTicks"); - coolTicks = jetpackTag.getInteger("coolTicks"); inUse = jetpackTag.getBoolean("inUse"); + status = jetpackTag.getBoolean("status"); boiling = jetpackTag.getBoolean("boiling"); leaking = jetpackTag.getBoolean("leaking"); + temperature = jetpackTag.getInteger("temperature"); + burnTicks = jetpackTag.getInteger("burnTicks"); + coolTicks = jetpackTag.getInteger("coolTicks"); currentItemBurnTime = jetpackTag.getInteger("currentBurn"); } @@ -97,13 +96,13 @@ public void saveToNBT(NBTTagCompound compound) jetpackTag.setTag(TAG_INVENTORY, getInventoryTagList()); jetpackTag.setTag(TAG_WATER_TANK, waterTank.writeToNBT(new NBTTagCompound())); jetpackTag.setTag(TAG_STEAM_TANK, steamTank.writeToNBT(new NBTTagCompound())); - jetpackTag.setInteger("temperature", temperature); - jetpackTag.setBoolean("status", status); - jetpackTag.setInteger("burnTicks", burnTicks); - jetpackTag.setInteger("coolTicks", coolTicks); jetpackTag.setBoolean("inUse", inUse); + jetpackTag.setBoolean("status", status); jetpackTag.setBoolean("boiling", boiling); jetpackTag.setBoolean("leaking", leaking); + jetpackTag.setInteger("temperature", temperature); + jetpackTag.setInteger("burnTicks", burnTicks); + jetpackTag.setInteger("coolTicks", coolTicks); jetpackTag.setInteger("currentBurn", currentItemBurnTime); compound.setTag(TAG_WEARABLE_COMPOUND, jetpackTag); } @@ -124,22 +123,6 @@ public void dirtyTanks() getWearableCompound().setTag(TAG_STEAM_TANK, steamTank.writeToNBT(new NBTTagCompound())); } - - - - - - - public int getBurnTimeRemainingScaled(int scale) - { - if (this.currentItemBurnTime == 0) - { - this.currentItemBurnTime = 200; - } - - return this.burnTicks * scale / this.currentItemBurnTime; - } - public void dirtyBoiler() { NBTTagCompound jetpackTag = getWearableCompound(); @@ -151,6 +134,14 @@ public void dirtyBoiler() jetpackTag.setInteger("currentBurn", currentItemBurnTime); } + public int getBurnTimeRemainingScaled(int scale) + { + if (this.currentItemBurnTime == 0) + this.currentItemBurnTime = 200; + + return this.burnTicks * scale / this.currentItemBurnTime; + } + public int consumeFuel() { int result = 0; @@ -172,39 +163,41 @@ private boolean isFuel(ItemStack stack) return TileEntityFurnace.isItemFuel(stack); } - public ItemStack getParentItemStack() + public int getIncreasingFactor() { - return containerStack; + if (temperature < 50) return 20; + if (temperature < 100) return 15; + if (temperature < 150) return 10; + return 5; } - public boolean getStatus() + public int getDecreasingFactor() { - return status; + if (temperature > 150) return 40; + if (temperature > 100) return 80; + if (temperature > 50) return 120; + return 5; } - public void setStatus(boolean status) - { - this.status = status; - } - public int getTemperature() + public boolean isInUse() { - return temperature; + return inUse; } - public void setTemperature(int temperature) + public void setInUse(boolean inUse) { - this.temperature = temperature; + this.inUse = inUse; } - public boolean isInUse() + public boolean getStatus() { - return inUse; + return status; } - public void setInUse(boolean inUse) + public void setStatus(boolean status) { - this.inUse = inUse; + this.status = status; } public boolean isBoiling() @@ -227,30 +220,24 @@ public void setLeaking(boolean leaking) this.leaking = leaking; } - public int getBurnTicks() + public int getTemperature() { - return burnTicks; + return temperature; } - public void setBurnTicks(int burnTicks) + public void setTemperature(int temperature) { - this.burnTicks = burnTicks; + this.temperature = temperature; } - public int getIncreasingFactor() + public int getBurnTicks() { - if (temperature < 50) return 20; - if (temperature < 100) return 15; - if (temperature < 150) return 10; - return 5; + return burnTicks; } - public int getDecreasingFactor() + public void setBurnTicks(int burnTicks) { - if (temperature > 150) return 40; - if (temperature > 100) return 80; - if (temperature > 50) return 120; - return 5; + this.burnTicks = burnTicks; } public int getCoolTicks() @@ -263,22 +250,11 @@ public void setCoolTicks(int coolTicks) this.coolTicks = coolTicks; } - public ItemStack getContainerStack() - { - return containerStack; - } - - public void setContainerStack(ItemStack containerStack) + public void setCurrentItemBurnTime(int currentItemBurnTime) { - this.containerStack = containerStack; + this.currentItemBurnTime = currentItemBurnTime; } - - - - - - private void detectAndConvertFromOldNBTFormat(NBTTagCompound compound) // backwards compatibility { if (compound == null || !compound.hasKey("jetpackData")) diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryCopterPack.java b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryCopterPack.java index db47fbf2..357b20f1 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryCopterPack.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryCopterPack.java @@ -95,14 +95,9 @@ public void dirtyTanks() getWearableCompound().setTag(TAG_FUEL_TANK, fuelTank.writeToNBT(new NBTTagCompound())); } - - - - - public void consumeFuel(int quantity) + public void dirtyStatus() { - fuelTank.drain(quantity, true); - dirtyTanks(); + getWearableCompound().setByte(TAG_STATUS, status); } public boolean canConsumeFuel(int quantity) @@ -110,14 +105,10 @@ public boolean canConsumeFuel(int quantity) return fuelTank.drain(quantity, false) != null && fuelTank.drain(quantity, false).amount > 0; } - public int getTickCounter() - { - return tickCounter; - } - - public void setTickCounter(int ticks) + public void consumeFuel(int quantity) { - this.tickCounter = ticks; + fuelTank.drain(quantity, true); + dirtyTanks(); } public byte getStatus() @@ -130,14 +121,15 @@ public void setStatus(byte status) this.status = status; } - public void dirtyStatus() + public int getTickCounter() { - getWearableCompound().setByte(TAG_STATUS, status); + return tickCounter; } - - - + public void setTickCounter(int ticks) + { + this.tickCounter = ticks; + } private void detectAndConvertFromOldNBTFormat(NBTTagCompound compound) // backwards compatibility { diff --git a/src/main/java/com/darkona/adventurebackpack/item/ItemCoalJetpack.java b/src/main/java/com/darkona/adventurebackpack/item/ItemCoalJetpack.java index 414a60a4..39e2f368 100644 --- a/src/main/java/com/darkona/adventurebackpack/item/ItemCoalJetpack.java +++ b/src/main/java/com/darkona/adventurebackpack/item/ItemCoalJetpack.java @@ -226,7 +226,7 @@ private void runFirebox(InventoryCoalJetpack inv) if (inv.getBurnTicks() <= 0) { inv.setBurnTicks(inv.consumeFuel()); - inv.currentItemBurnTime = inv.getBurnTicks(); + inv.setCurrentItemBurnTime(inv.getBurnTicks()); } inv.dirtyInventory(); } @@ -248,9 +248,9 @@ private void runHeater(InventoryCoalJetpack inv, World world, EntityPlayer playe } } } - else if (burnTicks <= 0) + else { - inv.currentItemBurnTime = 0; + inv.setCurrentItemBurnTime(0); if (coolTicks % inv.getDecreasingFactor() == 0) { temperature = (temperature - 1 >= getBiomeMinTemp(player, world)) ? temperature - 1 : 0; diff --git a/src/main/java/com/darkona/adventurebackpack/item/ItemCopterPack.java b/src/main/java/com/darkona/adventurebackpack/item/ItemCopterPack.java index 5ad07a71..2ba978e3 100644 --- a/src/main/java/com/darkona/adventurebackpack/item/ItemCopterPack.java +++ b/src/main/java/com/darkona/adventurebackpack/item/ItemCopterPack.java @@ -46,6 +46,7 @@ public class ItemCopterPack extends ItemAB implements IBackWearableItem public static byte OFF_MODE = 0; public static byte NORMAL_MODE = 1; public static byte HOVER_MODE = 2; + private float fuelSpent; public ItemCopterPack() @@ -128,7 +129,6 @@ public void onEquippedUpdate(World world, EntityPlayer player, ItemStack stack) } if (inv.getStatus() == HOVER_MODE) { - inv.setStatus(NORMAL_MODE); inv.dirtyStatus(); if (!world.isRemote) diff --git a/src/main/java/com/darkona/adventurebackpack/network/EquipUnequipBackWearablePacket.java b/src/main/java/com/darkona/adventurebackpack/network/EquipUnequipBackWearablePacket.java index 7e8081a2..e3194be8 100644 --- a/src/main/java/com/darkona/adventurebackpack/network/EquipUnequipBackWearablePacket.java +++ b/src/main/java/com/darkona/adventurebackpack/network/EquipUnequipBackWearablePacket.java @@ -30,27 +30,21 @@ public Message onMessage(Message message, MessageContext ctx) EntityPlayer player = ctx.getServerHandler().playerEntity; if (message.action == EQUIP_WEARABLE) { - if (Wearing.isHoldingWearable(player) && !Wearing.isWearingWearable(player)) + if (Wearing.isHoldingWearable(player)) { - if (BackpackUtils.equipWearable(player.getCurrentEquippedItem(), player) == BackpackUtils.Reasons.SUCCESSFUL) + if (Wearing.isWearingWearable(player)) { - player.inventory.setInventorySlotContents(player.inventory.currentItem, null); - player.inventoryContainer.detectAndSendChanges(); + Wearing.WearableType wtype = Wearing.getWearingWearableType(player); + if (wtype != Wearing.WearableType.UNKNOWN) + player.addChatComponentMessage(new ChatComponentTranslation("adventurebackpack:messages.already.equipped." + wtype.name().toLowerCase())); } - } - else if (Wearing.isWearingWearable(player)) - { - if (Wearing.isWearingBackpack(player)) - { - player.addChatComponentMessage(new ChatComponentTranslation("adventurebackpack:messages.already.equipped.backpack")); - } - else if (Wearing.isWearingCopter(player)) - { - player.addChatComponentMessage(new ChatComponentTranslation("adventurebackpack:messages.already.equipped.copterpack")); - } - else if (Wearing.isWearingJetpack(player)) + else { - player.addChatComponentMessage(new ChatComponentTranslation("adventurebackpack:messages.already.equipped.jetpack")); + if (BackpackUtils.equipWearable(player.getCurrentEquippedItem(), player) == BackpackUtils.Reasons.SUCCESSFUL) + { + player.inventory.setInventorySlotContents(player.inventory.currentItem, null); + player.inventoryContainer.detectAndSendChanges(); + } } } } diff --git a/src/main/java/com/darkona/adventurebackpack/util/CoordsUtils.java b/src/main/java/com/darkona/adventurebackpack/util/CoordsUtils.java index 02f1455c..ee982146 100644 --- a/src/main/java/com/darkona/adventurebackpack/util/CoordsUtils.java +++ b/src/main/java/com/darkona/adventurebackpack/util/CoordsUtils.java @@ -209,43 +209,23 @@ private static int[] getDirectionAndCoordsForSleepingBag(int switchBy, World wor { case 0: --cZ; - if (world.isAirBlock(cX, cY, cZ) && world.getBlock(cX, cY - 1, cZ).getMaterial().isSolid()) - { - if (world.isAirBlock(cX, cY, cZ - 1) && world.getBlock(cX, cY - 1, cZ - 1).getMaterial().isSolid()) - { - direction = 2; - } - } + if (isAirAboveSolid(world, cX, cY, cZ) && isAirAboveSolid(world, cX, cY, cZ - 1)) + direction = 2; break; case 1: ++cX; - if (world.isAirBlock(cX, cY, cZ) && world.getBlock(cX, cY - 1, cZ).getMaterial().isSolid()) - { - if (world.isAirBlock(cX + 1, cY, cZ) && world.getBlock(cX + 1, cY - 1, cZ).getMaterial().isSolid()) - { - direction = 3; - } - } + if (isAirAboveSolid(world, cX, cY, cZ) && isAirAboveSolid(world, cX + 1, cY, cZ)) + direction = 3; break; case 2: ++cZ; - if (world.isAirBlock(cX, cY, cZ) && world.getBlock(cX, cY - 1, cZ).getMaterial().isSolid()) - { - if (world.isAirBlock(cX, cY, cZ + 1) && world.getBlock(cX, cY - 1, cZ + 1).getMaterial().isSolid()) - { - direction = 0; - } - } + if (isAirAboveSolid(world, cX, cY, cZ) && isAirAboveSolid(world, cX, cY, cZ + 1)) + direction = 0; break; case 3: --cX; - if (world.isAirBlock(cX, cY, cZ) && world.getBlock(cX, cY - 1, cZ).getMaterial().isSolid()) - { - if (world.isAirBlock(cX - 1, cY, cZ) && world.getBlock(cX - 1, cY - 1, cZ).getMaterial().isSolid()) - { - direction = 1; - } - } + if (isAirAboveSolid(world, cX, cY, cZ) && isAirAboveSolid(world, cX - 1, cY, cZ)) + direction = 1; break; default: break; @@ -253,6 +233,11 @@ private static int[] getDirectionAndCoordsForSleepingBag(int switchBy, World wor return new int[]{direction, cX, cY, cZ}; } + private static boolean isAirAboveSolid(World world, int cX, int cY, int cZ) + { + return world.isAirBlock(cX, cY, cZ) && world.getBlock(cX, cY - 1, cZ).getMaterial().isSolid(); + } + public static boolean spawnSleepingBag(EntityPlayer player, World world, int meta, int cX, int cY, int cZ) { Block sleepingBag = ModBlocks.blockSleepingBag; diff --git a/src/main/java/com/darkona/adventurebackpack/util/Wearing.java b/src/main/java/com/darkona/adventurebackpack/util/Wearing.java index 9b0c23df..13ddb639 100644 --- a/src/main/java/com/darkona/adventurebackpack/util/Wearing.java +++ b/src/main/java/com/darkona/adventurebackpack/util/Wearing.java @@ -1,8 +1,12 @@ package com.darkona.adventurebackpack.util; +import javax.annotation.Nonnull; + import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import com.darkona.adventurebackpack.init.ModItems; import com.darkona.adventurebackpack.inventory.IInventoryTanks; import com.darkona.adventurebackpack.inventory.InventoryBackpack; import com.darkona.adventurebackpack.inventory.InventoryCoalJetpack; @@ -24,6 +28,23 @@ */ public class Wearing { + public enum WearableType + { + BACKPACK, COPTERPACK, JETPACK, UNKNOWN; + + public static WearableType get(@Nonnull ItemStack stack) + { + Item item = stack.getItem(); + if (item == ModItems.adventureBackpack) + return BACKPACK; + if (item == ModItems.copterPack) + return COPTERPACK; + if (item == ModItems.coalJetpack) + return JETPACK; + return UNKNOWN; + } + } + // Wearable public static boolean isWearingWearable(EntityPlayer player) { @@ -35,6 +56,11 @@ public static ItemStack getWearingWearable(EntityPlayer player) return isWearingWearable(player) ? BackpackProperty.get(player).getWearable() : null; } + public static WearableType getWearingWearableType(EntityPlayer player) + { + return isWearingWearable(player) ? WearableType.get(BackpackProperty.get(player).getWearable()) : WearableType.UNKNOWN; + } + public static IInventoryTanks getWearingWearableInv(EntityPlayer player) { ItemStack wearable = Wearing.getWearingWearable(player);