diff options
author | Celtic Minstrel <celtic.minstrel.ca@some.place> | 2012-02-29 13:56:35 -0500 |
---|---|---|
committer | EvilSeph <evilseph@gmail.com> | 2012-02-29 15:19:07 -0500 |
commit | 0842bab48b1c24f113c61606a294f5bcdf2e1315 (patch) | |
tree | e10864f22a8c54129d4e670ec15b8da594c333eb /src/main/java/net/minecraft/server/CraftingManager.java | |
parent | 10e593649c224db2f0a4227bdf6eef44bfa16865 (diff) | |
download | craftbukkit-0842bab48b1c24f113c61606a294f5bcdf2e1315.tar craftbukkit-0842bab48b1c24f113c61606a294f5bcdf2e1315.tar.gz craftbukkit-0842bab48b1c24f113c61606a294f5bcdf2e1315.tar.lz craftbukkit-0842bab48b1c24f113c61606a294f5bcdf2e1315.tar.xz craftbukkit-0842bab48b1c24f113c61606a294f5bcdf2e1315.zip |
[Bleeding] Implementation of inventory framework. Addresses BUKKIT-856
See the corresponding Bukkit commit for details.
Implementation details:
- Any packets that include an itemstack will send air stacks as null; maybe this will even eliminate the client crash that occurs if the client receives an air stack
- Better handling of null itemstacks in general (ie less converting them to air stacks)
- Inventory.setContents() can now take an array smaller than the inventory without error
- Player.updateInventory() should now correctly update the result slot in a crafting inventory
Some small credit goes to Afforess (initial implementation of openInventory() methods) and Drakia (initial implementation of InventoryOpenEvent and InventoryCloseEvent).
Diffstat (limited to 'src/main/java/net/minecraft/server/CraftingManager.java')
-rw-r--r-- | src/main/java/net/minecraft/server/CraftingManager.java | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/src/main/java/net/minecraft/server/CraftingManager.java b/src/main/java/net/minecraft/server/CraftingManager.java index c785425b..aff11b01 100644 --- a/src/main/java/net/minecraft/server/CraftingManager.java +++ b/src/main/java/net/minecraft/server/CraftingManager.java @@ -4,11 +4,19 @@ import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; +// CraftBukkit start +import org.bukkit.craftbukkit.event.CraftEventFactory; +import org.bukkit.inventory.InventoryView; +// CraftBukkit end public class CraftingManager { private static final CraftingManager a = new CraftingManager(); public List b = new ArrayList(); // CraftBukkit - private -> public + // CraftBukkit start + public CraftingRecipe lastRecipe; + public InventoryView lastCraftView; + // CraftBukkit end public static final CraftingManager getInstance() { return a; @@ -218,13 +226,27 @@ public class CraftingManager { j1 = 0; } - return new ItemStack(itemstack.id, 1, j1); + // CraftBukkit start - construct a dummy repair recipe + ItemStack result = new ItemStack(itemstack.id, 1, j1); + List<ItemStack> ingredients = new ArrayList<ItemStack>(); + ingredients.add(itemstack.cloneItemStack()); + ingredients.add(itemstack1.cloneItemStack()); + ShapelessRecipes recipe = new ShapelessRecipes(result.cloneItemStack(), ingredients); + inventorycrafting.currentRecipe = recipe; + result = CraftEventFactory.callPreCraftEvent(inventorycrafting, result, lastCraftView, true); + return result; + // CraftBukkit end } else { for (j = 0; j < this.b.size(); ++j) { CraftingRecipe craftingrecipe = (CraftingRecipe) this.b.get(j); if (craftingrecipe.a(inventorycrafting)) { - return craftingrecipe.b(inventorycrafting); + // CraftBukkit start - INVENTORY_PRE_CRAFT event + inventorycrafting.currentRecipe = craftingrecipe; + ItemStack result = craftingrecipe.b(inventorycrafting); + result = CraftEventFactory.callPreCraftEvent(inventorycrafting, result, lastCraftView, false); + return result; + // CraftBukkit end } } |