Updated to CraftBukkit 1.9

This commit is contained in:
ShadowRanger
2016-03-04 13:45:54 +11:00
parent c4a9cb0a4a
commit 71ac05ae85
17 changed files with 115 additions and 72 deletions

View File

@@ -16,40 +16,67 @@
package com.lishid.openinv.internal;
import java.lang.reflect.Field;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import com.lishid.openinv.OpenInv;
// Volatile
import net.minecraft.server.v1_9_R1.*;
import org.bukkit.craftbukkit.v1_9_R1.entity.*;
import org.bukkit.craftbukkit.v1_9_R1.inventory.*;
/*
* -----------------------------------------------
* This class still needs to be updated for 1.9.
*
* It has been partially updated, but is very buggy
* and does not work correctly.
* -----------------------------------------------
*/
import com.lishid.openinv.OpenInv;
public class SpecialPlayerInventory extends PlayerInventory {
private final CraftInventory inventory = new CraftInventory(this);
private final ItemStack[] extra = new ItemStack[5];
private final ItemStack[][] g;
private final ItemStack[][] arrays;
private final CraftPlayer owner;
private boolean playerOnline;
public SpecialPlayerInventory(Player p, boolean online) {
super(((CraftPlayer) p).getHandle());
this.owner = (CraftPlayer) p;
System.arraycopy(player.inventory.items, 0, this.items, 0, this.items.length);
System.arraycopy(player.inventory.armor, 0, this.armor, 0, this.armor.length);
this.g = new ItemStack[][]{this.items, this.armor, this.extra};
// applyContents();
reflectContents(getClass().getSuperclass(), player.inventory, this);
this.arrays = new ItemStack[][] { this.items, this.armor, this.extra };
this.playerOnline = online;
// OpenInv.inventories.put(owner.getUniqueId(), this);
OpenInv.inventories.put(owner.getUniqueId(), this);
}
private void reflectContents(Class clazz, PlayerInventory src, PlayerInventory dest) {
// Items
try {
Field itemsField = clazz.getDeclaredField("items");
itemsField.setAccessible(true);
itemsField.set(dest, src.items);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
// Armor
try {
Field armorField = clazz.getDeclaredField("armor");
armorField.setAccessible(true);
armorField.set(dest, src.armor);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
public Inventory getBukkitInventory() {
@@ -57,19 +84,14 @@ public class SpecialPlayerInventory extends PlayerInventory {
}
private void saveOnExit() {
if (playerOnline) {
linkInventory(player.inventory);
}
if (transaction.isEmpty() && !playerOnline) {
owner.saveData();
// OpenInv.inventories.remove(owner.getUniqueId());
OpenInv.inventories.remove(owner.getUniqueId());
}
}
private void linkInventory(PlayerInventory inventory) {
System.arraycopy(this.items, 0, inventory.items, 0, inventory.items.length);
System.arraycopy(this.armor, 0, inventory.armor, 0, inventory.armor.length);
reflectContents(inventory.getClass(), inventory, this);
}
public void playerOnline(Player player) {
@@ -104,17 +126,18 @@ public class SpecialPlayerInventory extends PlayerInventory {
@Override
public int getSize() {
return super.getSize() + 5; // super.getSize() - this.extraSlots.length + 5;
return super.getSize() - this.extraSlots.length + 5;
}
@Override
public ItemStack getItem(int i) {
ItemStack[] is = null;
ItemStack[][] contents = this.g;
ItemStack[][] contents = this.arrays;
int j = contents.length;
for (int k = 0; k < j; ++k) {
ItemStack[] is2 = contents[k];
if (i < is2.length) {
is = is2;
break;
@@ -137,11 +160,12 @@ public class SpecialPlayerInventory extends PlayerInventory {
@Override
public ItemStack splitStack(int i, int j) {
ItemStack[] is = null;
ItemStack[][] contents = this.g;
ItemStack[][] contents = this.arrays;
int k = contents.length;
for (int l = 0; l < k; ++l) {
ItemStack[] is2 = contents[l];
if (i < is2.length) {
is = is2;
break;
@@ -164,11 +188,12 @@ public class SpecialPlayerInventory extends PlayerInventory {
@Override
public ItemStack splitWithoutUpdate(int i) {
ItemStack[] is = null;
ItemStack[][] contents = this.g;
ItemStack[][] contents = this.arrays;
int j = contents.length;
for (int object = 0; object < j; ++object) {
ItemStack[] is2 = contents[object];
if (i < is2.length) {
is = is2;
break;
@@ -177,7 +202,6 @@ public class SpecialPlayerInventory extends PlayerInventory {
i -= is2.length;
}
if (is != null && is[i] != null) {
if (is == this.items) {
i = getReversedItemSlotNum(i);
@@ -198,11 +222,12 @@ public class SpecialPlayerInventory extends PlayerInventory {
@Override
public void setItem(int i, ItemStack itemStack) {
ItemStack[] is = null;
ItemStack[][] contents = this.g;
ItemStack[][] contents = this.arrays;
int j = contents.length;
for (int k = 0; k < j; ++k) {
ItemStack[] is2 = contents[k];
if (i < is2.length) {
is = is2;
break;
@@ -223,28 +248,19 @@ public class SpecialPlayerInventory extends PlayerInventory {
is[i] = itemStack;
// owner.getHandle().defaultContainer.b();
owner.getHandle().defaultContainer.b();
}
}
private int getReversedItemSlotNum(int i) {
if (i >= 27)
return i - 27;
else
return i + 9;
return (i >= 27) ? (i - 27) : (i + 9);
}
private int getReversedArmorSlotNum(int i) {
if (i == 0)
return 3;
if (i == 1)
return 2;
if (i == 2)
return 1;
if (i == 3)
return 0;
else
return i;
if (i == 0) return 3;
if (i == 1) return 2;
if (i == 2) return 1;
return (i == 3) ? 0 : i;
}
@Override