Fix some recipe book bugs introduced in 1.7. The full PR can be seen at Bukkit/CraftBukkit#1270
This commit is contained in:
parent
6a02ab857b
commit
b388fe0ca1
104
CraftBukkit-Patches/0070-Fix-some-recipe-book-bugs.patch
Normal file
104
CraftBukkit-Patches/0070-Fix-some-recipe-book-bugs.patch
Normal file
@ -0,0 +1,104 @@
|
||||
From d764f77e317568fcf35a17d8b90135635b98e874 Mon Sep 17 00:00:00 2001
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user