diff --git a/src/main/java/com/cricketcraft/chisel/api/IFacade.java b/src/main/java/com/cricketcraft/chisel/api/IFacade.java
index ed8b5189..1e4f16d6 100644
--- a/src/main/java/com/cricketcraft/chisel/api/IFacade.java
+++ b/src/main/java/com/cricketcraft/chisel/api/IFacade.java
@@ -3,10 +3,37 @@ package com.cricketcraft.chisel.api;
import net.minecraft.block.Block;
import net.minecraft.world.IBlockAccess;
-public interface IFacade {
+/**
+ * To be implemented on blocks that "hide" another block inside, so connected textuers can still be
+ * accomplished.
+ */
+public interface IFacade
+{
+ /**
+ * Gets the block this facade is acting as.
+ *
+ * @param world {@link World}
+ * @param x X coord of your block
+ * @param y Y coord of your block
+ * @param z Z coord of your block
+ * @param side The side being rendered, NOT the side being connected from.
+ *
+ * This value can be -1 if no side is specified. Please handle this appropriately.
+ * @return The block inside of your facade block.
+ */
+ Block getFacade(IBlockAccess world, int x, int y, int z, int side);
- int getFacadeMetadata(IBlockAccess world, int x, int y, int z, int side);
-
- Block getFacade(IBlockAccess world, int x, int y, int z, int side);
-
-}
+ /**
+ * Gets the metadata of the block that this facade is acting as.
+ *
+ * @param world {@link World}
+ * @param x X coord of your block
+ * @param y Y coord of your block
+ * @param z Z coord of your block
+ * @param side The side being rendered, NOT the side being connected from.
+ *
+ * This value can be -1 if no side is specified. Please handle this appropriately.
+ * @return The metadata of your facade block.
+ */
+ int getFacadeMetadata(IBlockAccess world, int x, int y, int z, int side);
+}
\ No newline at end of file
diff --git a/src/main/java/com/cricketcraft/chisel/block/tileentity/TileEntityAutoChisel.java b/src/main/java/com/cricketcraft/chisel/block/tileentity/TileEntityAutoChisel.java
index d180d9f0..40016b8f 100644
--- a/src/main/java/com/cricketcraft/chisel/block/tileentity/TileEntityAutoChisel.java
+++ b/src/main/java/com/cricketcraft/chisel/block/tileentity/TileEntityAutoChisel.java
@@ -1,9 +1,10 @@
package com.cricketcraft.chisel.block.tileentity;
+import java.util.ArrayList;
+
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.ISidedInventory;
-import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
@@ -11,7 +12,9 @@ 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.StatCollector;
+import com.cricketcraft.chisel.carving.Carving;
import com.cricketcraft.chisel.init.ModItems;
import cpw.mods.fml.relauncher.Side;
@@ -19,8 +22,19 @@ import cpw.mods.fml.relauncher.SideOnly;
public class TileEntityAutoChisel extends TileEntity implements ISidedInventory {
- private final int BASE = 0, TARGET = 1, OUTPUT = 2, AUTOMATION = 3, STACK = 4, SPEED = 5;
- private boolean isAutomated, isStackMode, isFaster;
+ public enum Upgrade {
+ SPEED, AUTOMATION, STACK;
+
+ public String getUnlocalizedName() {
+ return ModItems.upgrade.getUnlocalizedName() + "_" + this.name().toLowerCase();
+ }
+
+ public String getLocalizedName() {
+ return StatCollector.translateToLocal(getUnlocalizedName() + ".name");
+ }
+ }
+
+ private final int BASE = 0, TARGET = 1, OUTPUT = 2, MIN_UPGRADE = 3;
private static EntityItem ghostItem;
boolean equal = false;
private ItemStack[] inventory = new ItemStack[6];
@@ -72,81 +86,79 @@ public class TileEntityAutoChisel extends TileEntity implements ISidedInventory
@Override
public void updateEntity() {
- if (inventory[SPEED] == new ItemStack(ModItems.upgrade, 1, 0)) {
- isFaster = true;
- } else {
- isFaster = false;
- }
+ int checkPeriod = hasUpgrade(Upgrade.SPEED) ? 10 : 40;
- if (inventory[AUTOMATION] == new ItemStack(ModItems.upgrade, 1, 1)) {
- isAutomated = true;
- } else {
- isAutomated = false;
- }
+ ItemStack base = inventory[BASE], target = inventory[TARGET], output = inventory[OUTPUT];
- if (inventory[STACK] == new ItemStack(ModItems.upgrade, 1, 2)) {
- isStackMode = true;
- } else {
- isStackMode = false;
- }
+ if (!worldObj.isRemote && worldObj.getWorldTime() % checkPeriod == 0) {
+ if (base != null && target != null) {
+ if (canBeMadeFrom(base, target)) {
+ // the max possible for this craft
+ int canBeMade = target.getMaxStackSize();
- if (isFaster) {
- if (!worldObj.isRemote && worldObj.getWorldTime() % 10 == 0) {
- if (inventory[BASE] != null && inventory[TARGET] != null) {
- if (inventory[BASE].getItem() instanceof ItemBlock && inventory[TARGET].getItem() instanceof ItemBlock) {
- if (inventory[BASE].getUnlocalizedName().equalsIgnoreCase(inventory[TARGET].getUnlocalizedName())) {
- if (isStackMode) {
- if (inventory[BASE].stackSize == inventory[BASE].getMaxStackSize()) {
- if (inventory[OUTPUT] == null) {
- inventory[OUTPUT] = new ItemStack(inventory[TARGET].getItem(), 64, inventory[TARGET].getItemDamage());
- inventory[BASE] = null;
- }
- }
- } else {
- if (inventory[OUTPUT] == null) {
- inventory[OUTPUT] = new ItemStack(inventory[TARGET].getItem(), 1, inventory[TARGET].getItemDamage());
- inventory[BASE].stackSize--;
- } else if (inventory[BASE].stackSize != 0) {
- inventory[OUTPUT].stackSize++;
- inventory[BASE].stackSize--;
- } else {
- inventory[BASE] = null;
- }
- }
- }
+ // if there are items in the output, they count towards the max we can make
+ if (output != null) {
+ canBeMade -= output.stackSize;
}
- }
- }
- } else {
- if (!worldObj.isRemote && worldObj.getWorldTime() % 40 == 0) {
- if (inventory[BASE] != null && inventory[TARGET] != null) {
- if (inventory[BASE].getItem() instanceof ItemBlock && inventory[TARGET].getItem() instanceof ItemBlock) {
- if (inventory[BASE].getUnlocalizedName().equalsIgnoreCase(inventory[TARGET].getUnlocalizedName())) {
- if (isStackMode) {
- if (inventory[BASE].stackSize == inventory[BASE].getMaxStackSize()) {
- if (inventory[OUTPUT] == null) {
- inventory[OUTPUT] = new ItemStack(inventory[TARGET].getItem(), 64, inventory[TARGET].getItemDamage());
- inventory[BASE] = null;
- }
- }
- } else {
- if (inventory[OUTPUT] == null) {
- inventory[OUTPUT] = new ItemStack(inventory[TARGET].getItem(), 1, inventory[TARGET].getItemDamage());
- inventory[BASE].stackSize--;
- } else if (inventory[BASE].stackSize != 0) {
- inventory[OUTPUT].stackSize++;
- inventory[BASE].stackSize--;
- } else {
- inventory[BASE] = null;
- }
- }
+
+ // can't make more than we have
+ canBeMade = Math.min(base.stackSize, canBeMade);
+
+ // if we can't make any, forget it
+ if (canBeMade <= 0) {
+ return;
+ }
+
+ // result will always be a copy of the target, of course
+ ItemStack chiseled = target.copy();
+ // if we have the stack upgrade, boost the stack size to the max possible, otherwise just one
+ chiseled.stackSize = hasUpgrade(Upgrade.STACK) ? canBeMade : 1;
+
+ // if we can place the result in the output
+ if (canMerge(chiseled)) {
+ // if our output is empty, just use the current result
+ if (output == null) {
+ inventory[OUTPUT] = chiseled;
+ } else {
+ // otherwise just add our result to the existing stack
+ inventory[OUTPUT].stackSize += chiseled.stackSize;
}
+ // remove what we made from the stack
+ base.stackSize -= chiseled.stackSize;
+ if (base.stackSize <= 0) {
+ inventory[BASE] = null; // clear out 0 size itemstacks
+ }
+ // we changed something, so we need to tell the chunk to save
+ markDirty();
}
}
}
}
+ }
- markDirty();
+ // lets make sure the user isn't trying to make something from a block that doesn't have this as a valid target
+ private boolean canBeMadeFrom(ItemStack from, ItemStack to) {
+ ArrayList results = Carving.chisel.getItems(from);
+ for (ItemStack s : results) {
+ if (s.getItem() == to.getItem() && s.getItemDamage() == to.getItemDamage()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private boolean canMerge(ItemStack toMerge) {
+ // if the output slot is empty we can merge without checking
+ if (inventory[OUTPUT] == null) {
+ return true;
+ }
+ // need to check NBT as well as item
+ if (toMerge.isItemEqual(inventory[OUTPUT]) && ItemStack.areItemStackTagsEqual(toMerge, inventory[OUTPUT])) {
+ // we only care about metadata if the item has subtypes
+ return toMerge.getHasSubtypes() && toMerge.getItemDamage() == inventory[OUTPUT].getItemDamage();
+ }
+
+ return false;
}
@Override
@@ -232,7 +244,7 @@ public class TileEntityAutoChisel extends TileEntity implements ISidedInventory
@Override
public boolean canInsertItem(int slot, ItemStack itemStack, int side) {
- if (isAutomated) {
+ if (hasUpgrade(Upgrade.AUTOMATION)) {
if (side != 0 || side != 1 && slot == BASE) {
return true;
}
@@ -242,7 +254,7 @@ public class TileEntityAutoChisel extends TileEntity implements ISidedInventory
@Override
public boolean canExtractItem(int slot, ItemStack itemStack, int side) {
- if (isAutomated) {
+ if (hasUpgrade(Upgrade.AUTOMATION)) {
if (side == 0 || side == 1 && slot == OUTPUT) {
return true;
}
@@ -286,4 +298,12 @@ public class TileEntityAutoChisel extends TileEntity implements ISidedInventory
public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity packet) {
readFromNBT(packet.func_148857_g());
}
+
+ public boolean hasUpgrade(Upgrade upgrade) {
+ ItemStack stack = inventory[MIN_UPGRADE + upgrade.ordinal()];
+ if (stack != null) {
+ return stack.getItem() == ModItems.upgrade && stack.getItemDamage() == upgrade.ordinal();
+ }
+ return false;
+ }
}
diff --git a/src/main/java/com/cricketcraft/chisel/carving/CarvableHelper.java b/src/main/java/com/cricketcraft/chisel/carving/CarvableHelper.java
index 787365e4..ffa38c97 100644
--- a/src/main/java/com/cricketcraft/chisel/carving/CarvableHelper.java
+++ b/src/main/java/com/cricketcraft/chisel/carving/CarvableHelper.java
@@ -208,8 +208,8 @@ public class CarvableHelper {
return variation.iconTop;
Block block = world.getBlock(x, y, z);
- boolean topConnected = block.equals(CTM.getBlockOrFacade(world, x, y + 1, z, side)) && metadata == CTM.getBlockOrFacadeMetadata(world, x, y + 1, z, side);
- boolean botConnected = block.equals(CTM.getBlockOrFacade(world, x, y - 1, z, side)) && metadata == CTM.getBlockOrFacadeMetadata(world, x, y - 1, z, side);
+ boolean topConnected = CTM.isConnected(world, x, y + 1, z, side, block, metadata);
+ boolean botConnected = CTM.isConnected(world, x, y - 1, z, side, block, metadata);
if (topConnected && botConnected)
return variation.seamsCtmVert.icons[2];
@@ -230,11 +230,11 @@ public class CarvableHelper {
boolean reverse = side == 2 || side == 4;
if (side < 4) {
- p = isSame(world, x - 1, y, z, block, metadata, side);
- n = isSame(world, x + 1, y, z, block, metadata, side);
+ p = CTM.isConnected(world, x - 1, y, z, side, block, metadata);
+ n = CTM.isConnected(world, x + 1, y, z, side, block, metadata);
} else {
- p = isSame(world, x, y, z + 1, block, metadata, side);
- n = isSame(world, x, y, z - 1, block, metadata, side);
+ p = CTM.isConnected(world, x, y, z - 1, side, block, metadata);
+ n = CTM.isConnected(world, x, y, z + 1, side, block, metadata);
}
if (p && n)
@@ -381,10 +381,6 @@ public class CarvableHelper {
}
}
- private boolean isSame(IBlockAccess world, int x, int y, int z, Block block, int meta, int side) {
- return CTM.getBlockOrFacade(world, x, y, z, side).equals(block) && CTM.getBlockOrFacadeMetadata(world, x, y, z, side) == meta;
- }
-
public void setChiselBlockName(String name) {
blockName = name;
}
diff --git a/src/main/java/com/cricketcraft/chisel/client/gui/GuiAutoChisel.java b/src/main/java/com/cricketcraft/chisel/client/gui/GuiAutoChisel.java
index 8097892d..9ecdcdb4 100644
--- a/src/main/java/com/cricketcraft/chisel/client/gui/GuiAutoChisel.java
+++ b/src/main/java/com/cricketcraft/chisel/client/gui/GuiAutoChisel.java
@@ -1,13 +1,19 @@
package com.cricketcraft.chisel.client.gui;
+import java.util.List;
+
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.inventory.Slot;
import net.minecraft.util.ResourceLocation;
+import net.minecraft.util.StatCollector;
import org.lwjgl.opengl.GL11;
import com.cricketcraft.chisel.block.tileentity.TileEntityAutoChisel;
import com.cricketcraft.chisel.inventory.ContainerAutoChisel;
+import com.cricketcraft.chisel.inventory.ContainerAutoChisel.SlotUpgrade;
+import com.google.common.collect.Lists;
public class GuiAutoChisel extends GuiContainer {
@@ -17,6 +23,29 @@ public class GuiAutoChisel extends GuiContainer {
super(new ContainerAutoChisel(inventoryPlayer, tileEntityAutoChisel));
}
+ @SuppressWarnings("unchecked")
+ @Override
+ protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) {
+ super.drawGuiContainerForegroundLayer(mouseX, mouseY);
+
+ int x = (this.width - this.xSize) / 2;
+ int y = (this.height - this.ySize) / 2;
+
+ for (Slot slot : (List) inventorySlots.inventorySlots) {
+ if (mouseInside(slot, mouseX - x, mouseY - y)) {
+ if (slot instanceof SlotUpgrade) {
+ this.func_146283_a(Lists.newArrayList(((SlotUpgrade) slot).upgradeType.getLocalizedName()), mouseX - x, mouseY - y);
+ } else if (slot.slotNumber == 1) {
+ this.func_146283_a(Lists.newArrayList(StatCollector.translateToLocal("autochisel.slot.target.tooltip")), mouseX - x, mouseY - y);
+ }
+ }
+ }
+ }
+
+ private boolean mouseInside(Slot slot, int x, int y) {
+ return x >= slot.xDisplayPosition && x <= slot.xDisplayPosition + 16 && y >= slot.yDisplayPosition && y <= slot.yDisplayPosition + 16;
+ }
+
@Override
protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
diff --git a/src/main/java/com/cricketcraft/chisel/client/render/CTM.java b/src/main/java/com/cricketcraft/chisel/client/render/CTM.java
index 293e5d94..b066cc83 100644
--- a/src/main/java/com/cricketcraft/chisel/client/render/CTM.java
+++ b/src/main/java/com/cricketcraft/chisel/client/render/CTM.java
@@ -2,6 +2,7 @@ package com.cricketcraft.chisel.client.render;
import net.minecraft.block.Block;
import net.minecraft.world.IBlockAccess;
+import net.minecraftforge.common.util.ForgeDirection;
import com.cricketcraft.chisel.api.IFacade;
@@ -187,34 +188,16 @@ public class CTM {
return texture;
}
- protected static boolean isConnected(IBlockAccess world, int x, int y, int z, int side, Block block, int meta) {
- int x2 = x, y2 = y, z2 = z;
+ public static boolean isConnected(IBlockAccess world, int x, int y, int z, int side, Block block, int meta) {
- switch (side) {
- case 0:
- y2--;
- break;
- case 1:
- y2++;
- break;
- case 2:
- z2--;
- break;
- case 3:
- z2++;
- break;
- case 4:
- x2--;
- break;
- case 5:
- x2++;
- break;
- }
- if (getBlockOrFacade(world, x2, y2, z2, side) == null || getBlockOrFacade(world, x, y, z, side) == null || block == null)
- return false;
+ ForgeDirection dir = ForgeDirection.VALID_DIRECTIONS[side];
+
+ int x2 = x + dir.offsetX;
+ int y2 = y + dir.offsetY;
+ int z2 = z + dir.offsetZ;
return getBlockOrFacade(world, x, y, z, side).equals(block) && getBlockOrFacadeMetadata(world, x, y, z, side) == meta
- && (!getBlockOrFacade(world, x2, y2, z2, side).equals(block) || getBlockOrFacadeMetadata(world, x2, y2, z2, side) != meta);
+ && !(getBlockOrFacade(world, x2, y2, z2, side).equals(block) && getBlockOrFacadeMetadata(world, x2, y2, z2, side) == meta);
}
public static int getBlockOrFacadeMetadata(IBlockAccess world, int x, int y, int z, int side) {
diff --git a/src/main/java/com/cricketcraft/chisel/client/render/RenderBlocksColumn.java b/src/main/java/com/cricketcraft/chisel/client/render/RenderBlocksColumn.java
index 0c13c97d..e901e88a 100644
--- a/src/main/java/com/cricketcraft/chisel/client/render/RenderBlocksColumn.java
+++ b/src/main/java/com/cricketcraft/chisel/client/render/RenderBlocksColumn.java
@@ -16,7 +16,7 @@ public class RenderBlocksColumn extends RenderBlocks {
}
boolean connected(IBlockAccess world, int x, int y, int z, Block block, int meta) {
- return world.getBlock(x, y, z).equals(block) && world.getBlockMetadata(x, y, z) == meta;
+ return CTM.getBlockOrFacade(world, x, y, z, -1).equals(block) && CTM.getBlockOrFacadeMetadata(world, x, y, z, -1) == meta;
}
@Override
diff --git a/src/main/java/com/cricketcraft/chisel/inventory/ContainerAutoChisel.java b/src/main/java/com/cricketcraft/chisel/inventory/ContainerAutoChisel.java
index fb23f808..98470c4a 100644
--- a/src/main/java/com/cricketcraft/chisel/inventory/ContainerAutoChisel.java
+++ b/src/main/java/com/cricketcraft/chisel/inventory/ContainerAutoChisel.java
@@ -7,9 +7,26 @@ import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import com.cricketcraft.chisel.block.tileentity.TileEntityAutoChisel;
+import com.cricketcraft.chisel.block.tileentity.TileEntityAutoChisel.Upgrade;
+import com.cricketcraft.chisel.init.ModItems;
public class ContainerAutoChisel extends Container {
+ public static class SlotUpgrade extends Slot {
+
+ public Upgrade upgradeType;
+
+ public SlotUpgrade(TileEntityAutoChisel inv, int id, int x, int y, Upgrade upgrade) {
+ super(inv, id, x, y);
+ this.upgradeType = upgrade;
+ }
+
+ @Override
+ public boolean isItemValid(ItemStack stack) {
+ return stack.getItem() == ModItems.upgrade && stack.getItemDamage() == upgradeType.ordinal();
+ }
+ }
+
public static TileEntityAutoChisel autoChisel;
public static EntityPlayer player;
@@ -21,9 +38,9 @@ public class ContainerAutoChisel extends Container {
addSlotToContainer(new Slot(tileEntityAutoChisel, 0, 53, 15));
addSlotToContainer(new Slot(tileEntityAutoChisel, 1, 78, 51));
addSlotToContainer(new Slot(tileEntityAutoChisel, 2, 103, 15));
- addSlotToContainer(new Slot(tileEntityAutoChisel, 3, 151, 51));
- addSlotToContainer(new Slot(tileEntityAutoChisel, 4, 151, 31));
- addSlotToContainer(new Slot(tileEntityAutoChisel, 5, 151, 11));
+ addSlotToContainer(new SlotUpgrade(tileEntityAutoChisel, 3, 151, 11, Upgrade.SPEED));
+ addSlotToContainer(new SlotUpgrade(tileEntityAutoChisel, 4, 151, 31, Upgrade.AUTOMATION));
+ addSlotToContainer(new SlotUpgrade(tileEntityAutoChisel, 5, 151, 51, Upgrade.STACK));
bindPlayerInventory(player);
}
@@ -49,29 +66,33 @@ public class ContainerAutoChisel extends Container {
public ItemStack transferStackInSlot(EntityPlayer player, int slotNumber) {
ItemStack itemStack = null;
Slot slot = (Slot) this.inventorySlots.get(slotNumber);
+ System.out.println(slotNumber);
if (slot != null && slot.getHasStack()) {
ItemStack itemStack1 = slot.getStack();
itemStack = itemStack1.copy();
- if (slotNumber == 2) {
- if (!this.mergeItemStack(itemStack1, 3, 39, true)) {
- return null;
- }
-
- slot.onSlotChange(itemStack1, itemStack);
- } else if (slotNumber != 1 && slotNumber != 0) {
- if (!this.mergeItemStack(itemStack1, 0, 1, true)) {
- return null;
- } else if (slotNumber >= 3 && slotNumber < 30) {
- if (this.mergeItemStack(itemStack1, 30, 39, false)) {
+ // if we are in the auto chisel
+ if (slotNumber <= 5) {
+ // merge hotbar
+ if (!this.mergeItemStack(itemStack1, 33, 42, false)) {
+ // merge rest of inventory
+ if (!this.mergeItemStack(itemStack1, 6, 33, false)) {
+ return null;
+ }
+ }
+ } else {
+ // if this is an upgrade, check the upgrade slots
+ if (itemStack1.getItem() == ModItems.upgrade) {
+ if (!this.mergeItemStack(itemStack1, 3, 6, false)) {
+ return null;
+ }
+ } else {
+ // otherwise just put it in one of the 3 other slots
+ if (!this.mergeItemStack(itemStack1, 1, 3, false)) {
return null;
}
- } else if (slotNumber >= 30 && slotNumber < 39 && !this.mergeItemStack(itemStack1, 3, 30, false)) {
- return null;
}
- } else if (this.mergeItemStack(itemStack1, 3, 39, false)) {
- return null;
}
if (itemStack1.stackSize == 0) {
diff --git a/src/main/java/com/cricketcraft/chisel/inventory/ContainerChisel.java b/src/main/java/com/cricketcraft/chisel/inventory/ContainerChisel.java
index 9dc41c2b..aeca0159 100644
--- a/src/main/java/com/cricketcraft/chisel/inventory/ContainerChisel.java
+++ b/src/main/java/com/cricketcraft/chisel/inventory/ContainerChisel.java
@@ -88,8 +88,51 @@ public class ContainerChisel extends Container {
}
@Override
- public ItemStack transferStackInSlot(EntityPlayer entity, int i) {
- return null;
+ public ItemStack transferStackInSlot(EntityPlayer entity, int slotIdx) {
+ ItemStack itemstack = null;
+ Slot slot = (Slot) this.inventorySlots.get(slotIdx);
+
+ if (slot != null && slot.getHasStack()) {
+ ItemStack itemstack1 = slot.getStack();
+ itemstack = itemstack1.copy();
+
+ if (slotIdx > 24) {
+ if (!this.mergeItemStack(itemstack1, 24, 25, false)) {
+ return null;
+ }
+ } else {
+ if (slotIdx < 24 && itemstack1 != null) {
+ entity.inventory.setItemStack(itemstack1.copy());
+ slot.onPickupFromSlot(entity, itemstack1);
+ itemstack1 = entity.inventory.getItemStack();
+ entity.inventory.setItemStack(null);
+ }
+
+ if (!this.mergeItemStack(itemstack1, 52, 61, false)) {
+ if (!this.mergeItemStack(itemstack1, 25, 52, false)) {
+ return null;
+ }
+ }
+ }
+ slot.onSlotChange(itemstack1, itemstack);
+
+ if (itemstack1.stackSize == 0) {
+ slot.putStack((ItemStack) null);
+ } else {
+ slot.onSlotChanged();
+ }
+ if (itemstack1.stackSize == itemstack.stackSize) {
+ return null;
+ }
+ if (slotIdx >= 24) {
+ slot.onPickupFromSlot(entity, itemstack1);
+ }
+ if (itemstack1.stackSize == 0) {
+ slot.putStack(null);
+ return null;
+ }
+ }
+ return itemstack;
}
public void onChiselSlotChanged() {
diff --git a/src/main/java/com/cricketcraft/chisel/item/ItemUpgrade.java b/src/main/java/com/cricketcraft/chisel/item/ItemUpgrade.java
index a018d504..ef4d1823 100644
--- a/src/main/java/com/cricketcraft/chisel/item/ItemUpgrade.java
+++ b/src/main/java/com/cricketcraft/chisel/item/ItemUpgrade.java
@@ -13,6 +13,7 @@ import net.minecraft.world.World;
import com.cricketcraft.chisel.Chisel;
import com.cricketcraft.chisel.block.tileentity.TileEntityAutoChisel;
+import com.cricketcraft.chisel.block.tileentity.TileEntityAutoChisel.Upgrade;
public class ItemUpgrade extends BaseItem {
@@ -22,6 +23,7 @@ public class ItemUpgrade extends BaseItem {
super();
this.setUnlocalizedName(unlocalizedName);
this.setCreativeTab(CreativeTabs.tabMaterials);
+ setHasSubtypes(true);
}
@Override
@@ -36,16 +38,15 @@ public class ItemUpgrade extends BaseItem {
@Override
public IIcon getIconFromDamage(int meta) {
- if (meta > 3)
- meta = 0;
-
- return this.icons[meta];
+ // using modulo throughout to prevent AIOB
+ return this.icons[meta % Upgrade.values().length];
}
@Override
public void registerIcons(IIconRegister reg) {
- for (int i = 0; i < 3; i++) {
- this.icons[i] = reg.registerIcon(Chisel.MOD_ID + ":upgradeItem_" + i);
+ Upgrade[] upgrades = Upgrade.values();
+ for (int i = 0; i < upgrades.length; i++) {
+ this.icons[i] = reg.registerIcon(Chisel.MOD_ID + ":upgrade_" + upgrades[i].name().toLowerCase());
}
}
@@ -59,15 +60,7 @@ public class ItemUpgrade extends BaseItem {
@Override
public String getUnlocalizedName(ItemStack stack) {
- switch (stack.getItemDamage()) {
- case 0:
- return this.getUnlocalizedName() + "_speed";
- case 1:
- return this.getUnlocalizedName() + "_automation";
- case 2:
- return this.getUnlocalizedName() + "_stack";
- default:
- return this.getUnlocalizedName();
- }
+ Upgrade[] upgrades = Upgrade.values();
+ return upgrades[stack.getItemDamage() % upgrades.length].getUnlocalizedName();
}
}
diff --git a/src/main/resources/assets/chisel/lang/en_US.lang b/src/main/resources/assets/chisel/lang/en_US.lang
index b890915f..3080d76e 100644
--- a/src/main/resources/assets/chisel/lang/en_US.lang
+++ b/src/main/resources/assets/chisel/lang/en_US.lang
@@ -43,6 +43,7 @@ item.diamondChisel.desc=Left click and it changes blocks!
#Auto Chisel
tile.autoChisel.name=Auto Chisel
+autochisel.slot.target.tooltip=Target Slot
#Leaves
tile.leaves.6.desc=Dead Leaves
diff --git a/src/main/resources/assets/chisel/textures/autochisel-gui.png b/src/main/resources/assets/chisel/textures/autochisel-gui.png
index 563c5838..a17ef8bc 100644
Binary files a/src/main/resources/assets/chisel/textures/autochisel-gui.png and b/src/main/resources/assets/chisel/textures/autochisel-gui.png differ
diff --git a/src/main/resources/assets/chisel/textures/items/upgradeItem_1.png b/src/main/resources/assets/chisel/textures/items/upgrade_automation.png
similarity index 100%
rename from src/main/resources/assets/chisel/textures/items/upgradeItem_1.png
rename to src/main/resources/assets/chisel/textures/items/upgrade_automation.png
diff --git a/src/main/resources/assets/chisel/textures/items/upgradeItem_0.png b/src/main/resources/assets/chisel/textures/items/upgrade_speed.png
similarity index 100%
rename from src/main/resources/assets/chisel/textures/items/upgradeItem_0.png
rename to src/main/resources/assets/chisel/textures/items/upgrade_speed.png
diff --git a/src/main/resources/assets/chisel/textures/items/upgradeItem_2.png b/src/main/resources/assets/chisel/textures/items/upgrade_stack.png
similarity index 100%
rename from src/main/resources/assets/chisel/textures/items/upgradeItem_2.png
rename to src/main/resources/assets/chisel/textures/items/upgrade_stack.png