diff --git a/api/pom.xml b/api/pom.xml
index 6197976..bab3ba3 100644
--- a/api/pom.xml
+++ b/api/pom.xml
@@ -29,11 +29,14 @@
- org.bukkit
- bukkit
- 1.4.5-R1.0
- system
- ${project.basedir}/../lib/bukkit-1.4.5-R1.0.jar
+ org.jetbrains
+ annotations
+ 17.0.0
+
+
+ org.spigotmc
+ spigot-api
+ 1.8.8-R0.1-SNAPSHOT
diff --git a/api/src/main/java/com/lishid/openinv/IOpenInv.java b/api/src/main/java/com/lishid/openinv/IOpenInv.java
index d968b63..0fb4a0b 100644
--- a/api/src/main/java/com/lishid/openinv/IOpenInv.java
+++ b/api/src/main/java/com/lishid/openinv/IOpenInv.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2011-2018 lishid. All rights reserved.
+ * Copyright (C) 2011-2019 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
@@ -21,6 +21,11 @@ import com.lishid.openinv.internal.IInventoryAccess;
import com.lishid.openinv.internal.ISpecialEnderChest;
import com.lishid.openinv.internal.ISpecialInventory;
import com.lishid.openinv.internal.ISpecialPlayerInventory;
+import com.lishid.openinv.util.InventoryAccess;
+import com.lishid.openinv.util.StringMetric;
+import java.util.UUID;
+import java.util.logging.Logger;
+import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.bukkit.inventory.InventoryView;
@@ -59,7 +64,10 @@ public interface IOpenInv {
* @return the IInventoryAccess
* @throws IllegalStateException if the server version is unsupported
*/
- @NotNull IInventoryAccess getInventoryAccess();
+ @Deprecated
+ default @NotNull IInventoryAccess getInventoryAccess() {
+ return new InventoryAccess();
+ }
/**
* Gets the provided player's AnyChest setting.
@@ -78,7 +86,9 @@ public interface IOpenInv {
* @return the identifier
* @throws IllegalStateException if the server version is unsupported
*/
- @NotNull String getPlayerID(@NotNull OfflinePlayer offline);
+ default @NotNull String getPlayerID(@NotNull OfflinePlayer offline) {
+ return offline.getUniqueId().toString();
+ }
/**
* Gets a player's SilentChest setting.
@@ -137,7 +147,76 @@ public interface IOpenInv {
* @param name the name of the Player
* @return the OfflinePlayer with the closest matching name or null if no players have ever logged in
*/
- @Nullable OfflinePlayer matchPlayer(@NotNull String name);
+ default @Nullable OfflinePlayer matchPlayer(@NotNull String name) {
+
+ // Warn if called on the main thread - if we resort to searching offline players, this may take several seconds.
+ if (Bukkit.getServer().isPrimaryThread()) {
+ this.getLogger().warning("Call to OpenInv#matchPlayer made on the main thread!");
+ this.getLogger().warning("This can cause the server to hang, potentially severely.");
+ this.getLogger().warning("Trace:");
+ for (StackTraceElement element : new Throwable().fillInStackTrace().getStackTrace()) {
+ this.getLogger().warning(element.toString());
+ }
+ }
+
+ OfflinePlayer player;
+
+ try {
+ UUID uuid = UUID.fromString(name);
+ player = Bukkit.getOfflinePlayer(uuid);
+ // Ensure player is a real player, otherwise return null
+ if (player.hasPlayedBefore() || player.isOnline()) {
+ return player;
+ }
+ } catch (IllegalArgumentException ignored) {
+ // Not a UUID
+ }
+
+ // Ensure name is valid if server is in online mode to avoid unnecessary searching
+ if (Bukkit.getServer().getOnlineMode() && !name.matches("[a-zA-Z0-9_]{3,16}")) {
+ return null;
+ }
+
+ player = Bukkit.getServer().getPlayerExact(name);
+
+ if (player != null) {
+ return player;
+ }
+
+ player = Bukkit.getServer().getOfflinePlayer(name);
+
+ if (player.hasPlayedBefore()) {
+ return player;
+ }
+
+ player = Bukkit.getServer().getPlayer(name);
+
+ if (player != null) {
+ return player;
+ }
+
+ float bestMatch = 0;
+ for (OfflinePlayer offline : Bukkit.getServer().getOfflinePlayers()) {
+ if (offline.getName() == null) {
+ // Loaded by UUID only, name has never been looked up.
+ continue;
+ }
+
+ float currentMatch = StringMetric.compareJaroWinkler(name, offline.getName());
+
+ if (currentMatch == 1.0F) {
+ return offline;
+ }
+
+ if (currentMatch > bestMatch) {
+ bestMatch = currentMatch;
+ player = offline;
+ }
+ }
+
+ // Only null if no players have played ever, otherwise even the worst match will do.
+ return player;
+ }
/**
* Open an ISpecialInventory for a Player.
@@ -225,4 +304,6 @@ public interface IOpenInv {
*/
void unload(@NotNull OfflinePlayer offline);
+ Logger getLogger();
+
}
diff --git a/api/src/main/java/com/lishid/openinv/internal/IInventoryAccess.java b/api/src/main/java/com/lishid/openinv/internal/IInventoryAccess.java
index 97f1160..f0eb40e 100644
--- a/api/src/main/java/com/lishid/openinv/internal/IInventoryAccess.java
+++ b/api/src/main/java/com/lishid/openinv/internal/IInventoryAccess.java
@@ -20,6 +20,7 @@ import org.bukkit.inventory.Inventory;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+@Deprecated
public interface IInventoryAccess {
/**
@@ -29,6 +30,7 @@ public interface IInventoryAccess {
* @param inventory the Inventory
* @return the ISpecialEnderChest or null
*/
+ @Deprecated
@Nullable ISpecialEnderChest getSpecialEnderChest(@NotNull Inventory inventory);
/**
@@ -38,6 +40,7 @@ public interface IInventoryAccess {
* @param inventory the Inventory
* @return the ISpecialPlayerInventory or null
*/
+ @Deprecated
@Nullable ISpecialPlayerInventory getSpecialPlayerInventory(@NotNull Inventory inventory);
/**
@@ -46,6 +49,7 @@ public interface IInventoryAccess {
* @param inventory the Inventory
* @return true if the Inventory is backed by an ISpecialEnderChest
*/
+ @Deprecated
boolean isSpecialEnderChest(@NotNull Inventory inventory);
/**
@@ -54,6 +58,7 @@ public interface IInventoryAccess {
* @param inventory the Inventory
* @return true if the Inventory is backed by an ISpecialPlayerInventory
*/
+ @Deprecated
boolean isSpecialPlayerInventory(@NotNull Inventory inventory);
}
diff --git a/api/src/main/java/com/lishid/openinv/util/InventoryAccess.java b/api/src/main/java/com/lishid/openinv/util/InventoryAccess.java
new file mode 100644
index 0000000..fe35475
--- /dev/null
+++ b/api/src/main/java/com/lishid/openinv/util/InventoryAccess.java
@@ -0,0 +1,145 @@
+/*
+ * Copyright (C) 2011-2019 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.util;
+
+import com.lishid.openinv.internal.IInventoryAccess;
+import com.lishid.openinv.internal.ISpecialEnderChest;
+import com.lishid.openinv.internal.ISpecialPlayerInventory;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import org.bukkit.Bukkit;
+import org.bukkit.inventory.Inventory;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public class InventoryAccess implements IInventoryAccess {
+
+ private static Class> craftInventory = null;
+ private static Method getInventory = null;
+
+ static {
+ String packageName = Bukkit.getServer().getClass().getPackage().getName();
+ String version = packageName.substring(packageName.lastIndexOf('.') + 1);
+ try {
+ craftInventory = Class.forName("org.bukkit.craftbukkit." + version + ".inventory.CraftInventory");
+ } catch (ClassNotFoundException ignored) {}
+ try {
+ getInventory = craftInventory.getDeclaredMethod("getInventory");
+ } catch (NoSuchMethodException ignored) {}
+ }
+
+ public static boolean isUseable() {
+ return craftInventory != null && getInventory != null;
+ }
+
+ public static boolean isPlayerInventory(@NotNull Inventory inventory) {
+ if (craftInventory.isAssignableFrom(inventory.getClass())) {
+ try {
+ return getInventory.invoke(inventory) instanceof ISpecialPlayerInventory;
+ } catch (ReflectiveOperationException ignored) {}
+ }
+ return grabFieldOfTypeFromObject(ISpecialPlayerInventory.class, inventory) != null;
+ }
+
+ public static ISpecialPlayerInventory getPlayerInventory(@NotNull Inventory inventory) {
+ Object inv = null;
+ if (craftInventory.isAssignableFrom(inventory.getClass())) {
+ try {
+ inv = getInventory.invoke(inventory);
+ } catch (ReflectiveOperationException ignored) {}
+ }
+
+ if (inv == null) {
+ inv = grabFieldOfTypeFromObject(ISpecialPlayerInventory.class, inventory);
+ }
+
+ if (inv instanceof ISpecialPlayerInventory) {
+ return (ISpecialPlayerInventory) inv;
+ }
+
+ return null;
+ }
+
+ public static boolean isEnderChest(@NotNull Inventory inventory) {
+ if (craftInventory.isAssignableFrom(inventory.getClass())) {
+ try {
+ return getInventory.invoke(inventory) instanceof ISpecialEnderChest;
+ } catch (ReflectiveOperationException ignored) {}
+ }
+ return grabFieldOfTypeFromObject(ISpecialEnderChest.class, inventory) != null;
+ }
+
+ public static ISpecialEnderChest getEnderChest(@NotNull Inventory inventory) {
+ Object inv = null;
+ if (craftInventory.isAssignableFrom(inventory.getClass())) {
+ try {
+ inv = getInventory.invoke(inventory);
+ } catch (ReflectiveOperationException ignored) {}
+ }
+
+ if (inv == null) {
+ inv = grabFieldOfTypeFromObject(ISpecialEnderChest.class, inventory);
+ }
+
+ if (inv instanceof ISpecialEnderChest) {
+ return (ISpecialEnderChest) inv;
+ }
+
+ return null;
+ }
+
+ private static T grabFieldOfTypeFromObject(final Class type, final Object object) {
+ // Use reflection to find the IInventory
+ Class> clazz = object.getClass();
+ T result = null;
+ for (Field f : clazz.getDeclaredFields()) {
+ f.setAccessible(true);
+ if (type.isAssignableFrom(f.getDeclaringClass())) {
+ try {
+ result = type.cast(f.get(object));
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ return result;
+ }
+
+ @Deprecated
+ @Override
+ public @Nullable ISpecialEnderChest getSpecialEnderChest(@NotNull Inventory inventory) {
+ return getEnderChest(inventory);
+ }
+
+ @Deprecated
+ @Override
+ public @Nullable ISpecialPlayerInventory getSpecialPlayerInventory(@NotNull Inventory inventory) {
+ return getPlayerInventory(inventory);
+ }
+
+ @Deprecated
+ @Override
+ public boolean isSpecialEnderChest(@NotNull Inventory inventory) {
+ return isEnderChest(inventory);
+ }
+
+ @Deprecated
+ @Override
+ public boolean isSpecialPlayerInventory(@NotNull Inventory inventory) {
+ return isPlayerInventory(inventory);
+ }
+}
diff --git a/api/src/main/java/com/lishid/openinv/util/StringMetric.java b/api/src/main/java/com/lishid/openinv/util/StringMetric.java
new file mode 100644
index 0000000..6a85ada
--- /dev/null
+++ b/api/src/main/java/com/lishid/openinv/util/StringMetric.java
@@ -0,0 +1,165 @@
+/*
+ * Copyright (C) 2011-2019 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 .
+ * *
+ * Copyright (C) 2014 - 2018 Simmetrics Authors
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.lishid.openinv.util;
+
+public class StringMetric {
+
+ public static float compareJaroWinkler(String a, String b) {
+ final float jaroScore = compareJaro(a, b);
+
+ if (jaroScore < (float) 0.1) {
+ return jaroScore;
+ }
+
+ String prefix = commonPrefix(a, b);
+ int prefixLength = Math.min(prefix.codePointCount(0, prefix.length()), 4);
+
+ return jaroScore + (prefixLength * (float) 0.7 * (1.0f - jaroScore));
+
+ }
+
+ private static float compareJaro(String a, String b) {
+ if (a.isEmpty() && b.isEmpty()) {
+ return 1.0f;
+ }
+
+ if (a.isEmpty() || b.isEmpty()) {
+ return 0.0f;
+ }
+
+ final int[] charsA = a.codePoints().toArray();
+ final int[] charsB = b.codePoints().toArray();
+
+ // Intentional integer division to round down.
+ final int halfLength = Math.max(0, Math.max(charsA.length, charsB.length) / 2 - 1);
+
+ final int[] commonA = getCommonCodePoints(charsA, charsB, halfLength);
+ final int[] commonB = getCommonCodePoints(charsB, charsA, halfLength);
+
+ // commonA and commonB will always contain the same multi-set of
+ // characters. Because getCommonCharacters has been optimized, commonA
+ // and commonB are -1-padded. So in this loop we count transposition
+ // and use commonCharacters to determine the length of the multi-set.
+ float transpositions = 0;
+ int commonCharacters = 0;
+ for (int length = commonA.length; commonCharacters < length
+ && commonA[commonCharacters] > -1; commonCharacters++) {
+ if (commonA[commonCharacters] != commonB[commonCharacters]) {
+ transpositions++;
+ }
+ }
+
+ if (commonCharacters == 0) {
+ return 0.0f;
+ }
+
+ float aCommonRatio = commonCharacters / (float) charsA.length;
+ float bCommonRatio = commonCharacters / (float) charsB.length;
+ float transpositionRatio = (commonCharacters - transpositions / 2.0f) / commonCharacters;
+
+ return (aCommonRatio + bCommonRatio + transpositionRatio) / 3.0f;
+ }
+
+ /*
+ * Returns an array of code points from a within b. A character in b is
+ * counted as common when it is within separation distance from the position
+ * in a.
+ */
+ private static int[] getCommonCodePoints(final int[] charsA, final int[] charsB, final int separation) {
+ final int[] common = new int[Math.min(charsA.length, charsB.length)];
+ final boolean[] matched = new boolean[charsB.length];
+
+ // Iterate of string a and find all characters that occur in b within
+ // the separation distance. Mark any matches found to avoid
+ // duplicate matchings.
+ int commonIndex = 0;
+ for (int i = 0, length = charsA.length; i < length; i++) {
+ final int character = charsA[i];
+ final int index = indexOf(character, charsB, i - separation, i
+ + separation + 1, matched);
+ if (index > -1) {
+ common[commonIndex++] = character;
+ matched[index] = true;
+ }
+ }
+
+ if (commonIndex < common.length) {
+ common[commonIndex] = -1;
+ }
+
+ // Both invocations will yield the same multi-set terminated by -1, so
+ // they can be compared for transposition without making a copy.
+ return common;
+ }
+
+ /*
+ * Search for code point in buffer starting at fromIndex to toIndex - 1.
+ *
+ * Returns -1 when not found.
+ */
+ private static int indexOf(int character, int[] buffer, int fromIndex, int toIndex, boolean[] matched) {
+
+ // compare char with range of characters to either side
+ for (int j = Math.max(0, fromIndex), length = Math.min(toIndex, buffer.length); j < length; j++) {
+ // check if found
+ if (buffer[j] == character && !matched[j]) {
+ return j;
+ }
+ }
+
+ return -1;
+ }
+
+ private static String commonPrefix(CharSequence a, CharSequence b) {
+ int maxPrefixLength = Math.min(a.length(), b.length());
+
+ int p;
+
+ p = 0;
+ while (p < maxPrefixLength && a.charAt(p) == b.charAt(p)) {
+ ++p;
+ }
+
+ if (validSurrogatePairAt(a, p - 1) || validSurrogatePairAt(b, p - 1)) {
+ --p;
+ }
+
+ return a.subSequence(0, p).toString();
+ }
+
+ private static boolean validSurrogatePairAt(CharSequence string, int index) {
+ return index >= 0 && index <= string.length() - 2 && Character.isHighSurrogate(string.charAt(index)) && Character.isLowSurrogate(string.charAt(index + 1));
+ }
+
+ private StringMetric(){}
+
+}
diff --git a/common/pom.xml b/common/pom.xml
index 42ecea5..abc47e9 100644
--- a/common/pom.xml
+++ b/common/pom.xml
@@ -28,13 +28,6 @@
OpenInvCommon
-
- org.bukkit
- bukkit
- 1.4.5-R1.0
- system
- ${project.basedir}/../lib/bukkit-1.4.5-R1.0.jar
-
com.lishid
openinvapi
diff --git a/common/src/main/java/com/lishid/openinv/internal/IPlayerDataManager.java b/common/src/main/java/com/lishid/openinv/internal/IPlayerDataManager.java
index 4419118..24cf49d 100644
--- a/common/src/main/java/com/lishid/openinv/internal/IPlayerDataManager.java
+++ b/common/src/main/java/com/lishid/openinv/internal/IPlayerDataManager.java
@@ -16,7 +16,6 @@
package com.lishid.openinv.internal;
-import java.util.Collection;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.bukkit.inventory.InventoryView;
@@ -35,29 +34,6 @@ public interface IPlayerDataManager {
*/
@Nullable Player loadPlayer(@NotNull OfflinePlayer offline);
- /**
- * Gets a unique identifying string for an OfflinePlayer.
- *
- * @param offline the OfflinePlayer
- * @return the unique identifier
- */
- @NotNull String getPlayerDataID(@NotNull OfflinePlayer offline);
-
- /**
- * Gets an OfflinePlayer by the given unique identifier.
- *
- * @param identifier the unique identifier
- * @return the OfflinePlayer, or null if no exact match was found
- */
- @Nullable OfflinePlayer getPlayerByID(@NotNull String identifier);
-
- /**
- * Gets a Collection of all Players currently online.
- *
- * @return the Collection of Players
- */
- @NotNull Collection extends Player> getOnlinePlayers();
-
/**
* Opens an ISpecialInventory for a Player.
*
diff --git a/common/src/main/java/com/lishid/openinv/util/InternalAccessor.java b/common/src/main/java/com/lishid/openinv/util/InternalAccessor.java
index 74153b5..3099a08 100644
--- a/common/src/main/java/com/lishid/openinv/util/InternalAccessor.java
+++ b/common/src/main/java/com/lishid/openinv/util/InternalAccessor.java
@@ -17,41 +17,20 @@
package com.lishid.openinv.util;
import com.lishid.openinv.internal.IAnySilentContainer;
-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 java.lang.reflect.Constructor;
-import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
public class InternalAccessor {
- public static T grabFieldOfTypeFromObject(final Class type, final Object object) {
- // Use reflection to find the IInventory
- Class> clazz = object.getClass();
- T result = null;
- for (Field f : clazz.getDeclaredFields()) {
- f.setAccessible(true);
- if (type.isAssignableFrom(f.getDeclaringClass())) {
- try {
- result = type.cast(f.get(object));
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- return result;
- }
-
private final Plugin plugin;
private final String version;
private boolean supported = false;
private IPlayerDataManager playerDataManager;
- private IInventoryAccess inventoryAccess;
-
private IAnySilentContainer anySilentContainer;
public InternalAccessor(final Plugin plugin) {
@@ -65,9 +44,8 @@ public class InternalAccessor {
Class.forName("com.lishid.openinv.internal." + this.version + ".SpecialPlayerInventory");
Class.forName("com.lishid.openinv.internal." + this.version + ".SpecialEnderChest");
this.playerDataManager = this.createObject(IPlayerDataManager.class, "PlayerDataManager");
- this.inventoryAccess = this.createObject(IInventoryAccess.class, "InventoryAccess");
this.anySilentContainer = this.createObject(IAnySilentContainer.class, "AnySilentContainer");
- this.supported = true;
+ this.supported = InventoryAccess.isUseable();
} catch (Exception ignored) {}
}
@@ -128,19 +106,6 @@ public class InternalAccessor {
return this.anySilentContainer;
}
- /**
- * Creates an instance of the IInventoryAccess implementation for the current server version.
- *
- * @return the IInventoryAccess
- * @throws IllegalStateException if server version is unsupported
- */
- public IInventoryAccess getInventoryAccess() {
- if (!this.supported) {
- throw new IllegalStateException(String.format("Unsupported server version %s!", this.version));
- }
- return this.inventoryAccess;
- }
-
/**
* Creates an instance of the IPlayerDataManager implementation for the current server version.
*
diff --git a/internal/v1_13_R2/pom.xml b/internal/v1_13_R2/pom.xml
index d0fc421..ddf76cf 100644
--- a/internal/v1_13_R2/pom.xml
+++ b/internal/v1_13_R2/pom.xml
@@ -41,17 +41,4 @@
-
-
-
- maven-compiler-plugin
- 3.6.1
-
-
- 1.8
-
-
-
-
-
diff --git a/internal/v1_13_R2/src/main/java/com/lishid/openinv/internal/v1_13_R2/InventoryAccess.java b/internal/v1_13_R2/src/main/java/com/lishid/openinv/internal/v1_13_R2/InventoryAccess.java
deleted file mode 100644
index 60022cf..0000000
--- a/internal/v1_13_R2/src/main/java/com/lishid/openinv/internal/v1_13_R2/InventoryAccess.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (C) 2011-2018 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_13_R2;
-
-import com.lishid.openinv.internal.IInventoryAccess;
-import com.lishid.openinv.internal.ISpecialEnderChest;
-import com.lishid.openinv.internal.ISpecialPlayerInventory;
-import com.lishid.openinv.util.InternalAccessor;
-import net.minecraft.server.v1_13_R2.IInventory;
-import org.bukkit.craftbukkit.v1_13_R2.inventory.CraftInventory;
-import org.bukkit.inventory.Inventory;
-import org.jetbrains.annotations.NotNull;
-
-public class InventoryAccess implements IInventoryAccess {
-
- @Override
- public ISpecialEnderChest getSpecialEnderChest(@NotNull final Inventory inventory) {
- IInventory inv;
- if (inventory instanceof CraftInventory) {
- inv = ((CraftInventory) inventory).getInventory();
- } else {
- inv = InternalAccessor.grabFieldOfTypeFromObject(IInventory.class, inventory);
- }
-
- if (inv instanceof SpecialEnderChest) {
- return (SpecialEnderChest) inv;
- }
- return null;
- }
-
- @Override
- public ISpecialPlayerInventory getSpecialPlayerInventory(@NotNull final Inventory inventory) {
- IInventory inv;
- if (inventory instanceof CraftInventory) {
- inv = ((CraftInventory) inventory).getInventory();
- } else {
- inv = InternalAccessor.grabFieldOfTypeFromObject(IInventory.class, inventory);
- }
-
- if (inv instanceof SpecialPlayerInventory) {
- return (SpecialPlayerInventory) inv;
- }
- return null;
- }
-
- @Override
- public boolean isSpecialEnderChest(@NotNull final Inventory inventory) {
- if (inventory instanceof CraftInventory) {
- return ((CraftInventory) inventory).getInventory() instanceof ISpecialEnderChest;
- }
- return InternalAccessor.grabFieldOfTypeFromObject(IInventory.class,
- inventory) instanceof ISpecialEnderChest;
- }
-
- @Override
- public boolean isSpecialPlayerInventory(@NotNull final Inventory inventory) {
- if (inventory instanceof CraftInventory) {
- return ((CraftInventory) inventory).getInventory() instanceof ISpecialPlayerInventory;
- }
- return InternalAccessor.grabFieldOfTypeFromObject(IInventory.class,
- inventory) instanceof ISpecialPlayerInventory;
- }
-
-}
diff --git a/internal/v1_13_R2/src/main/java/com/lishid/openinv/internal/v1_13_R2/PlayerDataManager.java b/internal/v1_13_R2/src/main/java/com/lishid/openinv/internal/v1_13_R2/PlayerDataManager.java
index b5b5a23..01e5daa 100644
--- a/internal/v1_13_R2/src/main/java/com/lishid/openinv/internal/v1_13_R2/PlayerDataManager.java
+++ b/internal/v1_13_R2/src/main/java/com/lishid/openinv/internal/v1_13_R2/PlayerDataManager.java
@@ -19,8 +19,6 @@ package com.lishid.openinv.internal.v1_13_R2;
import com.lishid.openinv.internal.IPlayerDataManager;
import com.lishid.openinv.internal.ISpecialInventory;
import com.mojang.authlib.GameProfile;
-import java.util.Collection;
-import java.util.UUID;
import net.minecraft.server.v1_13_R2.DimensionManager;
import net.minecraft.server.v1_13_R2.EntityPlayer;
import net.minecraft.server.v1_13_R2.MinecraftServer;
@@ -56,32 +54,6 @@ public class PlayerDataManager implements IPlayerDataManager {
return nmsPlayer;
}
- @Override
- public @NotNull Collection extends Player> getOnlinePlayers() {
- return Bukkit.getOnlinePlayers();
- }
-
- @Override
- public OfflinePlayer getPlayerByID(@NotNull final String identifier) {
- try {
- UUID uuid = UUID.fromString(identifier);
- OfflinePlayer player = Bukkit.getOfflinePlayer(uuid);
- // Ensure player is a real player, otherwise return null
- if (!player.hasPlayedBefore() && !player.isOnline()) {
- return null;
- }
- return player;
- } catch (IllegalArgumentException e) {
- // Not a UUID
- return null;
- }
- }
-
- @Override
- public @NotNull String getPlayerDataID(@NotNull final OfflinePlayer offline) {
- return offline.getUniqueId().toString();
- }
-
@Override
public Player loadPlayer(@NotNull final OfflinePlayer offline) {
// Ensure player has data
diff --git a/internal/v1_14_R1/pom.xml b/internal/v1_14_R1/pom.xml
index c8573f8..47249c8 100644
--- a/internal/v1_14_R1/pom.xml
+++ b/internal/v1_14_R1/pom.xml
@@ -42,18 +42,4 @@
-
-
-
- maven-compiler-plugin
- 3.6.1
-
-
- 1.8
-
-
-
-
-
-
\ No newline at end of file
diff --git a/internal/v1_14_R1/src/main/java/com/lishid/openinv/internal/v1_14_R1/InventoryAccess.java b/internal/v1_14_R1/src/main/java/com/lishid/openinv/internal/v1_14_R1/InventoryAccess.java
deleted file mode 100644
index 2830c43..0000000
--- a/internal/v1_14_R1/src/main/java/com/lishid/openinv/internal/v1_14_R1/InventoryAccess.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (C) 2011-2019 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_14_R1;
-
-import com.lishid.openinv.internal.IInventoryAccess;
-import com.lishid.openinv.internal.ISpecialEnderChest;
-import com.lishid.openinv.internal.ISpecialPlayerInventory;
-import com.lishid.openinv.util.InternalAccessor;
-import net.minecraft.server.v1_14_R1.IInventory;
-import org.bukkit.craftbukkit.v1_14_R1.inventory.CraftInventory;
-import org.bukkit.inventory.Inventory;
-import org.jetbrains.annotations.NotNull;
-
-public class InventoryAccess implements IInventoryAccess {
-
- @Override
- public ISpecialEnderChest getSpecialEnderChest(@NotNull final Inventory inventory) {
- IInventory inv;
- if (inventory instanceof CraftInventory) {
- inv = ((CraftInventory) inventory).getInventory();
- } else {
- inv = InternalAccessor.grabFieldOfTypeFromObject(IInventory.class, inventory);
- }
-
- if (inv instanceof SpecialEnderChest) {
- return (SpecialEnderChest) inv;
- }
- return null;
- }
-
- @Override
- public ISpecialPlayerInventory getSpecialPlayerInventory(@NotNull final Inventory inventory) {
- IInventory inv;
- if (inventory instanceof CraftInventory) {
- inv = ((CraftInventory) inventory).getInventory();
- } else {
- inv = InternalAccessor.grabFieldOfTypeFromObject(IInventory.class, inventory);
- }
-
- if (inv instanceof SpecialPlayerInventory) {
- return (SpecialPlayerInventory) inv;
- }
- return null;
- }
-
- @Override
- public boolean isSpecialEnderChest(@NotNull final Inventory inventory) {
- if (inventory instanceof CraftInventory) {
- return ((CraftInventory) inventory).getInventory() instanceof ISpecialEnderChest;
- }
- return InternalAccessor.grabFieldOfTypeFromObject(IInventory.class,
- inventory) instanceof ISpecialEnderChest;
- }
-
- @Override
- public boolean isSpecialPlayerInventory(@NotNull final Inventory inventory) {
- if (inventory instanceof CraftInventory) {
- return ((CraftInventory) inventory).getInventory() instanceof ISpecialPlayerInventory;
- }
- return InternalAccessor.grabFieldOfTypeFromObject(IInventory.class,
- inventory) instanceof ISpecialPlayerInventory;
- }
-
-}
diff --git a/internal/v1_14_R1/src/main/java/com/lishid/openinv/internal/v1_14_R1/PlayerDataManager.java b/internal/v1_14_R1/src/main/java/com/lishid/openinv/internal/v1_14_R1/PlayerDataManager.java
index 8144f21..eeac2cb 100644
--- a/internal/v1_14_R1/src/main/java/com/lishid/openinv/internal/v1_14_R1/PlayerDataManager.java
+++ b/internal/v1_14_R1/src/main/java/com/lishid/openinv/internal/v1_14_R1/PlayerDataManager.java
@@ -19,8 +19,6 @@ package com.lishid.openinv.internal.v1_14_R1;
import com.lishid.openinv.internal.IPlayerDataManager;
import com.lishid.openinv.internal.ISpecialInventory;
import com.mojang.authlib.GameProfile;
-import java.util.Collection;
-import java.util.UUID;
import net.minecraft.server.v1_14_R1.ChatComponentText;
import net.minecraft.server.v1_14_R1.Container;
import net.minecraft.server.v1_14_R1.Containers;
@@ -67,32 +65,6 @@ public class PlayerDataManager implements IPlayerDataManager {
return nmsPlayer;
}
- @Override
- public @NotNull Collection extends Player> getOnlinePlayers() {
- return Bukkit.getOnlinePlayers();
- }
-
- @Override
- public OfflinePlayer getPlayerByID(@NotNull final String identifier) {
- try {
- UUID uuid = UUID.fromString(identifier);
- OfflinePlayer player = Bukkit.getOfflinePlayer(uuid);
- // Ensure player is a real player, otherwise return null
- if (!player.hasPlayedBefore() && !player.isOnline()) {
- return null;
- }
- return player;
- } catch (IllegalArgumentException e) {
- // Not a UUID
- return null;
- }
- }
-
- @Override
- public @NotNull String getPlayerDataID(@NotNull final OfflinePlayer offline) {
- return offline.getUniqueId().toString();
- }
-
@Override
public Player loadPlayer(@NotNull final OfflinePlayer offline) {
// Ensure player has data
diff --git a/internal/v1_8_R3/src/main/java/com/lishid/openinv/internal/v1_8_R3/InventoryAccess.java b/internal/v1_8_R3/src/main/java/com/lishid/openinv/internal/v1_8_R3/InventoryAccess.java
deleted file mode 100644
index 537437a..0000000
--- a/internal/v1_8_R3/src/main/java/com/lishid/openinv/internal/v1_8_R3/InventoryAccess.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (C) 2011-2018 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_8_R3;
-
-import com.lishid.openinv.internal.IInventoryAccess;
-import com.lishid.openinv.internal.ISpecialEnderChest;
-import com.lishid.openinv.internal.ISpecialPlayerInventory;
-import com.lishid.openinv.util.InternalAccessor;
-import net.minecraft.server.v1_8_R3.IInventory;
-import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftInventory;
-import org.bukkit.inventory.Inventory;
-import org.jetbrains.annotations.NotNull;
-
-public class InventoryAccess implements IInventoryAccess {
-
- @Override
- public boolean isSpecialPlayerInventory(@NotNull Inventory inventory) {
- if (inventory instanceof CraftInventory) {
- return ((CraftInventory) inventory).getInventory() instanceof ISpecialPlayerInventory;
- }
- return InternalAccessor.grabFieldOfTypeFromObject(IInventory.class, inventory) instanceof ISpecialPlayerInventory;
- }
-
- @Override
- public ISpecialPlayerInventory getSpecialPlayerInventory(@NotNull Inventory inventory) {
- IInventory inv;
- if (inventory instanceof CraftInventory) {
- inv = ((CraftInventory) inventory).getInventory();
- } else {
- inv = InternalAccessor.grabFieldOfTypeFromObject(IInventory.class, inventory);
- }
-
- if (inv instanceof SpecialPlayerInventory) {
- return (SpecialPlayerInventory) inv;
- }
- return null;
- }
-
- @Override
- public boolean isSpecialEnderChest(@NotNull Inventory inventory) {
- if (inventory instanceof CraftInventory) {
- return ((CraftInventory) inventory).getInventory() instanceof ISpecialEnderChest;
- }
- return InternalAccessor.grabFieldOfTypeFromObject(IInventory.class, inventory) instanceof ISpecialEnderChest;
- }
-
- @Override
- public ISpecialEnderChest getSpecialEnderChest(@NotNull Inventory inventory) {
- IInventory inv;
- if (inventory instanceof CraftInventory) {
- inv = ((CraftInventory) inventory).getInventory();
- } else {
- inv = InternalAccessor.grabFieldOfTypeFromObject(IInventory.class, inventory);
- }
-
- if (inv instanceof SpecialEnderChest) {
- return (SpecialEnderChest) inv;
- }
- return null;
- }
-
-}
diff --git a/internal/v1_8_R3/src/main/java/com/lishid/openinv/internal/v1_8_R3/PlayerDataManager.java b/internal/v1_8_R3/src/main/java/com/lishid/openinv/internal/v1_8_R3/PlayerDataManager.java
index 74d5c79..648f15a 100644
--- a/internal/v1_8_R3/src/main/java/com/lishid/openinv/internal/v1_8_R3/PlayerDataManager.java
+++ b/internal/v1_8_R3/src/main/java/com/lishid/openinv/internal/v1_8_R3/PlayerDataManager.java
@@ -19,8 +19,6 @@ package com.lishid.openinv.internal.v1_8_R3;
import com.lishid.openinv.internal.IPlayerDataManager;
import com.lishid.openinv.internal.ISpecialInventory;
import com.mojang.authlib.GameProfile;
-import java.util.Collection;
-import java.util.UUID;
import net.minecraft.server.v1_8_R3.EntityPlayer;
import net.minecraft.server.v1_8_R3.MinecraftServer;
import net.minecraft.server.v1_8_R3.PlayerInteractManager;
@@ -58,32 +56,6 @@ public class PlayerDataManager implements IPlayerDataManager {
return target;
}
- @Override
- public @NotNull String getPlayerDataID(@NotNull OfflinePlayer offline) {
- return offline.getUniqueId().toString();
- }
-
- @Override
- public OfflinePlayer getPlayerByID(@NotNull String identifier) {
- try {
- UUID uuid = UUID.fromString(identifier);
- OfflinePlayer player = Bukkit.getOfflinePlayer(uuid);
- // Ensure player is a real player, otherwise return null
- if (player == null || !player.hasPlayedBefore() && !player.isOnline()) {
- return null;
- }
- return player;
- } catch (IllegalArgumentException e) {
- // Not a UUID
- return null;
- }
- }
-
- @Override
- public @NotNull Collection extends Player> getOnlinePlayers() {
- return Bukkit.getOnlinePlayers();
- }
-
public static EntityPlayer getHandle(Player player) {
if (player instanceof CraftPlayer) {
return ((CraftPlayer) player).getHandle();
diff --git a/plugin/pom.xml b/plugin/pom.xml
index 4cf7c7f..0e90cb6 100644
--- a/plugin/pom.xml
+++ b/plugin/pom.xml
@@ -28,11 +28,6 @@
OpenInvPlugin
-
- org.bukkit
- bukkit
- 1.8.8-R0.1-SNAPSHOT
-
com.lishid
openinvcommon
diff --git a/plugin/src/main/java/com/lishid/openinv/OpenInv.java b/plugin/src/main/java/com/lishid/openinv/OpenInv.java
index b89c176..e70879d 100644
--- a/plugin/src/main/java/com/lishid/openinv/OpenInv.java
+++ b/plugin/src/main/java/com/lishid/openinv/OpenInv.java
@@ -24,7 +24,6 @@ import com.lishid.openinv.commands.SearchEnchantPluginCommand;
import com.lishid.openinv.commands.SearchInvPluginCommand;
import com.lishid.openinv.commands.SilentChestPluginCommand;
import com.lishid.openinv.internal.IAnySilentContainer;
-import com.lishid.openinv.internal.IInventoryAccess;
import com.lishid.openinv.internal.ISpecialEnderChest;
import com.lishid.openinv.internal.ISpecialInventory;
import com.lishid.openinv.internal.ISpecialPlayerInventory;
@@ -38,15 +37,10 @@ import com.lishid.openinv.util.ConfigUpdater;
import com.lishid.openinv.util.Function;
import com.lishid.openinv.util.InternalAccessor;
import com.lishid.openinv.util.Permissions;
-import java.lang.reflect.Method;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import org.bukkit.Bukkit;
@@ -72,50 +66,52 @@ import org.jetbrains.annotations.Nullable;
*/
public class OpenInv extends JavaPlugin implements IOpenInv {
- private final Map inventories = new HashMap();
- private final Map enderChests = new HashMap();
+ private final Map inventories = new HashMap<>();
+ private final Map enderChests = new HashMap<>();
private final Multimap> pluginUsage = HashMultimap.create();
- private final Cache playerCache = new Cache(300000L,
+ private final Cache playerCache = new Cache<>(300000L,
new Function() {
@Override
public boolean run(final Player value) {
- String key = OpenInv.this.accessor.getPlayerDataManager().getPlayerDataID(value);
+
+ String key = OpenInv.this.getPlayerID(value);
return OpenInv.this.inventories.containsKey(key)
&& OpenInv.this.inventories.get(key).isInUse()
|| OpenInv.this.enderChests.containsKey(key)
- && OpenInv.this.enderChests.get(key).isInUse()
+ && OpenInv.this.enderChests.get(key).isInUse()
|| OpenInv.this.pluginUsage.containsKey(key);
}
}, new Function() {
- @Override
- public boolean run(final Player value) {
- String key = OpenInv.this.accessor.getPlayerDataManager().getPlayerDataID(value);
+ @Override
+ public boolean run(final Player value) {
- // Check if inventory is stored, and if it is, remove it and eject all viewers
- if (OpenInv.this.inventories.containsKey(key)) {
- Inventory inv = OpenInv.this.inventories.remove(key).getBukkitInventory();
- List viewers = inv.getViewers();
- for (HumanEntity entity : viewers.toArray(new HumanEntity[0])) {
- entity.closeInventory();
- }
- }
+ String key = OpenInv.this.getPlayerID(value);
- // Check if ender chest is stored, and if it is, remove it and eject all viewers
- if (OpenInv.this.enderChests.containsKey(key)) {
- Inventory inv = OpenInv.this.enderChests.remove(key).getBukkitInventory();
- List viewers = inv.getViewers();
- for (HumanEntity entity : viewers.toArray(new HumanEntity[0])) {
- entity.closeInventory();
- }
- }
-
- if (!OpenInv.this.disableSaving() && !value.isOnline()) {
- value.saveData();
- }
- return true;
+ // Check if inventory is stored, and if it is, remove it and eject all viewers
+ if (OpenInv.this.inventories.containsKey(key)) {
+ Inventory inv = OpenInv.this.inventories.remove(key).getBukkitInventory();
+ List viewers = inv.getViewers();
+ for (HumanEntity entity : viewers.toArray(new HumanEntity[0])) {
+ entity.closeInventory();
}
- });
+ }
+
+ // Check if ender chest is stored, and if it is, remove it and eject all viewers
+ if (OpenInv.this.enderChests.containsKey(key)) {
+ Inventory inv = OpenInv.this.enderChests.remove(key).getBukkitInventory();
+ List viewers = inv.getViewers();
+ for (HumanEntity entity : viewers.toArray(new HumanEntity[0])) {
+ entity.closeInventory();
+ }
+ }
+
+ if (!OpenInv.this.disableSaving() && !value.isOnline()) {
+ value.saveData();
+ }
+ return true;
+ }
+ });
private InternalAccessor accessor;
@@ -126,7 +122,7 @@ public class OpenInv extends JavaPlugin implements IOpenInv {
*/
public void changeWorld(final Player player) {
- String key = this.accessor.getPlayerDataManager().getPlayerDataID(player);
+ String key = this.getPlayerID(player);
// Check if the player is cached. If not, neither of their inventories is open.
if (!this.playerCache.containsKey(key)) {
@@ -171,12 +167,6 @@ public class OpenInv extends JavaPlugin implements IOpenInv {
return this.accessor.getAnySilentContainer();
}
- @NotNull
- @Override
- public IInventoryAccess getInventoryAccess() {
- return this.accessor.getInventoryAccess();
- }
-
private int getLevenshteinDistance(final String string1, final String string2) {
if (string1 == null || string2 == null) {
throw new IllegalArgumentException("Strings must not be null");
@@ -221,36 +211,6 @@ public class OpenInv extends JavaPlugin implements IOpenInv {
return prevDistances[len1];
}
- @SuppressWarnings("unchecked")
- public Collection extends Player> getOnlinePlayers() {
-
- if (this.accessor.isSupported()) {
- return this.accessor.getPlayerDataManager().getOnlinePlayers();
- }
-
- Method getOnlinePlayers;
- try {
- getOnlinePlayers = Bukkit.class.getDeclaredMethod("getOnlinePlayers");
- } catch (Exception e) {
- e.printStackTrace();
- return Collections.emptyList();
- }
-
- Object onlinePlayers;
- try {
- onlinePlayers = getOnlinePlayers.invoke(null);
- } catch (Exception e) {
- e.printStackTrace();
- return Collections.emptyList();
- }
-
- if (onlinePlayers instanceof List) {
- return (Collection) onlinePlayers;
- }
-
- return Arrays.asList((Player[]) onlinePlayers);
- }
-
@Override
public boolean getPlayerAnyChestStatus(@NotNull final OfflinePlayer player) {
boolean defaultState = false;
@@ -262,13 +222,7 @@ public class OpenInv extends JavaPlugin implements IOpenInv {
}
}
- return this.getConfig().getBoolean("toggles.any-chest." + this.accessor.getPlayerDataManager().getPlayerDataID(player), defaultState);
- }
-
- @NotNull
- @Override
- public String getPlayerID(@NotNull final OfflinePlayer offline) {
- return this.accessor.getPlayerDataManager().getPlayerDataID(offline);
+ return this.getConfig().getBoolean("toggles.any-chest." + this.getPlayerID(player), defaultState);
}
@Override
@@ -282,14 +236,14 @@ public class OpenInv extends JavaPlugin implements IOpenInv {
}
}
- return this.getConfig().getBoolean("toggles.silent-chest." + this.accessor.getPlayerDataManager().getPlayerDataID(offline), defaultState);
+ return this.getConfig().getBoolean("toggles.silent-chest." + this.getPlayerID(offline), defaultState);
}
@NotNull
@Override
public ISpecialEnderChest getSpecialEnderChest(@NotNull final Player player, final boolean online)
throws InstantiationException {
- String id = this.accessor.getPlayerDataManager().getPlayerDataID(player);
+ String id = this.getPlayerID(player);
if (this.enderChests.containsKey(id)) {
return this.enderChests.get(id);
}
@@ -303,7 +257,7 @@ public class OpenInv extends JavaPlugin implements IOpenInv {
@Override
public ISpecialPlayerInventory getSpecialInventory(@NotNull final Player player, final boolean online)
throws InstantiationException {
- String id = this.accessor.getPlayerDataManager().getPlayerDataID(player);
+ String id = this.getPlayerID(player);
if (this.inventories.containsKey(id)) {
return this.inventories.get(id);
}
@@ -322,7 +276,7 @@ public class OpenInv extends JavaPlugin implements IOpenInv {
@Override
public Player loadPlayer(@NotNull final OfflinePlayer offline) {
- String key = this.accessor.getPlayerDataManager().getPlayerDataID(offline);
+ String key = this.getPlayerID(offline);
if (this.playerCache.containsKey(key)) {
return this.playerCache.get(key);
}
@@ -345,12 +299,7 @@ public class OpenInv extends JavaPlugin implements IOpenInv {
}
Future future = Bukkit.getScheduler().callSyncMethod(this,
- new Callable() {
- @Override
- public Player call() {
- return OpenInv.this.accessor.getPlayerDataManager().loadPlayer(offline);
- }
- });
+ () -> OpenInv.this.accessor.getPlayerDataManager().loadPlayer(offline));
int ticks = 0;
while (!future.isDone() && !future.isCancelled() && ticks < 10) {
@@ -369,10 +318,7 @@ public class OpenInv extends JavaPlugin implements IOpenInv {
try {
loaded = future.get();
- } catch (InterruptedException e) {
- e.printStackTrace();
- return null;
- } catch (ExecutionException e) {
+ } catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
return null;
}
@@ -384,83 +330,6 @@ public class OpenInv extends JavaPlugin implements IOpenInv {
return loaded;
}
- @Nullable
- @Override
- public OfflinePlayer matchPlayer(@NotNull final String name) {
-
- // Warn if called on the main thread - if we resort to searching offline players, this may take several seconds.
- if (this.getServer().isPrimaryThread()) {
- this.getLogger().warning("Call to OpenInv#matchPlayer made on the main thread!");
- this.getLogger().warning("This can cause the server to hang, potentially severely.");
- this.getLogger().warning("Trace:");
- for (StackTraceElement element : new Throwable().fillInStackTrace().getStackTrace()) {
- this.getLogger().warning(element.toString());
- }
- }
-
- OfflinePlayer player;
-
- if (this.isSupportedVersion()) {
- // Attempt exact offline match first - adds UUID support for later versions
- player = this.accessor.getPlayerDataManager().getPlayerByID(name);
-
- if (player != null) {
- return player;
- }
- }
-
- // Ensure name is valid if server is in online mode to avoid unnecessary searching
- if (this.getServer().getOnlineMode() && !name.matches("[a-zA-Z0-9_]{3,16}")) {
- return null;
- }
-
- player = this.getServer().getPlayerExact(name);
-
- if (player != null) {
- return player;
- }
-
- player = this.getServer().getOfflinePlayer(name);
-
- /*
- * Compatibility: Pre-UUID, getOfflinePlayer always returns an OfflinePlayer. Post-UUID,
- * getOfflinePlayer will return null if no matching player is found. To preserve
- * compatibility, only return the player if they have played before. Ignoring current online
- * status is fine, they'd have been found by getPlayerExact otherwise.
- */
- if (player != null && player.hasPlayedBefore()) {
- return player;
- }
-
- player = this.getServer().getPlayer(name);
-
- if (player != null) {
- return player;
- }
-
- int bestMatch = Integer.MAX_VALUE;
- for (OfflinePlayer offline : this.getServer().getOfflinePlayers()) {
- if (offline.getName() == null) {
- // Loaded by UUID only, name has never been looked up.
- continue;
- }
-
- int currentMatch = this.getLevenshteinDistance(name, offline.getName());
-
- if (currentMatch == 0) {
- return offline;
- }
-
- if (currentMatch < bestMatch) {
- bestMatch = currentMatch;
- player = offline;
- }
- }
-
- // Only null if no players have played ever, otherwise even the worst match will do.
- return player;
- }
-
@Override
public @Nullable InventoryView openInventory(@NotNull Player player, @NotNull ISpecialInventory inventory) {
return this.accessor.getPlayerDataManager().openInventory(player, inventory);
@@ -507,10 +376,10 @@ public class OpenInv extends JavaPlugin implements IOpenInv {
// Register listeners
pm.registerEvents(new PlayerListener(this), this);
pm.registerEvents(new PluginListener(this), this);
- pm.registerEvents(new InventoryClickListener(this), this);
+ pm.registerEvents(new InventoryClickListener(), this);
pm.registerEvents(new InventoryCloseListener(this), this);
// Bukkit will handle missing events for us, attempt to register InventoryDragEvent without a version check
- pm.registerEvents(new InventoryDragListener(this), this);
+ pm.registerEvents(new InventoryDragListener(), this);
// Register commands to their executors
OpenInvPluginCommand openInv = new OpenInvPluginCommand(this);
@@ -557,7 +426,7 @@ public class OpenInv extends JavaPlugin implements IOpenInv {
@Override
public void releasePlayer(@NotNull final Player player, @NotNull final Plugin plugin) {
- String key = this.accessor.getPlayerDataManager().getPlayerDataID(player);
+ String key = this.getPlayerID(player);
if (!this.pluginUsage.containsEntry(key, plugin.getClass())) {
return;
@@ -568,7 +437,7 @@ public class OpenInv extends JavaPlugin implements IOpenInv {
@Override
public void retainPlayer(@NotNull final Player player, @NotNull final Plugin plugin) {
- String key = this.accessor.getPlayerDataManager().getPlayerDataID(player);
+ String key = this.getPlayerID(player);
if (this.pluginUsage.containsEntry(key, plugin.getClass())) {
return;
@@ -579,7 +448,7 @@ public class OpenInv extends JavaPlugin implements IOpenInv {
@Override
public void setPlayerAnyChestStatus(@NotNull final OfflinePlayer offline, final boolean status) {
- this.getConfig().set("toggles.any-chest." + this.accessor.getPlayerDataManager().getPlayerDataID(offline), status);
+ this.getConfig().set("toggles.any-chest." + this.getPlayerID(offline), status);
this.saveConfig();
}
@@ -591,7 +460,7 @@ public class OpenInv extends JavaPlugin implements IOpenInv {
*/
public void setPlayerOffline(final Player player) {
- String key = this.accessor.getPlayerDataManager().getPlayerDataID(player);
+ String key = this.getPlayerID(player);
// Check if the player is cached. If not, neither of their inventories is open.
if (!this.playerCache.containsKey(key)) {
@@ -615,7 +484,7 @@ public class OpenInv extends JavaPlugin implements IOpenInv {
*/
public void setPlayerOnline(final Player player) {
- String key = this.accessor.getPlayerDataManager().getPlayerDataID(player);
+ String key = this.getPlayerID(player);
// Check if the player is cached. If not, neither of their inventories is open.
if (!this.playerCache.containsKey(key)) {
@@ -627,7 +496,6 @@ public class OpenInv extends JavaPlugin implements IOpenInv {
if (this.inventories.containsKey(key)) {
this.inventories.get(key).setPlayerOnline(player);
new BukkitRunnable() {
- @SuppressWarnings("deprecation") // Unlikely to ever be a viable alternative, Spigot un-deprecated.
@Override
public void run() {
if (player.isOnline()) {
@@ -644,7 +512,7 @@ public class OpenInv extends JavaPlugin implements IOpenInv {
@Override
public void setPlayerSilentChestStatus(@NotNull final OfflinePlayer offline, final boolean status) {
- this.getConfig().set("toggles.silent-chest." + this.accessor.getPlayerDataManager().getPlayerDataID(offline), status);
+ this.getConfig().set("toggles.silent-chest." + this.getPlayerID(offline), status);
this.saveConfig();
}
@@ -685,7 +553,7 @@ public class OpenInv extends JavaPlugin implements IOpenInv {
@Override
public void unload(@NotNull final OfflinePlayer offline) {
- this.playerCache.invalidate(this.accessor.getPlayerDataManager().getPlayerDataID(offline));
+ this.playerCache.invalidate(this.getPlayerID(offline));
}
}
diff --git a/plugin/src/main/java/com/lishid/openinv/commands/SearchEnchantPluginCommand.java b/plugin/src/main/java/com/lishid/openinv/commands/SearchEnchantPluginCommand.java
index ce2f687..989a85f 100644
--- a/plugin/src/main/java/com/lishid/openinv/commands/SearchEnchantPluginCommand.java
+++ b/plugin/src/main/java/com/lishid/openinv/commands/SearchEnchantPluginCommand.java
@@ -67,7 +67,7 @@ public class SearchEnchantPluginCommand implements CommandExecutor {
}
StringBuilder players = new StringBuilder();
- for (Player player : plugin.getOnlinePlayers()) {
+ for (Player player : plugin.getServer().getOnlinePlayers()) {
boolean flagInventory = containsEnchantment(player.getInventory(), enchant, level);
boolean flagEnder = containsEnchantment(player.getEnderChest(), enchant, level);
diff --git a/plugin/src/main/java/com/lishid/openinv/commands/SearchInvPluginCommand.java b/plugin/src/main/java/com/lishid/openinv/commands/SearchInvPluginCommand.java
index 98c9912..372b264 100644
--- a/plugin/src/main/java/com/lishid/openinv/commands/SearchInvPluginCommand.java
+++ b/plugin/src/main/java/com/lishid/openinv/commands/SearchInvPluginCommand.java
@@ -59,7 +59,7 @@ public class SearchInvPluginCommand implements CommandExecutor {
}
StringBuilder players = new StringBuilder();
- for (Player player : plugin.getOnlinePlayers()) {
+ for (Player player : plugin.getServer().getOnlinePlayers()) {
Inventory inventory = command.getName().equals("searchinv") ? player.getInventory() : player.getEnderChest();
if (inventory.contains(material, count)) {
players.append(player.getName()).append(", ");
diff --git a/plugin/src/main/java/com/lishid/openinv/listeners/InventoryClickListener.java b/plugin/src/main/java/com/lishid/openinv/listeners/InventoryClickListener.java
index e806214..29dbe11 100644
--- a/plugin/src/main/java/com/lishid/openinv/listeners/InventoryClickListener.java
+++ b/plugin/src/main/java/com/lishid/openinv/listeners/InventoryClickListener.java
@@ -16,7 +16,7 @@
package com.lishid.openinv.listeners;
-import com.lishid.openinv.IOpenInv;
+import com.lishid.openinv.util.InventoryAccess;
import com.lishid.openinv.util.Permissions;
import org.bukkit.entity.HumanEntity;
import org.bukkit.event.EventHandler;
@@ -27,20 +27,12 @@ import org.bukkit.inventory.Inventory;
public class InventoryClickListener implements Listener {
- private final IOpenInv plugin;
-
- public InventoryClickListener(IOpenInv plugin) {
- this.plugin = plugin;
- }
-
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onInventoryClick(InventoryClickEvent event) {
HumanEntity entity = event.getWhoClicked();
Inventory inventory = event.getInventory();
- if (plugin.getInventoryAccess().isSpecialPlayerInventory(inventory)
- && !Permissions.EDITINV.hasPermission(entity)
- || plugin.getInventoryAccess().isSpecialEnderChest(inventory)
- && !Permissions.EDITENDER.hasPermission(entity)) {
+ if (InventoryAccess.isPlayerInventory(inventory) && !Permissions.EDITINV.hasPermission(entity)
+ || InventoryAccess.isEnderChest(inventory) && !Permissions.EDITENDER.hasPermission(entity)) {
event.setCancelled(true);
}
}
diff --git a/plugin/src/main/java/com/lishid/openinv/listeners/InventoryCloseListener.java b/plugin/src/main/java/com/lishid/openinv/listeners/InventoryCloseListener.java
index a6bf404..264c333 100644
--- a/plugin/src/main/java/com/lishid/openinv/listeners/InventoryCloseListener.java
+++ b/plugin/src/main/java/com/lishid/openinv/listeners/InventoryCloseListener.java
@@ -22,11 +22,6 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryCloseEvent;
-/**
- *
- *
- * @author Jikoo
- */
public class InventoryCloseListener implements Listener {
private final IOpenInv plugin;
diff --git a/plugin/src/main/java/com/lishid/openinv/listeners/InventoryDragListener.java b/plugin/src/main/java/com/lishid/openinv/listeners/InventoryDragListener.java
index 603073f..c52df2d 100644
--- a/plugin/src/main/java/com/lishid/openinv/listeners/InventoryDragListener.java
+++ b/plugin/src/main/java/com/lishid/openinv/listeners/InventoryDragListener.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2011-2018 lishid. All rights reserved.
+ * Copyright (C) 2011-2019 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,7 +16,7 @@
package com.lishid.openinv.listeners;
-import com.lishid.openinv.IOpenInv;
+import com.lishid.openinv.util.InventoryAccess;
import com.lishid.openinv.util.Permissions;
import org.bukkit.entity.HumanEntity;
import org.bukkit.event.EventHandler;
@@ -32,20 +32,12 @@ import org.bukkit.inventory.Inventory;
*/
public class InventoryDragListener implements Listener {
- private final IOpenInv plugin;
-
- public InventoryDragListener(IOpenInv plugin) {
- this.plugin = plugin;
- }
-
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onInventoryDrag(InventoryDragEvent event) {
HumanEntity entity = event.getWhoClicked();
Inventory inventory = event.getInventory();
- if (plugin.getInventoryAccess().isSpecialPlayerInventory(inventory)
- && !Permissions.EDITINV.hasPermission(entity)
- || plugin.getInventoryAccess().isSpecialEnderChest(inventory)
- && !Permissions.EDITENDER.hasPermission(entity)) {
+ if (InventoryAccess.isPlayerInventory(inventory) && !Permissions.EDITINV.hasPermission(entity)
+ || InventoryAccess.isEnderChest(inventory) && !Permissions.EDITENDER.hasPermission(entity)) {
event.setCancelled(true);
}
}
diff --git a/plugin/src/main/java/com/lishid/openinv/listeners/PlayerListener.java b/plugin/src/main/java/com/lishid/openinv/listeners/PlayerListener.java
index acc3e3d..c4a32c7 100644
--- a/plugin/src/main/java/com/lishid/openinv/listeners/PlayerListener.java
+++ b/plugin/src/main/java/com/lishid/openinv/listeners/PlayerListener.java
@@ -61,22 +61,22 @@ public class PlayerListener implements Listener {
}
Player player = event.getPlayer();
- boolean anychest = Permissions.ANYCHEST.hasPermission(player) && plugin.getPlayerAnyChestStatus(player);
- boolean needsAnyChest = plugin.getAnySilentContainer().isAnyContainerNeeded(player, event.getClickedBlock());
+ boolean any = Permissions.ANYCHEST.hasPermission(player) && plugin.getPlayerAnyChestStatus(player);
+ boolean needsAny = plugin.getAnySilentContainer().isAnyContainerNeeded(player, event.getClickedBlock());
- if (!anychest && needsAnyChest) {
+ if (!any && needsAny) {
return;
}
- boolean silentchest = Permissions.SILENT.hasPermission(player) && plugin.getPlayerSilentChestStatus(player);
+ boolean silent = Permissions.SILENT.hasPermission(player) && plugin.getPlayerSilentChestStatus(player);
- // If anychest or silentchest is active
- if ((anychest || silentchest) && plugin.getAnySilentContainer().activateContainer(player, silentchest, event.getClickedBlock())) {
- if (silentchest && plugin.notifySilentChest() && needsAnyChest && plugin.notifyAnyChest()) {
+ // If anycontainer or silentcontainer is active
+ if ((any || silent) && plugin.getAnySilentContainer().activateContainer(player, silent, event.getClickedBlock())) {
+ if (silent && plugin.notifySilentChest() && needsAny && plugin.notifyAnyChest()) {
player.sendMessage("You are opening a blocked container silently.");
- } else if (silentchest && plugin.notifySilentChest()) {
+ } else if (silent && plugin.notifySilentChest()) {
player.sendMessage("You are opening a container silently.");
- } else if (needsAnyChest && plugin.notifyAnyChest()) {
+ } else if (needsAny && plugin.notifyAnyChest()) {
player.sendMessage("You are opening a blocked container.");
}
event.setCancelled(true);
diff --git a/plugin/src/main/java/com/lishid/openinv/util/ConfigUpdater.java b/plugin/src/main/java/com/lishid/openinv/util/ConfigUpdater.java
index 3658d67..e83d4bb 100644
--- a/plugin/src/main/java/com/lishid/openinv/util/ConfigUpdater.java
+++ b/plugin/src/main/java/com/lishid/openinv/util/ConfigUpdater.java
@@ -22,7 +22,6 @@ import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
-import org.bukkit.Material;
import org.bukkit.OfflinePlayer;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.scheduler.BukkitRunnable;
@@ -78,6 +77,7 @@ public class ConfigUpdater {
public void run() {
plugin.getConfig().set("config-version", 3);
plugin.getConfig().set("items.open-inv", null);
+ plugin.getConfig().set("ItemOpenInv", null);
plugin.getConfig().set("toggles.items.open-inv", null);
plugin.getConfig().set("settings.disable-saving",
plugin.getConfig().getBoolean("DisableSaving", false));
@@ -91,22 +91,18 @@ public class ConfigUpdater {
@Override
public void run() {
// Get the old config settings
- int itemOpenInvItemId = plugin.getConfig().getInt("ItemOpenInvItemID", 280);
boolean notifySilentChest = plugin.getConfig().getBoolean("NotifySilentChest", true);
boolean notifyAnyChest = plugin.getConfig().getBoolean("NotifyAnyChest", true);
plugin.getConfig().set("ItemOpenInvItemID", null);
plugin.getConfig().set("NotifySilentChest", null);
plugin.getConfig().set("NotifyAnyChest", null);
plugin.getConfig().set("config-version", 2);
- plugin.getConfig().set("items.open-inv",
- getMaterialById(itemOpenInvItemId).toString());
plugin.getConfig().set("notify.any-chest", notifyAnyChest);
plugin.getConfig().set("notify.silent-chest", notifySilentChest);
}
}.runTask(plugin);
updateToggles("AnyChest", "toggles.any-chest");
- updateToggles("ItemOpenInv", "toggles.items.open-inv");
updateToggles("SilentChest", "toggles.silent-chest");
}
@@ -124,7 +120,7 @@ public class ConfigUpdater {
return;
}
- final Map toggles = new HashMap();
+ final Map toggles = new HashMap<>();
for (String playerName : keys) {
OfflinePlayer player = plugin.matchPlayer(playerName);
@@ -154,13 +150,4 @@ public class ConfigUpdater {
}.runTask(plugin);
}
- private Material getMaterialById(int id) {
- Material material = Material.getMaterial(id);
-
- if (material == null) {
- material = Material.STICK;
- }
-
- return material;
- }
}
diff --git a/pom.xml b/pom.xml
index 102035c..7527719 100644
--- a/pom.xml
+++ b/pom.xml
@@ -84,14 +84,6 @@
-
-
- org.jetbrains
- annotations
- 17.0.0
-
-
-
@@ -121,10 +113,10 @@
maven-compiler-plugin
- 3.6.1
+ 3.8.1
-
- 1.6
+
+ 1.8