diff options
author | Celtic Minstrel <celtic.minstrel.ca@some.place> | 2012-03-12 17:33:18 -0400 |
---|---|---|
committer | EvilSeph <evilseph@gmail.com> | 2012-03-15 23:54:00 -0400 |
commit | 241cf1c66484a59306b5731495d30bf7b8027496 (patch) | |
tree | 8662f25de78f6c6176eaff7fea5ef47018ce08ab /src | |
parent | db5f80448243809986a4f06eb611d87dd7f7fc55 (diff) | |
download | craftbukkit-241cf1c66484a59306b5731495d30bf7b8027496.tar craftbukkit-241cf1c66484a59306b5731495d30bf7b8027496.tar.gz craftbukkit-241cf1c66484a59306b5731495d30bf7b8027496.tar.lz craftbukkit-241cf1c66484a59306b5731495d30bf7b8027496.tar.xz craftbukkit-241cf1c66484a59306b5731495d30bf7b8027496.zip |
[Bleeding] Allow custom inventory views to change their type to BREWING or ENCHANTING, and also allow them to change their title and size. Fixes BUKKIT-1190
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java index e60ddb71..58310061 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java @@ -11,8 +11,10 @@ import net.minecraft.server.Packet100OpenWindow; import net.minecraft.server.Slot; public class CraftContainer extends Container { - InventoryView view; - InventoryType cachedType; + private InventoryView view; + private InventoryType cachedType; + private String cachedTitle; + private int cachedSize; public CraftContainer(InventoryView view, int id) { this.view = view; @@ -21,6 +23,8 @@ public class CraftContainer extends Container { IInventory top = ((CraftInventory)view.getTopInventory()).getInventory(); IInventory bottom = ((CraftInventory)view.getBottomInventory()).getInventory(); cachedType = view.getType(); + cachedTitle = view.getTitle(); + cachedSize = getSize(); setupSlots(top, bottom); } @@ -29,15 +33,21 @@ public class CraftContainer extends Container { return view; } + private int getSize() { + return view.getTopInventory().getSize(); + } + @Override public boolean b(EntityHuman entityhuman) { - if (cachedType == view.getType()) { + if (cachedType == view.getType() && cachedSize == getSize() && cachedTitle.equals(view.getTitle())) { return true; } // If the window type has changed for some reason, update the player // This method will be called every tick or something, so it's // as good a place as any to put something like this. + boolean typeChanged = (cachedType != view.getType()); cachedType = view.getType(); + cachedTitle = view.getTitle(); if (view.getPlayer() instanceof CraftPlayer) { CraftPlayer player = (CraftPlayer) view.getPlayer(); int type; @@ -51,6 +61,12 @@ public class CraftContainer extends Container { case DISPENSER: type = 3; break; + case ENCHANTING: + type = 4; + break; + case BREWING: + type = 5; + break; default: type = 0; break; @@ -59,8 +75,11 @@ public class CraftContainer extends Container { IInventory bottom = ((CraftInventory)view.getBottomInventory()).getInventory(); this.d.clear(); this.e.clear(); - setupSlots(top, bottom); - player.getHandle().netServerHandler.sendPacket(new Packet100OpenWindow(this.windowId, type, "Crafting", 9)); + if (typeChanged) { + setupSlots(top, bottom); + } + int size = getSize(); + player.getHandle().netServerHandler.sendPacket(new Packet100OpenWindow(this.windowId, type, cachedTitle, size)); player.updateInventory(); } return true; |