2013-12-02 21:21:46 +00:00
|
|
|
From 1bf86fb2eea33af84ad747deb174a2b3a14e0305 Mon Sep 17 00:00:00 2001
|
2013-12-02 06:26:11 +00:00
|
|
|
From: toastedtruth <brammero@gmail.com>
|
|
|
|
Date: Sun, 1 Dec 2013 23:18:16 +0000
|
|
|
|
Subject: [PATCH] Fix some recipe book bugs
|
|
|
|
|
|
|
|
Fix written books crashing the server. Fixes BUKKIT-4945
|
|
|
|
Fix BlockCanBuildEvent returning null. Fixes BUKKIT-4972
|
|
|
|
|
|
|
|
Due to obfuscation changes in 1.7.2, "l" is now the Material ID.
|
|
|
|
i j and k became the x y z coordinates, resulting in no ID being matched
|
|
|
|
for the Material.
|
|
|
|
|
|
|
|
This is corrected by swapping the values into the correct order.
|
|
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/RecipeBookClone.java b/src/main/java/net/minecraft/server/RecipeBookClone.java
|
|
|
|
new file mode 100644
|
|
|
|
index 0000000..8182a5f
|
|
|
|
--- /dev/null
|
|
|
|
+++ b/src/main/java/net/minecraft/server/RecipeBookClone.java
|
|
|
|
@@ -0,0 +1,68 @@
|
|
|
|
+package net.minecraft.server;
|
|
|
|
+
|
|
|
|
+public class RecipeBookClone extends ShapelessRecipes implements IRecipe { // CraftBukkit - added extends
|
|
|
|
+
|
|
|
|
+ // CraftBukkit start - Delegate to new parent class
|
|
|
|
+ public RecipeBookClone() {
|
|
|
|
+ super(new ItemStack(Items.WRITTEN_BOOK, 0, -1), java.util.Arrays.asList(new ItemStack(Items.BOOK_AND_QUILL, 0, 0)));
|
|
|
|
+ }
|
|
|
|
+ // CraftBukkit end
|
|
|
|
+
|
|
|
|
+ public boolean a(InventoryCrafting inventoryCrafting, World paramWorld) {
|
|
|
|
+ int i = 0;
|
|
|
|
+ ItemStack itemStack = null;
|
|
|
|
+ for (int j = 0; j < inventoryCrafting.getSize(); j++) {
|
|
|
|
+ ItemStack itemStack1 = inventoryCrafting.getItem(j);
|
|
|
|
+ if (itemStack1 != null) {
|
|
|
|
+ if (itemStack1.getItem() == Items.WRITTEN_BOOK) {
|
|
|
|
+ if (itemStack != null) {
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ itemStack = itemStack1;
|
|
|
|
+ } else if (itemStack1.getItem() == Items.BOOK_AND_QUILL) {
|
|
|
|
+ i++;
|
|
|
|
+ } else {
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return (itemStack != null) && (i > 0);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public ItemStack a(InventoryCrafting inventoryCrafting) {
|
|
|
|
+ int i = 0;
|
|
|
|
+ ItemStack itemStack = null;
|
|
|
|
+ for (int j = 0; j < inventoryCrafting.getSize(); j++) {
|
|
|
|
+ ItemStack itemStack2 = inventoryCrafting.getItem(j);
|
|
|
|
+ if (itemStack2 != null) {
|
|
|
|
+ if (itemStack2.getItem() == Items.WRITTEN_BOOK) {
|
|
|
|
+ if (itemStack != null) {
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+ itemStack = itemStack2;
|
|
|
|
+ } else if (itemStack2.getItem() == Items.BOOK_AND_QUILL) {
|
|
|
|
+ i++;
|
|
|
|
+ } else {
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if ((itemStack == null) || (i < 1)) {
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+ ItemStack itemStack1 = new ItemStack(Items.WRITTEN_BOOK, i + 1);
|
|
|
|
+ itemStack1.setTag((NBTTagCompound) itemStack.getTag().clone());
|
|
|
|
+ if (itemStack.hasName()) {
|
|
|
|
+ itemStack1.c(itemStack.getName());
|
|
|
|
+ }
|
|
|
|
+ return itemStack1;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public int a() {
|
|
|
|
+ return 9;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public ItemStack b() {
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
|
|
|
index 81534e3..858004e 100644
|
|
|
|
--- a/src/main/java/net/minecraft/server/World.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/World.java
|
|
|
|
@@ -2483,7 +2483,7 @@ public abstract class World implements IBlockAccess {
|
|
|
|
boolean defaultReturn = axisalignedbb != null && !this.a(axisalignedbb, entity) ? false : (block1.getMaterial() == Material.ORIENTABLE && block == Blocks.ANVIL ? true : block1.getMaterial().isReplaceable() && block.canPlace(this, i, j, k, l, itemstack));
|
|
|
|
|
|
|
|
// CraftBukkit start
|
|
|
|
- BlockCanBuildEvent event = new BlockCanBuildEvent(this.getWorld().getBlockAt(j, k, l), i, defaultReturn);
|
|
|
|
+ BlockCanBuildEvent event = new BlockCanBuildEvent(this.getWorld().getBlockAt(i, j, k), l, defaultReturn);
|
|
|
|
this.getServer().getPluginManager().callEvent(event);
|
|
|
|
|
|
|
|
return event.isBuildable();
|
|
|
|
--
|
|
|
|
1.8.3.2
|
|
|
|
|