summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/bukkit/craftbukkit/inventory
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/bukkit/craftbukkit/inventory')
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/CraftEntityEquipment.java113
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/CraftFurnaceRecipe.java3
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java6
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java10
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryBrewer.java10
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCrafting.java14
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCustom.java9
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryMerchant.java17
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryPlayer.java41
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java4
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java4
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/CraftMerchantRecipe.java79
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBlockState.java14
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/InventoryWrapper.java8
14 files changed, 257 insertions, 75 deletions
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftEntityEquipment.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftEntityEquipment.java
index 22134820..e95fb3a8 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftEntityEquipment.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftEntityEquipment.java
@@ -1,6 +1,7 @@
package org.bukkit.craftbukkit.inventory;
import net.minecraft.server.EntityInsentient;
+import net.minecraft.server.EnumItemSlot;
import org.bukkit.craftbukkit.entity.CraftLivingEntity;
import org.bukkit.entity.Entity;
@@ -8,12 +9,6 @@ import org.bukkit.inventory.EntityEquipment;
import org.bukkit.inventory.ItemStack;
public class CraftEntityEquipment implements EntityEquipment {
- private static final int WEAPON_SLOT = 0;
- private static final int HELMET_SLOT = 4;
- private static final int CHEST_SLOT = 3;
- private static final int LEG_SLOT = 2;
- private static final int BOOT_SLOT = 1;
- private static final int INVENTORY_SLOTS = 5;
private final CraftLivingEntity entity;
@@ -21,72 +16,96 @@ public class CraftEntityEquipment implements EntityEquipment {
this.entity = entity;
}
+ @Override
+ public ItemStack getItemInMainHand() {
+ return getEquipment(EnumItemSlot.MAINHAND);
+ }
+
+ @Override
+ public void setItemInMainHand(ItemStack item) {
+ setEquipment(EnumItemSlot.MAINHAND, item);
+ }
+
+ @Override
+ public ItemStack getItemInOffHand() {
+ return getEquipment(EnumItemSlot.OFFHAND);
+ }
+
+ @Override
+ public void setItemInOffHand(ItemStack item) {
+ setEquipment(EnumItemSlot.OFFHAND, item);
+ }
+
+ @Override
public ItemStack getItemInHand() {
- return getEquipment(WEAPON_SLOT);
+ return getItemInMainHand();
}
+ @Override
public void setItemInHand(ItemStack stack) {
- setEquipment(WEAPON_SLOT, stack);
+ setItemInMainHand(stack);
}
public ItemStack getHelmet() {
- return getEquipment(HELMET_SLOT);
+ return getEquipment(EnumItemSlot.HEAD);
}
public void setHelmet(ItemStack helmet) {
- setEquipment(HELMET_SLOT, helmet);
+ setEquipment(EnumItemSlot.HEAD, helmet);
}
public ItemStack getChestplate() {
- return getEquipment(CHEST_SLOT);
+ return getEquipment(EnumItemSlot.CHEST);
}
public void setChestplate(ItemStack chestplate) {
- setEquipment(CHEST_SLOT, chestplate);
+ setEquipment(EnumItemSlot.CHEST, chestplate);
}
public ItemStack getLeggings() {
- return getEquipment(LEG_SLOT);
+ return getEquipment(EnumItemSlot.LEGS);
}
public void setLeggings(ItemStack leggings) {
- setEquipment(LEG_SLOT, leggings);
+ setEquipment(EnumItemSlot.LEGS, leggings);
}
public ItemStack getBoots() {
- return getEquipment(BOOT_SLOT);
+ return getEquipment(EnumItemSlot.FEET);
}
public void setBoots(ItemStack boots) {
- setEquipment(BOOT_SLOT, boots);
+ setEquipment(EnumItemSlot.FEET, boots);
}
public ItemStack[] getArmorContents() {
- ItemStack[] armor = new ItemStack[INVENTORY_SLOTS - 1];
- for(int slot = WEAPON_SLOT + 1; slot < INVENTORY_SLOTS; slot++) {
- armor[slot - 1] = getEquipment(slot);
- }
+ ItemStack[] armor = new ItemStack[]{
+ getEquipment(EnumItemSlot.FEET),
+ getEquipment(EnumItemSlot.LEGS),
+ getEquipment(EnumItemSlot.CHEST),
+ getEquipment(EnumItemSlot.HEAD),
+ };
return armor;
}
public void setArmorContents(ItemStack[] items) {
- for(int slot = WEAPON_SLOT + 1; slot < INVENTORY_SLOTS; slot++) {
- ItemStack equipment = items != null && slot <= items.length ? items[slot - 1] : null;
- setEquipment(slot, equipment);
- }
+ setEquipment(EnumItemSlot.FEET, items.length >= 1 ? items[0] : null);
+ setEquipment(EnumItemSlot.LEGS, items.length >= 2 ? items[1] : null);
+ setEquipment(EnumItemSlot.CHEST, items.length >= 3 ? items[2] : null);
+ setEquipment(EnumItemSlot.HEAD, items.length >= 4 ? items[3] : null);
}
- private ItemStack getEquipment(int slot) {
+ private ItemStack getEquipment(EnumItemSlot slot) {
return CraftItemStack.asBukkitCopy(entity.getHandle().getEquipment(slot));
}
- private void setEquipment(int slot, ItemStack stack) {
- entity.getHandle().setEquipment(slot, CraftItemStack.asNMSCopy(stack));
+ private void setEquipment(EnumItemSlot slot, ItemStack stack) {
+ entity.getHandle().setSlot(slot, CraftItemStack.asNMSCopy(stack));
}
public void clear() {
- for(int i = 0; i < INVENTORY_SLOTS; i++) {
- setEquipment(i, null);
+ for (EnumItemSlot slot : EnumItemSlot.values()) {
+ setEquipment(slot, null);
}
}
@@ -95,50 +114,58 @@ public class CraftEntityEquipment implements EntityEquipment {
}
public float getItemInHandDropChance() {
- return getDropChance(WEAPON_SLOT);
+ return getDropChance(EnumItemSlot.MAINHAND);
}
public void setItemInHandDropChance(float chance) {
- setDropChance(WEAPON_SLOT, chance);
+ setDropChance(EnumItemSlot.MAINHAND, chance);
}
public float getHelmetDropChance() {
- return getDropChance(HELMET_SLOT);
+ return getDropChance(EnumItemSlot.HEAD);
}
public void setHelmetDropChance(float chance) {
- setDropChance(HELMET_SLOT, chance);
+ setDropChance(EnumItemSlot.HEAD, chance);
}
public float getChestplateDropChance() {
- return getDropChance(CHEST_SLOT);
+ return getDropChance(EnumItemSlot.CHEST);
}
public void setChestplateDropChance(float chance) {
- setDropChance(CHEST_SLOT, chance);
+ setDropChance(EnumItemSlot.CHEST, chance);
}
public float getLeggingsDropChance() {
- return getDropChance(LEG_SLOT);
+ return getDropChance(EnumItemSlot.LEGS);
}
public void setLeggingsDropChance(float chance) {
- setDropChance(LEG_SLOT, chance);
+ setDropChance(EnumItemSlot.LEGS, chance);
}
public float getBootsDropChance() {
- return getDropChance(BOOT_SLOT);
+ return getDropChance(EnumItemSlot.FEET);
}
public void setBootsDropChance(float chance) {
- setDropChance(BOOT_SLOT, chance);
+ setDropChance(EnumItemSlot.FEET, chance);
}
- private void setDropChance(int slot, float chance) {
- ((EntityInsentient) entity.getHandle()).dropChances[slot] = chance - 0.1F;
+ private void setDropChance(EnumItemSlot slot, float chance) {
+ if (slot == EnumItemSlot.MAINHAND || slot == EnumItemSlot.OFFHAND) {
+ ((EntityInsentient) entity.getHandle()).dropChanceHand[slot.b()] = chance - 0.1F;
+ } else {
+ ((EntityInsentient) entity.getHandle()).dropChanceArmor[slot.b()] = chance - 0.1F;
+ }
}
- private float getDropChance(int slot) {
- return ((EntityInsentient) entity.getHandle()).dropChances[slot] + 0.1F;
+ private float getDropChance(EnumItemSlot slot) {
+ if (slot == EnumItemSlot.MAINHAND || slot == EnumItemSlot.OFFHAND) {
+ return ((EntityInsentient) entity.getHandle()).dropChanceHand[slot.b()] + 0.1F;
+ } else {
+ return ((EntityInsentient) entity.getHandle()).dropChanceArmor[slot.b()] + 0.1F;
+ }
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftFurnaceRecipe.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftFurnaceRecipe.java
index 69f17db8..ef3b8045 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftFurnaceRecipe.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftFurnaceRecipe.java
@@ -2,7 +2,6 @@ package org.bukkit.craftbukkit.inventory;
import net.minecraft.server.RecipesFurnace;
-import org.bukkit.craftbukkit.util.CraftMagicNumbers;
import org.bukkit.inventory.FurnaceRecipe;
import org.bukkit.inventory.ItemStack;
@@ -22,6 +21,6 @@ public class CraftFurnaceRecipe extends FurnaceRecipe implements CraftRecipe {
public void addToCraftingManager() {
ItemStack result = this.getResult();
ItemStack input = this.getInput();
- RecipesFurnace.getInstance().registerRecipe(CraftItemStack.asNMSCopy(input), CraftItemStack.asNMSCopy(result));
+ RecipesFurnace.getInstance().registerRecipe(CraftItemStack.asNMSCopy(input), CraftItemStack.asNMSCopy(result), getExperience());
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java
index e9a3c501..91b8e4af 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java
@@ -17,6 +17,7 @@ import net.minecraft.server.TileEntityDropper;
import net.minecraft.server.TileEntityFurnace;
import org.apache.commons.lang.Validate;
+import org.bukkit.Location;
import org.bukkit.entity.HumanEntity;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.Inventory;
@@ -479,4 +480,9 @@ public class CraftInventory implements Inventory {
public boolean equals(final Object obj) {
return obj instanceof CraftInventory && ((CraftInventory) obj).inventory.equals(this.inventory);
}
+
+ @Override
+ public Location getLocation() {
+ return inventory.getLocation();
+ }
}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java
index 46a1d387..00f9bb5e 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java
@@ -1,15 +1,18 @@
package org.bukkit.craftbukkit.inventory;
import net.minecraft.server.IInventory;
+import org.bukkit.Location;
import org.bukkit.inventory.AnvilInventory;
import org.bukkit.inventory.ItemStack;
public class CraftInventoryAnvil extends CraftInventory implements AnvilInventory {
+ private final Location location;
private final IInventory resultInventory;
- public CraftInventoryAnvil(IInventory inventory, IInventory resultInventory) {
+ public CraftInventoryAnvil(Location location, IInventory inventory, IInventory resultInventory) {
super(inventory);
+ this.location = location;
this.resultInventory = resultInventory;
}
@@ -45,4 +48,9 @@ public class CraftInventoryAnvil extends CraftInventory implements AnvilInventor
public int getSize() {
return getResultInventory().getSize() + getIngredientsInventory().getSize();
}
+
+ @Override
+ public Location getLocation() {
+ return location;
+ }
}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryBrewer.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryBrewer.java
index 6de6e6e6..86c89e86 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryBrewer.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryBrewer.java
@@ -23,4 +23,14 @@ public class CraftInventoryBrewer extends CraftInventory implements BrewerInvent
public BrewingStand getHolder() {
return (BrewingStand) inventory.getOwner();
}
+
+ @Override
+ public ItemStack getFuel() {
+ return getItem(4);
+ }
+
+ @Override
+ public void setFuel(ItemStack fuel) {
+ setItem(4, fuel);
+ }
}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCrafting.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCrafting.java
index e155329e..e085351f 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCrafting.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCrafting.java
@@ -55,7 +55,7 @@ public class CraftInventoryCrafting extends CraftInventory implements CraftingIn
for (int j = 0; j < mcItems.length; j++) {
items[i + j] = CraftItemStack.asCraftMirror(mcItems[j]);
}
-
+
return items;
}
@@ -85,10 +85,10 @@ public class CraftInventoryCrafting extends CraftInventory implements CraftingIn
}
public ItemStack[] getMatrix() {
- ItemStack[] items = new ItemStack[getSize()];
net.minecraft.server.ItemStack[] matrix = getMatrixInventory().getContents();
+ ItemStack[] items = new ItemStack[matrix.length];
- for (int i = 0; i < matrix.length; i++ ) {
+ for (int i = 0; i < matrix.length; i++) {
items[i] = CraftItemStack.asCraftMirror(matrix[i]);
}
@@ -108,16 +108,16 @@ public class CraftInventoryCrafting extends CraftInventory implements CraftingIn
net.minecraft.server.ItemStack[] mcItems = getMatrixInventory().getContents();
- for (int i = 0; i < mcItems.length; i++ ) {
+ for (int i = 0; i < mcItems.length; i++) {
if (i < contents.length) {
ItemStack item = contents[i];
if (item == null || item.getTypeId() <= 0) {
- mcItems[i] = null;
+ getMatrixInventory().setItem(i, null);
} else {
- mcItems[i] = CraftItemStack.asNMSCopy(item);
+ getMatrixInventory().setItem(i, CraftItemStack.asNMSCopy(item));
}
} else {
- mcItems[i] = null;
+ getMatrixInventory().setItem(i, null);
}
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCustom.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCustom.java
index e99b8cca..2b396782 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCustom.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCustom.java
@@ -14,6 +14,7 @@ import org.bukkit.inventory.InventoryHolder;
import net.minecraft.server.EntityHuman;
import net.minecraft.server.IInventory;
import net.minecraft.server.ItemStack;
+import org.bukkit.Location;
public class CraftInventoryCustom extends CraftInventory {
public CraftInventoryCustom(InventoryHolder owner, InventoryType type) {
@@ -165,8 +166,7 @@ public class CraftInventoryCustom extends CraftInventory {
}
@Override
- public void b(int i, int i1) {
-
+ public void setProperty(int i, int j) {
}
@Override
@@ -193,5 +193,10 @@ public class CraftInventoryCustom extends CraftInventory {
public IChatBaseComponent getScoreboardDisplayName() {
return new ChatComponentText(title);
}
+
+ @Override
+ public Location getLocation() {
+ return null;
+ }
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryMerchant.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryMerchant.java
index 7f89c2ad..9051d75c 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryMerchant.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryMerchant.java
@@ -2,9 +2,26 @@ package org.bukkit.craftbukkit.inventory;
import net.minecraft.server.InventoryMerchant;
import org.bukkit.inventory.MerchantInventory;
+import org.bukkit.inventory.MerchantRecipe;
public class CraftInventoryMerchant extends CraftInventory implements MerchantInventory {
+
public CraftInventoryMerchant(InventoryMerchant merchant) {
super(merchant);
}
+
+ @Override
+ public int getSelectedRecipeIndex() {
+ return getInventory().e;
+ }
+
+ @Override
+ public MerchantRecipe getSelectedRecipe() {
+ return getInventory().getRecipe().asBukkit();
+ }
+
+ @Override
+ public InventoryMerchant getInventory() {
+ return (InventoryMerchant) inventory;
+ }
}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryPlayer.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryPlayer.java
index dba8d5ba..a7a6d948 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryPlayer.java
@@ -22,16 +22,33 @@ public class CraftInventoryPlayer extends CraftInventory implements org.bukkit.i
}
@Override
- public int getSize() {
- return super.getSize() - 4;
+ public ItemStack getItemInMainHand() {
+ return CraftItemStack.asCraftMirror(getInventory().getItemInHand());
+ }
+
+ @Override
+ public void setItemInMainHand(ItemStack item) {
+ setItem(getHeldItemSlot(), item);
+ }
+
+ @Override
+ public ItemStack getItemInOffHand() {
+ return CraftItemStack.asCraftMirror(getInventory().extraSlots[0]);
}
+ @Override
+ public void setItemInOffHand(ItemStack item) {
+ getInventory().extraSlots[0] = CraftItemStack.asNMSCopy(item);
+ }
+
+ @Override
public ItemStack getItemInHand() {
- return CraftItemStack.asCraftMirror(getInventory().getItemInHand());
+ return getItemInMainHand();
}
+ @Override
public void setItemInHand(ItemStack stack) {
- setItem(getHeldItemSlot(), stack);
+ setItemInMainHand(stack);
}
@Override
@@ -86,35 +103,35 @@ public class CraftInventoryPlayer extends CraftInventory implements org.bukkit.i
}
public ItemStack getHelmet() {
- return getItem(getSize() + 3);
+ return getItem(getSize() - 2);
}
public ItemStack getChestplate() {
- return getItem(getSize() + 2);
+ return getItem(getSize() - 3);
}
public ItemStack getLeggings() {
- return getItem(getSize() + 1);
+ return getItem(getSize() - 4);
}
public ItemStack getBoots() {
- return getItem(getSize() + 0);
+ return getItem(getSize() - 5);
}
public void setHelmet(ItemStack helmet) {
- setItem(getSize() + 3, helmet);
+ setItem(getSize() - 2, helmet);
}
public void setChestplate(ItemStack chestplate) {
- setItem(getSize() + 2, chestplate);
+ setItem(getSize() - 3, chestplate);
}
public void setLeggings(ItemStack leggings) {
- setItem(getSize() + 1, leggings);
+ setItem(getSize() - 4, leggings);
}
public void setBoots(ItemStack boots) {
- setItem(getSize() + 0, boots);
+ setItem(getSize() - 5, boots);
}
public ItemStack[] getArmorContents() {
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java
index 5404ee91..82f20455 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java
@@ -21,11 +21,14 @@ public final class CraftItemFactory implements ItemFactory {
instance = new CraftItemFactory();
ConfigurationSerialization.registerClass(CraftMetaItem.SerializableMeta.class);
KNOWN_NBT_ATTRIBUTE_NAMES = ImmutableSet.<String>builder()
+ .add("generic.armor")
.add("generic.attackDamage")
.add("generic.followRange")
.add("generic.knockbackResistance")
.add("generic.maxHealth")
.add("generic.movementSpeed")
+ .add("generic.attackSpeed")
+ .add("generic.luck")
.add("horse.jumpStrength")
.add("zombie.spawnReinforcements")
.build();
@@ -103,6 +106,7 @@ public final class CraftItemFactory implements ItemFactory {
case HOPPER:
case REDSTONE_COMPARATOR:
case FLOWER_POT_ITEM:
+ case SHIELD:
return new CraftMetaBlockState(meta, material);
default:
return new CraftMetaItem(meta);
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java
index 23f05f4d..8bb128e6 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java
@@ -23,6 +23,7 @@ import com.google.common.collect.ImmutableMap;
import net.minecraft.server.IChatBaseComponent.ChatSerializer;
import net.minecraft.server.Items;
import net.minecraft.server.NBTTagString;
+import org.bukkit.craftbukkit.enchantments.CraftEnchantment;
import org.bukkit.craftbukkit.util.CraftChatMessage;
@DelegateDeserialization(ItemStack.class)
@@ -230,7 +231,7 @@ public final class CraftItemStack extends ItemStack {
if (handle == null) {
return 0;
}
- return EnchantmentManager.getEnchantmentLevel(ench.getId(), handle);
+ return EnchantmentManager.getEnchantmentLevel(CraftEnchantment.getRaw(ench), handle);
}
@Override
@@ -367,6 +368,7 @@ public final class CraftItemStack extends ItemStack {
case HOPPER:
case REDSTONE_COMPARATOR:
case FLOWER_POT_ITEM:
+ case SHIELD:
return new CraftMetaBlockState(item.getTag(), CraftMagicNumbers.getMaterial(item.getItem()));
default:
return new CraftMetaItem(item.getTag());
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMerchantRecipe.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMerchantRecipe.java
new file mode 100644
index 00000000..964f7080
--- /dev/null
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMerchantRecipe.java
@@ -0,0 +1,79 @@
+package org.bukkit.craftbukkit.inventory;
+
+import com.google.common.base.Preconditions;
+import java.util.List;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.MerchantRecipe;
+
+public class CraftMerchantRecipe extends MerchantRecipe {
+
+ private final net.minecraft.server.MerchantRecipe handle;
+
+ public CraftMerchantRecipe(net.minecraft.server.MerchantRecipe merchantRecipe) {
+ super(null, 0);
+ this.handle = merchantRecipe;
+ }
+
+ public CraftMerchantRecipe(ItemStack result, int uses, int maxUses, boolean experienceReward) {
+ super(result, uses, maxUses, experienceReward);
+ this.handle = new net.minecraft.server.MerchantRecipe(
+ CraftItemStack.asNMSCopy(result),
+ null,
+ null,
+ uses,
+ maxUses,
+ this
+ );
+ }
+
+ @Override
+ public int getUses() {
+ return handle.uses;
+ }
+
+ @Override
+ public void setUses(int uses) {
+ handle.uses = uses;
+ }
+
+ @Override
+ public int getMaxUses() {
+ return handle.maxUses;
+ }
+
+ @Override
+ public void setMaxUses(int maxUses) {
+ handle.maxUses = maxUses;
+ }
+
+ @Override
+ public boolean hasExperienceReward() {
+ return handle.rewardExp;
+ }
+
+ @Override
+ public void setExperienceReward(boolean flag) {
+ handle.rewardExp = flag;
+ }
+
+ public net.minecraft.server.MerchantRecipe toMinecraft() {
+ List<ItemStack> ingredients = getIngredients();
+ Preconditions.checkState(!ingredients.isEmpty(), "No offered ingredients");
+ handle.buyingItem1 = CraftItemStack.asNMSCopy(ingredients.get(0));
+ if (ingredients.size() > 1) {
+ handle.buyingItem2 = CraftItemStack.asNMSCopy(ingredients.get(1));
+ }
+ return handle;
+ }
+
+ public static CraftMerchantRecipe fromBukkit(MerchantRecipe recipe) {
+ if (recipe instanceof CraftMerchantRecipe) {
+ return (CraftMerchantRecipe) recipe;
+ } else {
+ CraftMerchantRecipe craft = new CraftMerchantRecipe(recipe.getResult(), recipe.getUses(), recipe.getMaxUses(), recipe.hasExperienceReward());
+ craft.setIngredients(recipe.getIngredients());
+
+ return craft;
+ }
+ }
+}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBlockState.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBlockState.java
index d60686d6..4f1415b7 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBlockState.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBlockState.java
@@ -4,6 +4,7 @@ import com.google.common.base.Objects;
import com.google.common.collect.ImmutableMap;
import java.util.Map;
import net.minecraft.server.BlockJukeBox;
+import net.minecraft.server.MinecraftServer;
import net.minecraft.server.NBTBase;
import net.minecraft.server.NBTTagCompound;
import net.minecraft.server.TileEntity;
@@ -55,9 +56,7 @@ public class CraftMetaBlockState extends CraftMetaItem implements BlockStateMeta
this.material = material;
if (!(meta instanceof CraftMetaBlockState)
- || ((CraftMetaBlockState) meta).material != material
- || material == Material.SIGN
- || material == Material.COMMAND) {
+ || ((CraftMetaBlockState) meta).material != material) {
blockEntityTag = null;
return;
}
@@ -153,7 +152,7 @@ public class CraftMetaBlockState extends CraftMetaItem implements BlockStateMeta
@Override
boolean applicableTo(Material type) {
- switch(type){
+ switch(type){
case FURNACE:
case CHEST:
case TRAPPED_CHEST:
@@ -173,6 +172,7 @@ public class CraftMetaBlockState extends CraftMetaItem implements BlockStateMeta
case HOPPER:
case REDSTONE_COMPARATOR:
case FLOWER_POT_ITEM:
+ case SHIELD:
return true;
}
return false;
@@ -185,7 +185,7 @@ public class CraftMetaBlockState extends CraftMetaItem implements BlockStateMeta
@Override
public BlockState getBlockState() {
- TileEntity te = blockEntityTag == null ? null : TileEntity.c(blockEntityTag);
+ TileEntity te = blockEntityTag == null ? null : TileEntity.a(MinecraftServer.getServer(), blockEntityTag);
switch (material) {
case SIGN:
@@ -257,6 +257,7 @@ public class CraftMetaBlockState extends CraftMetaItem implements BlockStateMeta
te = new TileEntityBeacon();
}
return new CraftBeacon(material, (TileEntityBeacon) te);
+ case SHIELD:
case BANNER:
case WALL_BANNER:
case STANDING_BANNER:
@@ -320,6 +321,7 @@ public class CraftMetaBlockState extends CraftMetaItem implements BlockStateMeta
case BEACON:
valid = te instanceof TileEntityBeacon;
break;
+ case SHIELD:
case BANNER:
case WALL_BANNER:
case STANDING_BANNER:
@@ -333,6 +335,6 @@ public class CraftMetaBlockState extends CraftMetaItem implements BlockStateMeta
Validate.isTrue(valid, "Invalid blockState for " + material);
blockEntityTag = new NBTTagCompound();
- te.b(blockEntityTag);
+ te.save(blockEntityTag);
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/InventoryWrapper.java b/src/main/java/org/bukkit/craftbukkit/inventory/InventoryWrapper.java
index 5e449667..125f7e1a 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/InventoryWrapper.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/InventoryWrapper.java
@@ -6,6 +6,7 @@ import net.minecraft.server.EntityHuman;
import net.minecraft.server.IChatBaseComponent;
import net.minecraft.server.IInventory;
import net.minecraft.server.ItemStack;
+import org.bukkit.Location;
import org.bukkit.craftbukkit.entity.CraftHumanEntity;
import org.bukkit.craftbukkit.util.CraftChatMessage;
import org.bukkit.entity.HumanEntity;
@@ -106,7 +107,7 @@ public class InventoryWrapper implements IInventory {
}
@Override
- public void b(int i, int j) {
+ public void setProperty(int i, int j) {
}
@Override
@@ -170,4 +171,9 @@ public class InventoryWrapper implements IInventory {
public IChatBaseComponent getScoreboardDisplayName() {
return CraftChatMessage.fromString(getName())[0];
}
+
+ @Override
+ public Location getLocation() {
+ return inventory.getLocation();
+ }
}