diff --git a/README b/README.MD similarity index 55% rename from README rename to README.MD index 209e1e8..8536e48 100644 --- a/README +++ b/README.MD @@ -1,3 +1,15 @@ +## Goals +This fork of OpenInv was created when the lag caused by offline player lookups post-UUID migration became too much to bear. Overall, it does not differ much from the original. + +### Changes of Note +- Removed updater +- Removed wand + +## Previous Versions +Any version of Minecraft this fork has been existent for should have a [release](https://github.com/Jikoo/OpenInv/releases) tagged. Features are not backported, however. + +## License +``` Copyright (C) 2011-2014 lishid. All rights reserved. This program is free software: you can redistribute it and/or modify @@ -10,4 +22,5 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with this program. If not, see . \ No newline at end of file +along with this program. If not, see . +``` \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..5d02ec4 --- /dev/null +++ b/pom.xml @@ -0,0 +1,28 @@ + + 4.0.0 + OpenInv + OpenInv + 0.0.1-SNAPSHOT + + + + org.spigotmc + spigot + 1.9-R0.1-SNAPSHOT + provided + + + + + + + maven-compiler-plugin + 3.1 + + 1.6 + 1.6 + + + + + \ No newline at end of file diff --git a/src/com/lishid/openinv/OpenInv.java b/src/com/lishid/openinv/OpenInv.java deleted file mode 100644 index b1be4ab..0000000 --- a/src/com/lishid/openinv/OpenInv.java +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Copyright (C) 2011-2014 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 - * the Free Software Foundation, version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package com.lishid.openinv; - -import java.util.HashMap; -import java.util.logging.Logger; - -import org.bukkit.ChatColor; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.permissions.Permissible; -import org.bukkit.plugin.PluginManager; -import org.bukkit.plugin.java.JavaPlugin; - -import com.lishid.openinv.commands.AnyChestPluginCommand; -import com.lishid.openinv.commands.OpenEnderPluginCommand; -import com.lishid.openinv.commands.OpenInvPluginCommand; -import com.lishid.openinv.commands.SearchInvPluginCommand; -import com.lishid.openinv.commands.SilentChestPluginCommand; -import com.lishid.openinv.internal.IAnySilentChest; -import com.lishid.openinv.internal.IInventoryAccess; -import com.lishid.openinv.internal.IPlayerDataManager; -import com.lishid.openinv.internal.ISpecialEnderChest; -import com.lishid.openinv.internal.ISpecialPlayerInventory; -import com.lishid.openinv.internal.InternalAccessor; - -/** - * Open other player's inventory - * - * @author lishid - */ -public class OpenInv extends JavaPlugin { - public static final Logger logger = Logger.getLogger("Minecraft.OpenInv"); - - public static HashMap inventories = new HashMap(); - public static HashMap enderChests = new HashMap(); - - public static OpenInv mainPlugin; - - public static IPlayerDataManager playerLoader; - public static IInventoryAccess inventoryAccess; - public static IAnySilentChest anySilentChest; - - @Override - public void onEnable() { - // Get plugin manager - PluginManager pm = getServer().getPluginManager(); - - // Version check - boolean success = InternalAccessor.Initialize(this.getServer()); - - if (!success) { - OpenInv.log("Your version of CraftBukkit is not supported."); - OpenInv.log("Please look for an updated version of OpenInv."); - pm.disablePlugin(this); - return; - } - - playerLoader = InternalAccessor.Instance.newPlayerDataManager(); - inventoryAccess = InternalAccessor.Instance.newInventoryAccess(); - anySilentChest = InternalAccessor.Instance.newAnySilentChest(); - - mainPlugin = this; - FileConfiguration config = getConfig(); - config.set("NotifySilentChest", config.getBoolean("NotifySilentChest", true)); - config.set("NotifyAnyChest", config.getBoolean("NotifyAnyChest", true)); - config.addDefault("NotifySilentChest", true); - config.addDefault("NotifyAnyChest", true); - config.options().copyDefaults(true); - saveConfig(); - - pm.registerEvents(new OpenInvPlayerListener(), this); - pm.registerEvents(new OpenInvInventoryListener(), this); - - getCommand("openinv").setExecutor(new OpenInvPluginCommand(this)); - getCommand("searchinv").setExecutor(new SearchInvPluginCommand()); - getCommand("silentchest").setExecutor(new SilentChestPluginCommand(this)); - getCommand("anychest").setExecutor(new AnyChestPluginCommand(this)); - getCommand("openender").setExecutor(new OpenEnderPluginCommand(this)); - - } - - public static boolean NotifySilentChest() { - return mainPlugin.getConfig().getBoolean("NotifySilentChest", true); - } - - public static boolean NotifyAnyChest() { - return mainPlugin.getConfig().getBoolean("NotifyAnyChest", true); - } - - public static boolean GetCheckForUpdates() { - return mainPlugin.getConfig().getBoolean("CheckForUpdates", true); - } - - public static boolean GetPlayerItemOpenInvStatus(String name) { - return mainPlugin.getConfig().getBoolean("ItemOpenInv." + name.toLowerCase() + ".toggle", false); - } - - public static void SetPlayerItemOpenInvStatus(String name, boolean status) { - mainPlugin.getConfig().set("ItemOpenInv." + name.toLowerCase() + ".toggle", status); - mainPlugin.saveConfig(); - } - - public static boolean GetPlayerSilentChestStatus(String name) { - return mainPlugin.getConfig().getBoolean("SilentChest." + name.toLowerCase() + ".toggle", false); - } - - public static void SetPlayerSilentChestStatus(String name, boolean status) { - mainPlugin.getConfig().set("SilentChest." + name.toLowerCase() + ".toggle", status); - mainPlugin.saveConfig(); - } - - public static boolean GetPlayerAnyChestStatus(String name) { - return mainPlugin.getConfig().getBoolean("AnyChest." + name.toLowerCase() + ".toggle", true); - } - - public static void SetPlayerAnyChestStatus(String name, boolean status) { - mainPlugin.getConfig().set("AnyChest." + name.toLowerCase() + ".toggle", status); - mainPlugin.saveConfig(); - } - - public static int GetItemOpenInvItem() { - if (mainPlugin.getConfig().get("ItemOpenInvItemID") == null) { - SaveToConfig("ItemOpenInvItemID", 280); - } - return mainPlugin.getConfig().getInt("ItemOpenInvItemID", 280); - } - - public static Object GetFromConfig(String data, Object defaultValue) { - Object val = mainPlugin.getConfig().get(data); - if (val == null) { - mainPlugin.getConfig().set(data, defaultValue); - return defaultValue; - } - else { - return val; - } - } - - public static void SaveToConfig(String data, Object value) { - mainPlugin.getConfig().set(data, value); - mainPlugin.saveConfig(); - } - - /** - * Log an information - */ - public static void log(String text) { - logger.info("[OpenInv] " + text); - } - - /** - * Log an error - */ - public static void log(Throwable e) { - logger.severe("[OpenInv] " + e.toString()); - e.printStackTrace(); - } - - public static void ShowHelp(Player player) { - player.sendMessage(ChatColor.GREEN + "/openinv - Open a player's inventory"); - player.sendMessage(ChatColor.GREEN + " (aliases: oi, inv, open)"); - player.sendMessage(ChatColor.GREEN + "/openender - Open a player's enderchest"); - player.sendMessage(ChatColor.GREEN + " (aliases: oe, enderchest)"); - player.sendMessage(ChatColor.GREEN + "/toggleopeninv - Toggle item openinv function"); - player.sendMessage(ChatColor.GREEN + " (aliases: toi, toggleoi, toggleinv)"); - player.sendMessage(ChatColor.GREEN + "/searchinv [MinAmount] - "); - player.sendMessage(ChatColor.GREEN + " Search and list players having a specific item."); - player.sendMessage(ChatColor.GREEN + " (aliases: si, search)"); - player.sendMessage(ChatColor.GREEN + "/anychest - Toggle anychest function"); - player.sendMessage(ChatColor.GREEN + " (aliases: ac)"); - player.sendMessage(ChatColor.GREEN + "/silentchest - Toggle silent chest function"); - player.sendMessage(ChatColor.GREEN + " (aliases: sc, silent)"); - } - - 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); - } -} \ No newline at end of file diff --git a/src/com/lishid/openinv/internal/v1_9_R1/PlayerDataManager.java b/src/com/lishid/openinv/internal/v1_9_R1/PlayerDataManager.java deleted file mode 100644 index 73c15dd..0000000 --- a/src/com/lishid/openinv/internal/v1_9_R1/PlayerDataManager.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (C) 2011-2014 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 - * the Free Software Foundation, version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package com.lishid.openinv.internal.v1_9_R1; - -import java.io.File; -import java.util.UUID; - -import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; -import org.bukkit.entity.Player; - -import com.lishid.openinv.OpenInv; -import com.lishid.openinv.internal.IPlayerDataManager; -import com.mojang.authlib.GameProfile; - -//Volatile -import org.bukkit.craftbukkit.v1_9_R1.CraftServer; - -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 - public Player loadPlayer(String name) { - try { - UUID uuid = matchUser(name); - if (uuid == null) { - return null; - } - - // Default player folder - File playerfolder = new File(Bukkit.getWorlds().get(0).getWorldFolder(), "playerdata"); - if (!playerfolder.exists()) { - return null; - } - - OfflinePlayer player = Bukkit.getOfflinePlayer(uuid); - if (player == null) { - return null; - } - GameProfile profile = new GameProfile(uuid, player.getName()); - MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer(); - // Create an entity to load the player data - EntityPlayer entity = new EntityPlayer(server, server.getWorldServer(0), profile, new PlayerInteractManager(server.getWorldServer(0))); - - // Get the bukkit entity - Player target = (entity == null) ? null : entity.getBukkitEntity(); - if (target != null) { - // Load data - target.loadData(); - // Return the entity - return target; - } - } - catch (Exception e) { - OpenInv.log(e); - } - - return null; - } - - private static UUID matchUser(String search) { - UUID found = null; - - String lowerSearch = search.toLowerCase(); - int delta = 2147483647; - - OfflinePlayer[] offlinePlayers = Bukkit.getOfflinePlayers(); - for (OfflinePlayer player : offlinePlayers) { - String name = player.getName(); - - if (name == null){ - continue; - } - if (name.equalsIgnoreCase(search)){ - return player.getUniqueId(); - } - if (name.toLowerCase().startsWith(lowerSearch)) { - int curDelta = name.length() - lowerSearch.length(); - if (curDelta < delta) { - found = player.getUniqueId(); - delta = curDelta; - } - if (curDelta == 0) { - break; - } - } - } - - return found; - } - - /* (non-Javadoc) - * @see com.lishid.openinv.internal.IPlayerDataManager#loadPlayer(java.util.UUID) - */ - @Override - public Player loadPlayer(UUID uuid) { - 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 - EntityPlayer entity = new EntityPlayer(server, server.getWorldServer(0), profile, new PlayerInteractManager(server.getWorldServer(0))); - - // Get the bukkit entity - Player target = (entity == null) ? null : entity.getBukkitEntity(); - if (target != null) { - // Load data - target.loadData(); - // Return the entity - return target; - } - return null; - } -} diff --git a/src/com/lishid/openinv/utils/ReflectionUtil.java b/src/com/lishid/openinv/utils/ReflectionUtil.java deleted file mode 100644 index b701bd7..0000000 --- a/src/com/lishid/openinv/utils/ReflectionUtil.java +++ /dev/null @@ -1,510 +0,0 @@ -package com.lishid.openinv.utils; - -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.HashMap; -import java.util.Map; - -import org.bukkit.Bukkit; - -public final class ReflectionUtil { - private ReflectionUtil() {} - - public static Class getClass(String name, PackageType type) throws Exception { - return Class.forName(type + "." + name); - } - - public static Class getClass(String name, SubPackageType type) throws Exception { - return Class.forName(type + "." + name); - } - - public static Constructor getConstructor(Class clazz, Class... parameterTypes) { - Class[] p = DataType.convertToPrimitive(parameterTypes); - for (Constructor c : clazz.getConstructors()) - if (DataType.equalsArray(DataType.convertToPrimitive(c.getParameterTypes()), p)) - return c; - return null; - } - - public static Constructor getConstructor(String className, PackageType type, Class... parameterTypes) throws Exception { - return getConstructor(getClass(className, type), parameterTypes); - } - - public static Constructor getConstructor(String className, SubPackageType type, Class... parameterTypes) throws Exception { - return getConstructor(getClass(className, type), parameterTypes); - } - - public static Object newInstance(Class clazz, Object... args) throws Exception { - return getConstructor(clazz, DataType.convertToPrimitive(args)).newInstance(args); - } - - public static Object newInstance(String className, PackageType type, Object... args) throws Exception { - return newInstance(getClass(className, type), args); - } - - public static Object newInstance(String className, SubPackageType type, Object... args) throws Exception { - return newInstance(getClass(className, type), args); - } - - public static Method getMethod(Class clazz, String name, Class... parameterTypes) { - Class[] p = DataType.convertToPrimitive(parameterTypes); - for (Method m : clazz.getMethods()) - if (m.getName().equals(name) && DataType.equalsArray(DataType.convertToPrimitive(m.getParameterTypes()), p)) - return m; - return null; - } - - public static Method getMethod(String className, PackageType type, String name, Class... parameterTypes) throws Exception { - return getMethod(getClass(className, type), name, parameterTypes); - } - - public static Method getMethod(String className, SubPackageType type, String name, Class... parameterTypes) throws Exception { - return getMethod(getClass(className, type), name, parameterTypes); - } - - public static Object invokeMethod(String name, Object instance, Object... args) throws Exception { - return getMethod(instance.getClass(), name, DataType.convertToPrimitive(args)).invoke(instance, args); - } - - public static Object invokeMethod(Class clazz, String name, Object instance, Object... args) throws Exception { - return getMethod(clazz, name, DataType.convertToPrimitive(args)).invoke(instance, args); - } - - public static Object invokeMethod(String className, PackageType type, String name, Object instance, Object... args) throws Exception { - return invokeMethod(getClass(className, type), name, instance, args); - } - - public static Object invokeMethod(String className, SubPackageType type, String name, Object instance, Object... args) throws Exception { - return invokeMethod(getClass(className, type), name, instance, args); - } - - public static Field getField(Class clazz, String name) throws Exception { - Field f = clazz.getField(name); - f.setAccessible(true); - return f; - } - - public static Field getField(String className, PackageType type, String name) throws Exception { - return getField(getClass(className, type), name); - } - - public static Field getField(String className, SubPackageType type, String name) throws Exception { - return getField(getClass(className, type), name); - } - - public static Field getDeclaredField(Class clazz, String name) throws Exception { - Field f = clazz.getDeclaredField(name); - f.setAccessible(true); - return f; - } - - public static Field getDeclaredField(String className, PackageType type, String name) throws Exception { - return getDeclaredField(getClass(className, type), name); - } - - public static Field getDeclaredField(String className, SubPackageType type, String name) throws Exception { - return getDeclaredField(getClass(className, type), name); - } - - public static Object getValue(Object instance, String fieldName) throws Exception { - return getField(instance.getClass(), fieldName).get(instance); - } - - public static Object getValue(Class clazz, Object instance, String fieldName) throws Exception { - return getField(clazz, fieldName).get(instance); - } - - public static Object getValue(String className, PackageType type, Object instance, String fieldName) throws Exception { - return getValue(getClass(className, type), instance, fieldName); - } - - public static Object getValue(String className, SubPackageType type, Object instance, String fieldName) throws Exception { - return getValue(getClass(className, type), instance, fieldName); - } - - public static Object getDeclaredValue(Object instance, String fieldName) throws Exception { - return getDeclaredField(instance.getClass(), fieldName).get(instance); - } - - public static Object getDeclaredValue(Class clazz, Object instance, String fieldName) throws Exception { - return getDeclaredField(clazz, fieldName).get(instance); - } - - public static Object getDeclaredValue(String className, PackageType type, Object instance, String fieldName) throws Exception { - return getDeclaredValue(getClass(className, type), instance, fieldName); - } - - public static Object getDeclaredValue(String className, SubPackageType type, Object instance, String fieldName) throws Exception { - return getDeclaredValue(getClass(className, type), instance, fieldName); - } - - public static void setValue(Object instance, String fieldName, Object fieldValue) throws Exception { - Field f = getField(instance.getClass(), fieldName); - f.set(instance, fieldValue); - } - - public static void setValue(Object instance, FieldPair pair) throws Exception { - setValue(instance, pair.getName(), pair.getValue()); - } - - public static void setValue(Class clazz, Object instance, String fieldName, Object fieldValue) throws Exception { - Field f = getField(clazz, fieldName); - f.set(instance, fieldValue); - } - - public static void setValue(Class clazz, Object instance, FieldPair pair) throws Exception { - setValue(clazz, instance, pair.getName(), pair.getValue()); - } - - public static void setValue(String className, PackageType type, Object instance, String fieldName, Object fieldValue) throws Exception { - setValue(getClass(className, type), instance, fieldName, fieldValue); - } - - public static void setValue(String className, PackageType type, Object instance, FieldPair pair) throws Exception { - setValue(className, type, instance, pair.getName(), pair.getValue()); - } - - public static void setValue(String className, SubPackageType type, Object instance, String fieldName, Object fieldValue) throws Exception { - setValue(getClass(className, type), instance, fieldName, fieldValue); - } - - public static void setValue(String className, SubPackageType type, Object instance, FieldPair pair) throws Exception { - setValue(className, type, instance, pair.getName(), pair.getValue()); - } - - public static void setValues(Object instance, FieldPair... pairs) throws Exception { - for (FieldPair pair : pairs) - setValue(instance, pair); - } - - public static void setValues(Class clazz, Object instance, FieldPair... pairs) throws Exception { - for (FieldPair pair : pairs) - setValue(clazz, instance, pair); - } - - public static void setValues(String className, PackageType type, Object instance, FieldPair... pairs) throws Exception { - setValues(getClass(className, type), instance, pairs); - } - - public static void setValues(String className, SubPackageType type, Object instance, FieldPair... pairs) throws Exception { - setValues(getClass(className, type), instance, pairs); - } - - public static void setDeclaredValue(Object instance, String fieldName, Object fieldValue) throws Exception { - Field f = getDeclaredField(instance.getClass(), fieldName); - f.set(instance, fieldValue); - } - - public static void setDeclaredValue(Object instance, FieldPair pair) throws Exception { - setDeclaredValue(instance, pair.getName(), pair.getValue()); - } - - public static void setDeclaredValue(Class clazz, Object instance, String fieldName, Object fieldValue) throws Exception { - Field f = getDeclaredField(clazz, fieldName); - f.set(instance, fieldValue); - } - - public static void setDeclaredValue(Class clazz, Object instance, FieldPair pair) throws Exception { - setDeclaredValue(clazz, instance, pair.getName(), pair.getValue()); - } - - public static void setDeclaredValue(String className, PackageType type, Object instance, String fieldName, Object fieldValue) throws Exception { - setDeclaredValue(getClass(className, type), instance, fieldName, fieldValue); - } - - public static void setDeclaredValue(String className, PackageType type, Object instance, FieldPair pair) throws Exception { - setDeclaredValue(className, type, instance, pair.getName(), pair.getValue()); - } - - public static void setDeclaredValue(String className, SubPackageType type, Object instance, String fieldName, Object fieldValue) throws Exception { - setDeclaredValue(getClass(className, type), instance, fieldName, fieldValue); - } - - public static void setDeclaredValue(String className, SubPackageType type, Object instance, FieldPair pair) throws Exception { - setDeclaredValue(className, type, instance, pair.getName(), pair.getValue()); - } - - public static void setDeclaredValues(Object instance, FieldPair... pairs) throws Exception { - for (FieldPair pair : pairs) - setDeclaredValue(instance, pair); - } - - public static void setDeclaredValues(Class clazz, Object instance, FieldPair... pairs) throws Exception { - for (FieldPair pair : pairs) - setDeclaredValue(clazz, instance, pair); - } - - public static void setDeclaredValues(String className, PackageType type, Object instance, FieldPair... pairs) throws Exception { - setDeclaredValues(getClass(className, type), instance, pairs); - } - - public static void setDeclaredValues(String className, SubPackageType type, Object instance, FieldPair... pairs) throws Exception { - setDeclaredValues(getClass(className, type), instance, pairs); - } - - public enum DataType { - BYTE(byte.class, Byte.class), - SHORT(short.class, Short.class), - INTEGER(int.class, Integer.class), - LONG(long.class, Long.class), - CHARACTER(char.class, Character.class), - FLOAT(float.class, Float.class), - DOUBLE(double.class, Double.class), - BOOLEAN(boolean.class, Boolean.class); - - private static final Map, DataType> CLASS_MAP = new HashMap, DataType>(); - private final Class primitive; - private final Class reference; - - static { - for (DataType t : values()) { - CLASS_MAP.put(t.primitive, t); - CLASS_MAP.put(t.reference, t); - } - } - - private DataType(Class primitive, Class reference) { - this.primitive = primitive; - this.reference = reference; - } - - public Class getPrimitive() { - return this.primitive; - } - - public Class getReference() { - return this.reference; - } - - public static DataType fromClass(Class c) { - return CLASS_MAP.get(c); - } - - public static Class getPrimitive(Class c) { - DataType t = fromClass(c); - return t == null ? c : t.getPrimitive(); - } - - public static Class getReference(Class c) { - DataType t = fromClass(c); - return t == null ? c : t.getReference(); - } - - public static Class[] convertToPrimitive(Class[] classes) { - int length = classes == null ? 0 : classes.length; - Class[] types = new Class[length]; - for (int i = 0; i < length; i++) - types[i] = getPrimitive(classes[i]); - return types; - } - - public static Class[] convertToPrimitive(Object[] objects) { - int length = objects == null ? 0 : objects.length; - Class[] types = new Class[length]; - for (int i = 0; i < length; i++) - types[i] = getPrimitive(objects[i].getClass()); - return types; - } - - public static boolean equalsArray(Class[] a1, Class[] a2) { - if (a1 == null || a2 == null || a1.length != a2.length) - return false; - for (int i = 0; i < a1.length; i++) - if (!a1[i].equals(a2[i]) && !a1[i].isAssignableFrom(a2[i])) - return false; - return true; - } - } - - public final class FieldPair { - private final String name; - private final Object value; - - public FieldPair(String name, Object value) { - this.name = name; - this.value = value; - } - - public String getName() { - return this.name; - } - - public Object getValue() { - return this.value; - } - } - - public enum PackageType { - MINECRAFT_SERVER("net.minecraft.server." + Bukkit.getServer().getClass().getPackage().getName().substring(23)), - CRAFTBUKKIT(Bukkit.getServer().getClass().getPackage().getName()); - - private final String name; - - private PackageType(String name) { - this.name = name; - } - - public String getName() { - return this.name; - } - - @Override - public String toString() { - return name; - } - } - - public enum SubPackageType { - BLOCK, - CHUNKIO, - COMMAND, - CONVERSATIONS, - ENCHANTMENS, - ENTITY, - EVENT, - GENERATOR, - HELP, - INVENTORY, - MAP, - METADATA, - POTION, - PROJECTILES, - SCHEDULER, - SCOREBOARD, - UPDATER, - UTIL; - - private final String name; - - private SubPackageType() { - name = PackageType.CRAFTBUKKIT + "." + name().toLowerCase(); - } - - public String getName() { - return this.name; - } - - @Override - public String toString() { - return name; - } - } - - public enum PacketType { - HANDSHAKING_IN_SET_PROTOCOL("PacketHandshakingInSetProtocol"), - LOGIN_IN_ENCRYPTION_BEGIN("PacketLoginInEncryptionBegin"), - LOGIN_IN_START("PacketLoginInStart"), - LOGIN_OUT_DISCONNECT("PacketLoginOutDisconnect"), - LOGIN_OUT_ENCRYPTION_BEGIN("PacketLoginOutEncryptionBegin"), - LOGIN_OUT_SUCCESS("PacketLoginOutSuccess"), - PLAY_IN_ABILITIES("PacketPlayInAbilities"), - PLAY_IN_ARM_ANIMATION("PacketPlayInArmAnimation"), - PLAY_IN_BLOCK_DIG("PacketPlayInBlockDig"), - PLAY_IN_BLOCK_PLACE("PacketPlayInBlockPlace"), - PLAY_IN_CHAT("PacketPlayInChat"), - PLAY_IN_CLIENT_COMMAND("PacketPlayInClientCommand"), - PLAY_IN_CLOSE_WINDOW("PacketPlayInCloseWindow"), - PLAY_IN_CUSTOM_PAYLOAD("PacketPlayInCustomPayload"), - PLAY_IN_ENCHANT_ITEM("PacketPlayInEnchantItem"), - PLAY_IN_ENTITY_ACTION("PacketPlayInEntityAction"), - PLAY_IN_FLYING("PacketPlayInFlying"), - PLAY_IN_HELD_ITEM_SLOT("PacketPlayInHeldItemSlot"), - PLAY_IN_KEEP_ALIVE("PacketPlayInKeepAlive"), - PLAY_IN_LOOK("PacketPlayInLook"), - PLAY_IN_POSITION("PacketPlayInPosition"), - PLAY_IN_POSITION_LOOK("PacketPlayInPositionLook"), - PLAY_IN_SET_CREATIVE_SLOT("PacketPlayInSetCreativeSlot "), - PLAY_IN_SETTINGS("PacketPlayInSettings"), - PLAY_IN_STEER_VEHICLE("PacketPlayInSteerVehicle"), - PLAY_IN_TAB_COMPLETE("PacketPlayInTabComplete"), - PLAY_IN_TRANSACTION("PacketPlayInTransaction"), - PLAY_IN_UPDATE_SIGN("PacketPlayInUpdateSign"), - PLAY_IN_USE_ENTITY("PacketPlayInUseEntity"), - PLAY_IN_WINDOW_CLICK("PacketPlayInWindowClick"), - PLAY_OUT_ABILITIES("PacketPlayOutAbilities"), - PLAY_OUT_ANIMATION("PacketPlayOutAnimation"), - PLAY_OUT_ATTACH_ENTITY("PacketPlayOutAttachEntity"), - PLAY_OUT_BED("PacketPlayOutBed"), - PLAY_OUT_BLOCK_ACTION("PacketPlayOutBlockAction"), - PLAY_OUT_BLOCK_BREAK_ANIMATION("PacketPlayOutBlockBreakAnimation"), - PLAY_OUT_BLOCK_CHANGE("PacketPlayOutBlockChange"), - PLAY_OUT_CHAT("PacketPlayOutChat"), - PLAY_OUT_CLOSE_WINDOW("PacketPlayOutCloseWindow"), - PLAY_OUT_COLLECT("PacketPlayOutCollect"), - PLAY_OUT_CRAFT_PROGRESS_BAR("PacketPlayOutCraftProgressBar"), - PLAY_OUT_CUSTOM_PAYLOAD("PacketPlayOutCustomPayload"), - PLAY_OUT_ENTITY("PacketPlayOutEntity"), - PLAY_OUT_ENTITY_DESTROY("PacketPlayOutEntityDestroy"), - PLAY_OUT_ENTITY_EFFECT("PacketPlayOutEntityEffect"), - PLAY_OUT_ENTITY_EQUIPMENT("PacketPlayOutEntityEquipment"), - PLAY_OUT_ENTITY_HEAD_ROTATION("PacketPlayOutEntityHeadRotation"), - PLAY_OUT_ENTITY_LOOK("PacketPlayOutEntityLook"), - PLAY_OUT_ENTITY_METADATA("PacketPlayOutEntityMetadata"), - PLAY_OUT_ENTITY_STATUS("PacketPlayOutEntityStatus"), - PLAY_OUT_ENTITY_TELEPORT("PacketPlayOutEntityTeleport"), - PLAY_OUT_ENTITY_VELOCITY("PacketPlayOutEntityVelocity"), - PLAY_OUT_EXPERIENCE("PacketPlayOutExperience"), - PLAY_OUT_EXPLOSION("PacketPlayOutExplosion"), - PLAY_OUT_GAME_STATE_CHANGE("PacketPlayOutGameStateChange"), - PLAY_OUT_HELD_ITEM_SLOT("PacketPlayOutHeldItemSlot"), - PLAY_OUT_KEEP_ALIVE("PacketPlayOutKeepAlive"), - PLAY_OUT_KICK_DISCONNECT("PacketPlayOutKickDisconnect"), - PLAY_OUT_LOGIN("PacketPlayOutLogin"), - PLAY_OUT_MAP("PacketPlayOutMap"), - PLAY_OUT_MAP_CHUNK("PacketPlayOutMapChunk"), - PLAY_OUT_MAP_CHUNK_BULK("PacketPlayOutMapChunkBulk"), - PLAY_OUT_MULTI_BLOCK_CHANGE("PacketPlayOutMultiBlockChange"), - PLAY_OUT_NAMED_ENTITY_SPAWN("PacketPlayOutNamedEntitySpawn"), - PLAY_OUT_NAMED_SOUND_EFFECT("PacketPlayOutNamedSoundEffect"), - PLAY_OUT_OPEN_SIGN_EDITOR("PacketPlayOutOpenSignEditor"), - PLAY_OUT_OPEN_WINDOW("PacketPlayOutOpenWindow"), - PLAY_OUT_PLAYER_INFO("PacketPlayOutPlayerInfo"), - PLAY_OUT_POSITION("PacketPlayOutPosition"), - PLAY_OUT_REL_ENTITY_MOVE("PacketPlayOutRelEntityMove"), - PLAY_OUT_REL_ENTITY_MOVE_LOOK("PacketPlayOutRelEntityMoveLook"), - PLAY_OUT_REMOVE_ENTITY_EFFECT("PacketPlayOutRemoveEntityEffect"), - PLAY_OUT_RESPAWN("PacketPlayOutRespawn"), - PLAY_OUT_SCOREBOARD_DISPLAY_OBJECTIVE("PacketPlayOutScoreboardDisplayObjective"), - PLAY_OUT_SCOREBOARD_OBJECTIVE("PacketPlayOutScoreboardObjective"), - PLAY_OUT_SCOREBOARD_SCORE("PacketPlayOutScoreboardScore"), - PLAY_OUT_SCOREBOARD_TEAM("PacketPlayOutScoreboardTeam"), - PLAY_OUT_SET_SLOT("PacketPlayOutSetSlot"), - PLAY_OUT_SPAWN_ENTITY("PacketPlayOutSpawnEntity"), - PLAY_OUT_SPAWN_ENTITY_EXPERIENCE_ORB("PacketPlayOutSpawnEntityExperienceOrb"), - PLAY_OUT_SPAWN_ENTITY_LIVING("PacketPlayOutSpawnEntityLiving"), - PLAY_OUT_SPAWN_ENTITY_PAINTING("PacketPlayOutSpawnEntityPainting"), - PLAY_OUT_SPAWN_ENTITY_WEATHER("PacketPlayOutSpawnEntityWeather"), - PLAY_OUT_SPAWN_POSITION("PacketPlayOutSpawnPosition"), - PLAY_OUT_STATISTIC("PacketPlayOutStatistic"), - PLAY_OUT_TAB_COMPLETE("PacketPlayOutTabComplete"), - PLAY_OUT_TILE_ENTITY_DATA("PacketPlayOutTileEntityData"), - PLAY_OUT_TRANSACTION("PacketPlayOutTransaction"), - PLAY_OUT_UPDATE_ATTRIBUTES("PacketPlayOutUpdateAttributes"), - PLAY_OUT_UPDATE_HEALTH("PacketPlayOutUpdateHealth"), - PLAY_OUT_UPDATE_SIGN("PacketPlayOutUpdateSign"), - PLAY_OUT_UPDATE_TIME("PacketPlayOutUpdateTime"), - PLAY_OUT_WINDOW_ITEMS("PacketPlayOutWindowItems"), - PLAY_OUT_WORLD_EVENT("PacketPlayOutWorldEvent"), - PLAY_OUT_WORLD_PARTICLES("PacketPlayOutWorldParticles"), - STATUS_IN_PING("PacketStatusInPing"), - STATUS_IN_START("PacketStatusInStart"), - STATUS_OUT_PONG("PacketStatusOutPong"), - STATUS_OUT_SERVER_INFO("PacketStatusOutServerInfo"); - - private final String name; - private Class packet; - - private PacketType(String name) { - this.name = name; - } - - public String getName() { - return this.getName(); - } - - public Class getPacket() throws Exception { - return packet == null ? packet = ReflectionUtil.getClass(name, PackageType.MINECRAFT_SERVER) : packet; - } - } -} \ No newline at end of file diff --git a/src/main/java/com/lishid/openinv/OpenInv.java b/src/main/java/com/lishid/openinv/OpenInv.java new file mode 100644 index 0000000..aaea98c --- /dev/null +++ b/src/main/java/com/lishid/openinv/OpenInv.java @@ -0,0 +1,220 @@ +/* + * Copyright (C) 2011-2014 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 + * the Free Software Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.lishid.openinv; + +import java.util.HashMap; +import java.util.Map; + +import org.bukkit.ChatColor; +import org.bukkit.OfflinePlayer; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.permissions.Permissible; +import org.bukkit.plugin.PluginManager; +import org.bukkit.plugin.java.JavaPlugin; + +import com.lishid.openinv.commands.AnyChestPluginCommand; +import com.lishid.openinv.commands.OpenEnderPluginCommand; +import com.lishid.openinv.commands.OpenInvPluginCommand; +import com.lishid.openinv.commands.SearchInvPluginCommand; +import com.lishid.openinv.commands.SilentChestPluginCommand; +import com.lishid.openinv.internal.IAnySilentChest; +import com.lishid.openinv.internal.IInventoryAccess; +import com.lishid.openinv.internal.IPlayerDataManager; +import com.lishid.openinv.internal.ISpecialEnderChest; +import com.lishid.openinv.internal.ISpecialPlayerInventory; +import com.lishid.openinv.internal.InternalAccessor; + +/** + * Open other player's inventory + * + * @author lishid + */ +public class OpenInv extends JavaPlugin { + + private final Map inventories = new HashMap(); + private final Map enderChests = new HashMap(); + + private InternalAccessor accessor; + private IPlayerDataManager playerLoader; + private IInventoryAccess inventoryAccess; + private IAnySilentChest anySilentChest; + + @Override + public void onEnable() { + // Get plugin manager + PluginManager pm = getServer().getPluginManager(); + + accessor = new InternalAccessor(this); + // Version check + if (!accessor.initialize(getServer())) { + getLogger().info("Your version of CraftBukkit is not supported."); + getLogger().info("Please look for an updated version of OpenInv."); + pm.disablePlugin(this); + return; + } + + playerLoader = accessor.newPlayerDataManager(); + inventoryAccess = accessor.newInventoryAccess(); + anySilentChest = accessor.newAnySilentChest(); + + FileConfiguration config = getConfig(); + config.set("NotifySilentChest", config.getBoolean("NotifySilentChest", true)); + config.set("NotifyAnyChest", config.getBoolean("NotifyAnyChest", true)); + config.addDefault("NotifySilentChest", true); + config.addDefault("NotifyAnyChest", true); + config.options().copyDefaults(true); + saveConfig(); + + pm.registerEvents(new OpenInvPlayerListener(this), this); + pm.registerEvents(new OpenInvInventoryListener(this), this); + + getCommand("openinv").setExecutor(new OpenInvPluginCommand(this)); + getCommand("searchinv").setExecutor(new SearchInvPluginCommand()); + getCommand("silentchest").setExecutor(new SilentChestPluginCommand(this)); + getCommand("anychest").setExecutor(new AnyChestPluginCommand(this)); + getCommand("openender").setExecutor(new OpenEnderPluginCommand(this)); + + } + + public InternalAccessor getInternalAccessor() { + return this.accessor; + } + + public IPlayerDataManager getPlayerLoader() { + return this.playerLoader; + } + + public IInventoryAccess getInventoryAccess() { + return this.inventoryAccess; + } + + public IAnySilentChest getAnySilentChest() { + return this.anySilentChest; + } + + public ISpecialPlayerInventory getInventoryFor(Player player) { + String id = getPlayerLoader().getPlayerDataID(player); + if (inventories.containsKey(id)) { + return inventories.get(id); + } + return null; + } + + public ISpecialPlayerInventory getOrCreateInventoryFor(Player player, boolean offline) { + String id = getPlayerLoader().getPlayerDataID(player); + if (inventories.containsKey(id)) { + return inventories.get(id); + } + ISpecialPlayerInventory inv = getInternalAccessor().newSpecialPlayerInventory(player, offline); + inventories.put(id, inv); + return inv; + } + + public void removeLoadedInventory(Player player) { + String id = getPlayerLoader().getPlayerDataID(player); + if (inventories.containsKey(id)) { + inventories.remove(id); + } + } + + public ISpecialEnderChest getEnderChestFor(Player player) { + String id = getPlayerLoader().getPlayerDataID(player); + if (enderChests.containsKey(id)) { + return enderChests.get(id); + } + return null; + } + + public ISpecialEnderChest getOrCreateEnderChestFor(Player player, boolean offline) { + String id = getPlayerLoader().getPlayerDataID(player); + if (enderChests.containsKey(id)) { + return enderChests.get(id); + } + ISpecialEnderChest inv = getInternalAccessor().newSpecialEnderChest(player, offline); + enderChests.put(id, inv); + return inv; + } + + public void removeLoadedEnderChest(Player player) { + String id = getPlayerLoader().getPlayerDataID(player); + if (enderChests.containsKey(id)) { + enderChests.remove(id); + } + } + + public boolean notifySilentChest() { + return getConfig().getBoolean("NotifySilentChest", true); + } + + public boolean notifyAnyChest() { + return getConfig().getBoolean("NotifyAnyChest", true); + } + + public boolean getPlayerItemOpenInvStatus(OfflinePlayer player) { + return getConfig().getBoolean("ItemOpenInv." + getPlayerLoader().getPlayerDataID(player) + ".toggle", false); + } + + public void setPlayerItemOpenInvStatus(OfflinePlayer player, boolean status) { + getConfig().set("ItemOpenInv." + getPlayerLoader().getPlayerDataID(player) + ".toggle", status); + saveConfig(); + } + + public boolean getPlayerSilentChestStatus(OfflinePlayer player) { + return getConfig().getBoolean("SilentChest." + getPlayerLoader().getPlayerDataID(player) + ".toggle", false); + } + + public void setPlayerSilentChestStatus(OfflinePlayer player, boolean status) { + getConfig().set("SilentChest." + getPlayerLoader().getPlayerDataID(player) + ".toggle", status); + saveConfig(); + } + + public boolean getPlayerAnyChestStatus(OfflinePlayer player) { + return getConfig().getBoolean("AnyChest." + getPlayerLoader().getPlayerDataID(player) + ".toggle", true); + } + + public void setPlayerAnyChestStatus(OfflinePlayer player, boolean status) { + getConfig().set("AnyChest." + getPlayerLoader().getPlayerDataID(player) + ".toggle", status); + saveConfig(); + } + + public static void ShowHelp(Player player) { + player.sendMessage(ChatColor.GREEN + "/openinv - Open a player's inventory"); + player.sendMessage(ChatColor.GREEN + " (aliases: oi, inv, open)"); + player.sendMessage(ChatColor.GREEN + "/openender - Open a player's enderchest"); + player.sendMessage(ChatColor.GREEN + " (aliases: oe, enderchest)"); + player.sendMessage(ChatColor.GREEN + "/searchinv [MinAmount] - "); + player.sendMessage(ChatColor.GREEN + " Search and list players having a specific item."); + player.sendMessage(ChatColor.GREEN + " (aliases: si, search)"); + player.sendMessage(ChatColor.GREEN + "/anychest - Toggle anychest function"); + player.sendMessage(ChatColor.GREEN + " (aliases: ac)"); + player.sendMessage(ChatColor.GREEN + "/silentchest - Toggle silent chest function"); + player.sendMessage(ChatColor.GREEN + " (aliases: sc, silent)"); + } + + 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); + } +} \ No newline at end of file diff --git a/src/com/lishid/openinv/OpenInvInventoryListener.java b/src/main/java/com/lishid/openinv/OpenInvInventoryListener.java similarity index 79% rename from src/com/lishid/openinv/OpenInvInventoryListener.java rename to src/main/java/com/lishid/openinv/OpenInvInventoryListener.java index c3a0a7c..5ff6ded 100644 --- a/src/com/lishid/openinv/OpenInvInventoryListener.java +++ b/src/main/java/com/lishid/openinv/OpenInvInventoryListener.java @@ -23,12 +23,19 @@ import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryDragEvent; public class OpenInvInventoryListener implements Listener { + + private final OpenInv plugin; + + public OpenInvInventoryListener(OpenInv plugin) { + this.plugin = plugin; + } + @EventHandler(priority = EventPriority.NORMAL) public void onInventoryClick(InventoryClickEvent event) { // If this is the top inventory // if (event.getView().convertSlot(event.getRawSlot()) == event.getRawSlot()) // { - if (!OpenInv.inventoryAccess.check(event.getInventory(), event.getWhoClicked())) { + if (!plugin.getInventoryAccess().check(event.getInventory(), event.getWhoClicked())) { event.setCancelled(true); } // } @@ -36,7 +43,7 @@ public class OpenInvInventoryListener implements Listener { @EventHandler(priority = EventPriority.NORMAL) public void onInventoryDrag(InventoryDragEvent event) { - if (!OpenInv.inventoryAccess.check(event.getInventory(), event.getWhoClicked())) { + if (!plugin.getInventoryAccess().check(event.getInventory(), event.getWhoClicked())) { event.setCancelled(true); } } diff --git a/src/com/lishid/openinv/OpenInvPlayerListener.java b/src/main/java/com/lishid/openinv/OpenInvPlayerListener.java similarity index 65% rename from src/com/lishid/openinv/OpenInvPlayerListener.java rename to src/main/java/com/lishid/openinv/OpenInvPlayerListener.java index 2026b6f..907caef 100644 --- a/src/com/lishid/openinv/OpenInvPlayerListener.java +++ b/src/main/java/com/lishid/openinv/OpenInvPlayerListener.java @@ -18,7 +18,6 @@ package com.lishid.openinv; import org.bukkit.ChatColor; import org.bukkit.block.Chest; -import org.bukkit.block.Sign; import org.bukkit.entity.Player; import org.bukkit.event.Event.Result; import org.bukkit.event.EventHandler; @@ -33,30 +32,41 @@ import com.lishid.openinv.internal.ISpecialEnderChest; import com.lishid.openinv.internal.ISpecialPlayerInventory; public class OpenInvPlayerListener implements Listener { + + private final OpenInv plugin; + + public OpenInvPlayerListener(OpenInv plugin) { + this.plugin = plugin; + } + @EventHandler(priority = EventPriority.LOWEST) public void onPlayerJoin(PlayerJoinEvent event) { - ISpecialPlayerInventory inventory = OpenInv.inventories.get(event.getPlayer().getName().toLowerCase()); + ISpecialPlayerInventory inventory = plugin.getInventoryFor(event.getPlayer()); if (inventory != null) { - inventory.PlayerGoOnline(event.getPlayer()); + inventory.setPlayerOnline(event.getPlayer()); } - ISpecialEnderChest chest = OpenInv.enderChests.get(event.getPlayer().getName().toLowerCase()); + ISpecialEnderChest chest = plugin.getEnderChestFor(event.getPlayer()); if (chest != null) { - chest.PlayerGoOnline(event.getPlayer()); + chest.setPlayerOnline(event.getPlayer()); } } @EventHandler(priority = EventPriority.MONITOR) public void onPlayerQuit(PlayerQuitEvent event) { - ISpecialPlayerInventory inventory = OpenInv.inventories.get(event.getPlayer().getName().toLowerCase()); + ISpecialPlayerInventory inventory = plugin.getInventoryFor(event.getPlayer()); if (inventory != null) { - inventory.PlayerGoOffline(); + if (inventory.setPlayerOffline()) { + plugin.removeLoadedInventory(event.getPlayer()); + } } - ISpecialEnderChest chest = OpenInv.enderChests.get(event.getPlayer().getName().toLowerCase()); + ISpecialEnderChest chest = plugin.getEnderChestFor(event.getPlayer()); if (chest != null) { - chest.PlayerGoOffline(); + if (chest.setPlayerOffline()) { + plugin.removeLoadedEnderChest(event.getPlayer()); + } } } @@ -73,7 +83,7 @@ public class OpenInvPlayerListener implements Listener { } if (event.getAction() == Action.RIGHT_CLICK_BLOCK && event.getClickedBlock().getType() == org.bukkit.Material.ENDER_CHEST) { - if (OpenInv.hasPermission(player, Permissions.PERM_SILENT) && OpenInv.GetPlayerSilentChestStatus(player.getName())) { + if (OpenInv.hasPermission(player, Permissions.PERM_SILENT) && plugin.getPlayerSilentChestStatus(player)) { event.setCancelled(true); player.openInventory(player.getEnderChest()); } @@ -86,13 +96,13 @@ public class OpenInvPlayerListener implements Listener { int y = event.getClickedBlock().getY(); int z = event.getClickedBlock().getZ(); - if (OpenInv.hasPermission(player, Permissions.PERM_SILENT) && OpenInv.GetPlayerSilentChestStatus(player.getName())) { + if (OpenInv.hasPermission(player, Permissions.PERM_SILENT) && plugin.getPlayerSilentChestStatus(player)) { silentchest = true; } - if (OpenInv.hasPermission(player, Permissions.PERM_ANYCHEST) && OpenInv.GetPlayerAnyChestStatus(player.getName())) { + if (OpenInv.hasPermission(player, Permissions.PERM_ANYCHEST) && plugin.getPlayerAnyChestStatus(player)) { try { - anychest = OpenInv.anySilentChest.IsAnyChestNeeded(player, x, y, z); + anychest = plugin.getAnySilentChest().isAnyChestNeeded(player, x, y, z); } catch (Exception e) { player.sendMessage(ChatColor.RED + "Error while executing openinv. Unsupported CraftBukkit."); @@ -102,24 +112,17 @@ public class OpenInvPlayerListener implements Listener { // If the anychest or silentchest is active if (anychest || silentchest) { - if (!OpenInv.anySilentChest.ActivateChest(player, anychest, silentchest, x, y, z)) { + if (!plugin.getAnySilentChest().activateChest(player, anychest, silentchest, x, y, z)) { + if (silentchest && plugin.notifySilentChest()) { + player.sendMessage("You are opening a chest silently."); + } + if (anychest && plugin.notifyAnyChest()) { + player.sendMessage("You are opening a blocked chest."); + } event.setCancelled(true); } } } - - if (event.getAction() == Action.RIGHT_CLICK_BLOCK && event.getClickedBlock().getState() instanceof Sign) { - try { - Sign sign = ((Sign) event.getClickedBlock().getState()); - if (OpenInv.hasPermission(player, Permissions.PERM_OPENINV) && sign.getLine(0).equalsIgnoreCase("[openinv]")) { - String text = sign.getLine(1).trim() + sign.getLine(2).trim() + sign.getLine(3).trim(); - player.performCommand("openinv " + text); - } - } - catch (Exception ex) { - player.sendMessage("Internal Error."); - ex.printStackTrace(); - } - } } -} \ No newline at end of file + +} diff --git a/src/com/lishid/openinv/Permissions.java b/src/main/java/com/lishid/openinv/Permissions.java similarity index 100% rename from src/com/lishid/openinv/Permissions.java rename to src/main/java/com/lishid/openinv/Permissions.java diff --git a/src/com/lishid/openinv/commands/AnyChestPluginCommand.java b/src/main/java/com/lishid/openinv/commands/AnyChestPluginCommand.java similarity index 81% rename from src/com/lishid/openinv/commands/AnyChestPluginCommand.java rename to src/main/java/com/lishid/openinv/commands/AnyChestPluginCommand.java index a434666..57ec269 100644 --- a/src/com/lishid/openinv/commands/AnyChestPluginCommand.java +++ b/src/main/java/com/lishid/openinv/commands/AnyChestPluginCommand.java @@ -25,28 +25,32 @@ import org.bukkit.entity.Player; import com.lishid.openinv.OpenInv; public class AnyChestPluginCommand implements CommandExecutor { - public AnyChestPluginCommand(OpenInv plugin) { + private final OpenInv plugin; + + public AnyChestPluginCommand(OpenInv plugin) { + this.plugin = plugin; } - @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + "You can't use this from the console."); return true; } + Player player = (Player) sender; + if (args.length > 0) { if (args[0].equalsIgnoreCase("check")) { - if (OpenInv.GetPlayerAnyChestStatus(sender.getName())) + if (plugin.getPlayerAnyChestStatus(player)) sender.sendMessage("AnyChest is ON."); else sender.sendMessage("AnyChest is OFF."); } } - OpenInv.SetPlayerAnyChestStatus(sender.getName(), !OpenInv.GetPlayerAnyChestStatus(sender.getName())); - sender.sendMessage("AnyChest is now " + (OpenInv.GetPlayerAnyChestStatus(sender.getName()) ? "On" : "Off") + "."); + plugin.setPlayerAnyChestStatus(player, !plugin.getPlayerAnyChestStatus(player)); + sender.sendMessage("AnyChest is now " + (plugin.getPlayerAnyChestStatus(player) ? "On" : "Off") + "."); return true; } diff --git a/src/com/lishid/openinv/commands/OpenEnderPluginCommand.java b/src/main/java/com/lishid/openinv/commands/OpenEnderPluginCommand.java similarity index 74% rename from src/com/lishid/openinv/commands/OpenEnderPluginCommand.java rename to src/main/java/com/lishid/openinv/commands/OpenEnderPluginCommand.java index 5994112..2c0f3eb 100644 --- a/src/com/lishid/openinv/commands/OpenEnderPluginCommand.java +++ b/src/main/java/com/lishid/openinv/commands/OpenEnderPluginCommand.java @@ -18,7 +18,6 @@ package com.lishid.openinv.commands; import java.util.HashMap; import java.util.List; -import java.util.UUID; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -32,7 +31,6 @@ import org.bukkit.scheduler.BukkitRunnable; import com.lishid.openinv.OpenInv; import com.lishid.openinv.Permissions; import com.lishid.openinv.internal.ISpecialEnderChest; -import com.lishid.openinv.internal.InternalAccessor; public class OpenEnderPluginCommand implements CommandExecutor { private final OpenInv plugin; @@ -42,7 +40,6 @@ public class OpenEnderPluginCommand implements CommandExecutor { this.plugin = plugin; } - @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + "You can't use this from the console."); @@ -74,17 +71,16 @@ public class OpenEnderPluginCommand implements CommandExecutor { name = args[0]; } - final UUID senderID = player.getUniqueId(); new BukkitRunnable() { - @Override public void run() { List matches = Bukkit.matchPlayer(name); + final OfflinePlayer offlinePlayer; if (!matches.isEmpty()) { - openInventory(player, matches.get(0).getUniqueId()); - return; + offlinePlayer = matches.get(0); + } else { + offlinePlayer = Bukkit.getOfflinePlayer(name); } - final OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(name); - if (Bukkit.getPlayer(senderID) == null) { + if (!player.isOnline()) { return; } if (offlinePlayer == null || !offlinePlayer.hasPlayedBefore()) { @@ -92,12 +88,11 @@ public class OpenEnderPluginCommand implements CommandExecutor { return; } new BukkitRunnable() { - @Override public void run() { - if (Bukkit.getPlayer(senderID) == null) { + if (!player.isOnline()) { return; } - openInventory(player, offlinePlayer.getUniqueId()); + openInventory(player, offlinePlayer); } }.runTask(plugin); } @@ -106,34 +101,32 @@ public class OpenEnderPluginCommand implements CommandExecutor { return true; } - private void openInventory(Player player, UUID uuid) { + private void openInventory(Player player, OfflinePlayer target) { - Player target = this.plugin.getServer().getPlayer(uuid); - - if (target == null) { + Player onlineTarget; + if (!target.isOnline()) { // Try loading the player's data - target = OpenInv.playerLoader.loadPlayer(uuid); + onlineTarget = plugin.getPlayerLoader().loadPlayer(target); - if (target == null) { + if (onlineTarget == null) { player.sendMessage(ChatColor.RED + "Player not found!"); return; } + } else { + onlineTarget = target.getPlayer(); } - if (target != player && !OpenInv.hasPermission(player, Permissions.PERM_ENDERCHEST_ALL)) { + if (!onlineTarget.equals(player) && !OpenInv.hasPermission(player, Permissions.PERM_ENDERCHEST_ALL)) { player.sendMessage(ChatColor.RED + "You do not have permission to access other player's enderchest"); return; } // Record the target - openEnderHistory.put(player, target.getName()); + openEnderHistory.put(player, onlineTarget.getName()); // Create the inventory - ISpecialEnderChest chest = OpenInv.enderChests.get(target.getName().toLowerCase()); - if (chest == null) { - chest = InternalAccessor.Instance.newSpecialEnderChest(target, !target.isOnline()); - } + ISpecialEnderChest chest = plugin.getOrCreateEnderChestFor(onlineTarget, !target.isOnline()); // Open the inventory player.openInventory(chest.getBukkitInventory()); diff --git a/src/com/lishid/openinv/commands/OpenInvPluginCommand.java b/src/main/java/com/lishid/openinv/commands/OpenInvPluginCommand.java similarity index 72% rename from src/com/lishid/openinv/commands/OpenInvPluginCommand.java rename to src/main/java/com/lishid/openinv/commands/OpenInvPluginCommand.java index b47c54a..edd1189 100644 --- a/src/com/lishid/openinv/commands/OpenInvPluginCommand.java +++ b/src/main/java/com/lishid/openinv/commands/OpenInvPluginCommand.java @@ -18,7 +18,6 @@ package com.lishid.openinv.commands; import java.util.HashMap; import java.util.List; -import java.util.UUID; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -32,7 +31,6 @@ import org.bukkit.scheduler.BukkitRunnable; import com.lishid.openinv.OpenInv; import com.lishid.openinv.Permissions; import com.lishid.openinv.internal.ISpecialPlayerInventory; -import com.lishid.openinv.internal.InternalAccessor; public class OpenInvPluginCommand implements CommandExecutor { private final OpenInv plugin; @@ -42,7 +40,6 @@ public class OpenInvPluginCommand implements CommandExecutor { this.plugin = plugin; } - @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + "You can't use this from the console."); @@ -74,17 +71,16 @@ public class OpenInvPluginCommand implements CommandExecutor { name = args[0]; } - final UUID senderID = player.getUniqueId(); new BukkitRunnable() { - @Override public void run() { List matches = Bukkit.matchPlayer(name); + final OfflinePlayer offlinePlayer; if (!matches.isEmpty()) { - openInventory(player, matches.get(0).getUniqueId()); - return; + offlinePlayer = matches.get(0); + } else { + offlinePlayer = Bukkit.getOfflinePlayer(name); } - final OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(name); - if (Bukkit.getPlayer(senderID) == null) { + if (!player.isOnline()) { return; } if (offlinePlayer == null || !offlinePlayer.hasPlayedBefore()) { @@ -92,12 +88,11 @@ public class OpenInvPluginCommand implements CommandExecutor { return; } new BukkitRunnable() { - @Override public void run() { - if (Bukkit.getPlayer(senderID) == null) { + if (!player.isOnline()) { return; } - openInventory(player, offlinePlayer.getUniqueId()); + openInventory(player, offlinePlayer); } }.runTask(plugin); } @@ -106,46 +101,46 @@ public class OpenInvPluginCommand implements CommandExecutor { return true; } - private void openInventory(Player player, UUID uuid) { + private void openInventory(Player player, OfflinePlayer target) { - Player target = this.plugin.getServer().getPlayer(uuid); - if (target == null) { + Player onlineTarget; + + if (!target.isOnline()) { // Try loading the player's data - target = OpenInv.playerLoader.loadPlayer(uuid); + onlineTarget = plugin.getPlayerLoader().loadPlayer(target); - if (target == null) { + if (onlineTarget == null) { player.sendMessage(ChatColor.RED + "Player not found!"); return; } + } else { + onlineTarget = target.getPlayer(); } // Permissions checks - if (!OpenInv.hasPermission(player, Permissions.PERM_OVERRIDE) && OpenInv.hasPermission(target, Permissions.PERM_EXEMPT)) { - player.sendMessage(ChatColor.RED + target.getDisplayName() + "'s inventory is protected!"); + if (!OpenInv.hasPermission(player, Permissions.PERM_OVERRIDE) && OpenInv.hasPermission(onlineTarget, Permissions.PERM_EXEMPT)) { + player.sendMessage(ChatColor.RED + onlineTarget.getDisplayName() + "'s inventory is protected!"); return; } // Crosswork check - if ((!OpenInv.hasPermission(player, Permissions.PERM_CROSSWORLD) && !OpenInv.hasPermission(player, Permissions.PERM_OVERRIDE)) && target.getWorld() != player.getWorld()) { - player.sendMessage(ChatColor.RED + target.getDisplayName() + " is not in your world!"); + if ((!OpenInv.hasPermission(player, Permissions.PERM_CROSSWORLD) && !OpenInv.hasPermission(player, Permissions.PERM_OVERRIDE)) && onlineTarget.getWorld() != player.getWorld()) { + player.sendMessage(ChatColor.RED + onlineTarget.getDisplayName() + " is not in your world!"); return; } // Self-open check - if (!OpenInv.hasPermission(player, Permissions.PERM_OPENSELF) && target.equals(player)) { + if (!OpenInv.hasPermission(player, Permissions.PERM_OPENSELF) && onlineTarget.equals(player)) { player.sendMessage(ChatColor.RED + "You're not allowed to openinv yourself."); return; } // Record the target - openInvHistory.put(player, target.getName()); + openInvHistory.put(player, onlineTarget.getName()); // Create the inventory - ISpecialPlayerInventory inv = OpenInv.inventories.get(target.getName().toLowerCase()); - if (inv == null) { - inv = InternalAccessor.Instance.newSpecialPlayerInventory(target, !target.isOnline()); - } + ISpecialPlayerInventory inv = plugin.getOrCreateInventoryFor(onlineTarget, !target.isOnline()); // Open the inventory player.openInventory(inv.getBukkitInventory()); diff --git a/src/com/lishid/openinv/commands/SearchInvPluginCommand.java b/src/main/java/com/lishid/openinv/commands/SearchInvPluginCommand.java similarity index 99% rename from src/com/lishid/openinv/commands/SearchInvPluginCommand.java rename to src/main/java/com/lishid/openinv/commands/SearchInvPluginCommand.java index d390ab7..5140d3f 100644 --- a/src/com/lishid/openinv/commands/SearchInvPluginCommand.java +++ b/src/main/java/com/lishid/openinv/commands/SearchInvPluginCommand.java @@ -29,7 +29,6 @@ public class SearchInvPluginCommand implements CommandExecutor { } - @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { String PlayerList = ""; diff --git a/src/com/lishid/openinv/commands/SilentChestPluginCommand.java b/src/main/java/com/lishid/openinv/commands/SilentChestPluginCommand.java similarity index 80% rename from src/com/lishid/openinv/commands/SilentChestPluginCommand.java rename to src/main/java/com/lishid/openinv/commands/SilentChestPluginCommand.java index 992dce7..f363a96 100644 --- a/src/com/lishid/openinv/commands/SilentChestPluginCommand.java +++ b/src/main/java/com/lishid/openinv/commands/SilentChestPluginCommand.java @@ -25,28 +25,32 @@ import org.bukkit.entity.Player; import com.lishid.openinv.OpenInv; public class SilentChestPluginCommand implements CommandExecutor { - public SilentChestPluginCommand(OpenInv plugin) { + private final OpenInv plugin; + + public SilentChestPluginCommand(OpenInv plugin) { + this.plugin = plugin; } - @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + "You can't use this from the console."); return true; } + Player player = (Player) sender; + if (args.length > 0) { if (args[0].equalsIgnoreCase("check")) { - if (OpenInv.GetPlayerSilentChestStatus(sender.getName())) + if (plugin.getPlayerSilentChestStatus(player)) sender.sendMessage("SilentChest is ON."); else sender.sendMessage("SilentChest is OFF."); } } - OpenInv.SetPlayerSilentChestStatus(sender.getName(), !OpenInv.GetPlayerSilentChestStatus(sender.getName())); - sender.sendMessage("SilentChest is now " + (OpenInv.GetPlayerSilentChestStatus(sender.getName()) ? "On" : "Off") + "."); + plugin.setPlayerSilentChestStatus(player, !plugin.getPlayerSilentChestStatus(player)); + sender.sendMessage("SilentChest is now " + (plugin.getPlayerSilentChestStatus(player) ? "On" : "Off") + "."); return true; } diff --git a/src/com/lishid/openinv/internal/IAnySilentChest.java b/src/main/java/com/lishid/openinv/internal/IAnySilentChest.java similarity index 78% rename from src/com/lishid/openinv/internal/IAnySilentChest.java rename to src/main/java/com/lishid/openinv/internal/IAnySilentChest.java index 7177763..5aac422 100644 --- a/src/com/lishid/openinv/internal/IAnySilentChest.java +++ b/src/main/java/com/lishid/openinv/internal/IAnySilentChest.java @@ -19,7 +19,7 @@ package com.lishid.openinv.internal; import org.bukkit.entity.Player; public interface IAnySilentChest { - public boolean IsAnyChestNeeded(Player p, int x, int y, int z); + public boolean isAnyChestNeeded(Player player, int x, int y, int z); - public boolean ActivateChest(Player p, boolean anychest, boolean silentchest, int x, int y, int z); + public boolean activateChest(Player player, boolean anychest, boolean silentchest, int x, int y, int z); } diff --git a/src/com/lishid/openinv/internal/IInventoryAccess.java b/src/main/java/com/lishid/openinv/internal/IInventoryAccess.java similarity index 100% rename from src/com/lishid/openinv/internal/IInventoryAccess.java rename to src/main/java/com/lishid/openinv/internal/IInventoryAccess.java diff --git a/src/com/lishid/openinv/internal/IPlayerDataManager.java b/src/main/java/com/lishid/openinv/internal/IPlayerDataManager.java similarity index 81% rename from src/com/lishid/openinv/internal/IPlayerDataManager.java rename to src/main/java/com/lishid/openinv/internal/IPlayerDataManager.java index ec2af50..b1aaf4b 100644 --- a/src/com/lishid/openinv/internal/IPlayerDataManager.java +++ b/src/main/java/com/lishid/openinv/internal/IPlayerDataManager.java @@ -16,11 +16,11 @@ package com.lishid.openinv.internal; -import java.util.UUID; - +import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; public interface IPlayerDataManager { - public Player loadPlayer(String name); - public Player loadPlayer(UUID uuid); + public Player loadPlayer(OfflinePlayer offline); + + public String getPlayerDataID(OfflinePlayer player); } diff --git a/src/com/lishid/openinv/internal/ISpecialEnderChest.java b/src/main/java/com/lishid/openinv/internal/ISpecialEnderChest.java similarity index 72% rename from src/com/lishid/openinv/internal/ISpecialEnderChest.java rename to src/main/java/com/lishid/openinv/internal/ISpecialEnderChest.java index 3ff8218..56c7e99 100644 --- a/src/com/lishid/openinv/internal/ISpecialEnderChest.java +++ b/src/main/java/com/lishid/openinv/internal/ISpecialEnderChest.java @@ -20,12 +20,18 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; public interface ISpecialEnderChest { + public Inventory getBukkitInventory(); - public void InventoryRemovalCheck(); + public boolean inventoryRemovalCheck(); - public void PlayerGoOnline(Player p); + public void setPlayerOnline(Player p); - public void PlayerGoOffline(); + /** + * Sets the Player associated with this ISpecialEnderChest offline. + * + * @return true if the ISpecialEnderChest is eligible for removal + */ + public boolean setPlayerOffline(); } diff --git a/src/com/lishid/openinv/internal/ISpecialPlayerInventory.java b/src/main/java/com/lishid/openinv/internal/ISpecialPlayerInventory.java similarity index 71% rename from src/com/lishid/openinv/internal/ISpecialPlayerInventory.java rename to src/main/java/com/lishid/openinv/internal/ISpecialPlayerInventory.java index da4fc7b..a0e7281 100644 --- a/src/com/lishid/openinv/internal/ISpecialPlayerInventory.java +++ b/src/main/java/com/lishid/openinv/internal/ISpecialPlayerInventory.java @@ -20,11 +20,17 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; public interface ISpecialPlayerInventory { + public Inventory getBukkitInventory(); - public void InventoryRemovalCheck(); + public boolean inventoryRemovalCheck(); - public void PlayerGoOnline(Player p); + public void setPlayerOnline(Player player); - public void PlayerGoOffline(); + /** + * Sets the Player associated with this ISpecialPlayerInventory offline. + * + * @return true if the ISpecialPlayerInventory is eligible for removal + */ + public boolean setPlayerOffline(); } diff --git a/src/com/lishid/openinv/internal/InternalAccessor.java b/src/main/java/com/lishid/openinv/internal/InternalAccessor.java similarity index 74% rename from src/com/lishid/openinv/internal/InternalAccessor.java rename to src/main/java/com/lishid/openinv/internal/InternalAccessor.java index b8b406c..1c89505 100644 --- a/src/com/lishid/openinv/internal/InternalAccessor.java +++ b/src/main/java/com/lishid/openinv/internal/InternalAccessor.java @@ -22,19 +22,28 @@ import org.bukkit.entity.Player; import com.lishid.openinv.OpenInv; public class InternalAccessor { - public static InternalAccessor Instance; + + private final OpenInv plugin; + private String version; - /* - * Returns false if version not supported + public InternalAccessor(OpenInv plugin) { + this.plugin = plugin; + } + + /** + * Check if the current server version is supported, and, if it is, prepare to load version-specific code. + * + * @param server the Server + * + * @return true if supported */ - public static boolean Initialize(Server server) { - Instance = new InternalAccessor(); + public boolean initialize(Server server) { String packageName = server.getClass().getPackage().getName(); - Instance.version = packageName.substring(packageName.lastIndexOf('.') + 1); + version = packageName.substring(packageName.lastIndexOf('.') + 1); try { - Class.forName("com.lishid.openinv.internal." + Instance.version + ".AnySilentChest"); + Class.forName("com.lishid.openinv.internal." + version + ".AnySilentChest"); return true; } catch (Exception e) { @@ -42,8 +51,8 @@ public class InternalAccessor { } } - public void PrintError() { - OpenInv.log("OpenInv encountered an error with the CraftBukkit version \"" + Instance.version + "\". Please look for an updated version of OpenInv."); + private void printErrorMessage() { + plugin.getLogger().warning("OpenInv encountered an error with the CraftBukkit version \"" + version + "\". Please look for an updated version of OpenInv."); } public IPlayerDataManager newPlayerDataManager() { @@ -66,8 +75,8 @@ public class InternalAccessor { } } catch (Exception e) { - PrintError(); - OpenInv.log(e); + printErrorMessage(); + e.printStackTrace(); } return null; @@ -81,8 +90,8 @@ public class InternalAccessor { } } catch (Exception e) { - PrintError(); - OpenInv.log(e); + printErrorMessage(); + e.printStackTrace(); } return null; @@ -96,8 +105,8 @@ public class InternalAccessor { } } catch (Exception e) { - PrintError(); - OpenInv.log(e); + printErrorMessage(); + e.printStackTrace(); } return null; diff --git a/src/com/lishid/openinv/internal/v1_9_R1/AnySilentChest.java b/src/main/java/com/lishid/openinv/internal/v1_9_R1/AnySilentChest.java similarity index 93% rename from src/com/lishid/openinv/internal/v1_9_R1/AnySilentChest.java rename to src/main/java/com/lishid/openinv/internal/v1_9_R1/AnySilentChest.java index ea73c6a..2d4e95e 100644 --- a/src/com/lishid/openinv/internal/v1_9_R1/AnySilentChest.java +++ b/src/main/java/com/lishid/openinv/internal/v1_9_R1/AnySilentChest.java @@ -19,7 +19,6 @@ package com.lishid.openinv.internal.v1_9_R1; import org.bukkit.ChatColor; import org.bukkit.entity.Player; -import com.lishid.openinv.OpenInv; import com.lishid.openinv.internal.IAnySilentChest; //Volatile @@ -39,8 +38,7 @@ import net.minecraft.server.v1_9_R1.TileEntityChest; import net.minecraft.server.v1_9_R1.World; public class AnySilentChest implements IAnySilentChest { - @Override - public boolean IsAnyChestNeeded(Player p, int x, int y, int z) { + public boolean isAnyChestNeeded(Player p, int x, int y, int z) { // FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest EntityPlayer player = ((CraftPlayer) p).getHandle(); World world = player.world; @@ -88,8 +86,7 @@ public class AnySilentChest implements IAnySilentChest { return false; } - @Override - public boolean ActivateChest(Player p, boolean anychest, boolean silentchest, int x, int y, int z) { + public boolean activateChest(Player p, boolean anychest, boolean silentchest, int x, int y, int z) { EntityPlayer player = ((CraftPlayer) p).getHandle(); World world = player.world; Object chest = world.getTileEntity(new BlockPosition(x, y, z)); @@ -132,9 +129,6 @@ public class AnySilentChest implements IAnySilentChest { player.activeContainer = silentContainerChest; player.activeContainer.windowId = windowId; player.activeContainer.addSlotListener(player); - if (OpenInv.NotifySilentChest()) { - p.sendMessage("You are opening a chest silently."); - } returnValue = false; } catch (Exception e) { @@ -143,10 +137,6 @@ public class AnySilentChest implements IAnySilentChest { } } - if (anychest && OpenInv.NotifyAnyChest()) { - p.sendMessage("You are opening a blocked chest."); - } - return returnValue; } } diff --git a/src/com/lishid/openinv/internal/v1_9_R1/InventoryAccess.java b/src/main/java/com/lishid/openinv/internal/v1_9_R1/InventoryAccess.java similarity index 97% rename from src/com/lishid/openinv/internal/v1_9_R1/InventoryAccess.java rename to src/main/java/com/lishid/openinv/internal/v1_9_R1/InventoryAccess.java index dc9164d..9c23aa3 100644 --- a/src/com/lishid/openinv/internal/v1_9_R1/InventoryAccess.java +++ b/src/main/java/com/lishid/openinv/internal/v1_9_R1/InventoryAccess.java @@ -31,7 +31,6 @@ import org.bukkit.craftbukkit.v1_9_R1.inventory.CraftInventory; import net.minecraft.server.v1_9_R1.IInventory; public class InventoryAccess implements IInventoryAccess { - @Override public boolean check(Inventory inventory, HumanEntity player) { IInventory inv = grabInventory(inventory); @@ -65,7 +64,7 @@ public class InventoryAccess implements IInventoryAccess { result = (IInventory) f.get(inventory); } catch (Exception e) { - OpenInv.log(e); + e.printStackTrace(); } } } diff --git a/src/main/java/com/lishid/openinv/internal/v1_9_R1/PlayerDataManager.java b/src/main/java/com/lishid/openinv/internal/v1_9_R1/PlayerDataManager.java new file mode 100644 index 0000000..4a6673d --- /dev/null +++ b/src/main/java/com/lishid/openinv/internal/v1_9_R1/PlayerDataManager.java @@ -0,0 +1,147 @@ +/* + * Copyright (C) 2011-2014 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 + * the Free Software Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.lishid.openinv.internal.v1_9_R1; + +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; + +import com.lishid.openinv.internal.IPlayerDataManager; +import com.mojang.authlib.GameProfile; + +//Volatile +import org.bukkit.craftbukkit.v1_9_R1.CraftServer; + +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 { +// public Player loadPlayer(String name) { +// try { +// UUID uuid = matchUser(name); +// if (uuid == null) { +// return null; +// } +// +// // Default player folder +// File playerfolder = new File(Bukkit.getWorlds().get(0).getWorldFolder(), "playerdata"); +// if (!playerfolder.exists()) { +// return null; +// } +// +// OfflinePlayer player = Bukkit.getOfflinePlayer(uuid); +// if (player == null) { +// return null; +// } +// GameProfile profile = new GameProfile(uuid, player.getName()); +// MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer(); +// // Create an entity to load the player data +// EntityPlayer entity = new EntityPlayer(server, server.getWorldServer(0), profile, new PlayerInteractManager(server.getWorldServer(0))); +// +// // Get the bukkit entity +// Player target = (entity == null) ? null : entity.getBukkitEntity(); +// if (target != null) { +// // Load data +// target.loadData(); +// // Return the entity +// return target; +// } +// } +// catch (Exception e) { +// e.printStackTrace(); +// } +// +// return null; +// } +// +// private static UUID matchUser(String search) { +// UUID found = null; +// +// String lowerSearch = search.toLowerCase(); +// int delta = 2147483647; +// +// OfflinePlayer[] offlinePlayers = Bukkit.getOfflinePlayers(); +// for (OfflinePlayer player : offlinePlayers) { +// String name = player.getName(); +// +// if (name == null){ +// continue; +// } +// if (name.equalsIgnoreCase(search)){ +// return player.getUniqueId(); +// } +// if (name.toLowerCase().startsWith(lowerSearch)) { +// int curDelta = name.length() - lowerSearch.length(); +// if (curDelta < delta) { +// found = player.getUniqueId(); +// delta = curDelta; +// } +// if (curDelta == 0) { +// break; +// } +// } +// } +// +// return found; +// } +// +// public Player loadPlayer(UUID uuid) { +// 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 +// EntityPlayer entity = new EntityPlayer(server, server.getWorldServer(0), profile, new PlayerInteractManager(server.getWorldServer(0))); +// +// // Get the bukkit entity +// Player target = (entity == null) ? null : entity.getBukkitEntity(); +// if (target != null) { +// // Load data +// target.loadData(); +// // Return the entity +// return target; +// } +// return null; +// } + + public Player loadPlayer(OfflinePlayer offline) { + if (offline == null || !offline.hasPlayedBefore()) { + return null; + } + GameProfile profile = new GameProfile(offline.getUniqueId(), offline.getName()); + MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer(); + // Create an entity to load the player data + EntityPlayer entity = new EntityPlayer(server, server.getWorldServer(0), profile, new PlayerInteractManager(server.getWorldServer(0))); + + // Get the bukkit entity + Player target = (entity == null) ? null : entity.getBukkitEntity(); + if (target != null) { + // Load data + target.loadData(); + // Return the entity + return target; + } + return null; + } + + public String getPlayerDataID(OfflinePlayer player) { + return player.getUniqueId().toString(); + } +} diff --git a/src/com/lishid/openinv/internal/v1_9_R1/SilentContainerChest.java b/src/main/java/com/lishid/openinv/internal/v1_9_R1/SilentContainerChest.java similarity index 100% rename from src/com/lishid/openinv/internal/v1_9_R1/SilentContainerChest.java rename to src/main/java/com/lishid/openinv/internal/v1_9_R1/SilentContainerChest.java diff --git a/src/com/lishid/openinv/internal/v1_9_R1/SpecialEnderChest.java b/src/main/java/com/lishid/openinv/internal/v1_9_R1/SpecialEnderChest.java similarity index 89% rename from src/com/lishid/openinv/internal/v1_9_R1/SpecialEnderChest.java rename to src/main/java/com/lishid/openinv/internal/v1_9_R1/SpecialEnderChest.java index 16239c2..62574ca 100644 --- a/src/com/lishid/openinv/internal/v1_9_R1/SpecialEnderChest.java +++ b/src/main/java/com/lishid/openinv/internal/v1_9_R1/SpecialEnderChest.java @@ -25,7 +25,6 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.InventoryHolder; -import com.lishid.openinv.OpenInv; import com.lishid.openinv.internal.ISpecialEnderChest; //Volatile @@ -53,24 +52,18 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento this.enderChest = player.getHandle().getEnderChest(); this.owner = player; this.items = enderChest.getContents(); - OpenInv.enderChests.put(owner.getName().toLowerCase(), this); } - @Override public Inventory getBukkitInventory() { return inventory; } - @Override - public void InventoryRemovalCheck() { + public boolean inventoryRemovalCheck() { owner.saveData(); - if (transaction.isEmpty() && !playerOnline) { - OpenInv.enderChests.remove(owner.getName().toLowerCase()); - } + return transaction.isEmpty() && !playerOnline; } - @Override - public void PlayerGoOnline(Player p) { + public void setPlayerOnline(Player p) { if (!playerOnline) { try { InventoryEnderChest playerEnderChest = ((CraftPlayer) p).getHandle().getEnderChest(); @@ -84,9 +77,9 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento } } - @Override - public void PlayerGoOffline() { + public boolean setPlayerOffline() { playerOnline = false; + return inventoryRemovalCheck(); } @Override @@ -102,7 +95,7 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento @Override public void onClose(CraftHumanEntity who) { transaction.remove(who); - this.InventoryRemovalCheck(); + this.inventoryRemovalCheck(); } @Override diff --git a/src/com/lishid/openinv/internal/v1_9_R1/SpecialPlayerInventory.java b/src/main/java/com/lishid/openinv/internal/v1_9_R1/SpecialPlayerInventory.java similarity index 92% rename from src/com/lishid/openinv/internal/v1_9_R1/SpecialPlayerInventory.java rename to src/main/java/com/lishid/openinv/internal/v1_9_R1/SpecialPlayerInventory.java index 3316c58..a717285 100644 --- a/src/com/lishid/openinv/internal/v1_9_R1/SpecialPlayerInventory.java +++ b/src/main/java/com/lishid/openinv/internal/v1_9_R1/SpecialPlayerInventory.java @@ -22,7 +22,6 @@ import java.lang.reflect.Modifier; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; -import com.lishid.openinv.OpenInv; import com.lishid.openinv.internal.ISpecialPlayerInventory; //Volatile @@ -45,7 +44,6 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP this.owner = ((CraftPlayer) p); this.playerOnline = online; 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, @@ -61,28 +59,26 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP field.set(inventory, armor); field = inventory.getClass().getField("extraSlots"); modifiers.setInt(field, field.getModifiers() & ~Modifier.FINAL); - } catch (NoSuchFieldException | SecurityException | IllegalArgumentException - | IllegalAccessException e) { + } catch (NoSuchFieldException e) { // Unable to set final fields to item arrays, we're screwed. Noisily fail. e.printStackTrace(); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); } } - @Override public Inventory getBukkitInventory() { return inventory; } - @Override - public void InventoryRemovalCheck() { + public boolean inventoryRemovalCheck() { owner.saveData(); - if (transaction.isEmpty() && !playerOnline) { - OpenInv.inventories.remove(owner.getName().toLowerCase()); - } + return transaction.isEmpty() && !playerOnline; } - @Override - public void PlayerGoOnline(Player player) { + public void setPlayerOnline(Player player) { if (!playerOnline) { CraftPlayer p = (CraftPlayer) player; setItemArrays(p.getHandle().inventory, items, armor, extraSlots); @@ -91,16 +87,15 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP } } - @Override - public void PlayerGoOffline() { + public boolean setPlayerOffline() { playerOnline = false; - this.InventoryRemovalCheck(); + return this.inventoryRemovalCheck(); } @Override public void onClose(CraftHumanEntity who) { super.onClose(who); - this.InventoryRemovalCheck(); + this.inventoryRemovalCheck(); } @Override diff --git a/src/plugin.yml b/src/main/resources/plugin.yml similarity index 100% rename from src/plugin.yml rename to src/main/resources/plugin.yml