diff --git a/src/com/lishid/openinv/internal/v1_8_R3/AnySilentChest.java b/src/com/lishid/openinv/internal/v1_9_R1/AnySilentChest.java
similarity index 84%
rename from src/com/lishid/openinv/internal/v1_8_R3/AnySilentChest.java
rename to src/com/lishid/openinv/internal/v1_9_R1/AnySilentChest.java
index 4c2445e..519a472 100644
--- a/src/com/lishid/openinv/internal/v1_8_R3/AnySilentChest.java
+++ b/src/com/lishid/openinv/internal/v1_9_R1/AnySilentChest.java
@@ -14,7 +14,7 @@
* along with this program. If not, see .
*/
-package com.lishid.openinv.internal.v1_8_R3;
+package com.lishid.openinv.internal.v1_9_R1;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
@@ -23,17 +23,17 @@ import com.lishid.openinv.OpenInv;
import com.lishid.openinv.internal.IAnySilentChest;
//Volatile
-import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
+import org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer;
-import net.minecraft.server.v1_8_R3.Block;
-import net.minecraft.server.v1_8_R3.BlockPosition;
-import net.minecraft.server.v1_8_R3.EntityPlayer;
-import net.minecraft.server.v1_8_R3.IInventory;
-import net.minecraft.server.v1_8_R3.ITileInventory;
-import net.minecraft.server.v1_8_R3.InventoryLargeChest;
-import net.minecraft.server.v1_8_R3.PacketPlayOutOpenWindow;
-import net.minecraft.server.v1_8_R3.TileEntityChest;
-import net.minecraft.server.v1_8_R3.World;
+import net.minecraft.server.v1_9_R1.Block;
+import net.minecraft.server.v1_9_R1.BlockPosition;
+import net.minecraft.server.v1_9_R1.EntityPlayer;
+import net.minecraft.server.v1_9_R1.IInventory;
+import net.minecraft.server.v1_9_R1.ITileInventory;
+import net.minecraft.server.v1_9_R1.InventoryLargeChest;
+import net.minecraft.server.v1_9_R1.PacketPlayOutOpenWindow;
+import net.minecraft.server.v1_9_R1.TileEntityChest;
+import net.minecraft.server.v1_9_R1.World;
public class AnySilentChest implements IAnySilentChest {
@Override
@@ -42,19 +42,19 @@ public class AnySilentChest implements IAnySilentChest {
EntityPlayer player = ((CraftPlayer) p).getHandle();
World world = player.world;
// If block on top
- if (world.getType(new BlockPosition(x, y + 1, z)).getBlock().c())
+ if (world.getType(new BlockPosition(x, y + 1, z)).l())
return true;
int id = Block.getId(world.getType(new BlockPosition(x, y, z)).getBlock());
// If block next to chest is chest and has a block on top
- if ((Block.getId(world.getType(new BlockPosition(x - 1, y, z)).getBlock()) == id) && (world.getType(new BlockPosition(x - 1, y + 1, z)).getBlock().c()))
+ if ((Block.getId(world.getType(new BlockPosition(x - 1, y, z)).getBlock()) == id) && (world.getType(new BlockPosition(x - 1, y + 1, z)).l()))
return true;
- if ((Block.getId(world.getType(new BlockPosition(x + 1, y, z)).getBlock()) == id) && (world.getType(new BlockPosition(x + 1, y + 1, z)).getBlock().c()))
+ if ((Block.getId(world.getType(new BlockPosition(x + 1, y, z)).getBlock()) == id) && (world.getType(new BlockPosition(x + 1, y + 1, z)).l()))
return true;
- if ((Block.getId(world.getType(new BlockPosition(x, y, z - 1)).getBlock()) == id) && (world.getType(new BlockPosition(x, y + 1, z - 1)).getBlock().c()))
+ if ((Block.getId(world.getType(new BlockPosition(x, y, z - 1)).getBlock()) == id) && (world.getType(new BlockPosition(x, y + 1, z - 1)).l()))
return true;
- if ((Block.getId(world.getType(new BlockPosition(x, y, z + 1)).getBlock()) == id) && (world.getType(new BlockPosition(x, y + 1, z + 1)).getBlock().c()))
+ if ((Block.getId(world.getType(new BlockPosition(x, y, z + 1)).getBlock()) == id) && (world.getType(new BlockPosition(x, y + 1, z + 1)).l()))
return true;
return false;
@@ -71,15 +71,15 @@ public class AnySilentChest implements IAnySilentChest {
int id = Block.getId(world.getType(new BlockPosition(x, y, z)).getBlock());
if (!anychest) {
- if (world.getType(new BlockPosition(x, y + 1, z)).getBlock().c())
+ if (world.getType(new BlockPosition(x, y + 1, z)).l())
return true;
- if ((Block.getId(world.getType(new BlockPosition(x - 1, y, z)).getBlock()) == id) && (world.getType(new BlockPosition(x - 1, y + 1, z)).getBlock().c()))
+ if ((Block.getId(world.getType(new BlockPosition(x - 1, y, z)).getBlock()) == id) && (world.getType(new BlockPosition(x - 1, y + 1, z)).l()))
return true;
- if ((Block.getId(world.getType(new BlockPosition(x + 1, y, z)).getBlock()) == id) && (world.getType(new BlockPosition(x + 1, y + 1, z)).getBlock().c()))
+ if ((Block.getId(world.getType(new BlockPosition(x + 1, y, z)).getBlock()) == id) && (world.getType(new BlockPosition(x + 1, y + 1, z)).l()))
return true;
- if ((Block.getId(world.getType(new BlockPosition(x, y, z - 1)).getBlock()) == id) && (world.getType(new BlockPosition(x, y + 1, z - 1)).getBlock().c()))
+ if ((Block.getId(world.getType(new BlockPosition(x, y, z - 1)).getBlock()) == id) && (world.getType(new BlockPosition(x, y + 1, z - 1)).l()))
return true;
- if ((Block.getId(world.getType(new BlockPosition(x, y, z + 1)).getBlock()) == id) && (world.getType(new BlockPosition(x, y + 1, z + 1)).getBlock().c()))
+ if ((Block.getId(world.getType(new BlockPosition(x, y, z + 1)).getBlock()) == id) && (world.getType(new BlockPosition(x, y + 1, z + 1)).l()))
return true;
}
diff --git a/src/com/lishid/openinv/internal/v1_8_R3/InventoryAccess.java b/src/com/lishid/openinv/internal/v1_9_R1/InventoryAccess.java
similarity index 93%
rename from src/com/lishid/openinv/internal/v1_8_R3/InventoryAccess.java
rename to src/com/lishid/openinv/internal/v1_9_R1/InventoryAccess.java
index c52d35e..dc9164d 100644
--- a/src/com/lishid/openinv/internal/v1_8_R3/InventoryAccess.java
+++ b/src/com/lishid/openinv/internal/v1_9_R1/InventoryAccess.java
@@ -14,7 +14,7 @@
* along with this program. If not, see .
*/
-package com.lishid.openinv.internal.v1_8_R3;
+package com.lishid.openinv.internal.v1_9_R1;
import java.lang.reflect.Field;
@@ -26,9 +26,9 @@ import com.lishid.openinv.Permissions;
import com.lishid.openinv.internal.IInventoryAccess;
//Volatile
-import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftInventory;
+import org.bukkit.craftbukkit.v1_9_R1.inventory.CraftInventory;
-import net.minecraft.server.v1_8_R3.IInventory;
+import net.minecraft.server.v1_9_R1.IInventory;
public class InventoryAccess implements IInventoryAccess {
@Override
diff --git a/src/com/lishid/openinv/internal/v1_8_R3/PlayerDataManager.java b/src/com/lishid/openinv/internal/v1_9_R1/PlayerDataManager.java
similarity index 94%
rename from src/com/lishid/openinv/internal/v1_8_R3/PlayerDataManager.java
rename to src/com/lishid/openinv/internal/v1_9_R1/PlayerDataManager.java
index 993ea4a..73c15dd 100644
--- a/src/com/lishid/openinv/internal/v1_8_R3/PlayerDataManager.java
+++ b/src/com/lishid/openinv/internal/v1_9_R1/PlayerDataManager.java
@@ -14,7 +14,7 @@
* along with this program. If not, see .
*/
-package com.lishid.openinv.internal.v1_8_R3;
+package com.lishid.openinv.internal.v1_9_R1;
import java.io.File;
import java.util.UUID;
@@ -28,11 +28,11 @@ import com.lishid.openinv.internal.IPlayerDataManager;
import com.mojang.authlib.GameProfile;
//Volatile
-import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
+import org.bukkit.craftbukkit.v1_9_R1.CraftServer;
-import net.minecraft.server.v1_8_R3.EntityPlayer;
-import net.minecraft.server.v1_8_R3.MinecraftServer;
-import net.minecraft.server.v1_8_R3.PlayerInteractManager;
+import net.minecraft.server.v1_9_R1.EntityPlayer;
+import net.minecraft.server.v1_9_R1.MinecraftServer;
+import net.minecraft.server.v1_9_R1.PlayerInteractManager;
public class PlayerDataManager implements IPlayerDataManager {
@Override
diff --git a/src/com/lishid/openinv/internal/v1_8_R3/SilentContainerChest.java b/src/com/lishid/openinv/internal/v1_9_R1/SilentContainerChest.java
similarity index 84%
rename from src/com/lishid/openinv/internal/v1_8_R3/SilentContainerChest.java
rename to src/com/lishid/openinv/internal/v1_9_R1/SilentContainerChest.java
index 681136d..9caebed 100644
--- a/src/com/lishid/openinv/internal/v1_8_R3/SilentContainerChest.java
+++ b/src/com/lishid/openinv/internal/v1_9_R1/SilentContainerChest.java
@@ -14,12 +14,12 @@
* along with this program. If not, see .
*/
-package com.lishid.openinv.internal.v1_8_R3;
+package com.lishid.openinv.internal.v1_9_R1;
//Volatile
-import net.minecraft.server.v1_8_R3.ContainerChest;
-import net.minecraft.server.v1_8_R3.EntityHuman;
-import net.minecraft.server.v1_8_R3.IInventory;
+import net.minecraft.server.v1_9_R1.ContainerChest;
+import net.minecraft.server.v1_9_R1.EntityHuman;
+import net.minecraft.server.v1_9_R1.IInventory;
public class SilentContainerChest extends ContainerChest {
public IInventory inv;
diff --git a/src/com/lishid/openinv/internal/v1_8_R3/SpecialEnderChest.java b/src/com/lishid/openinv/internal/v1_9_R1/SpecialEnderChest.java
similarity index 88%
rename from src/com/lishid/openinv/internal/v1_8_R3/SpecialEnderChest.java
rename to src/com/lishid/openinv/internal/v1_9_R1/SpecialEnderChest.java
index cb6f542..16239c2 100644
--- a/src/com/lishid/openinv/internal/v1_8_R3/SpecialEnderChest.java
+++ b/src/com/lishid/openinv/internal/v1_9_R1/SpecialEnderChest.java
@@ -14,7 +14,7 @@
* along with this program. If not, see .
*/
-package com.lishid.openinv.internal.v1_8_R3;
+package com.lishid.openinv.internal.v1_9_R1;
import java.lang.reflect.Field;
import java.util.ArrayList;
@@ -29,15 +29,15 @@ import com.lishid.openinv.OpenInv;
import com.lishid.openinv.internal.ISpecialEnderChest;
//Volatile
-import org.bukkit.craftbukkit.v1_8_R3.entity.CraftHumanEntity;
-import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
-import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftInventory;
+import org.bukkit.craftbukkit.v1_9_R1.entity.CraftHumanEntity;
+import org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer;
+import org.bukkit.craftbukkit.v1_9_R1.inventory.CraftInventory;
-import net.minecraft.server.v1_8_R3.EntityHuman;
-import net.minecraft.server.v1_8_R3.IInventory;
-import net.minecraft.server.v1_8_R3.InventoryEnderChest;
-import net.minecraft.server.v1_8_R3.InventorySubcontainer;
-import net.minecraft.server.v1_8_R3.ItemStack;
+import net.minecraft.server.v1_9_R1.EntityHuman;
+import net.minecraft.server.v1_9_R1.IInventory;
+import net.minecraft.server.v1_9_R1.InventoryEnderChest;
+import net.minecraft.server.v1_9_R1.InventorySubcontainer;
+import net.minecraft.server.v1_9_R1.ItemStack;
public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest {
public List transaction = new ArrayList();
diff --git a/src/com/lishid/openinv/internal/v1_8_R3/SpecialPlayerInventory.java b/src/com/lishid/openinv/internal/v1_9_R1/SpecialPlayerInventory.java
similarity index 78%
rename from src/com/lishid/openinv/internal/v1_8_R3/SpecialPlayerInventory.java
rename to src/com/lishid/openinv/internal/v1_9_R1/SpecialPlayerInventory.java
index 813834b..276b080 100644
--- a/src/com/lishid/openinv/internal/v1_8_R3/SpecialPlayerInventory.java
+++ b/src/com/lishid/openinv/internal/v1_9_R1/SpecialPlayerInventory.java
@@ -14,7 +14,10 @@
* along with this program. If not, see .
*/
-package com.lishid.openinv.internal.v1_8_R3;
+package com.lishid.openinv.internal.v1_9_R1;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
@@ -23,13 +26,13 @@ import com.lishid.openinv.OpenInv;
import com.lishid.openinv.internal.ISpecialPlayerInventory;
//Volatile
-import org.bukkit.craftbukkit.v1_8_R3.entity.CraftHumanEntity;
-import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
-import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftInventory;
+import org.bukkit.craftbukkit.v1_9_R1.entity.CraftHumanEntity;
+import org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer;
+import org.bukkit.craftbukkit.v1_9_R1.inventory.CraftInventory;
-import net.minecraft.server.v1_8_R3.EntityHuman;
-import net.minecraft.server.v1_8_R3.ItemStack;
-import net.minecraft.server.v1_8_R3.PlayerInventory;
+import net.minecraft.server.v1_9_R1.EntityHuman;
+import net.minecraft.server.v1_9_R1.ItemStack;
+import net.minecraft.server.v1_9_R1.PlayerInventory;
public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory {
CraftPlayer owner;
@@ -41,11 +44,30 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
super(((CraftPlayer) p).getHandle());
this.owner = ((CraftPlayer) p);
this.playerOnline = online;
- this.items = player.inventory.items;
- this.armor = player.inventory.armor;
+ setItemArrays(this, player.inventory.items, player.inventory.armor, player.inventory.extraSlots);
OpenInv.inventories.put(owner.getName().toLowerCase(), this);
}
+ private void setItemArrays(PlayerInventory inventory, ItemStack[] items, ItemStack[] armor,
+ ItemStack[] extraSlots) {
+ try {
+ Field field = inventory.getClass().getField("items");
+ Field modifiers = Field.class.getDeclaredField("modifiers");
+ modifiers.setAccessible(true);
+ modifiers.setInt(field, field.getModifiers() & ~Modifier.FINAL);
+ field.set(inventory, items);
+ field = inventory.getClass().getField("armor");
+ modifiers.setInt(field, field.getModifiers() & ~Modifier.FINAL);
+ field.set(inventory, armor);
+ field = inventory.getClass().getField("extraSlots");
+ modifiers.setInt(field, field.getModifiers() & ~Modifier.FINAL);
+ } catch (NoSuchFieldException | SecurityException | IllegalArgumentException
+ | IllegalAccessException e) {
+ // Unable to set final fields to item arrays, we're screwed. Noisily fail.
+ e.printStackTrace();
+ }
+ }
+
@Override
public Inventory getBukkitInventory() {
return inventory;
@@ -63,8 +85,7 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
public void PlayerGoOnline(Player player) {
if (!playerOnline) {
CraftPlayer p = (CraftPlayer) player;
- p.getHandle().inventory.items = this.items;
- p.getHandle().inventory.armor = this.armor;
+ setItemArrays(p.getHandle().inventory, items, armor, extraSlots);
p.saveData();
playerOnline = true;
}
diff --git a/src/plugin.yml b/src/plugin.yml
index 9c9401c..02b49b2 100644
--- a/src/plugin.yml
+++ b/src/plugin.yml
@@ -1,6 +1,6 @@
name: OpenInv
main: com.lishid.openinv.OpenInv
-version: 2.2.9
+version: 2.2.10
author: lishid
authors: [Jikoo]
description: >