getEnglishPlural(String word) {
+ assert word != null;
+ if (word.isEmpty())
return new NonNullPair<>("", Boolean.FALSE);
- for (final String[] p : plurals) {
- if (s.endsWith(p[1]))
- return new NonNullPair<>(s.substring(0, s.length() - p[1].length()) + p[0], Boolean.TRUE);
- if (s.endsWith(p[1].toUpperCase(Locale.ENGLISH)))
- return new NonNullPair<>(s.substring(0, s.length() - p[1].length()) + p[0].toUpperCase(Locale.ENGLISH), Boolean.TRUE);
+ for (final WordEnding ending : plurals) {
+ if (word.endsWith(ending.plural()))
+ return new NonNullPair<>(word.substring(0, word.length() - ending.plural().length()) + ending.singular(), Boolean.TRUE);
+ if (word.endsWith(ending.plural().toUpperCase(Locale.ENGLISH)))
+ return new NonNullPair<>(word.substring(0, word.length() - ending.plural().length()) + ending.singular().toUpperCase(Locale.ENGLISH), Boolean.TRUE);
}
- return new NonNullPair<>(s, Boolean.FALSE);
+ return new NonNullPair<>(word, Boolean.FALSE);
}
-
+
/**
* Gets the english plural of a word.
- *
- * @param s
+ *
+ * @param word
* @return The english plural of the given word
*/
- public static String toEnglishPlural(final String s) {
- assert s != null && s.length() != 0;
- for (final String[] p : plurals) {
- if (s.endsWith(p[0]))
- return s.substring(0, s.length() - p[0].length()) + p[1];
+ public static String toEnglishPlural(String word) {
+ assert word != null && word.length() != 0;
+ for (WordEnding ending : plurals) {
+ if (word.endsWith(ending.singular()))
+ return word.substring(0, word.length() - ending.singular().length()) + ending.plural();
}
assert false;
- return s + "s";
+ return word + "s";
}
-
+
/**
* Gets the plural of a word (or not if p is false)
- *
+ *
* @param s
* @param p
* @return The english plural of the given word, or the word itself if p is false.
@@ -322,10 +323,10 @@ public static String toEnglishPlural(final String s, final boolean p) {
return toEnglishPlural(s);
return s;
}
-
+
/**
* Adds 'a' or 'an' to the given string, depending on the first character of the string.
- *
+ *
* @param s The string to add the article to
* @return The given string with an appended a/an and a space at the beginning
* @see #A(String)
@@ -334,10 +335,10 @@ public static String toEnglishPlural(final String s, final boolean p) {
public static String a(final String s) {
return a(s, false);
}
-
+
/**
* Adds 'A' or 'An' to the given string, depending on the first character of the string.
- *
+ *
* @param s The string to add the article to
* @return The given string with an appended A/An and a space at the beginning
* @see #a(String)
@@ -346,10 +347,10 @@ public static String a(final String s) {
public static String A(final String s) {
return a(s, true);
}
-
+
/**
* Adds 'a' or 'an' to the given string, depending on the first character of the string.
- *
+ *
* @param s The string to add the article to
* @param capA Whether to use a capital a or not
* @return The given string with an appended a/an (or A/An if capA is true) and a space at the beginning
@@ -367,14 +368,14 @@ public static String a(final String s, final boolean capA) {
return "a " + s;
}
}
-
+
/**
* Gets the collision height of solid or partially-solid blocks at the center of the block.
* This is mostly for use in the {@link EffTeleport teleport effect}.
*
* This version operates on numeric ids, thus only working on
* Minecraft 1.12 or older.
- *
+ *
* @param type
* @return The block's height at the center
*/
@@ -530,14 +531,14 @@ public static CompletableFuture sendPluginMessage(Player pla
return completableFuture;
}
-
+
final static ChatColor[] styles = {ChatColor.BOLD, ChatColor.ITALIC, ChatColor.STRIKETHROUGH, ChatColor.UNDERLINE, ChatColor.MAGIC, ChatColor.RESET};
final static Map chat = new HashMap<>();
final static Map englishChat = new HashMap<>();
-
+
public final static boolean HEX_SUPPORTED = Skript.isRunningMinecraft(1, 16);
public final static boolean COPY_SUPPORTED = Skript.isRunningMinecraft(1, 15);
-
+
static {
Language.addListener(new LanguageChangeListener() {
@Override
@@ -554,21 +555,21 @@ public void onLanguageChange() {
}
});
}
-
+
@Nullable
public static String getChatStyle(final String s) {
SkriptColor color = SkriptColor.fromName(s);
-
+
if (color != null)
return color.getFormattedChat();
return chat.get(s);
}
-
+
private final static Pattern stylePattern = Pattern.compile("<([^<>]+)>");
-
+
/**
* Replaces <chat styles> in the message
- *
+ *
* @param message
* @return message with localised chat styles converted to Minecraft's format
*/
@@ -602,11 +603,11 @@ public String run(final Matcher m) {
m = ChatColor.translateAlternateColorCodes('&', "" + m);
return "" + m;
}
-
+
/**
* Replaces english <chat styles> in the message. This is used for messages in the language file as the language of colour codes is not well defined while the language is
* changing, and for some hardcoded messages.
- *
+ *
* @param message
* @return message with english chat styles converted to Minecraft's format
*/
@@ -653,7 +654,7 @@ public String run(final Matcher m) {
public static ChatColor parseHexColor(String hex) {
if (!HEX_SUPPORTED || !HEX_PATTERN.matcher(hex).matches()) // Proper hex code validation
return null;
-
+
hex = hex.replace("#", "");
try {
return ChatColor.of('#' + hex.substring(0, 6));
@@ -661,10 +662,10 @@ public static ChatColor parseHexColor(String hex) {
return null;
}
}
-
+
/**
* Gets a random value between start (inclusive) and end (exclusive)
- *
+ *
* @param start
* @param end
* @return start + random.nextInt(end - start)
@@ -733,12 +734,12 @@ public static Class highestDenominator(Class<
// See #1747 to learn how it broke returning items from functions
return (Class) (chosen == Cloneable.class ? bestGuess : chosen == Object.class ? bestGuess : chosen);
}
-
+
/**
* Parses a number that was validated to be an integer but might still result in a {@link NumberFormatException} when parsed with {@link Integer#parseInt(String)} due to
* overflow.
* This method will return {@link Integer#MIN_VALUE} or {@link Integer#MAX_VALUE} respectively if that happens.
- *
+ *
* @param s
* @return The parsed integer, {@link Integer#MIN_VALUE} or {@link Integer#MAX_VALUE} respectively
*/
@@ -750,12 +751,12 @@ public static int parseInt(final String s) {
return s.startsWith("-") ? Integer.MIN_VALUE : Integer.MAX_VALUE;
}
}
-
+
/**
* Parses a number that was validated to be an integer but might still result in a {@link NumberFormatException} when parsed with {@link Long#parseLong(String)} due to
* overflow.
* This method will return {@link Long#MIN_VALUE} or {@link Long#MAX_VALUE} respectively if that happens.
- *
+ *
* @param s
* @return The parsed long, {@link Long#MIN_VALUE} or {@link Long#MAX_VALUE} respectively
*/
@@ -767,7 +768,7 @@ public static long parseLong(final String s) {
return s.startsWith("-") ? Long.MIN_VALUE : Long.MAX_VALUE;
}
}
-
+
/**
* Gets class for name. Throws RuntimeException instead of checked one.
* Use this only when absolutely necessary.
@@ -783,7 +784,7 @@ public static Class> classForName(String name) {
throw new RuntimeException("Class not found!");
}
}
-
+
/**
* Finds the index of the last in a {@link List} that matches the given {@link Checker}.
*
@@ -807,5 +808,37 @@ public static boolean isInteger(Number... numbers) {
}
return true;
}
-
+
+ protected static class WordEnding { // To be a record in 2.10
+
+ private final String singular, plural;
+
+ private WordEnding(String singular, String plural) {
+ this.singular = singular;
+ this.plural = plural;
+ }
+
+ public String singular() {
+ return singular;
+ }
+
+ public String plural() {
+ return plural;
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (this == object) return true;
+ if (!(object instanceof WordEnding)) return false;
+ WordEnding ending = (WordEnding) object;
+ return Objects.equals(singular, ending.singular) && Objects.equals(plural, ending.plural);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(singular, plural);
+ }
+
+ }
+
}
diff --git a/src/main/java/ch/njol/skript/util/Version.java b/src/main/java/ch/njol/skript/util/Version.java
index 62a602eef39..bfe994175df 100644
--- a/src/main/java/ch/njol/skript/util/Version.java
+++ b/src/main/java/ch/njol/skript/util/Version.java
@@ -23,7 +23,7 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
/**
* @author Peter Güttinger
diff --git a/src/main/java/ch/njol/skript/util/WeatherType.java b/src/main/java/ch/njol/skript/util/WeatherType.java
index 5d3e51d1f31..2ace679dc43 100644
--- a/src/main/java/ch/njol/skript/util/WeatherType.java
+++ b/src/main/java/ch/njol/skript/util/WeatherType.java
@@ -26,7 +26,7 @@
import org.bukkit.event.weather.ThunderChangeEvent;
import org.bukkit.event.weather.WeatherChangeEvent;
import org.bukkit.event.weather.WeatherEvent;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import ch.njol.skript.localization.Language;
diff --git a/src/main/java/ch/njol/skript/util/chat/ChatCode.java b/src/main/java/ch/njol/skript/util/chat/ChatCode.java
index 86ea40bfd95..b7ea7995f6d 100644
--- a/src/main/java/ch/njol/skript/util/chat/ChatCode.java
+++ b/src/main/java/ch/njol/skript/util/chat/ChatCode.java
@@ -18,7 +18,7 @@
*/
package ch.njol.skript.util.chat;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
/**
* Chat codes; includes color codes (reference)
diff --git a/src/main/java/ch/njol/skript/util/chat/ChatMessages.java b/src/main/java/ch/njol/skript/util/chat/ChatMessages.java
index c64d28a0a56..b032b76207e 100644
--- a/src/main/java/ch/njol/skript/util/chat/ChatMessages.java
+++ b/src/main/java/ch/njol/skript/util/chat/ChatMessages.java
@@ -26,7 +26,7 @@
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import net.md_5.bungee.api.ChatColor;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.Arrays;
diff --git a/src/main/java/ch/njol/skript/util/chat/MessageComponent.java b/src/main/java/ch/njol/skript/util/chat/MessageComponent.java
index 9eb41247c2c..036b5ad8724 100644
--- a/src/main/java/ch/njol/skript/util/chat/MessageComponent.java
+++ b/src/main/java/ch/njol/skript/util/chat/MessageComponent.java
@@ -21,7 +21,7 @@
import java.lang.reflect.Type;
import java.util.Locale;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import com.google.gson.JsonElement;
import com.google.gson.JsonPrimitive;
diff --git a/src/main/java/ch/njol/skript/util/chat/SkriptChatCode.java b/src/main/java/ch/njol/skript/util/chat/SkriptChatCode.java
index e21705abb7b..ba675614a53 100644
--- a/src/main/java/ch/njol/skript/util/chat/SkriptChatCode.java
+++ b/src/main/java/ch/njol/skript/util/chat/SkriptChatCode.java
@@ -18,7 +18,7 @@
*/
package ch.njol.skript.util.chat;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import ch.njol.skript.util.chat.MessageComponent.ClickEvent;
import ch.njol.skript.util.chat.MessageComponent.HoverEvent;
diff --git a/src/main/java/ch/njol/skript/util/chat/package-info.java b/src/main/java/ch/njol/skript/util/chat/package-info.java
index 8d75dfef20a..086198d953f 100644
--- a/src/main/java/ch/njol/skript/util/chat/package-info.java
+++ b/src/main/java/ch/njol/skript/util/chat/package-info.java
@@ -21,9 +21,6 @@
*
* @author Peter Güttinger
*/
-@NonNullByDefault({DefaultLocation.PARAMETER, DefaultLocation.RETURN_TYPE, DefaultLocation.FIELD})
package ch.njol.skript.util.chat;
-import org.eclipse.jdt.annotation.DefaultLocation;
-import org.eclipse.jdt.annotation.NonNullByDefault;
diff --git a/src/main/java/ch/njol/skript/util/package-info.java b/src/main/java/ch/njol/skript/util/package-info.java
index 32bf393f1b1..9f34ee4d325 100644
--- a/src/main/java/ch/njol/skript/util/package-info.java
+++ b/src/main/java/ch/njol/skript/util/package-info.java
@@ -21,9 +21,6 @@
*
* @author Peter Güttinger
*/
-@NonNullByDefault({DefaultLocation.PARAMETER, DefaultLocation.RETURN_TYPE, DefaultLocation.FIELD})
package ch.njol.skript.util;
-import org.eclipse.jdt.annotation.DefaultLocation;
-import org.eclipse.jdt.annotation.NonNullByDefault;
diff --git a/src/main/java/ch/njol/skript/util/slot/CursorSlot.java b/src/main/java/ch/njol/skript/util/slot/CursorSlot.java
index 387f0603037..3dda986c103 100644
--- a/src/main/java/ch/njol/skript/util/slot/CursorSlot.java
+++ b/src/main/java/ch/njol/skript/util/slot/CursorSlot.java
@@ -22,7 +22,7 @@
import org.bukkit.event.Event;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.ItemStack;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import ch.njol.skript.bukkitutil.PlayerUtils;
import ch.njol.skript.registrations.Classes;
diff --git a/src/main/java/ch/njol/skript/util/slot/DroppedItemSlot.java b/src/main/java/ch/njol/skript/util/slot/DroppedItemSlot.java
index 0d2cbca22f9..859ad635365 100644
--- a/src/main/java/ch/njol/skript/util/slot/DroppedItemSlot.java
+++ b/src/main/java/ch/njol/skript/util/slot/DroppedItemSlot.java
@@ -21,7 +21,7 @@
import org.bukkit.entity.Item;
import org.bukkit.event.Event;
import org.bukkit.inventory.ItemStack;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import ch.njol.skript.registrations.Classes;
diff --git a/src/main/java/ch/njol/skript/util/slot/EquipmentSlot.java b/src/main/java/ch/njol/skript/util/slot/EquipmentSlot.java
index 47f229bda23..d20628ce6d2 100644
--- a/src/main/java/ch/njol/skript/util/slot/EquipmentSlot.java
+++ b/src/main/java/ch/njol/skript/util/slot/EquipmentSlot.java
@@ -26,7 +26,7 @@
import org.bukkit.event.Event;
import org.bukkit.inventory.EntityEquipment;
import org.bukkit.inventory.ItemStack;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import ch.njol.skript.bukkitutil.PlayerUtils;
import ch.njol.skript.registrations.Classes;
diff --git a/src/main/java/ch/njol/skript/util/slot/InventorySlot.java b/src/main/java/ch/njol/skript/util/slot/InventorySlot.java
index 74501f3a12d..3d3feafbbd7 100644
--- a/src/main/java/ch/njol/skript/util/slot/InventorySlot.java
+++ b/src/main/java/ch/njol/skript/util/slot/InventorySlot.java
@@ -27,7 +27,7 @@
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import ch.njol.skript.bukkitutil.PlayerUtils;
import ch.njol.skript.registrations.Classes;
diff --git a/src/main/java/ch/njol/skript/util/slot/ItemFrameSlot.java b/src/main/java/ch/njol/skript/util/slot/ItemFrameSlot.java
index 024fb9d9ca4..2f68a96dc0e 100644
--- a/src/main/java/ch/njol/skript/util/slot/ItemFrameSlot.java
+++ b/src/main/java/ch/njol/skript/util/slot/ItemFrameSlot.java
@@ -21,7 +21,7 @@
import org.bukkit.entity.ItemFrame;
import org.bukkit.event.Event;
import org.bukkit.inventory.ItemStack;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import ch.njol.skript.registrations.Classes;
diff --git a/src/main/java/ch/njol/skript/util/slot/Slot.java b/src/main/java/ch/njol/skript/util/slot/Slot.java
index 79aa39ef469..a9b9abf3867 100644
--- a/src/main/java/ch/njol/skript/util/slot/Slot.java
+++ b/src/main/java/ch/njol/skript/util/slot/Slot.java
@@ -19,7 +19,7 @@
package ch.njol.skript.util.slot;
import org.bukkit.inventory.ItemStack;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import ch.njol.skript.lang.Debuggable;
diff --git a/src/main/java/ch/njol/skript/util/slot/ThrowableProjectileSlot.java b/src/main/java/ch/njol/skript/util/slot/ThrowableProjectileSlot.java
index 2d259375fec..80ffa552dcc 100644
--- a/src/main/java/ch/njol/skript/util/slot/ThrowableProjectileSlot.java
+++ b/src/main/java/ch/njol/skript/util/slot/ThrowableProjectileSlot.java
@@ -22,7 +22,7 @@
import org.bukkit.entity.ThrowableProjectile;
import org.bukkit.event.Event;
import org.bukkit.inventory.ItemStack;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import ch.njol.skript.registrations.Classes;
diff --git a/src/main/java/ch/njol/skript/util/slot/package-info.java b/src/main/java/ch/njol/skript/util/slot/package-info.java
index 83d64950433..35c6776c771 100644
--- a/src/main/java/ch/njol/skript/util/slot/package-info.java
+++ b/src/main/java/ch/njol/skript/util/slot/package-info.java
@@ -21,9 +21,6 @@
*
* @author Peter Güttinger
*/
-@NonNullByDefault({DefaultLocation.PARAMETER, DefaultLocation.RETURN_TYPE, DefaultLocation.FIELD})
package ch.njol.skript.util.slot;
-import org.eclipse.jdt.annotation.DefaultLocation;
-import org.eclipse.jdt.annotation.NonNullByDefault;
diff --git a/src/main/java/ch/njol/skript/util/visual/VisualEffect.java b/src/main/java/ch/njol/skript/util/visual/VisualEffect.java
index 7965ba5c722..02aa5a25a6c 100644
--- a/src/main/java/ch/njol/skript/util/visual/VisualEffect.java
+++ b/src/main/java/ch/njol/skript/util/visual/VisualEffect.java
@@ -33,7 +33,7 @@
import org.bukkit.Particle;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import java.util.Objects;
diff --git a/src/main/java/ch/njol/skript/util/visual/VisualEffectType.java b/src/main/java/ch/njol/skript/util/visual/VisualEffectType.java
index 7fa145175d8..b9220074293 100644
--- a/src/main/java/ch/njol/skript/util/visual/VisualEffectType.java
+++ b/src/main/java/ch/njol/skript/util/visual/VisualEffectType.java
@@ -26,7 +26,7 @@
import org.bukkit.EntityEffect;
import org.bukkit.Location;
import org.bukkit.Particle;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import java.util.Objects;
import java.util.function.BiFunction;
diff --git a/src/main/java/ch/njol/skript/util/visual/VisualEffects.java b/src/main/java/ch/njol/skript/util/visual/VisualEffects.java
index f9bbf202f89..2b5f32ef769 100644
--- a/src/main/java/ch/njol/skript/util/visual/VisualEffects.java
+++ b/src/main/java/ch/njol/skript/util/visual/VisualEffects.java
@@ -39,7 +39,7 @@
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.Arrays;
diff --git a/src/main/java/ch/njol/skript/variables/FlatFileStorage.java b/src/main/java/ch/njol/skript/variables/FlatFileStorage.java
index 5ab2d37d596..c9dadeb265b 100644
--- a/src/main/java/ch/njol/skript/variables/FlatFileStorage.java
+++ b/src/main/java/ch/njol/skript/variables/FlatFileStorage.java
@@ -29,7 +29,7 @@
import ch.njol.skript.util.Utils;
import ch.njol.skript.util.Version;
import ch.njol.util.NotifyingReference;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import java.io.BufferedReader;
import java.io.File;
diff --git a/src/main/java/ch/njol/skript/variables/SQLStorage.java b/src/main/java/ch/njol/skript/variables/SQLStorage.java
index 0a53aa3f2b0..6dce0d4910a 100644
--- a/src/main/java/ch/njol/skript/variables/SQLStorage.java
+++ b/src/main/java/ch/njol/skript/variables/SQLStorage.java
@@ -28,7 +28,7 @@
import org.bukkit.Bukkit;
import org.bukkit.plugin.Plugin;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import ch.njol.skript.Skript;
import ch.njol.skript.classes.ClassInfo;
diff --git a/src/main/java/ch/njol/skript/variables/SerializedVariable.java b/src/main/java/ch/njol/skript/variables/SerializedVariable.java
index 27bd6622e4d..b66b9acc333 100644
--- a/src/main/java/ch/njol/skript/variables/SerializedVariable.java
+++ b/src/main/java/ch/njol/skript/variables/SerializedVariable.java
@@ -18,7 +18,7 @@
*/
package ch.njol.skript.variables;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
/**
* An instance of a serialized variable, contains the variable name
diff --git a/src/main/java/ch/njol/skript/variables/TypeHints.java b/src/main/java/ch/njol/skript/variables/TypeHints.java
index 73c810264f4..7340d2fd970 100644
--- a/src/main/java/ch/njol/skript/variables/TypeHints.java
+++ b/src/main/java/ch/njol/skript/variables/TypeHints.java
@@ -23,7 +23,7 @@
import java.util.HashMap;
import java.util.Map;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
/**
* This is used to manage local variable type hints.
diff --git a/src/main/java/ch/njol/skript/variables/Variables.java b/src/main/java/ch/njol/skript/variables/Variables.java
index 792e20a5659..8bdca7e77bd 100644
--- a/src/main/java/ch/njol/skript/variables/Variables.java
+++ b/src/main/java/ch/njol/skript/variables/Variables.java
@@ -32,28 +32,32 @@
import ch.njol.skript.variables.SerializedVariable.Value;
import ch.njol.util.Kleenean;
import ch.njol.util.NonNullPair;
+import ch.njol.util.Pair;
+import ch.njol.util.StringUtils;
import ch.njol.util.SynchronizedReference;
+import ch.njol.util.coll.iterator.EmptyIterator;
import ch.njol.yggdrasil.Yggdrasil;
+import com.google.common.collect.HashMultimap;
+import com.google.common.collect.Multimap;
import org.bukkit.Bukkit;
import org.bukkit.configuration.serialization.ConfigurationSerializable;
import org.bukkit.configuration.serialization.ConfigurationSerialization;
import org.bukkit.event.Event;
-import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import org.skriptlang.skript.lang.converter.Converters;
-import com.google.common.collect.HashMultimap;
-import com.google.common.collect.Multimap;
-
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.NoSuchElementException;
import java.util.Optional;
import java.util.Queue;
import java.util.TreeMap;
@@ -114,7 +118,7 @@ public class Variables {
@Override
@Nullable
- public String getID(@NonNull Class> c) {
+ public String getID(@NotNull Class> c) {
if (ConfigurationSerializable.class.isAssignableFrom(c)
&& Classes.getSuperClassInfo(c) == Classes.getExactClassInfo(Object.class))
return CONFIGURATION_SERIALIZABLE_PREFIX +
@@ -125,7 +129,7 @@ public String getID(@NonNull Class> c) {
@Override
@Nullable
- public Class extends ConfigurationSerializable> getClass(@NonNull String id) {
+ public Class extends ConfigurationSerializable> getClass(@NotNull String id) {
if (id.startsWith(CONFIGURATION_SERIALIZABLE_PREFIX))
return ConfigurationSerialization.getClassByAlias(
id.substring(CONFIGURATION_SERIALIZABLE_PREFIX.length()));
@@ -474,6 +478,67 @@ public static Object getVariable(String name, @Nullable Event event, boolean loc
}
}
+ /**
+ * Returns an iterator over the values of this list variable.
+ *
+ * @param name the variable's name. This must be the name of a list variable, ie. it must end in *.
+ * @param event if {@code local} is {@code true}, this is the event
+ * the local variable resides in.
+ * @param local if this variable is a local or global variable.
+ * @return an {@link Iterator} of {@link Pair}s, containing the {@link String} index and {@link Object} value of the
+ * elements of the list. An empty iterator is returned if the variable does not exist.
+ */
+ public static Iterator> getVariableIterator(String name, boolean local, @Nullable Event event) {
+ assert name.endsWith("*");
+ Object val = getVariable(name, event, local);
+ String subName = StringUtils.substring(name, 0, -1);
+
+ if (val == null)
+ return new EmptyIterator<>();
+ assert val instanceof TreeMap;
+ // temporary list to prevent CMEs
+ @SuppressWarnings("unchecked")
+ Iterator keys = new ArrayList<>(((Map) val).keySet()).iterator();
+ return new Iterator<>() {
+ @Nullable
+ private String key;
+ @Nullable
+ private Object next = null;
+
+ @Override
+ public boolean hasNext() {
+ if (next != null)
+ return true;
+ while (keys.hasNext()) {
+ key = keys.next();
+ if (key != null) {
+ next = Variable.convertIfOldPlayer(subName + key, local, event, Variables.getVariable(subName + key, event, local));
+ if (next != null && !(next instanceof TreeMap))
+ return true;
+ }
+ }
+ next = null;
+ return false;
+ }
+
+ @Override
+ public Pair next() {
+ if (!hasNext())
+ throw new NoSuchElementException();
+ Pair n = new Pair<>(key, next);
+ next = null;
+ return n;
+ }
+
+ @Override
+ public void remove() {
+ if (key == null)
+ throw new IllegalStateException();
+ Variables.deleteVariable(key, event, local);
+ }
+ };
+ }
+
/**
* Deletes a variable.
*
diff --git a/src/main/java/ch/njol/skript/variables/VariablesMap.java b/src/main/java/ch/njol/skript/variables/VariablesMap.java
index ef51ae3bec3..cef587e9f38 100644
--- a/src/main/java/ch/njol/skript/variables/VariablesMap.java
+++ b/src/main/java/ch/njol/skript/variables/VariablesMap.java
@@ -20,7 +20,7 @@
import ch.njol.skript.lang.Variable;
import ch.njol.util.StringUtils;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import java.util.Comparator;
import java.util.HashMap;
diff --git a/src/main/java/ch/njol/skript/variables/VariablesStorage.java b/src/main/java/ch/njol/skript/variables/VariablesStorage.java
index 4a21812f2e0..a8b54114949 100644
--- a/src/main/java/ch/njol/skript/variables/VariablesStorage.java
+++ b/src/main/java/ch/njol/skript/variables/VariablesStorage.java
@@ -24,7 +24,7 @@
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import ch.njol.skript.Skript;
import ch.njol.skript.config.SectionNode;
diff --git a/src/main/java/ch/njol/skript/variables/package-info.java b/src/main/java/ch/njol/skript/variables/package-info.java
index 61b5906429c..ed48d9f7bf5 100644
--- a/src/main/java/ch/njol/skript/variables/package-info.java
+++ b/src/main/java/ch/njol/skript/variables/package-info.java
@@ -21,9 +21,6 @@
*
* @author Peter Güttinger
*/
-@NonNullByDefault({DefaultLocation.PARAMETER, DefaultLocation.RETURN_TYPE, DefaultLocation.FIELD})
package ch.njol.skript.variables;
-import org.eclipse.jdt.annotation.DefaultLocation;
-import org.eclipse.jdt.annotation.NonNullByDefault;
diff --git a/src/main/java/ch/njol/util/Callback.java b/src/main/java/ch/njol/util/Callback.java
index 0c1fe7bbb28..efce012642b 100644
--- a/src/main/java/ch/njol/util/Callback.java
+++ b/src/main/java/ch/njol/util/Callback.java
@@ -18,7 +18,7 @@
*/
package ch.njol.util;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
public interface Callback {
diff --git a/src/main/java/ch/njol/util/LoggerFilter.java b/src/main/java/ch/njol/util/LoggerFilter.java
index edc9c353521..b2e1aa6db8c 100644
--- a/src/main/java/ch/njol/util/LoggerFilter.java
+++ b/src/main/java/ch/njol/util/LoggerFilter.java
@@ -24,7 +24,7 @@
import java.util.logging.LogRecord;
import java.util.logging.Logger;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
public final class LoggerFilter implements Filter, Closeable {
private final Logger l;
diff --git a/src/main/java/ch/njol/util/NotifyingReference.java b/src/main/java/ch/njol/util/NotifyingReference.java
index 6012a406d94..8c173323f62 100644
--- a/src/main/java/ch/njol/util/NotifyingReference.java
+++ b/src/main/java/ch/njol/util/NotifyingReference.java
@@ -18,7 +18,7 @@
*/
package ch.njol.util;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
/**
* @author Peter G�ttinger
diff --git a/src/main/java/ch/njol/util/NullableChecker.java b/src/main/java/ch/njol/util/NullableChecker.java
index a4f4086faa4..a8f5d53f8c6 100644
--- a/src/main/java/ch/njol/util/NullableChecker.java
+++ b/src/main/java/ch/njol/util/NullableChecker.java
@@ -18,7 +18,7 @@
*/
package ch.njol.util;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
public interface NullableChecker extends Checker {
diff --git a/src/main/java/ch/njol/util/Pair.java b/src/main/java/ch/njol/util/Pair.java
index 4af86f9d404..c17887f9778 100644
--- a/src/main/java/ch/njol/util/Pair.java
+++ b/src/main/java/ch/njol/util/Pair.java
@@ -22,7 +22,7 @@
import java.util.Map.Entry;
import java.util.Objects;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
/**
* @author Peter Güttinger
diff --git a/src/main/java/ch/njol/util/StringUtils.java b/src/main/java/ch/njol/util/StringUtils.java
index 1fa271111e3..aaa03754e14 100644
--- a/src/main/java/ch/njol/util/StringUtils.java
+++ b/src/main/java/ch/njol/util/StringUtils.java
@@ -23,7 +23,7 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
/**
* @author Peter Güttinger
diff --git a/src/main/java/ch/njol/util/SynchronizedReference.java b/src/main/java/ch/njol/util/SynchronizedReference.java
index fdb571f2af1..dfd7fbb9f5e 100644
--- a/src/main/java/ch/njol/util/SynchronizedReference.java
+++ b/src/main/java/ch/njol/util/SynchronizedReference.java
@@ -18,7 +18,7 @@
*/
package ch.njol.util;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
/**
* @author Peter G�ttinger
diff --git a/src/main/java/ch/njol/util/Validate.java b/src/main/java/ch/njol/util/Validate.java
index c4c4f0eb7c1..e47c320fb06 100644
--- a/src/main/java/ch/njol/util/Validate.java
+++ b/src/main/java/ch/njol/util/Validate.java
@@ -20,7 +20,7 @@
import java.util.Collection;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
/**
* @author Peter Güttinger
diff --git a/src/main/java/ch/njol/util/coll/BidiHashMap.java b/src/main/java/ch/njol/util/coll/BidiHashMap.java
index 4ab8fbed6cf..47003277110 100644
--- a/src/main/java/ch/njol/util/coll/BidiHashMap.java
+++ b/src/main/java/ch/njol/util/coll/BidiHashMap.java
@@ -23,7 +23,7 @@
import java.util.Map;
import java.util.Set;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
/**
* @author Peter Güttinger
diff --git a/src/main/java/ch/njol/util/coll/CollectionUtils.java b/src/main/java/ch/njol/util/coll/CollectionUtils.java
index d923f609e12..8b48a505662 100644
--- a/src/main/java/ch/njol/util/coll/CollectionUtils.java
+++ b/src/main/java/ch/njol/util/coll/CollectionUtils.java
@@ -19,8 +19,8 @@
package ch.njol.util.coll;
import ch.njol.util.Pair;
-import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import java.lang.reflect.Array;
import java.util.Arrays;
diff --git a/src/main/java/ch/njol/util/coll/CyclicList.java b/src/main/java/ch/njol/util/coll/CyclicList.java
index 2d571e111ea..a57bffed71e 100644
--- a/src/main/java/ch/njol/util/coll/CyclicList.java
+++ b/src/main/java/ch/njol/util/coll/CyclicList.java
@@ -22,7 +22,7 @@
import java.util.AbstractList;
import java.util.Collection;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import ch.njol.util.Math2;
diff --git a/src/main/java/ch/njol/util/coll/ReversedListView.java b/src/main/java/ch/njol/util/coll/ReversedListView.java
index 22beab89e2b..632dc55924e 100644
--- a/src/main/java/ch/njol/util/coll/ReversedListView.java
+++ b/src/main/java/ch/njol/util/coll/ReversedListView.java
@@ -24,7 +24,7 @@
import java.util.List;
import java.util.ListIterator;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import ch.njol.util.coll.iterator.ReversedListIterator;
diff --git a/src/main/java/ch/njol/util/coll/iterator/ArrayIterator.java b/src/main/java/ch/njol/util/coll/iterator/ArrayIterator.java
index 953695e233f..82bfd65b01b 100644
--- a/src/main/java/ch/njol/util/coll/iterator/ArrayIterator.java
+++ b/src/main/java/ch/njol/util/coll/iterator/ArrayIterator.java
@@ -21,7 +21,7 @@
import java.util.Iterator;
import java.util.NoSuchElementException;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
/**
* A simple iterator to iterate over an array.
diff --git a/src/main/java/ch/njol/util/coll/iterator/CheckedIterator.java b/src/main/java/ch/njol/util/coll/iterator/CheckedIterator.java
index 6710c249c7d..f17ac3ae36c 100644
--- a/src/main/java/ch/njol/util/coll/iterator/CheckedIterator.java
+++ b/src/main/java/ch/njol/util/coll/iterator/CheckedIterator.java
@@ -21,7 +21,7 @@
import java.util.Iterator;
import java.util.NoSuchElementException;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import ch.njol.util.NullableChecker;
diff --git a/src/main/java/ch/njol/util/coll/iterator/CombinedIterator.java b/src/main/java/ch/njol/util/coll/iterator/CombinedIterator.java
index 4dfb0e43a69..aee12ce0f97 100644
--- a/src/main/java/ch/njol/util/coll/iterator/CombinedIterator.java
+++ b/src/main/java/ch/njol/util/coll/iterator/CombinedIterator.java
@@ -21,7 +21,7 @@
import java.util.Iterator;
import java.util.NoSuchElementException;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
/**
* An iterator that iterates over all elements of several iterables.
diff --git a/src/main/java/ch/njol/util/coll/iterator/EmptyIterable.java b/src/main/java/ch/njol/util/coll/iterator/EmptyIterable.java
index 63feac206a5..0b400a13414 100644
--- a/src/main/java/ch/njol/util/coll/iterator/EmptyIterable.java
+++ b/src/main/java/ch/njol/util/coll/iterator/EmptyIterable.java
@@ -20,7 +20,7 @@
import java.util.Iterator;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
/**
* @author Peter Güttinger
diff --git a/src/main/java/ch/njol/util/coll/iterator/EmptyIterator.java b/src/main/java/ch/njol/util/coll/iterator/EmptyIterator.java
index 1570eca07a1..a8ac451cb12 100644
--- a/src/main/java/ch/njol/util/coll/iterator/EmptyIterator.java
+++ b/src/main/java/ch/njol/util/coll/iterator/EmptyIterator.java
@@ -21,7 +21,7 @@
import java.util.Iterator;
import java.util.NoSuchElementException;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
/**
* @author Peter Güttinger
diff --git a/src/main/java/ch/njol/util/coll/iterator/EnumerationIterable.java b/src/main/java/ch/njol/util/coll/iterator/EnumerationIterable.java
index 264088d6a34..16b7d077434 100644
--- a/src/main/java/ch/njol/util/coll/iterator/EnumerationIterable.java
+++ b/src/main/java/ch/njol/util/coll/iterator/EnumerationIterable.java
@@ -21,7 +21,7 @@
import java.util.Enumeration;
import java.util.Iterator;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
/**
* TODO this should actually only be an Iterator
diff --git a/src/main/java/ch/njol/util/coll/iterator/ImprovedIterator.java b/src/main/java/ch/njol/util/coll/iterator/ImprovedIterator.java
index ebb8be82748..3d9a4540447 100644
--- a/src/main/java/ch/njol/util/coll/iterator/ImprovedIterator.java
+++ b/src/main/java/ch/njol/util/coll/iterator/ImprovedIterator.java
@@ -20,7 +20,7 @@
import java.util.Iterator;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
public class ImprovedIterator implements Iterator {
diff --git a/src/main/java/ch/njol/util/coll/iterator/ListRangeIterator.java b/src/main/java/ch/njol/util/coll/iterator/ListRangeIterator.java
index ae2547c023f..e7626d62761 100644
--- a/src/main/java/ch/njol/util/coll/iterator/ListRangeIterator.java
+++ b/src/main/java/ch/njol/util/coll/iterator/ListRangeIterator.java
@@ -23,7 +23,7 @@
import java.util.ListIterator;
import java.util.NoSuchElementException;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
public class ListRangeIterator implements Iterator {
diff --git a/src/main/java/ch/njol/util/coll/iterator/NonNullIterator.java b/src/main/java/ch/njol/util/coll/iterator/NonNullIterator.java
index 5c897bf933e..b60e8c3c19f 100644
--- a/src/main/java/ch/njol/util/coll/iterator/NonNullIterator.java
+++ b/src/main/java/ch/njol/util/coll/iterator/NonNullIterator.java
@@ -21,7 +21,7 @@
import java.util.Iterator;
import java.util.NoSuchElementException;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
/**
* @author Peter Güttinger
diff --git a/src/main/java/ch/njol/util/coll/iterator/ReversedListIterator.java b/src/main/java/ch/njol/util/coll/iterator/ReversedListIterator.java
index 462319c2561..1db1efa24b4 100644
--- a/src/main/java/ch/njol/util/coll/iterator/ReversedListIterator.java
+++ b/src/main/java/ch/njol/util/coll/iterator/ReversedListIterator.java
@@ -21,7 +21,7 @@
import java.util.List;
import java.util.ListIterator;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
/**
* @author Peter Güttinger
diff --git a/src/main/java/ch/njol/util/coll/iterator/StoppableIterator.java b/src/main/java/ch/njol/util/coll/iterator/StoppableIterator.java
index 0b806b81079..5db87f67bad 100644
--- a/src/main/java/ch/njol/util/coll/iterator/StoppableIterator.java
+++ b/src/main/java/ch/njol/util/coll/iterator/StoppableIterator.java
@@ -21,7 +21,7 @@
import java.util.Iterator;
import java.util.NoSuchElementException;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import ch.njol.util.NullableChecker;
diff --git a/src/main/java/ch/njol/util/coll/iterator/package-info.java b/src/main/java/ch/njol/util/coll/iterator/package-info.java
index 874b95f11cb..766a8ba5f59 100644
--- a/src/main/java/ch/njol/util/coll/iterator/package-info.java
+++ b/src/main/java/ch/njol/util/coll/iterator/package-info.java
@@ -19,9 +19,6 @@
/**
* @author Peter Güttinger
*/
-@NonNullByDefault({DefaultLocation.PARAMETER, DefaultLocation.RETURN_TYPE, DefaultLocation.FIELD})
package ch.njol.util.coll.iterator;
-import org.eclipse.jdt.annotation.DefaultLocation;
-import org.eclipse.jdt.annotation.NonNullByDefault;
diff --git a/src/main/java/ch/njol/util/coll/package-info.java b/src/main/java/ch/njol/util/coll/package-info.java
index d4ab40d3bfb..862fc9a77c7 100644
--- a/src/main/java/ch/njol/util/coll/package-info.java
+++ b/src/main/java/ch/njol/util/coll/package-info.java
@@ -19,9 +19,6 @@
/**
* @author Peter Güttinger
*/
-@NonNullByDefault({DefaultLocation.PARAMETER, DefaultLocation.RETURN_TYPE, DefaultLocation.FIELD})
package ch.njol.util.coll;
-import org.eclipse.jdt.annotation.DefaultLocation;
-import org.eclipse.jdt.annotation.NonNullByDefault;
diff --git a/src/main/java/ch/njol/util/package-info.java b/src/main/java/ch/njol/util/package-info.java
index d3053bbdcb9..987084bad5b 100644
--- a/src/main/java/ch/njol/util/package-info.java
+++ b/src/main/java/ch/njol/util/package-info.java
@@ -19,9 +19,6 @@
/**
* @author Peter Güttinger
*/
-@NonNullByDefault({DefaultLocation.PARAMETER, DefaultLocation.RETURN_TYPE, DefaultLocation.FIELD})
package ch.njol.util;
-import org.eclipse.jdt.annotation.DefaultLocation;
-import org.eclipse.jdt.annotation.NonNullByDefault;
diff --git a/src/main/java/ch/njol/yggdrasil/ClassResolver.java b/src/main/java/ch/njol/yggdrasil/ClassResolver.java
index e8cea60120e..ec4ecfe8621 100644
--- a/src/main/java/ch/njol/yggdrasil/ClassResolver.java
+++ b/src/main/java/ch/njol/yggdrasil/ClassResolver.java
@@ -18,7 +18,7 @@
*/
package ch.njol.yggdrasil;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
public interface ClassResolver {
diff --git a/src/main/java/ch/njol/yggdrasil/Fields.java b/src/main/java/ch/njol/yggdrasil/Fields.java
index 36198ead5e0..10f2c8f1c83 100644
--- a/src/main/java/ch/njol/yggdrasil/Fields.java
+++ b/src/main/java/ch/njol/yggdrasil/Fields.java
@@ -20,7 +20,7 @@
import ch.njol.yggdrasil.Fields.FieldContext;
import ch.njol.yggdrasil.YggdrasilSerializable.YggdrasilRobustSerializable;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import javax.annotation.concurrent.NotThreadSafe;
import java.io.NotSerializableException;
diff --git a/src/main/java/ch/njol/yggdrasil/JRESerializer.java b/src/main/java/ch/njol/yggdrasil/JRESerializer.java
index fdd2bfafaaa..9585681eea6 100644
--- a/src/main/java/ch/njol/yggdrasil/JRESerializer.java
+++ b/src/main/java/ch/njol/yggdrasil/JRESerializer.java
@@ -19,7 +19,7 @@
package ch.njol.yggdrasil;
import com.google.common.collect.ImmutableList;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import java.io.NotSerializableException;
import java.io.StreamCorruptedException;
diff --git a/src/main/java/ch/njol/yggdrasil/PseudoEnum.java b/src/main/java/ch/njol/yggdrasil/PseudoEnum.java
index a3d2b5ed6a7..e782b393aaf 100644
--- a/src/main/java/ch/njol/yggdrasil/PseudoEnum.java
+++ b/src/main/java/ch/njol/yggdrasil/PseudoEnum.java
@@ -18,7 +18,7 @@
*/
package ch.njol.yggdrasil;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import javax.annotation.concurrent.ThreadSafe;
import java.util.ArrayList;
diff --git a/src/main/java/ch/njol/yggdrasil/SimpleClassResolver.java b/src/main/java/ch/njol/yggdrasil/SimpleClassResolver.java
index 05bf2ade436..19123306a34 100644
--- a/src/main/java/ch/njol/yggdrasil/SimpleClassResolver.java
+++ b/src/main/java/ch/njol/yggdrasil/SimpleClassResolver.java
@@ -20,7 +20,7 @@
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import javax.annotation.concurrent.NotThreadSafe;
diff --git a/src/main/java/ch/njol/yggdrasil/Tag.java b/src/main/java/ch/njol/yggdrasil/Tag.java
index 068f3377be1..8854466b74f 100644
--- a/src/main/java/ch/njol/yggdrasil/Tag.java
+++ b/src/main/java/ch/njol/yggdrasil/Tag.java
@@ -18,7 +18,7 @@
*/
package ch.njol.yggdrasil;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import java.util.HashMap;
import java.util.Map;
diff --git a/src/main/java/ch/njol/yggdrasil/Yggdrasil.java b/src/main/java/ch/njol/yggdrasil/Yggdrasil.java
index d97a42900af..d73d27e1341 100644
--- a/src/main/java/ch/njol/yggdrasil/Yggdrasil.java
+++ b/src/main/java/ch/njol/yggdrasil/Yggdrasil.java
@@ -22,7 +22,7 @@
import ch.njol.yggdrasil.YggdrasilSerializable.YggdrasilExtendedSerializable;
import ch.njol.yggdrasil.YggdrasilSerializable.YggdrasilRobustEnum;
import ch.njol.yggdrasil.YggdrasilSerializable.YggdrasilRobustSerializable;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import javax.annotation.concurrent.NotThreadSafe;
import java.io.File;
diff --git a/src/main/java/ch/njol/yggdrasil/YggdrasilInputStream.java b/src/main/java/ch/njol/yggdrasil/YggdrasilInputStream.java
index 3fd09daf89b..bb1329f541f 100644
--- a/src/main/java/ch/njol/yggdrasil/YggdrasilInputStream.java
+++ b/src/main/java/ch/njol/yggdrasil/YggdrasilInputStream.java
@@ -19,7 +19,7 @@
package ch.njol.yggdrasil;
import ch.njol.yggdrasil.YggdrasilSerializable.YggdrasilExtendedSerializable;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import java.io.Closeable;
import java.io.IOException;
diff --git a/src/main/java/ch/njol/yggdrasil/YggdrasilOutputStream.java b/src/main/java/ch/njol/yggdrasil/YggdrasilOutputStream.java
index 7f0124f9573..e9f5557e4f9 100644
--- a/src/main/java/ch/njol/yggdrasil/YggdrasilOutputStream.java
+++ b/src/main/java/ch/njol/yggdrasil/YggdrasilOutputStream.java
@@ -20,7 +20,7 @@
import ch.njol.yggdrasil.Fields.FieldContext;
import ch.njol.yggdrasil.YggdrasilSerializable.YggdrasilExtendedSerializable;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import java.io.Closeable;
import java.io.Flushable;
diff --git a/src/main/java/ch/njol/yggdrasil/YggdrasilSerializable.java b/src/main/java/ch/njol/yggdrasil/YggdrasilSerializable.java
index b9b4fac355b..2d1d511a5da 100644
--- a/src/main/java/ch/njol/yggdrasil/YggdrasilSerializable.java
+++ b/src/main/java/ch/njol/yggdrasil/YggdrasilSerializable.java
@@ -22,7 +22,7 @@
import java.io.StreamCorruptedException;
import java.lang.reflect.Field;
-import org.eclipse.jdt.annotation.NonNull;
+import org.jetbrains.annotations.NotNull;
import ch.njol.yggdrasil.Fields.FieldContext;
@@ -48,7 +48,7 @@ interface YggdrasilRobustSerializable extends YggdrasilSerializable {
* yggdrasil.{@link Yggdrasil#incompatibleField(Object, Field, FieldContext) incompatibleField}(this, field, value)
* will be called.
*/
- boolean incompatibleField(@NonNull Field field, @NonNull FieldContext value) throws StreamCorruptedException;
+ boolean incompatibleField(@NotNull Field field, @NotNull FieldContext value) throws StreamCorruptedException;
/**
* Called if a field was read from stream which does not exist in this class.
@@ -58,7 +58,7 @@ interface YggdrasilRobustSerializable extends YggdrasilSerializable {
* yggdrasil.{@link Yggdrasil#excessiveField(Object, FieldContext) excessiveField}(this, field)
* will be called.
*/
- boolean excessiveField(@NonNull FieldContext field) throws StreamCorruptedException;
+ boolean excessiveField(@NotNull FieldContext field) throws StreamCorruptedException;
/**
* Called if a field was not found in the stream.
@@ -67,7 +67,7 @@ interface YggdrasilRobustSerializable extends YggdrasilSerializable {
* @return Whether the field was handled (e.g. true if the default value is fine). If false,
* yggdrasil.{@link Yggdrasil#missingField(Object, Field) missingField}(this, field) will be called.
*/
- boolean missingField(@NonNull Field field) throws StreamCorruptedException;
+ boolean missingField(@NotNull Field field) throws StreamCorruptedException;
}
@@ -122,7 +122,7 @@ interface YggdrasilExtendedSerializable extends YggdrasilSerializable {
* @throws StreamCorruptedException If the Fields object is invalid, i.e. was not written
* by {@link #serialize()} or Yggdrasil's default serialisation.
*/
- void deserialize(@NonNull Fields fields) throws StreamCorruptedException, NotSerializableException;
+ void deserialize(@NotNull Fields fields) throws StreamCorruptedException, NotSerializableException;
}
diff --git a/src/main/java/ch/njol/yggdrasil/YggdrasilSerializer.java b/src/main/java/ch/njol/yggdrasil/YggdrasilSerializer.java
index 0424bb72695..f48d187447e 100644
--- a/src/main/java/ch/njol/yggdrasil/YggdrasilSerializer.java
+++ b/src/main/java/ch/njol/yggdrasil/YggdrasilSerializer.java
@@ -18,7 +18,7 @@
*/
package ch.njol.yggdrasil;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import java.io.NotSerializableException;
import java.io.StreamCorruptedException;
diff --git a/src/main/java/ch/njol/yggdrasil/package-info.java b/src/main/java/ch/njol/yggdrasil/package-info.java
index 2f46bbaeaa5..12961ec115d 100644
--- a/src/main/java/ch/njol/yggdrasil/package-info.java
+++ b/src/main/java/ch/njol/yggdrasil/package-info.java
@@ -19,9 +19,6 @@
/**
* @author Peter Güttinger
*/
-@NonNullByDefault({DefaultLocation.PARAMETER, DefaultLocation.RETURN_TYPE, DefaultLocation.FIELD})
package ch.njol.yggdrasil;
-import org.eclipse.jdt.annotation.DefaultLocation;
-import org.eclipse.jdt.annotation.NonNullByDefault;
diff --git a/src/main/java/ch/njol/yggdrasil/util/package-info.java b/src/main/java/ch/njol/yggdrasil/util/package-info.java
index 86af8dcc89e..b031f9cbe4a 100644
--- a/src/main/java/ch/njol/yggdrasil/util/package-info.java
+++ b/src/main/java/ch/njol/yggdrasil/util/package-info.java
@@ -19,9 +19,6 @@
/**
* @author Peter Güttinger
*/
-@NonNullByDefault({DefaultLocation.PARAMETER, DefaultLocation.RETURN_TYPE, DefaultLocation.FIELD})
package ch.njol.yggdrasil.util;
-import org.eclipse.jdt.annotation.DefaultLocation;
-import org.eclipse.jdt.annotation.NonNullByDefault;
diff --git a/src/main/java/org/skriptlang/skript/bukkit/SkriptMetrics.java b/src/main/java/org/skriptlang/skript/bukkit/SkriptMetrics.java
new file mode 100644
index 00000000000..e57c4ec7700
--- /dev/null
+++ b/src/main/java/org/skriptlang/skript/bukkit/SkriptMetrics.java
@@ -0,0 +1,268 @@
+package org.skriptlang.skript.bukkit;
+
+import ch.njol.skript.Skript;
+import ch.njol.skript.SkriptConfig;
+import ch.njol.skript.config.Option;
+import ch.njol.skript.localization.Language;
+import ch.njol.skript.update.Updater;
+import ch.njol.skript.util.Version;
+import ch.njol.skript.util.chat.ChatMessages;
+import com.google.common.collect.HashBasedTable;
+import com.google.common.collect.Table;
+import org.bstats.bukkit.Metrics;
+import org.bstats.charts.DrilldownPie;
+import org.bstats.charts.SimplePie;
+import org.jetbrains.annotations.Nullable;
+
+import java.text.SimpleDateFormat;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * helper class to handle bstats metrics
+ */
+public class SkriptMetrics {
+
+ /**
+ * Helper method to set up bstats charts on the supplied Metrics object
+ * @param metrics The Metrics object to which charts will be added.
+ */
+ public static void setupMetrics(Metrics metrics) {
+ // Enable metrics and register custom charts
+
+ // sets up the old charts to prevent data splitting due to various user version
+ setupLegacyMetrics(metrics);
+
+ // add custom version charts for easier reading:
+ metrics.addCustomChart(new DrilldownPie("drilldownPluginVersion", () -> {
+ Version version = Skript.getVersion();
+ Table table = HashBasedTable.create(1,1);
+ table.put(
+ version.getMajor() + "." + version.getMinor(), // upper label
+ version.toString(), // lower label
+ 1 // weight
+ );
+ return table.rowMap();
+ }));
+
+ metrics.addCustomChart(new DrilldownPie("drilldownMinecraftVersion", () -> {
+ Version version = Skript.getMinecraftVersion();
+ Table table = HashBasedTable.create(1,1);
+ table.put(
+ version.getMajor() + "." + version.getMinor(), // upper label
+ version.toString(), // lower label
+ 1 // weight
+ );
+ return table.rowMap();
+ }));
+
+ metrics.addCustomChart(new SimplePie("buildFlavor", () -> {
+ Updater updater = Skript.getInstance().getUpdater();
+ if (updater != null)
+ return updater.getCurrentRelease().flavor;
+ return "unknown";
+ }));
+
+ //
+ // config options
+ //
+
+ metrics.addCustomChart(new DrilldownPie("drilldownPluginLanguage", () -> {
+ String lang = Language.getName();
+ return isDefaultMap(lang, SkriptConfig.language.defaultValue());
+ }));
+
+ metrics.addCustomChart(new DrilldownPie("drilldownUpdateChecker", () -> {
+ Table table = HashBasedTable.create(1,1);
+ table.put(
+ SkriptConfig.checkForNewVersion.value().toString(), // upper label
+ SkriptConfig.updateCheckInterval.value().toString(), // lower label
+ 1 // weight
+ );
+ return table.rowMap();
+ }));
+ metrics.addCustomChart(new SimplePie("releaseChannel", SkriptConfig.releaseChannel::value));
+
+ // effect commands
+ metrics.addCustomChart(new DrilldownPie("drilldownEffectCommands", () -> {
+ Table table = HashBasedTable.create(1,1);
+ table.put(
+ SkriptConfig.enableEffectCommands.value().toString(), // upper label
+ SkriptConfig.effectCommandToken.value(), // lower label
+ 1 // weight
+ );
+ return table.rowMap();
+ }));
+ metrics.addCustomChart(new SimplePie("effectCommandsOps", () ->
+ SkriptConfig.allowOpsToUseEffectCommands.value().toString()
+ ));
+ metrics.addCustomChart(new SimplePie("logEffectCommands", () ->
+ SkriptConfig.logEffectCommands.value().toString()
+ ));
+
+ metrics.addCustomChart(new SimplePie("loadDefaultAliases", () ->
+ SkriptConfig.loadDefaultAliases.value().toString()
+ ));
+
+ metrics.addCustomChart(new SimplePie("playerVariableFix", () ->
+ SkriptConfig.enablePlayerVariableFix.value().toString()
+ ));
+ metrics.addCustomChart(new SimplePie("uuidsWithPlayers", () ->
+ SkriptConfig.usePlayerUUIDsInVariableNames.value().toString()
+ ));
+
+ metrics.addCustomChart(new DrilldownPie("drilldownDateFormat", () -> {
+ String value = ((SimpleDateFormat) SkriptConfig.dateFormat.value()).toPattern();
+ String defaultValue = ((SimpleDateFormat) SkriptConfig.dateFormat.defaultValue()).toPattern();
+ return isDefaultMap(value, defaultValue, "default");
+ }));
+
+ metrics.addCustomChart(new DrilldownPie("drilldownLogVerbosity", () -> {
+ String verbosity = SkriptConfig.verbosity.value().name().toLowerCase(Locale.ENGLISH).replace('_', ' ');
+ return isDefaultMap(verbosity, SkriptConfig.verbosity.defaultValue());
+ }));
+
+ metrics.addCustomChart(new DrilldownPie("drilldownPluginPriority", () -> {
+ String priority = SkriptConfig.defaultEventPriority.value().name().toLowerCase(Locale.ENGLISH).replace('_', ' ');
+ return isDefaultMap(priority, SkriptConfig.defaultEventPriority.defaultValue());
+ }));
+ metrics.addCustomChart(new SimplePie("cancelledByDefault", () ->
+ SkriptConfig.listenCancelledByDefault.value().toString()
+ ));
+
+ metrics.addCustomChart(new DrilldownPie("drilldownNumberAccuracy", () ->
+ isDefaultMap(SkriptConfig.numberAccuracy)
+ ));
+
+ metrics.addCustomChart(new DrilldownPie("drilldownMaxTargetDistance", () ->
+ isDefaultMap(SkriptConfig.maxTargetBlockDistance)
+ ));
+
+ metrics.addCustomChart(new SimplePie("caseSensitiveFunctions", () ->
+ SkriptConfig.caseSensitive.value().toString()
+ ));
+ metrics.addCustomChart(new SimplePie("caseSensitiveVariables", () ->
+ SkriptConfig.caseInsensitiveVariables.value().toString()
+ ));
+ metrics.addCustomChart(new SimplePie("caseSensitiveCommands", () ->
+ SkriptConfig.caseInsensitiveCommands.value().toString()
+ ));
+
+ metrics.addCustomChart(new SimplePie("disableSaveWarnings", () ->
+ SkriptConfig.disableObjectCannotBeSavedWarnings.value().toString()
+ ));
+ metrics.addCustomChart(new SimplePie("disableAndOrWarnings", () ->
+ SkriptConfig.disableMissingAndOrWarnings.value().toString()
+ ));
+ metrics.addCustomChart(new SimplePie("disableStartsWithWarnings", () ->
+ SkriptConfig.disableVariableStartingWithExpressionWarnings.value().toString()
+ ));
+
+ metrics.addCustomChart(new SimplePie("softApiExceptions", () ->
+ SkriptConfig.apiSoftExceptions.value().toString()
+ ));
+
+ metrics.addCustomChart(new SimplePie("timingsStatus", () -> {
+ if (!Skript.classExists("co.aikar.timings.Timings"))
+ return "unsupported";
+ return SkriptConfig.enableTimings.value().toString();
+ }));
+
+ metrics.addCustomChart(new SimplePie("parseLinks", () ->
+ ChatMessages.linkParseMode.name().toLowerCase(Locale.ENGLISH)
+ ));
+
+ metrics.addCustomChart(new SimplePie("colorResetCodes", () ->
+ SkriptConfig.colorResetCodes.value().toString()
+ ));
+
+ metrics.addCustomChart(new SimplePie("keepLastUsage", () ->
+ SkriptConfig.keepLastUsageDates.value().toString()
+ ));
+
+ metrics.addCustomChart(new DrilldownPie("drilldownParsetimeWarningThreshold", () ->
+ isDefaultMap(SkriptConfig.longParseTimeWarningThreshold, "disabled")
+ ));
+ }
+
+ /**
+ * Helper method to set up legacy charts (pre 2.9.2)
+ * @param metrics The Metrics object to which charts will be added.
+ */
+ private static void setupLegacyMetrics(Metrics metrics) {
+ // Enable metrics and register legacy charts
+ metrics.addCustomChart(new SimplePie("pluginLanguage", Language::getName));
+ metrics.addCustomChart(new SimplePie("updateCheckerEnabled", () ->
+ SkriptConfig.checkForNewVersion.value().toString()
+ ));
+ metrics.addCustomChart(new SimplePie("logVerbosity", () ->
+ SkriptConfig.verbosity.value().name().toLowerCase(Locale.ENGLISH).replace('_', ' ')
+ ));
+ metrics.addCustomChart(new SimplePie("pluginPriority", () ->
+ SkriptConfig.defaultEventPriority.value().name().toLowerCase(Locale.ENGLISH).replace('_', ' ')
+ ));
+ metrics.addCustomChart(new SimplePie("effectCommands", () ->
+ SkriptConfig.enableEffectCommands.value().toString()
+ ));
+ metrics.addCustomChart(new SimplePie("maxTargetDistance", () ->
+ SkriptConfig.maxTargetBlockDistance.value().toString()
+ ));
+ }
+
+ /**
+ * Provides a Map for use with a {@link DrilldownPie} chart. Meant to be used in cases where a single default option has majority share, with many or custom alternative options.
+ * Creates a chart where the default option is presented against "other", then clicking on "other" shows the alternative options.
+ * @param value The option the user chose.
+ * @param defaultValue The default option for this chart.
+ * @return A Map that can be returned directly to a {@link DrilldownPie}.
+ * @param The type of the option.
+ */
+ private static Map> isDefaultMap(@Nullable T value, T defaultValue) {
+ return isDefaultMap(value, defaultValue ,defaultValue.toString());
+ }
+
+ /**
+ * Provides a Map for use with a {@link DrilldownPie} chart. Meant to be used in cases where a single default option has majority share, with many or custom alternative options.
+ * Creates a chart where the default option is presented against "other", then clicking on "other" shows the alternative options.
+ * @param value The option the user chose.
+ * @param defaultValue The default option for this chart.
+ * @param defaultLabel The label to use as the default option for this chart
+ * @return A Map that can be returned directly to a {@link DrilldownPie}.
+ * @param The type of the option.
+ */
+ private static Map> isDefaultMap(@Nullable T value, @Nullable T defaultValue, String defaultLabel) {
+ Table table = HashBasedTable.create(1,1);
+ table.put(
+ Objects.equals(value, defaultValue) ? defaultLabel : "other", // upper label
+ String.valueOf(value), // lower label
+ 1 // weight
+ );
+ return table.rowMap();
+ }
+
+ /**
+ * Provides a Map for use with a {@link DrilldownPie} chart. Meant to be used in cases where a single default option has majority share, with many or custom alternative options.
+ * Creates a chart where the default option is presented against "other", then clicking on "other" shows the alternative options.
+ * @param option The {@link Option} from which to pull the current and default values
+ * @return A Map that can be returned directly to a {@link DrilldownPie}.
+ * @param The type of the option.
+ */
+ private static Map> isDefaultMap(Option option) {
+ return isDefaultMap(option.value(), option.defaultValue(), option.defaultValue().toString());
+
+ }
+
+ /**
+ * Provides a Map for use with a {@link DrilldownPie} chart. Meant to be used in cases where a single default option has majority share, with many or custom alternative options.
+ * Creates a chart where the default option is presented against "other", then clicking on "other" shows the alternative options.
+ * @param option The {@link Option} from which to pull the current and default values
+ * @param defaultLabel The label to use as the default option for this chart
+ * @return A Map that can be returned directly to a {@link DrilldownPie}.
+ * @param The type of the option.
+ */
+ private static Map> isDefaultMap(Option option, String defaultLabel) {
+ return isDefaultMap(option.value(), option.defaultValue(), defaultLabel);
+ }
+
+}
diff --git a/src/main/java/org/skriptlang/skript/lang/arithmetic/Operator.java b/src/main/java/org/skriptlang/skript/lang/arithmetic/Operator.java
index f1cc0762aa6..4c93807204c 100644
--- a/src/main/java/org/skriptlang/skript/lang/arithmetic/Operator.java
+++ b/src/main/java/org/skriptlang/skript/lang/arithmetic/Operator.java
@@ -21,7 +21,7 @@
import ch.njol.skript.Skript;
import ch.njol.skript.SkriptAPIException;
import ch.njol.skript.localization.Noun;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.Collections;
diff --git a/src/main/java/org/skriptlang/skript/lang/comparator/Comparators.java b/src/main/java/org/skriptlang/skript/lang/comparator/Comparators.java
index 7ad516030ff..1fc656c7377 100644
--- a/src/main/java/org/skriptlang/skript/lang/comparator/Comparators.java
+++ b/src/main/java/org/skriptlang/skript/lang/comparator/Comparators.java
@@ -22,7 +22,7 @@
import ch.njol.skript.SkriptAPIException;
import ch.njol.skript.util.Utils;
import ch.njol.util.Pair;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.Unmodifiable;
import org.skriptlang.skript.lang.converter.Converter;
import org.skriptlang.skript.lang.converter.ConverterInfo;
diff --git a/src/main/java/org/skriptlang/skript/lang/comparator/ConvertedComparator.java b/src/main/java/org/skriptlang/skript/lang/comparator/ConvertedComparator.java
index cb83d383c95..f8ba918e49e 100644
--- a/src/main/java/org/skriptlang/skript/lang/comparator/ConvertedComparator.java
+++ b/src/main/java/org/skriptlang/skript/lang/comparator/ConvertedComparator.java
@@ -18,7 +18,7 @@
*/
package org.skriptlang.skript.lang.comparator;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.Contract;
import org.skriptlang.skript.lang.converter.Converter;
import org.skriptlang.skript.lang.converter.ConverterInfo;
diff --git a/src/main/java/org/skriptlang/skript/lang/comparator/package-info.java b/src/main/java/org/skriptlang/skript/lang/comparator/package-info.java
index 85014fb6a01..855bbccae90 100644
--- a/src/main/java/org/skriptlang/skript/lang/comparator/package-info.java
+++ b/src/main/java/org/skriptlang/skript/lang/comparator/package-info.java
@@ -16,8 +16,5 @@
*
* Copyright Peter Güttinger, SkriptLang team and contributors
*/
-@NonNullByDefault({DefaultLocation.PARAMETER, DefaultLocation.RETURN_TYPE, DefaultLocation.FIELD})
package org.skriptlang.skript.lang.comparator;
-import org.eclipse.jdt.annotation.DefaultLocation;
-import org.eclipse.jdt.annotation.NonNullByDefault;
diff --git a/src/main/java/org/skriptlang/skript/lang/converter/ChainedConverter.java b/src/main/java/org/skriptlang/skript/lang/converter/ChainedConverter.java
index 55a71c717b3..1416e3be0cf 100644
--- a/src/main/java/org/skriptlang/skript/lang/converter/ChainedConverter.java
+++ b/src/main/java/org/skriptlang/skript/lang/converter/ChainedConverter.java
@@ -18,7 +18,7 @@
*/
package org.skriptlang.skript.lang.converter;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
/**
* A Chained Converter is very similar to a regular {@link Converter}.
diff --git a/src/main/java/org/skriptlang/skript/lang/converter/Converter.java b/src/main/java/org/skriptlang/skript/lang/converter/Converter.java
index 7ffe65f43c5..68762d90cd5 100644
--- a/src/main/java/org/skriptlang/skript/lang/converter/Converter.java
+++ b/src/main/java/org/skriptlang/skript/lang/converter/Converter.java
@@ -18,7 +18,7 @@
*/
package org.skriptlang.skript.lang.converter;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
/**
* Used to convert an object to a different type.
diff --git a/src/main/java/org/skriptlang/skript/lang/converter/Converters.java b/src/main/java/org/skriptlang/skript/lang/converter/Converters.java
index 1f97983fab8..0daeadfc714 100644
--- a/src/main/java/org/skriptlang/skript/lang/converter/Converters.java
+++ b/src/main/java/org/skriptlang/skript/lang/converter/Converters.java
@@ -21,7 +21,7 @@
import ch.njol.skript.Skript;
import ch.njol.skript.SkriptAPIException;
import ch.njol.util.Pair;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.Unmodifiable;
import java.lang.reflect.Array;
diff --git a/src/main/java/org/skriptlang/skript/lang/converter/package-info.java b/src/main/java/org/skriptlang/skript/lang/converter/package-info.java
index e0e05b8a2f5..f5bd3e0d1aa 100644
--- a/src/main/java/org/skriptlang/skript/lang/converter/package-info.java
+++ b/src/main/java/org/skriptlang/skript/lang/converter/package-info.java
@@ -16,8 +16,5 @@
*
* Copyright Peter Güttinger, SkriptLang team and contributors
*/
-@NonNullByDefault({DefaultLocation.PARAMETER, DefaultLocation.RETURN_TYPE, DefaultLocation.FIELD})
package org.skriptlang.skript.lang.converter;
-import org.eclipse.jdt.annotation.DefaultLocation;
-import org.eclipse.jdt.annotation.NonNullByDefault;
diff --git a/src/main/java/org/skriptlang/skript/lang/entry/EntryContainer.java b/src/main/java/org/skriptlang/skript/lang/entry/EntryContainer.java
index c613b7fbffc..91d8fc52ba1 100644
--- a/src/main/java/org/skriptlang/skript/lang/entry/EntryContainer.java
+++ b/src/main/java/org/skriptlang/skript/lang/entry/EntryContainer.java
@@ -21,7 +21,7 @@
import ch.njol.skript.config.Node;
import ch.njol.skript.config.SectionNode;
import ch.njol.skript.lang.parser.ParserInstance;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
diff --git a/src/main/java/org/skriptlang/skript/lang/entry/EntryData.java b/src/main/java/org/skriptlang/skript/lang/entry/EntryData.java
index 1ce59972987..3787a01e74b 100644
--- a/src/main/java/org/skriptlang/skript/lang/entry/EntryData.java
+++ b/src/main/java/org/skriptlang/skript/lang/entry/EntryData.java
@@ -20,7 +20,7 @@
import ch.njol.skript.config.Node;
import ch.njol.skript.config.SectionNode;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
/**
* EntryData is used for defining the different entries of for a {@link SectionNode}.
diff --git a/src/main/java/org/skriptlang/skript/lang/entry/EntryValidator.java b/src/main/java/org/skriptlang/skript/lang/entry/EntryValidator.java
index 942b8e439de..c1966b89aad 100644
--- a/src/main/java/org/skriptlang/skript/lang/entry/EntryValidator.java
+++ b/src/main/java/org/skriptlang/skript/lang/entry/EntryValidator.java
@@ -22,7 +22,7 @@
import ch.njol.skript.Skript;
import ch.njol.skript.config.Node;
import ch.njol.skript.config.SectionNode;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.Collections;
diff --git a/src/main/java/org/skriptlang/skript/lang/entry/KeyValueEntryData.java b/src/main/java/org/skriptlang/skript/lang/entry/KeyValueEntryData.java
index 964b3ae76b3..6953f53d5e2 100644
--- a/src/main/java/org/skriptlang/skript/lang/entry/KeyValueEntryData.java
+++ b/src/main/java/org/skriptlang/skript/lang/entry/KeyValueEntryData.java
@@ -22,7 +22,7 @@
import ch.njol.skript.config.Node;
import ch.njol.skript.config.SimpleNode;
import org.skriptlang.skript.lang.entry.EntryValidator.EntryValidatorBuilder;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
/**
* An entry based on {@link SimpleNode}s containing a key and a value.
diff --git a/src/main/java/org/skriptlang/skript/lang/entry/SectionEntryData.java b/src/main/java/org/skriptlang/skript/lang/entry/SectionEntryData.java
index 2348315fd9e..d38a703b092 100644
--- a/src/main/java/org/skriptlang/skript/lang/entry/SectionEntryData.java
+++ b/src/main/java/org/skriptlang/skript/lang/entry/SectionEntryData.java
@@ -22,7 +22,7 @@
import ch.njol.skript.config.Node;
import ch.njol.skript.config.SectionNode;
import ch.njol.skript.config.SimpleNode;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
/**
* A simple entry data class for handling {@link SectionNode}s.
diff --git a/src/main/java/org/skriptlang/skript/lang/entry/package-info.java b/src/main/java/org/skriptlang/skript/lang/entry/package-info.java
index 58e73d603da..c0480266d1c 100644
--- a/src/main/java/org/skriptlang/skript/lang/entry/package-info.java
+++ b/src/main/java/org/skriptlang/skript/lang/entry/package-info.java
@@ -16,8 +16,5 @@
*
* Copyright Peter Güttinger, SkriptLang team and contributors
*/
-@NonNullByDefault({DefaultLocation.PARAMETER, DefaultLocation.RETURN_TYPE, DefaultLocation.FIELD})
package org.skriptlang.skript.lang.entry;
-import org.eclipse.jdt.annotation.DefaultLocation;
-import org.eclipse.jdt.annotation.NonNullByDefault;
diff --git a/src/main/java/org/skriptlang/skript/lang/entry/util/ExpressionEntryData.java b/src/main/java/org/skriptlang/skript/lang/entry/util/ExpressionEntryData.java
index 356a8e848dd..b69f8b6c7f1 100644
--- a/src/main/java/org/skriptlang/skript/lang/entry/util/ExpressionEntryData.java
+++ b/src/main/java/org/skriptlang/skript/lang/entry/util/ExpressionEntryData.java
@@ -24,7 +24,7 @@
import ch.njol.skript.localization.Message;
import ch.njol.skript.log.ErrorQuality;
import ch.njol.skript.log.ParseLogHandler;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import org.skriptlang.skript.lang.entry.KeyValueEntryData;
/**
diff --git a/src/main/java/org/skriptlang/skript/lang/entry/util/LiteralEntryData.java b/src/main/java/org/skriptlang/skript/lang/entry/util/LiteralEntryData.java
index 43e9932dc81..72bdc474c18 100644
--- a/src/main/java/org/skriptlang/skript/lang/entry/util/LiteralEntryData.java
+++ b/src/main/java/org/skriptlang/skript/lang/entry/util/LiteralEntryData.java
@@ -21,7 +21,7 @@
import ch.njol.skript.lang.ParseContext;
import org.skriptlang.skript.lang.entry.KeyValueEntryData;
import ch.njol.skript.registrations.Classes;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
/**
* A specific {@link KeyValueEntryData} type designed to parse the
diff --git a/src/main/java/org/skriptlang/skript/lang/entry/util/VariableStringEntryData.java b/src/main/java/org/skriptlang/skript/lang/entry/util/VariableStringEntryData.java
index 6a61e3642fa..150e2098f3b 100644
--- a/src/main/java/org/skriptlang/skript/lang/entry/util/VariableStringEntryData.java
+++ b/src/main/java/org/skriptlang/skript/lang/entry/util/VariableStringEntryData.java
@@ -24,7 +24,7 @@
import ch.njol.skript.util.StringMode;
import ch.njol.util.Kleenean;
import org.bukkit.event.Event;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
/**
* A type of {@link KeyValueEntryData} designed to parse its value as a {@link VariableString}.
diff --git a/src/main/java/org/skriptlang/skript/lang/entry/util/package-info.java b/src/main/java/org/skriptlang/skript/lang/entry/util/package-info.java
index f3d29110438..085a26e97bf 100644
--- a/src/main/java/org/skriptlang/skript/lang/entry/util/package-info.java
+++ b/src/main/java/org/skriptlang/skript/lang/entry/util/package-info.java
@@ -16,8 +16,5 @@
*
* Copyright Peter Güttinger, SkriptLang team and contributors
*/
-@NonNullByDefault({DefaultLocation.PARAMETER, DefaultLocation.RETURN_TYPE, DefaultLocation.FIELD})
package org.skriptlang.skript.lang.entry.util;
-import org.eclipse.jdt.annotation.DefaultLocation;
-import org.eclipse.jdt.annotation.NonNullByDefault;
diff --git a/src/main/java/org/skriptlang/skript/lang/experiment/ExperimentRegistry.java b/src/main/java/org/skriptlang/skript/lang/experiment/ExperimentRegistry.java
index 6c05e763ee1..b115f14d57d 100644
--- a/src/main/java/org/skriptlang/skript/lang/experiment/ExperimentRegistry.java
+++ b/src/main/java/org/skriptlang/skript/lang/experiment/ExperimentRegistry.java
@@ -20,7 +20,7 @@
import ch.njol.skript.Skript;
import ch.njol.skript.SkriptAddon;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.NotNull;
import org.skriptlang.skript.lang.script.Script;
diff --git a/src/main/java/org/skriptlang/skript/lang/script/Script.java b/src/main/java/org/skriptlang/skript/lang/script/Script.java
index ed3b1920474..610609b5e09 100644
--- a/src/main/java/org/skriptlang/skript/lang/script/Script.java
+++ b/src/main/java/org/skriptlang/skript/lang/script/Script.java
@@ -19,7 +19,7 @@
package org.skriptlang.skript.lang.script;
import ch.njol.skript.config.Config;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Unmodifiable;
import org.skriptlang.skript.lang.structure.Structure;
diff --git a/src/main/java/org/skriptlang/skript/lang/script/ScriptEvent.java b/src/main/java/org/skriptlang/skript/lang/script/ScriptEvent.java
index 2b647374140..8c7a192183a 100644
--- a/src/main/java/org/skriptlang/skript/lang/script/ScriptEvent.java
+++ b/src/main/java/org/skriptlang/skript/lang/script/ScriptEvent.java
@@ -19,7 +19,7 @@
package org.skriptlang.skript.lang.script;
import ch.njol.skript.lang.parser.ParserInstance;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
/**
* A ScriptEvent is used for listening to and performing actions for different Script events.
diff --git a/src/main/java/org/skriptlang/skript/lang/script/package-info.java b/src/main/java/org/skriptlang/skript/lang/script/package-info.java
index d97829458ca..14d04b37dea 100644
--- a/src/main/java/org/skriptlang/skript/lang/script/package-info.java
+++ b/src/main/java/org/skriptlang/skript/lang/script/package-info.java
@@ -16,8 +16,5 @@
*
* Copyright Peter Güttinger, SkriptLang team and contributors
*/
-@NonNullByDefault({DefaultLocation.PARAMETER, DefaultLocation.RETURN_TYPE, DefaultLocation.FIELD})
package org.skriptlang.skript.lang.script;
-import org.eclipse.jdt.annotation.DefaultLocation;
-import org.eclipse.jdt.annotation.NonNullByDefault;
diff --git a/src/main/java/org/skriptlang/skript/lang/structure/StructureInfo.java b/src/main/java/org/skriptlang/skript/lang/structure/StructureInfo.java
index 9e6532c88a7..773c3212af3 100644
--- a/src/main/java/org/skriptlang/skript/lang/structure/StructureInfo.java
+++ b/src/main/java/org/skriptlang/skript/lang/structure/StructureInfo.java
@@ -19,7 +19,7 @@
package org.skriptlang.skript.lang.structure;
import ch.njol.skript.lang.SyntaxElementInfo;
-import org.eclipse.jdt.annotation.Nullable;
+import org.jetbrains.annotations.Nullable;
import org.skriptlang.skript.lang.entry.EntryValidator;
/**
diff --git a/src/main/java/org/skriptlang/skript/lang/structure/package-info.java b/src/main/java/org/skriptlang/skript/lang/structure/package-info.java
index fd8d0e2d4d0..294a3858862 100644
--- a/src/main/java/org/skriptlang/skript/lang/structure/package-info.java
+++ b/src/main/java/org/skriptlang/skript/lang/structure/package-info.java
@@ -16,8 +16,5 @@
*
* Copyright Peter Güttinger, SkriptLang team and contributors
*/
-@NonNullByDefault({DefaultLocation.PARAMETER, DefaultLocation.RETURN_TYPE, DefaultLocation.FIELD})
package org.skriptlang.skript.lang.structure;
-import org.eclipse.jdt.annotation.DefaultLocation;
-import org.eclipse.jdt.annotation.NonNullByDefault;
diff --git a/src/main/java/org/skriptlang/skript/lang/util/package-info.java b/src/main/java/org/skriptlang/skript/lang/util/package-info.java
index 43ad7f90fae..c48b939796c 100644
--- a/src/main/java/org/skriptlang/skript/lang/util/package-info.java
+++ b/src/main/java/org/skriptlang/skript/lang/util/package-info.java
@@ -16,8 +16,5 @@
*
* Copyright Peter Güttinger, SkriptLang team and contributors
*/
-@NonNullByDefault({DefaultLocation.PARAMETER, DefaultLocation.RETURN_TYPE, DefaultLocation.FIELD})
package org.skriptlang.skript.lang.util;
-import org.eclipse.jdt.annotation.DefaultLocation;
-import org.eclipse.jdt.annotation.NonNullByDefault;
diff --git a/src/main/resources/config.sk b/src/main/resources/config.sk
index ff5e1e9e40a..eb0b295c288 100644
--- a/src/main/resources/config.sk
+++ b/src/main/resources/config.sk
@@ -91,9 +91,9 @@ load default aliases: true
player variable fix: true
-# Whether to enable the player variable fix if a player has rejoined and was reciding inside a variable.
-# Player objects inside a variable(list or normal) are not updated to the new player object
-# A server creates whenever a player rejoins.
+# Whether to enable the player variable fix if a player has rejoined and was residing inside a variable.
+# Player objects inside a variable (list or normal) are not updated to the new player object
+# that a server creates whenever a player rejoins.
# Basically the variable holds the old player object when a player has rejoined thus rendering the variable kinda broken.
# This fix should work around that and whenever a invalid(old) player object is attempted to be get through a variable
# It will check if the player is online and then get the valid(new) player object and update the variable object to that one.
diff --git a/src/main/resources/lang/default.lang b/src/main/resources/lang/default.lang
index a1f63aaac12..9b8b43d9032 100644
--- a/src/main/resources/lang/default.lang
+++ b/src/main/resources/lang/default.lang
@@ -2227,7 +2227,7 @@ attribute types:
generic.scale: generic scale, scale
generic.step_height: generic step height, step height
generic.water_movement_efficiency: generic water movement efficiency, water movement efficiency
- horse_jump_strength: horse jump strength
+ horse.jump_strength: horse jump strength
player.block_break_speed: player block break speed, block break speed
player.block_interaction_range: player block interaction range, block interaction range
player.entity_interaction_range: player entity interaction range, entity interaction range
diff --git a/src/main/resources/lang/dutch.lang b/src/main/resources/lang/dutch.lang
new file mode 100644
index 00000000000..8169cc1286b
--- /dev/null
+++ b/src/main/resources/lang/dutch.lang
@@ -0,0 +1,191 @@
+# Default Dutch language file
+
+# Which version of Skript this language file was written for
+version: @version@
+
+# What null (nothing) should show up as in a string/text
+none:
+
+# -- Skript --
+skript:
+ copyright: ~ gemaakt door & © Peter Güttinger oftewel Njol ~
+ prefix: [Skript]
+ quotes error: Ongeldig gebruik van aanhalingstekens ("). Als je aanhalingstekens wil gebruiken in "aangehaalde tekst", verdubbel ze dan: "".
+ brackets error: Ongeldige hoeveelheid of plaatsing van haakjes. Zorg ervoor dat elke openend haakje een bijbehorend sluitend haakje heeft.
+ invalid reload: Skript mag alleen worden herladen door Bukkits '/reload' of Skripts '/skript reload' commando.
+ no scripts: Er zijn geen scripts gevonden, misschien moet je er een paar schrijven ;)
+ no errors: Alle scripts zijn zonder fouten geladen.
+ scripts loaded: %s scripts zijn geladen met in totaal %s structuren in %s
+ finished loading: Klaar met laden.
+
+# -- Skript command --
+skript command:
+ usage: Gebruiksaanwijzing:
+ help:
+ description: Skripts hoofdcommando
+ help: Toont deze hulpmelding. Gebruik '/skript reload/enable/disable/update' voor meer informatie.
+ reload:
+ description: Herlaadt een specifiek script, alle scripts, de configuratie of alles
+ all: Herlaadt de configuratie, alle alliassenconfiguraties en alle scripts
+ config: Herlaadt de hoofdconfiguratie
+ aliases: Herlaadt de alliassenconfiguratie (aliases-english.zip of plugin jar)
+ scripts: Herlaadt alle scripts
+