Updated to CraftBukkit 1.9
This commit is contained in:
@@ -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
|
||||
|
Reference in New Issue
Block a user