Browse Source

Fix #60 KC Official (6c2be10dc9)

master
Robotia 9 years ago
parent
commit
8774937931
  1. 17
      patches/net/minecraft/tileentity/TileEntityHopper.java.patch
  2. 145
      src/main/java/kcauldron/CraftInventoryWrapper.java

17
patches/net/minecraft/tileentity/TileEntityHopper.java.patch

@ -149,15 +149,15 @@
return false; return false;
} }
} }
@@ -427,11 +526,70 @@ @@ -427,11 +526,71 @@
if (itemstack != null && func_145890_b(p_145892_1_, itemstack, p_145892_2_, p_145892_3_)) if (itemstack != null && func_145890_b(p_145892_1_, itemstack, p_145892_2_, p_145892_3_))
{ {
ItemStack itemstack1 = itemstack.copy(); ItemStack itemstack1 = itemstack.copy();
- ItemStack itemstack2 = func_145889_a(p_145892_0_, p_145892_1_.decrStackSize(p_145892_2_, 1), -1); - ItemStack itemstack2 = func_145889_a(p_145892_0_, p_145892_1_.decrStackSize(p_145892_2_, 1), -1);
+ // CraftBukkit start - Call event on collection of items from inventories into the hopper + // CraftBukkit start - Call event on collection of items from inventories into the hopper
+ CraftItemStack oitemstack = CraftItemStack.asCraftMirror(p_145892_1_.decrStackSize(p_145892_2_, 1)); + CraftItemStack oitemstack = CraftItemStack.asCraftMirror(p_145892_1_.decrStackSize(p_145892_2_, 1));
+ Inventory sourceInventory; + Inventory sourceInventory = null;
+
+ // Have to special case large chests as they work oddly + // Have to special case large chests as they work oddly
+ if (p_145892_1_ instanceof InventoryLargeChest) + if (p_145892_1_ instanceof InventoryLargeChest)
+ { + {
@ -182,6 +182,7 @@
+ { + {
+ sourceInventory = null; + sourceInventory = null;
+ } + }
+ finally { if (sourceInventory == null) { sourceInventory = new kcauldron.CraftInventoryWrapper(p_145892_1_); } }
+ // Cauldron end + // Cauldron end
+ } + }
+ +
@ -205,7 +206,7 @@
+ } + }
+ +
+ ItemStack itemstack2 = func_145889_a(p_145892_0_, CraftItemStack.asNMSCopy(event.getItem()), -1); + ItemStack itemstack2 = func_145889_a(p_145892_0_, CraftItemStack.asNMSCopy(event.getItem()), -1);
+
if (itemstack2 == null || itemstack2.stackSize == 0) if (itemstack2 == null || itemstack2.stackSize == 0)
{ {
- p_145892_1_.markDirty(); - p_145892_1_.markDirty();
@ -222,7 +223,7 @@
return true; return true;
} }
@@ -451,6 +609,20 @@ @@ -451,6 +610,20 @@
} }
else else
{ {
@ -243,3 +244,9 @@
ItemStack itemstack = p_145898_1_.getEntityItem().copy(); ItemStack itemstack = p_145898_1_.getEntityItem().copy();
ItemStack itemstack1 = func_145889_a(p_145898_0_, itemstack, -1); ItemStack itemstack1 = func_145889_a(p_145898_0_, itemstack, -1);
@@ -641,4 +814,4 @@
{
return this.field_145901_j > 0;
}
-}
+}

145
src/main/java/kcauldron/CraftInventoryWrapper.java

@ -0,0 +1,145 @@
package kcauldron;
import java.util.Collections;
import java.util.List;
import org.bukkit.craftbukkit.entity.CraftHumanEntity;
import org.bukkit.craftbukkit.inventory.CraftInventory;
import org.bukkit.entity.HumanEntity;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
public class CraftInventoryWrapper extends CraftInventory {
public CraftInventoryWrapper(IInventory inventory) {
super(new Inv(inventory));
((Inv) super.inventory).wrapper = this;
}
private static final class Inv implements IInventory, InventoryHolder {
CraftInventoryWrapper wrapper;
IInventory inventory;
Inv(IInventory inventory) {
this.inventory = inventory;
}
@Override
public Inventory getInventory() {
return wrapper;
}
@Override
public int getSizeInventory() {
return inventory.getSizeInventory();
}
@Override
public ItemStack getStackInSlot(int p_70301_1_) {
return inventory.getStackInSlot(p_70301_1_);
}
@Override
public ItemStack decrStackSize(int p_70298_1_, int p_70298_2_) {
return inventory.decrStackSize(p_70298_1_, p_70298_2_);
}
@Override
public ItemStack getStackInSlotOnClosing(int p_70304_1_) {
return inventory.getStackInSlotOnClosing(p_70304_1_);
}
@Override
public void setInventorySlotContents(int p_70299_1_, ItemStack p_70299_2_) {
inventory.setInventorySlotContents(p_70299_1_, p_70299_2_);
}
@Override
public String getInventoryName() {
return inventory.getInventoryName();
}
@Override
public boolean hasCustomInventoryName() {
return inventory.hasCustomInventoryName();
}
@Override
public int getInventoryStackLimit() {
return inventory.getInventoryStackLimit();
}
@Override
public void markDirty() {
inventory.markDirty();
}
@Override
public boolean isUseableByPlayer(EntityPlayer p_70300_1_) {
return inventory.isUseableByPlayer(p_70300_1_);
}
@Override
public void openInventory() {
inventory.openInventory();
}
@Override
public void closeInventory() {
inventory.closeInventory();
}
@Override
public boolean isItemValidForSlot(int p_94041_1_, ItemStack p_94041_2_) {
return inventory.isItemValidForSlot(p_94041_1_, p_94041_2_);
}
@Override
public ItemStack[] getContents() {
return inventory.getContents();
}
@Override
public void onOpen(CraftHumanEntity who) {
try {
inventory.onOpen(who);
} catch (AbstractMethodError ignored) {
}
}
@Override
public void onClose(CraftHumanEntity who) {
try {
inventory.onClose(who);
} catch (AbstractMethodError ignored) {
}
}
@Override
public List<HumanEntity> getViewers() {
try {
return inventory.getViewers();
} catch (AbstractMethodError ignored) {
return Collections.emptyList();
}
}
@Override
public InventoryHolder getOwner() {
return this;
}
@Override
public void setMaxStackSize(int size) {
try {
inventory.setMaxStackSize(size);
} catch (AbstractMethodError ignored) {
}
}
}
}
Loading…
Cancel
Save