From d64a379b41500f0e8639abf3734faf87ddf65320 Mon Sep 17 00:00:00 2001 From: Cricket Date: Mon, 1 Jun 2015 18:24:52 -0400 Subject: [PATCH] I have no idea why this gets NPE's all the time --- .../tileentity/TileEntityAutoChisel.java | 97 ++++++++++++++++-- .../chisel/inventory/ContainerAutoChisel.java | 7 +- .../cricketcraft/chisel/item/ItemUpgrade.java | 4 +- .../resources/assets/chisel/lang/en_US.lang | 6 ++ .../assets/chisel/textures/autochisel-gui.png | Bin 1050910 -> 10024 bytes 5 files changed, 99 insertions(+), 15 deletions(-) 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 fa00f93f..18c147d3 100644 --- a/src/main/java/com/cricketcraft/chisel/block/tileentity/TileEntityAutoChisel.java +++ b/src/main/java/com/cricketcraft/chisel/block/tileentity/TileEntityAutoChisel.java @@ -2,6 +2,8 @@ package com.cricketcraft.chisel.block.tileentity; import java.util.List; +import com.cricketcraft.chisel.api.carving.CarvingUtils; +import net.minecraft.block.Block; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.ISidedInventory; @@ -29,7 +31,7 @@ import cpw.mods.fml.relauncher.SideOnly; public class TileEntityAutoChisel extends TileEntity implements ISidedInventory { public enum Upgrade { - SPEED, AUTOMATION, STACK; + SPEED, AUTOMATION, STACK, REVERSION; public String getUnlocalizedName() { return ChiselItems.upgrade.getUnlocalizedName() + "_" + this.name().toLowerCase(); @@ -47,7 +49,7 @@ public class TileEntityAutoChisel extends TileEntity implements ISidedInventory private static EntityItem ghostItem; boolean equal = false; - private ItemStack[] inventory = new ItemStack[7]; + private ItemStack[] inventory = new ItemStack[8]; private String name = "autoChisel"; // client animation fields @@ -114,7 +116,6 @@ public class TileEntityAutoChisel extends TileEntity implements ISidedInventory if (!worldObj.isRemote && hasChisel() && base != null && target != null) { if (canBeMadeFrom(base, target)) { - if (progress >= (hasUpgrade(Upgrade.SPEED) ? FAST_SPEED : SLOW_SPEED)) { // reset progress @@ -141,6 +142,65 @@ public class TileEntityAutoChisel extends TileEntity implements ISidedInventory // 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 (canChisel(chiseled)) { + // if our output is empty, just use the current result + if (output == null) { + setInventorySlotContents(OUTPUT, chiseled); + } else { + // otherwise just add our result to the existing stack + inventory[OUTPUT].stackSize += chiseled.stackSize; + slotChanged(OUTPUT); + } + + chiselItem(chiseled.stackSize); + + // remove what we made from the stack + base.stackSize -= chiseled.stackSize; + if (base.stackSize <= 0) { + setInventorySlotContents(BASE, null); // clear out 0 size itemstacks + } + } + } else if (worldObj.getTotalWorldTime() % 10 == 0) { + progress++; + } + } + } else if(!worldObj.isRemote && hasChisel() && base != null && hasUpgrade(Upgrade.REVERSION)){ + if(Carving.chisel.getItemsForChiseling(base) != null){ + if (progress >= (hasUpgrade(Upgrade.SPEED) ? FAST_SPEED : SLOW_SPEED)) { + + // reset progress + progress = 0; + + // the max possible for this craft + int canBeMade = base.getMaxStackSize(); + + // if there are items in the output, they count towards the max we can make + if (output != null) { + canBeMade -= output.stackSize; + } + + // 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; + } + ItemStack chiseled; + if(Carving.chisel.getItemsForChiseling(inventory[TARGET]).get(0) != null){ + + // result will always be a copy of the target, of course + chiseled = inventory[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; + } else { + // result will always be a copy of the target, of course + chiseled = base.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 (canChisel(chiseled)) { // if our output is empty, just use the current result if (output == null) { @@ -197,7 +257,11 @@ public class TileEntityAutoChisel extends TileEntity implements ISidedInventory return !toMerge.getHasSubtypes() || toMerge.getItemDamage() == inventory[OUTPUT].getItemDamage(); } - return ((IChiselItem)inventory[CHISEL].getItem()).canChisel(worldObj, inventory[CHISEL], General.getVariation(inventory[TARGET])); + if(inventory[TARGET] == null){ + return ((IChiselItem)inventory[CHISEL].getItem()).canChisel(worldObj, inventory[CHISEL], General.getVariation(inventory[BASE])); + } else { + return ((IChiselItem)inventory[CHISEL].getItem()).canChisel(worldObj, inventory[CHISEL], General.getVariation(inventory[TARGET])); + } } private boolean hasChisel() { @@ -208,14 +272,27 @@ public class TileEntityAutoChisel extends TileEntity implements ISidedInventory private void chiselItem(int chiseled) { if (!worldObj.isRemote) { boolean breakChisel = false; - if (((IChiselItem) inventory[CHISEL].getItem()).onChisel(worldObj, inventory[CHISEL], General.getVariation(inventory[TARGET]))) { - inventory[CHISEL].setItemDamage(inventory[CHISEL].getItemDamage() + 1); - if (inventory[CHISEL].getItemDamage() >= inventory[CHISEL].getMaxDamage()) { - setInventorySlotContents(CHISEL, null); - breakChisel = true; + if(inventory[TARGET] == null){ + if (((IChiselItem) inventory[CHISEL].getItem()).onChisel(worldObj, inventory[CHISEL], CarvingUtils.getDefaultVariationFor(Block.getBlockFromItem(inventory[TARGET].getItem()), inventory[TARGET].getItemDamage(), General.getVariation(inventory[TARGET]).getOrder()))) { + inventory[CHISEL].setItemDamage(inventory[CHISEL].getItemDamage() + 1); + if (inventory[CHISEL].getItemDamage() >= inventory[CHISEL].getMaxDamage()) { + setInventorySlotContents(CHISEL, null); + breakChisel = true; + } } + PacketHandler.INSTANCE.sendToDimension(new MessageAutoChisel(this, chiseled, true, breakChisel), worldObj.provider.dimensionId); + } else { + if (((IChiselItem) inventory[CHISEL].getItem()).onChisel(worldObj, inventory[CHISEL], General.getVariation(inventory[TARGET]))) { + inventory[CHISEL].setItemDamage(inventory[CHISEL].getItemDamage() + 1); + if (inventory[CHISEL].getItemDamage() >= inventory[CHISEL].getMaxDamage()) { + setInventorySlotContents(CHISEL, null); + breakChisel = true; + } + } + PacketHandler.INSTANCE.sendToDimension(new MessageAutoChisel(this, chiseled, true, breakChisel), worldObj.provider.dimensionId); } - PacketHandler.INSTANCE.sendToDimension(new MessageAutoChisel(this, chiseled, true, breakChisel), worldObj.provider.dimensionId); + + } else { if (breakChisel) { worldObj.playSound(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, "random.break", 0.8F, 0.8F + worldObj.rand.nextFloat() * 0.4F, false); diff --git a/src/main/java/com/cricketcraft/chisel/inventory/ContainerAutoChisel.java b/src/main/java/com/cricketcraft/chisel/inventory/ContainerAutoChisel.java index 466b0942..72e04d9f 100644 --- a/src/main/java/com/cricketcraft/chisel/inventory/ContainerAutoChisel.java +++ b/src/main/java/com/cricketcraft/chisel/inventory/ContainerAutoChisel.java @@ -25,9 +25,10 @@ public class ContainerAutoChisel extends Container { addSlot(tileEntityAutoChisel, 1, 78, 52); addSlot(tileEntityAutoChisel, 2, 103, 15); addSlot(tileEntityAutoChisel, 3, 8, 62); - addSlot(tileEntityAutoChisel, 4, 151, 11); - addSlot(tileEntityAutoChisel, 5, 151, 31); - addSlot(tileEntityAutoChisel, 6, 151, 51); + addSlot(tileEntityAutoChisel, 4, 151, 5); + addSlot(tileEntityAutoChisel, 5, 151, 25); + addSlot(tileEntityAutoChisel, 6, 151, 45); + addSlot(tileEntityAutoChisel, 7, 151, 65); bindPlayerInventory(player); } diff --git a/src/main/java/com/cricketcraft/chisel/item/ItemUpgrade.java b/src/main/java/com/cricketcraft/chisel/item/ItemUpgrade.java index 25e9e1c9..5cbafc12 100644 --- a/src/main/java/com/cricketcraft/chisel/item/ItemUpgrade.java +++ b/src/main/java/com/cricketcraft/chisel/item/ItemUpgrade.java @@ -13,7 +13,7 @@ import com.cricketcraft.chisel.block.tileentity.TileEntityAutoChisel.Upgrade; public class ItemUpgrade extends BaseItem { - public IIcon[] icons = new IIcon[3]; + public IIcon[] icons = new IIcon[4]; public ItemUpgrade(String unlocalizedName) { super(); @@ -40,7 +40,7 @@ public class ItemUpgrade extends BaseItem { @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public void getSubItems(Item item, CreativeTabs tab, List list) { - for (int i = 0; i < 3; i++) { + for (int i = 0; i < Upgrade.values().length; i++) { list.add(new ItemStack(item, 1, i)); } } diff --git a/src/main/resources/assets/chisel/lang/en_US.lang b/src/main/resources/assets/chisel/lang/en_US.lang index 0147efc5..9890a007 100644 --- a/src/main/resources/assets/chisel/lang/en_US.lang +++ b/src/main/resources/assets/chisel/lang/en_US.lang @@ -26,10 +26,12 @@ item.smashingRock.desc=Right-Click to throw. This will turn Cobblestone into Gra item.upgrade_speed.name=Speed Upgrade item.upgrade_automation.name=Automation Upgrade item.upgrade_stack.name=Stack Upgrade +item.upgrade_reversion.name=Reversion Upgrade item.upgrade_speed.desc=Increases the rate at which it works item.upgrade_automation.desc=Allows things to push in and out of the Auto Chisel item.upgrade_stack.desc=Allows it to manufacture stacks at a time +item.upgrade_reversion.desc=Reverts the base slot to its original form # Block localizations # Have fun! ~zombiepig333 @@ -112,6 +114,10 @@ tile.granite.6.desc=Granite Small Tiles tile.chisel.autoChisel.name=Auto Chisel autochisel.slot.chisel.tooltip=Chisel Slot autochisel.slot.target.tooltip=Target Slot +autochisel.slot.speed.tooltip=Speed Upgrade +autochisel.slot.automation.tooltip=Automation Upgrade +autochisel.slot.stack.tooltip=Stack Upgrade +autochisel.slot.reversion.tooltip=Reversion Upgrade #Leaves tile.chisel.leaves.name=Leaf diff --git a/src/main/resources/assets/chisel/textures/autochisel-gui.png b/src/main/resources/assets/chisel/textures/autochisel-gui.png index 9fad5cead04970b4b1ff7721b3ced438e012e918..12ff701c0e86bb47817c5031281f798899d965b4 100644 GIT binary patch literal 10024 zcmeHNYgAKb);>=_2cG#Gv%lx)B4D)34Bh^Todn~6eQVu=hEqF% zX?f-+k(uGdq)hVO^h79i@4l2w_msrUw>P+Zx^GPU?t?@KTK)IXk3af6D{fTWUU=v! zNxN6Fz3k(E{2@Bs>8MNl2a&I>ac)`h?V@0b*kt>52q*>{LJ{5|b*tlim=^~a_PIfqA|dw)~%?!Lxma1=wJ+aM}A%`(=aT*8R@%O{A@skK-}WErOQZy@Np)4b&8eK&650{Pi zeYu3y_Rc6w%ctmNm1IY}aZHIARFc3ko{jL1;oc_4?Z*icvV_XE!{ww>B)Vd?T9&qJ zRY&nT9CE2iRl(m;z6pQE!Ei)Y8&guU-y1vJU;VhhH-JQKA_?AP=@rZ zzhYtqw+3ft8WEEvB^1TghKd#>f~$X^6mgLWC7EjwD@|I7#AF=CGaNYAp#E$XN3EV* z3j&ng7-iQMnSuO*_*Mq#25m}#`|}zq83IguZV^_{Z$ue zB9sps`E0zQ4&P^zF%X$D40#e(VFMeLFuZ8_u^)YOt&cCb61gXnwnafBzhG;3Ih?m| z$Bx;_GWye#IYDGGNu=pU80Zv3)odCihEWyKl5?fc88~EoRlM6`5IVBed5M^dYwdYk zd=KiMp3{H>Bpag;U93r0f_ihOI%H!w!GeOkW)N1X0o&@09XQ-~$m)&Lwz*6Y)2Fqv zq61xQaC3DCBn?LMVO{-D4wF?Xe(&yV}uy38!wCM21%uXHe=kmESk6DV%}B{&IT$O_0cHUMt&W3BEm*7 zh~v8Ayq4ys`Bd`zSY<210V7<8uAFYEATUE!ofN7oRdZi_%%j=I^aW3?MfrD7j*3bo zgVYN12=NwY3N>VuZ{YKf({X4F#gbyPUMk!lFiI%bdYqiT^IN9YujBBKRgJ@?ed6@? zb!@(C_Cf9cz7@93gUFfa5!VTV{HguG3jto914X}ySYC-Cf9ityRS8UiE{!M6#wfvy zWFi3`HFih7)+#XJ@~I}+rl6D}uh#ig&kr}PaW%((QlDc~^M!&RaUOgH14gDa`Yhi# z^jV#tLWDPIgbJjQRRdg5=?;D2_r&pxgLYFn+Og@l&9{f@W?fRq2_o^}=WT05oS?W) zg5($M&hnO^GY(Uq>m@#0r?ETj^#qmxK;F~kxipazRJuera)}OhGLE _CWeC^JgB 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 IjsNEV0HBZ&5dZ)H literal 1050910 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 Mnz4_+`pq~0f3mB}G5`Po