mirror of
https://github.com/GTNewHorizons/Chisel.git
synced 2026-11-12 16:27:45 +00:00
Improve chisel container/slot code to prevent crashes/dupes
Fixes #257 #236
This commit is contained in:
1 parent
e88b6a4bd8
commit
09c445cf5c
2 files changed
+16
-45
No files matched your search
@@ -16,7 +16,7 @@ public class ContainerChisel extends Container {
|
||||
|
||||
public final InventoryChiselSelection inventory;
|
||||
public InventoryPlayer playerInventory;
|
||||
int currentIndex;
|
||||
int chiselSlot;
|
||||
public ItemStack chisel;
|
||||
public boolean finished;
|
||||
public ICarvingRegistry carving;
|
||||
@@ -24,7 +24,7 @@ public class ContainerChisel extends Container {
|
||||
public ContainerChisel(InventoryPlayer inventoryplayer, InventoryChiselSelection inv) {
|
||||
inventory = inv;
|
||||
playerInventory = inventoryplayer;
|
||||
currentIndex = playerInventory.currentItem;
|
||||
chiselSlot = playerInventory.currentItem;
|
||||
inv.container = this;
|
||||
|
||||
int top = 8, left = 62;
|
||||
@@ -64,7 +64,10 @@ public class ContainerChisel extends Container {
|
||||
@Override
|
||||
public ItemStack slotClick(int par1, int par2, int par3, EntityPlayer par4EntityPlayer) {
|
||||
// we need to subtract away all the other slots
|
||||
if (par1 - inventory.getSizeInventory() - 27 == currentIndex)
|
||||
int clickedSlot = par1 - inventory.getSizeInventory() - 27;
|
||||
|
||||
// if the player has clicked on the chisel or is trying to use a number key to force an itemstack into the slot the chisel is in
|
||||
if (clickedSlot == chiselSlot || (par3 == 2 && par2 == chiselSlot))
|
||||
return null;
|
||||
|
||||
return super.slotClick(par1, par2, par3, par4EntityPlayer);
|
||||
@@ -128,7 +131,7 @@ public class ContainerChisel extends Container {
|
||||
}
|
||||
|
||||
public void onChiselSlotChanged() {
|
||||
ItemStack stack = playerInventory.mainInventory[currentIndex];
|
||||
ItemStack stack = playerInventory.mainInventory[chiselSlot];
|
||||
if (stack == null || !stack.isItemEqual(chisel))
|
||||
finished = true;
|
||||
|
||||
@@ -137,6 +140,6 @@ public class ContainerChisel extends Container {
|
||||
|
||||
General.setChiselTarget(chisel, inventory.getStackInSpecialSlot());
|
||||
|
||||
playerInventory.mainInventory[currentIndex] = chisel;
|
||||
playerInventory.mainInventory[chiselSlot] = chisel;
|
||||
}
|
||||
}
|
||||
@@ -13,6 +13,9 @@ import com.cricketcraft.chisel.utils.GeneralClient;
|
||||
|
||||
public class SlotChiselSelection extends Slot {
|
||||
|
||||
private final ContainerChisel container;
|
||||
private final InventoryChiselSelection selInventory;
|
||||
|
||||
public SlotChiselSelection(ContainerChisel container, InventoryChiselSelection inv, IInventory iinventory, int i, int j, int k) {
|
||||
super(iinventory, i, j, k);
|
||||
|
||||
@@ -35,18 +38,13 @@ public class SlotChiselSelection extends Slot {
|
||||
|
||||
@Override
|
||||
public void onPickupFromSlot(EntityPlayer player, ItemStack itemstack) {
|
||||
ItemStack stack = player.inventory.getItemStack();
|
||||
ItemStack heldStack = player.inventory.getItemStack();
|
||||
ItemStack crafted = selInventory.inventory[InventoryChiselSelection.normalSlots];
|
||||
|
||||
if (stack == null) {
|
||||
if (crafted != null && crafted.stackSize > 0)
|
||||
crafted.stackSize--;
|
||||
if (crafted.stackSize == 0)
|
||||
crafted = null;
|
||||
|
||||
selInventory.setInventorySlotContents(InventoryChiselSelection.normalSlots, crafted);
|
||||
if (heldStack == null) {
|
||||
selInventory.decrStackSize(InventoryChiselSelection.normalSlots, 1);
|
||||
} else {
|
||||
putStack(new ItemStack(itemstack.getItem(), itemstack.stackSize, itemstack.getItemDamage()));
|
||||
putStack(itemstack.copy());
|
||||
|
||||
player.inventory.setItemStack(null);
|
||||
|
||||
@@ -58,7 +56,7 @@ public class SlotChiselSelection extends Slot {
|
||||
}
|
||||
|
||||
selInventory.updateItems();
|
||||
|
||||
|
||||
if (((IChiselItem) container.chisel.getItem()).onChisel(player.worldObj, container.chisel, General.getVariation(crafted))) {
|
||||
container.chisel.damageItem(1, player);
|
||||
if (container.chisel.stackSize <= 0) {
|
||||
@@ -70,35 +68,5 @@ public class SlotChiselSelection extends Slot {
|
||||
String sound = Carving.chisel.getVariationSound(crafted.getItem(), crafted.getItemDamage());
|
||||
GeneralClient.playChiselSound(player.worldObj, MathHelper.floor_double(player.posX), MathHelper.floor_double(player.posY), MathHelper.floor_double(player.posZ), sound);
|
||||
}
|
||||
|
||||
/*
|
||||
* ItemStack stack=player.inventory.getItemStack();
|
||||
*
|
||||
* putStack(new ItemStack(itemstack.itemID, itemstack.stackSize,
|
||||
* itemstack.getItemDamage()));
|
||||
*
|
||||
* super.onPickupFromSlot(player,itemstack);
|
||||
*
|
||||
* player.inventory.setItemStack(null);
|
||||
*
|
||||
* if(selInventory.items[InventoryChiselSelection.normalSlots]==null)
|
||||
* return;
|
||||
*
|
||||
* player.inventory.setItemStack(new ItemStack(itemstack.itemID,
|
||||
* selInventory.items[InventoryChiselSelection.normalSlots].stackSize,
|
||||
* itemstack.getItemDamage()));
|
||||
* selInventory.setInventorySlotContents(InventoryChiselSelection
|
||||
* .normalSlots,null);
|
||||
*
|
||||
* selInventory.updateItems();
|
||||
*
|
||||
* String sound=Carving.chisel.getVariationSound(itemstack.itemID,
|
||||
* itemstack.getItemDamage()); player.worldObj.playSoundAtEntity(player,
|
||||
* sound, 0.3f + 0.7f * General.rand.nextFloat(), 0.6f + 0.4f *
|
||||
* General.rand.nextFloat());
|
||||
*/
|
||||
}
|
||||
|
||||
ContainerChisel container;
|
||||
InventoryChiselSelection selInventory;
|
||||
}
|
||||
Reference in new issue
Block a user