diff --git a/README b/README
index 209e1e8..ebd75f3 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-Copyright (C) 2011-2014 lishid. All rights reserved.
+Copyright (C) 2011-2016 lishid. All rights reserved.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/pom.xml b/pom.xml
index 1505c64..391df44 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
com.lishid
openinv
jar
- 2.3.4
+ 2.3.5
OpenInv
http://dev.bukkit.org/bukkit-plugins/openinv/
@@ -23,14 +23,14 @@
org.bukkit
bukkit
- 1.8.8-R0.1-SNAPSHOT
+ 1.9-R0.1-SNAPSHOT
provided
org.bukkit
craftbukkit
- 1.8.8-R0.1-SNAPSHOT
+ 1.9-R0.1-SNAPSHOT
provided
diff --git a/src/main/java/com/lishid/openinv/ConfigUpdater.java b/src/main/java/com/lishid/openinv/ConfigUpdater.java
index f3fa1bb..31a2fd9 100644
--- a/src/main/java/com/lishid/openinv/ConfigUpdater.java
+++ b/src/main/java/com/lishid/openinv/ConfigUpdater.java
@@ -13,6 +13,7 @@ import org.bukkit.configuration.file.FileConfiguration;
import com.lishid.openinv.utils.UUIDUtil;
public class ConfigUpdater {
+
private final OpenInv plugin;
private static final int CONFIG_VERSION = 2;
@@ -33,8 +34,7 @@ public class ConfigUpdater {
if (isConfigOutdated()) {
plugin.getLogger().info("[Config] Update found! Performing update...");
performUpdate();
- }
- else {
+ } else {
plugin.getLogger().info("[Config] Update not required.");
}
}
@@ -137,6 +137,7 @@ public class ConfigUpdater {
for (String playerName : keys) {
UUID uuid = UUIDUtil.getUUIDOf(playerName);
+
if (uuid != null) {
boolean toggled = section.getBoolean(playerName + ".toggle", false);
toggles.put(uuid, toggled);
@@ -152,9 +153,11 @@ public class ConfigUpdater {
@SuppressWarnings("deprecation")
private Material getMaterialById(int id) {
Material material = Material.getMaterial(id);
+
if (material == null) {
material = Material.STICK;
}
+
return material;
}
}
diff --git a/src/main/java/com/lishid/openinv/OpenInv.java b/src/main/java/com/lishid/openinv/OpenInv.java
index 8bf491c..863891b 100644
--- a/src/main/java/com/lishid/openinv/OpenInv.java
+++ b/src/main/java/com/lishid/openinv/OpenInv.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2011-2014 lishid. All rights reserved.
+ * Copyright (C) 2011-2016 lishid. All rights reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -20,6 +20,7 @@ import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
+import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.command.CommandSender;
@@ -44,12 +45,8 @@ import com.lishid.openinv.listeners.OpenInvEntityListener;
import com.lishid.openinv.listeners.OpenInvInventoryListener;
import com.lishid.openinv.listeners.OpenInvPlayerListener;
-/**
- * Open other player's inventory
- *
- * @author lishid
- */
public class OpenInv extends JavaPlugin {
+
public static final Map inventories = new HashMap();
public static final Map enderChests = new HashMap();
@@ -113,11 +110,11 @@ public class OpenInv extends JavaPlugin {
public static Object getFromConfig(String path, Object defaultValue) {
Object val = mainPlugin.getConfig().get(path);
+
if (val == null) {
mainPlugin.getConfig().set(path, defaultValue);
return defaultValue;
- }
- else {
+ } else {
return val;
}
}
@@ -215,12 +212,15 @@ public class OpenInv extends JavaPlugin {
public static boolean hasPermission(Permissible player, String permission) {
String[] parts = permission.split("\\.");
String perm = "";
+
for (int i = 0; i < parts.length; i++) {
if (player.hasPermission(perm + "*")) {
return true;
}
+
perm += parts[i] + ".";
}
+
return player.hasPermission(permission);
}
}
diff --git a/src/main/java/com/lishid/openinv/commands/AnyChestCommand.java b/src/main/java/com/lishid/openinv/commands/AnyChestCommand.java
index 3bcde82..732f641 100644
--- a/src/main/java/com/lishid/openinv/commands/AnyChestCommand.java
+++ b/src/main/java/com/lishid/openinv/commands/AnyChestCommand.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2011-2014 lishid. All rights reserved.
+ * Copyright (C) 2011-2016 lishid. All rights reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -26,6 +26,7 @@ import com.lishid.openinv.OpenInv;
import com.lishid.openinv.Permissions;
public class AnyChestCommand implements CommandExecutor {
+
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (command.getName().equalsIgnoreCase("anychest")) {
diff --git a/src/main/java/com/lishid/openinv/commands/OpenEnderCommand.java b/src/main/java/com/lishid/openinv/commands/OpenEnderCommand.java
index f39fce8..ceb6472 100644
--- a/src/main/java/com/lishid/openinv/commands/OpenEnderCommand.java
+++ b/src/main/java/com/lishid/openinv/commands/OpenEnderCommand.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2011-2014 lishid. All rights reserved.
+ * Copyright (C) 2011-2016 lishid. All rights reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -33,6 +33,7 @@ import com.lishid.openinv.internal.SpecialEnderChest;
import com.lishid.openinv.utils.UUIDUtil;
public class OpenEnderCommand implements CommandExecutor {
+
private final OpenInv plugin;
private final Map openEnderHistory = new ConcurrentHashMap();
@@ -73,8 +74,7 @@ public class OpenEnderCommand implements CommandExecutor {
if (args.length < 1) {
if (history != null) {
uuid = history;
- }
- else {
+ } else {
sender.sendMessage(ChatColor.RED + "OpenEnder history is empty!");
return true;
}
@@ -111,6 +111,7 @@ public class OpenEnderCommand implements CommandExecutor {
if (player == null) {
return;
}
+
openInventory(player, target);
}
});
diff --git a/src/main/java/com/lishid/openinv/commands/OpenInvCommand.java b/src/main/java/com/lishid/openinv/commands/OpenInvCommand.java
index 4368ac7..75e093a 100644
--- a/src/main/java/com/lishid/openinv/commands/OpenInvCommand.java
+++ b/src/main/java/com/lishid/openinv/commands/OpenInvCommand.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2011-2014 lishid. All rights reserved.
+ * Copyright (C) 2011-2016 lishid. All rights reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -33,6 +33,7 @@ import com.lishid.openinv.internal.SpecialPlayerInventory;
import com.lishid.openinv.utils.UUIDUtil;
public class OpenInvCommand implements CommandExecutor {
+
private final OpenInv plugin;
private final Map openInvHistory = new ConcurrentHashMap();
@@ -147,10 +148,14 @@ public class OpenInvCommand implements CommandExecutor {
openInvHistory.put(player.getUniqueId(), target.getUniqueId());
// Create the inventory
+ /*
SpecialPlayerInventory inv = OpenInv.inventories.get(target.getUniqueId());
if (inv == null) {
inv = new SpecialPlayerInventory(target, target.isOnline());
}
+ */
+
+ SpecialPlayerInventory inv = new SpecialPlayerInventory(target, target.isOnline());
// Open the inventory
player.openInventory(inv.getBukkitInventory());
diff --git a/src/main/java/com/lishid/openinv/commands/SearchEnderCommand.java b/src/main/java/com/lishid/openinv/commands/SearchEnderCommand.java
index 71c4557..778a762 100644
--- a/src/main/java/com/lishid/openinv/commands/SearchEnderCommand.java
+++ b/src/main/java/com/lishid/openinv/commands/SearchEnderCommand.java
@@ -12,6 +12,7 @@ import com.lishid.openinv.OpenInv;
import com.lishid.openinv.Permissions;
public class SearchEnderCommand implements CommandExecutor {
+
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (command.getName().equalsIgnoreCase("searchender")) {
@@ -30,11 +31,11 @@ public class SearchEnderCommand implements CommandExecutor {
gData = args[0].split(":");
material = Material.matchMaterial(gData[0]);
}
+
if (args.length >= 2) {
try {
count = Integer.parseInt(args[1]);
- }
- catch (NumberFormatException ex) {
+ } catch (NumberFormatException e) {
sender.sendMessage(ChatColor.RED + "'" + args[1] + "' is not a number!");
return false;
}
diff --git a/src/main/java/com/lishid/openinv/commands/SearchInvCommand.java b/src/main/java/com/lishid/openinv/commands/SearchInvCommand.java
index babe370..46bf5f3 100644
--- a/src/main/java/com/lishid/openinv/commands/SearchInvCommand.java
+++ b/src/main/java/com/lishid/openinv/commands/SearchInvCommand.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2011-2014 lishid. All rights reserved.
+ * Copyright (C) 2011-2016 lishid. All rights reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -28,6 +28,7 @@ import com.lishid.openinv.OpenInv;
import com.lishid.openinv.Permissions;
public class SearchInvCommand implements CommandExecutor {
+
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (command.getName().equalsIgnoreCase("searchinv")) {
@@ -46,11 +47,11 @@ public class SearchInvCommand implements CommandExecutor {
gData = args[0].split(":");
material = Material.matchMaterial(gData[0]);
}
+
if (args.length >= 2) {
try {
count = Integer.parseInt(args[1]);
- }
- catch (NumberFormatException ex) {
+ } catch (NumberFormatException e) {
sender.sendMessage(ChatColor.RED + "'" + args[1] + "' is not a number!");
return false;
}
diff --git a/src/main/java/com/lishid/openinv/commands/SilentChestCommand.java b/src/main/java/com/lishid/openinv/commands/SilentChestCommand.java
index ce94e88..afdc8c6 100644
--- a/src/main/java/com/lishid/openinv/commands/SilentChestCommand.java
+++ b/src/main/java/com/lishid/openinv/commands/SilentChestCommand.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2011-2014 lishid. All rights reserved.
+ * Copyright (C) 2011-2016 lishid. All rights reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -26,6 +26,7 @@ import com.lishid.openinv.OpenInv;
import com.lishid.openinv.Permissions;
public class SilentChestCommand implements CommandExecutor {
+
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (command.getName().equalsIgnoreCase("silentchest")) {
diff --git a/src/main/java/com/lishid/openinv/commands/ToggleOpenInvCommand.java b/src/main/java/com/lishid/openinv/commands/ToggleOpenInvCommand.java
index a024c24..ac3c714 100644
--- a/src/main/java/com/lishid/openinv/commands/ToggleOpenInvCommand.java
+++ b/src/main/java/com/lishid/openinv/commands/ToggleOpenInvCommand.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2011-2014 lishid. All rights reserved.
+ * Copyright (C) 2011-2016 lishid. All rights reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -26,6 +26,7 @@ import com.lishid.openinv.OpenInv;
import com.lishid.openinv.Permissions;
public class ToggleOpenInvCommand implements CommandExecutor {
+
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (command.getName().equalsIgnoreCase("toggleopeninv")) {
diff --git a/src/main/java/com/lishid/openinv/internal/AnySilentChest.java b/src/main/java/com/lishid/openinv/internal/AnySilentChest.java
index 6c88ad6..8347aa6 100644
--- a/src/main/java/com/lishid/openinv/internal/AnySilentChest.java
+++ b/src/main/java/com/lishid/openinv/internal/AnySilentChest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2011-2014 lishid. All rights reserved.
+ * Copyright (C) 2011-2016 lishid. All rights reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -23,29 +23,32 @@ import org.bukkit.entity.Player;
import com.lishid.openinv.OpenInv;
// Volatile
-import net.minecraft.server.v1_8_R3.*;
+import net.minecraft.server.v1_9_R1.*;
+import net.minecraft.server.v1_9_R1.BlockChest.Type;
-import org.bukkit.craftbukkit.v1_8_R3.entity.*;
+import org.bukkit.craftbukkit.v1_9_R1.entity.*;
public class AnySilentChest {
+
public boolean isAnyChestNeeded(Player p, int x, int y, int z) {
// FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest
BlockPosition position = new BlockPosition(x, y, z);
EntityPlayer player = ((CraftPlayer) p).getHandle();
World world = player.world;
- BlockChest chest = (BlockChest) (((BlockChest) world.getType(position).getBlock()).b == 1 ?
+ BlockChest chest = (BlockChest) (((BlockChest) world.getType(position).getBlock()).g == Type.TRAP ?
Block.getByName("trapped_chest") : Block.getByName("chest"));
- // If block on top
+ // If a block is on top
if (topBlocking(world, position)) {
return true;
}
- // If block next to chest is chest and has a block on top
+ // If the block next to the chest is chest and has a block on top
for (EnumDirection direction : EnumDirectionList.HORIZONTAL) {
BlockPosition sidePosition = position.shift(direction);
- Block var8 = world.getType(sidePosition).getBlock();
- if (var8 == chest) {
+ Block block = world.getType(sidePosition).getBlock();
+
+ if (block == chest) {
if (this.topBlocking(world, sidePosition)) {
return true;
}
@@ -54,29 +57,33 @@ public class AnySilentChest {
return false;
}
+
private boolean topBlocking(World world, BlockPosition position) {
return this.blockOnTop(world, position) || this.ocelotOnTop(world, position);
}
private boolean blockOnTop(World world, BlockPosition position) {
- return world.getType(position.up()).getBlock().isOccluding();
+ Block block = world.getType(position.up()).getBlock();
+ return block.isOccluding(block.getBlockData());
}
private boolean ocelotOnTop(World world, BlockPosition position) {
- Iterator var3 = world.a(EntityOcelot.class,
+ Iterator iterator = world.a(EntityOcelot.class,
new AxisAlignedBB((double) position.getX(), (double) (position.getY() + 1),
(double) position.getZ(), (double) (position.getX() + 1),
(double) (position.getY() + 2), (double) (position.getZ() + 1))).iterator();
- EntityOcelot var5;
+ EntityOcelot entityOcelot;
+
do {
- if (!var3.hasNext()) {
+ if (!iterator.hasNext()) {
return false;
}
- Entity var4 = (Entity) var3.next();
- var5 = (EntityOcelot) var4;
- } while (!var5.isSitting());
+ Entity entity = (Entity) iterator.next();
+
+ entityOcelot = (EntityOcelot) entity;
+ } while (!entityOcelot.isSitting());
return true;
}
@@ -89,7 +96,7 @@ public class AnySilentChest {
return true;
}
- BlockChest chest = (BlockChest) (((BlockChest) world.getType(position).getBlock()).b == 1 ?
+ BlockChest chest = (BlockChest) (((BlockChest) world.getType(position).getBlock()).g == Type.TRAP ?
Block.getByName("trapped_chest") : Block.getByName("chest"));
TileEntity tileEntity = world.getTileEntity(position);
@@ -105,12 +112,14 @@ public class AnySilentChest {
for (EnumDirection direction : EnumDirectionList.HORIZONTAL) {
BlockPosition side = position.shift(direction);
Block block = world.getType(side).getBlock();
+
if (block == chest) {
if (!anyChest && this.topBlocking(world, side)) {
return true;
}
TileEntity sideTileEntity = world.getTileEntity(side);
+
if (sideTileEntity instanceof TileEntityChest) {
if (direction != EnumDirection.WEST && direction != EnumDirection.NORTH) {
tileInventory = new InventoryLargeChest("container.chestDouble", tileInventory, (TileEntityChest) sideTileEntity);
@@ -122,11 +131,14 @@ public class AnySilentChest {
}
boolean returnValue = true;
+
if (silentChest) {
tileInventory = new SilentInventory(tileInventory);
+
if (OpenInv.notifySilentChest()) {
OpenInv.sendMessage(p, "You are opening a chest silently.");
}
+
returnValue = false;
}
diff --git a/src/main/java/com/lishid/openinv/internal/EnumDirectionList.java b/src/main/java/com/lishid/openinv/internal/EnumDirectionList.java
index 56c5b48..2cd77f6 100644
--- a/src/main/java/com/lishid/openinv/internal/EnumDirectionList.java
+++ b/src/main/java/com/lishid/openinv/internal/EnumDirectionList.java
@@ -4,16 +4,17 @@ import java.util.Iterator;
import com.google.common.collect.Iterators;
-import net.minecraft.server.v1_8_R3.EnumDirection;
-import net.minecraft.server.v1_8_R3.EnumDirection.EnumDirectionLimit;
+import net.minecraft.server.v1_9_R1.EnumDirection;
+import net.minecraft.server.v1_9_R1.EnumDirection.EnumDirectionLimit;
public enum EnumDirectionList implements Iterable {
+
HORIZONTAL(EnumDirectionLimit.HORIZONTAL),
VERTICAL(EnumDirectionLimit.VERTICAL);
private final EnumDirectionLimit list;
- private EnumDirectionList(EnumDirectionLimit list) {
+ EnumDirectionList(EnumDirectionLimit list) {
this.list = list;
}
diff --git a/src/main/java/com/lishid/openinv/internal/InventoryAccess.java b/src/main/java/com/lishid/openinv/internal/InventoryAccess.java
index 9d6940b..cf8e2f1 100644
--- a/src/main/java/com/lishid/openinv/internal/InventoryAccess.java
+++ b/src/main/java/com/lishid/openinv/internal/InventoryAccess.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2011-2014 lishid. All rights reserved.
+ * Copyright (C) 2011-2016 lishid. All rights reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -25,11 +25,12 @@ import com.lishid.openinv.OpenInv;
import com.lishid.openinv.Permissions;
// Volatile
-import net.minecraft.server.v1_8_R3.*;
+import net.minecraft.server.v1_9_R1.*;
-import org.bukkit.craftbukkit.v1_8_R3.inventory.*;
+import org.bukkit.craftbukkit.v1_9_R1.inventory.*;
public class InventoryAccess {
+
public boolean check(Inventory inventory, HumanEntity player) {
IInventory inv = grabInventory(inventory);
@@ -49,24 +50,25 @@ public class InventoryAccess {
}
private IInventory grabInventory(Inventory inventory) {
- if(inventory instanceof CraftInventory) {
+ if (inventory instanceof CraftInventory) {
return ((CraftInventory) inventory).getInventory();
}
// Use reflection to find the inventory
Class extends Inventory> clazz = inventory.getClass();
IInventory result = null;
- for(Field f : clazz.getDeclaredFields()) {
+ for (Field f : clazz.getDeclaredFields()) {
f.setAccessible(true);
- if(IInventory.class.isAssignableFrom(f.getDeclaringClass())) {
+
+ if (IInventory.class.isAssignableFrom(f.getDeclaringClass())) {
try {
result = (IInventory) f.get(inventory);
- }
- catch (Exception e) {
+ } catch (Exception e) {
OpenInv.log(e);
}
}
}
+
return result;
}
}
diff --git a/src/main/java/com/lishid/openinv/internal/PlayerDataManager.java b/src/main/java/com/lishid/openinv/internal/PlayerDataManager.java
index d6fa177..4e4aef0 100644
--- a/src/main/java/com/lishid/openinv/internal/PlayerDataManager.java
+++ b/src/main/java/com/lishid/openinv/internal/PlayerDataManager.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2011-2014 lishid. All rights reserved.
+ * Copyright (C) 2011-2016 lishid. All rights reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -26,17 +26,19 @@ import com.lishid.openinv.OpenInv;
import com.mojang.authlib.GameProfile;
// Volatile
-import net.minecraft.server.v1_8_R3.*;
+import net.minecraft.server.v1_9_R1.*;
-import org.bukkit.craftbukkit.v1_8_R3.*;
+import org.bukkit.craftbukkit.v1_9_R1.*;
public class PlayerDataManager {
+
public Player loadPlayer(UUID uuid) {
try {
OfflinePlayer player = Bukkit.getOfflinePlayer(uuid);
if (player == null || !player.hasPlayedBefore()) {
return null;
}
+
GameProfile profile = new GameProfile(uuid, player.getName());
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
// Create an entity to load the player data
@@ -44,14 +46,15 @@ public class PlayerDataManager {
// Get the bukkit entity
Player target = entity.getBukkitEntity();
+
if (target != null) {
// Load data
target.loadData();
+
// Return the entity
return target;
}
- }
- catch (Exception e) {
+ } catch (Exception e) {
OpenInv.log(e);
}
diff --git a/src/main/java/com/lishid/openinv/internal/SilentContainerChest.java b/src/main/java/com/lishid/openinv/internal/SilentContainerChest.java
index b9bc4be..301c813 100644
--- a/src/main/java/com/lishid/openinv/internal/SilentContainerChest.java
+++ b/src/main/java/com/lishid/openinv/internal/SilentContainerChest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2011-2014 lishid. All rights reserved.
+ * Copyright (C) 2011-2016 lishid. All rights reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,9 +17,10 @@
package com.lishid.openinv.internal;
// Volatile
-import net.minecraft.server.v1_8_R3.*;
+import net.minecraft.server.v1_9_R1.*;
public class SilentContainerChest extends ContainerChest {
+
public IInventory inv;
public SilentContainerChest(IInventory i1, IInventory i2, EntityHuman human) {
diff --git a/src/main/java/com/lishid/openinv/internal/SilentInventory.java b/src/main/java/com/lishid/openinv/internal/SilentInventory.java
index a2f50a6..ee802c5 100644
--- a/src/main/java/com/lishid/openinv/internal/SilentInventory.java
+++ b/src/main/java/com/lishid/openinv/internal/SilentInventory.java
@@ -2,14 +2,16 @@ package com.lishid.openinv.internal;
import java.util.List;
-import org.bukkit.craftbukkit.v1_8_R3.entity.CraftHumanEntity;
+import org.bukkit.Location;
+import org.bukkit.craftbukkit.v1_9_R1.entity.CraftHumanEntity;
import org.bukkit.entity.HumanEntity;
import org.bukkit.inventory.InventoryHolder;
// Volatile
-import net.minecraft.server.v1_8_R3.*;
+import net.minecraft.server.v1_9_R1.*;
public class SilentInventory implements ITileInventory {
+
public ITileInventory inv;
public SilentInventory(ITileInventory inv) {
@@ -17,8 +19,8 @@ public class SilentInventory implements ITileInventory {
}
@Override
- public boolean r_() {
- return inv.r_();
+ public boolean x_() {
+ return inv.x_();
}
@Override
@@ -27,8 +29,8 @@ public class SilentInventory implements ITileInventory {
}
@Override
- public ChestLock i() {
- return inv.i();
+ public ChestLock y_() {
+ return inv.y_();
}
@Override
@@ -92,8 +94,8 @@ public class SilentInventory implements ITileInventory {
}
@Override
- public void b(int i, int i1) {
- inv.b(i, i1);
+ public void setProperty(int i, int i1) {
+ inv.setProperty(i, i1);
}
@Override
@@ -136,6 +138,11 @@ public class SilentInventory implements ITileInventory {
inv.setMaxStackSize(i);
}
+ @Override
+ public Location getLocation() {
+ return inv.getLocation();
+ }
+
@Override
public String getName() {
return inv.getName();
diff --git a/src/main/java/com/lishid/openinv/internal/SpecialEnderChest.java b/src/main/java/com/lishid/openinv/internal/SpecialEnderChest.java
index 91f7b94..4c37370 100644
--- a/src/main/java/com/lishid/openinv/internal/SpecialEnderChest.java
+++ b/src/main/java/com/lishid/openinv/internal/SpecialEnderChest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2011-2014 lishid. All rights reserved.
+ * Copyright (C) 2011-2016 lishid. All rights reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -23,12 +23,13 @@ import org.bukkit.inventory.InventoryHolder;
import com.lishid.openinv.OpenInv;
// Volatile
-import net.minecraft.server.v1_8_R3.*;
+import net.minecraft.server.v1_9_R1.*;
-import org.bukkit.craftbukkit.v1_8_R3.entity.*;
-import org.bukkit.craftbukkit.v1_8_R3.inventory.*;
+import org.bukkit.craftbukkit.v1_9_R1.entity.*;
+import org.bukkit.craftbukkit.v1_9_R1.inventory.*;
public class SpecialEnderChest extends InventorySubcontainer {
+
private final CraftInventory inventory = new CraftInventory(this);
private final InventoryEnderChest enderChest;
private final CraftPlayer owner;
diff --git a/src/main/java/com/lishid/openinv/internal/SpecialPlayerInventory.java b/src/main/java/com/lishid/openinv/internal/SpecialPlayerInventory.java
index fe1cdad..029a8cf 100644
--- a/src/main/java/com/lishid/openinv/internal/SpecialPlayerInventory.java
+++ b/src/main/java/com/lishid/openinv/internal/SpecialPlayerInventory.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2011-2014 lishid. All rights reserved.
+ * Copyright (C) 2011-2016 lishid. All rights reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,32 +16,68 @@
package com.lishid.openinv.internal;
+import java.lang.reflect.Field;
+
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
+// Volatile
+import net.minecraft.server.v1_9_R1.*;
+
+import org.bukkit.craftbukkit.v1_9_R1.entity.*;
+import org.bukkit.craftbukkit.v1_9_R1.inventory.*;
+
import com.lishid.openinv.OpenInv;
-// Volatile
-import net.minecraft.server.v1_8_R3.*;
-
-import org.bukkit.craftbukkit.v1_8_R3.entity.*;
-import org.bukkit.craftbukkit.v1_8_R3.inventory.*;
-
public class SpecialPlayerInventory extends PlayerInventory {
+
private final CraftInventory inventory = new CraftInventory(this);
private final ItemStack[] extra = new ItemStack[5];
+ 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;
- this.items = player.inventory.items;
- this.armor = player.inventory.armor;
+ 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);
}
+ 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() {
return inventory;
}
@@ -54,8 +90,7 @@ public class SpecialPlayerInventory extends PlayerInventory {
}
private void linkInventory(PlayerInventory inventory) {
- inventory.items = this.items;
- inventory.armor = this.armor;
+ reflectContents(inventory.getClass(), inventory, this);
}
public void playerOnline(Player player) {
@@ -82,99 +117,102 @@ public class SpecialPlayerInventory extends PlayerInventory {
@Override
public ItemStack[] getContents() {
- ItemStack[] C = new ItemStack[getSize()];
- System.arraycopy(items, 0, C, 0, items.length);
- System.arraycopy(armor, 0, C, items.length, armor.length);
- return C;
+ ItemStack[] contents = new ItemStack[getSize()];
+ System.arraycopy(this.items, 0, contents, 0, this.items.length);
+ System.arraycopy(this.armor, 0, contents, this.items.length, this.armor.length);
+ return contents;
}
@Override
public int getSize() {
- return super.getSize() + 5;
+ return super.getSize() - this.extraSlots.length + 5;
}
@Override
public ItemStack getItem(int i) {
- ItemStack[] is = this.items;
+ ItemStack[] is = null;
+ ItemStack[][] contents = this.arrays;
+ int j = contents.length;
- if (i >= is.length) {
- i -= is.length;
- is = this.armor;
- } else {
- i = getReversedItemSlotNum(i);
+ for (int k = 0; k < j; ++k) {
+ ItemStack[] is2 = contents[k];
+
+ if (i < is2.length) {
+ is = is2;
+ break;
+ }
+
+ i -= is2.length;
}
- if (i >= is.length) {
- i -= is.length;
- is = this.extra;
+ if (is == this.items) {
+ i = getReversedItemSlotNum(i);
} else if (is == this.armor) {
i = getReversedArmorSlotNum(i);
+ } else if (is == this.extra) {
+ // Do nothing
}
- return is[i];
+ return is == null ? null : is[i];
}
@Override
public ItemStack splitStack(int i, int j) {
- ItemStack[] is = this.items;
+ ItemStack[] is = null;
+ ItemStack[][] contents = this.arrays;
+ int k = contents.length;
- if (i >= is.length) {
- i -= is.length;
- is = this.armor;
- } else {
- i = getReversedItemSlotNum(i);
+ for (int l = 0; l < k; ++l) {
+ ItemStack[] is2 = contents[l];
+
+ if (i < is2.length) {
+ is = is2;
+ break;
+ }
+
+ i -= is2.length;
}
- if (i >= is.length) {
- i -= is.length;
- is = this.extra;
+ if (is == this.items) {
+ i = getReversedItemSlotNum(i);
} else if (is == this.armor) {
i = getReversedArmorSlotNum(i);
+ } else if (is == this.extra) {
+ // Do nothing
}
- if (is[i] != null) {
- ItemStack itemstack;
-
- if (is[i].count <= j) {
- itemstack = is[i];
- is[i] = null;
- return itemstack;
- } else {
- itemstack = is[i].cloneAndSubtract(j);
- if (is[i].count == 0) {
- is[i] = null;
- }
-
- return itemstack;
- }
- } else {
- return null;
- }
+ return is != null && is[i] != null ? ContainerUtil.a(is, i, j) : null;
}
@Override
public ItemStack splitWithoutUpdate(int i) {
- ItemStack[] is = this.items;
+ ItemStack[] is = null;
+ ItemStack[][] contents = this.arrays;
+ int j = contents.length;
- if (i >= is.length) {
- i -= is.length;
- is = this.armor;
- } else {
- i = getReversedItemSlotNum(i);
+ for (int object = 0; object < j; ++object) {
+ ItemStack[] is2 = contents[object];
+
+ if (i < is2.length) {
+ is = is2;
+ break;
+ }
+
+ i -= is2.length;
}
- if (i >= is.length) {
- i -= is.length;
- is = this.extra;
- } else if (is == this.armor) {
- i = getReversedArmorSlotNum(i);
- }
-
- if (is[i] != null) {
- ItemStack itemstack = is[i];
+ if (is != null && is[i] != null) {
+ if (is == this.items) {
+ i = getReversedItemSlotNum(i);
+ } else if (is == this.armor) {
+ i = getReversedArmorSlotNum(i);
+ } else if (is == this.extra) {
+ // Do nothing
+ }
+ Object object = is[i];
is[i] = null;
- return itemstack;
+ return (ItemStack) object;
} else {
return null;
}
@@ -182,51 +220,46 @@ public class SpecialPlayerInventory extends PlayerInventory {
@Override
public void setItem(int i, ItemStack itemStack) {
- ItemStack[] is = this.items;
+ ItemStack[] is = null;
+ ItemStack[][] contents = this.arrays;
+ int j = contents.length;
- if (i >= is.length) {
- i -= is.length;
- is = this.armor;
- } else {
- i = getReversedItemSlotNum(i);
+ for (int k = 0; k < j; ++k) {
+ ItemStack[] is2 = contents[k];
+
+ if (i < is2.length) {
+ is = is2;
+ break;
+ }
+
+ i -= is2.length;
}
- if (i >= is.length) {
- i -= is.length;
- is = this.extra;
- } else if (is == this.armor) {
- i = getReversedArmorSlotNum(i);
+ if (is != null) {
+ if (is == this.items) {
+ i = getReversedItemSlotNum(i);
+ } else if (is == this.armor) {
+ i = getReversedArmorSlotNum(i);
+ } else if (is == this.extra) {
+ owner.getHandle().drop(itemStack, true);
+ itemStack = null;
+ }
+
+ is[i] = itemStack;
+
+ owner.getHandle().defaultContainer.b();
}
-
- // Effects
- if (is == this.extra) {
- owner.getHandle().drop(itemStack, true);
- itemStack = null;
- }
-
- is[i] = itemStack;
-
- 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
diff --git a/src/main/java/com/lishid/openinv/listeners/OpenInvEntityListener.java b/src/main/java/com/lishid/openinv/listeners/OpenInvEntityListener.java
index 3508af5..0411f6f 100644
--- a/src/main/java/com/lishid/openinv/listeners/OpenInvEntityListener.java
+++ b/src/main/java/com/lishid/openinv/listeners/OpenInvEntityListener.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2011-2014 lishid. All rights reserved.
+ * Copyright (C) 2011-2016 lishid. All rights reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -38,7 +38,7 @@ public class OpenInvEntityListener implements Listener {
Player player = (Player) attacker;
- if (player.getItemInHand().getType() == OpenInv.getOpenInvItem()) {
+ if (player.getInventory().getItemInMainHand().getType() == OpenInv.getOpenInvItem()) {
if (!OpenInv.getPlayerItemOpenInvStatus(player) || !OpenInv.hasPermission(player, Permissions.PERM_OPENINV)) {
return;
}
diff --git a/src/main/java/com/lishid/openinv/listeners/OpenInvInventoryListener.java b/src/main/java/com/lishid/openinv/listeners/OpenInvInventoryListener.java
index 6d3250e..e81fd5c 100644
--- a/src/main/java/com/lishid/openinv/listeners/OpenInvInventoryListener.java
+++ b/src/main/java/com/lishid/openinv/listeners/OpenInvInventoryListener.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2011-2014 lishid. All rights reserved.
+ * Copyright (C) 2011-2016 lishid. All rights reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/main/java/com/lishid/openinv/listeners/OpenInvPlayerListener.java b/src/main/java/com/lishid/openinv/listeners/OpenInvPlayerListener.java
index 2c479f0..579d93d 100644
--- a/src/main/java/com/lishid/openinv/listeners/OpenInvPlayerListener.java
+++ b/src/main/java/com/lishid/openinv/listeners/OpenInvPlayerListener.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2011-2014 lishid. All rights reserved.
+ * Copyright (C) 2011-2016 lishid. All rights reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -143,7 +143,7 @@ public class OpenInvPlayerListener implements Listener {
}
case RIGHT_CLICK_AIR:
// OpenInv item
- if (player.getItemInHand().getType() == OpenInv.getOpenInvItem() && OpenInv.getPlayerItemOpenInvStatus(player) && OpenInv.hasPermission(player, Permissions.PERM_OPENINV)) {
+ if (player.getInventory().getItemInMainHand().getType() == OpenInv.getOpenInvItem() && OpenInv.getPlayerItemOpenInvStatus(player) && OpenInv.hasPermission(player, Permissions.PERM_OPENINV)) {
player.performCommand("openinv");
}
}
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index fc8109c..c05d306 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -1,6 +1,6 @@
name: OpenInv
main: com.lishid.openinv.OpenInv
-version: 2.3.4
+version: 2.3.5
author: lishid
description: >
This plugin allows you to open a player's inventory as a chest and interact with it in real time.