summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDico <dico.karssiens@gmail.com>2018-09-27 09:03:28 +0100
committerDico <dico.karssiens@gmail.com>2018-09-27 09:03:28 +0100
commit09aaa9ff725787be4f56986d58e61ee41e3140cb (patch)
tree5f4df15c500194ada3e3b4ab4ccc814894871a89
parentf28e4393db408c44684dd6287cb811a00eeece97 (diff)
More commandlib tweaks
-rw-r--r--dicore3/command/src/main/java/io/dico/dicore/command/Command.java28
-rw-r--r--dicore3/command/src/main/java/io/dico/dicore/command/ExecutionContext.java2
-rw-r--r--dicore3/command/src/main/java/io/dico/dicore/command/RootCommandAddress.java8
-rw-r--r--dicore3/command/src/main/java/io/dico/dicore/command/chat/AbstractChatController.java1
-rw-r--r--dicore3/command/src/main/java/io/dico/dicore/command/chat/Formatting.java278
-rw-r--r--dicore3/command/src/main/java/io/dico/dicore/command/chat/IChatController.java1
-rw-r--r--dicore3/command/src/main/java/io/dico/dicore/command/chat/help/defaults/DefaultPageLayout.java2
-rw-r--r--dicore3/command/src/main/java/io/dico/dicore/command/chat/help/defaults/DescriptionHelpTopic.java2
-rw-r--r--dicore3/command/src/main/java/io/dico/dicore/command/chat/help/defaults/SubcommandsHelpTopic.java2
-rw-r--r--dicore3/command/src/main/java/io/dico/dicore/command/chat/help/defaults/SyntaxHelpTopic.java2
-rw-r--r--dicore3/command/src/main/java/io/dico/dicore/command/parameter/ContextParser.java2
-rw-r--r--dicore3/command/src/main/java/io/dico/dicore/command/predef/DefaultGroupCommand.java23
-rw-r--r--dicore3/core/src/main/java/io/dico/dicore/Formatting.java19
-rw-r--r--src/main/kotlin/io/dico/parcels2/Interactable.kt2
-rw-r--r--src/main/kotlin/io/dico/parcels2/ParcelWorld.kt2
-rw-r--r--src/main/kotlin/io/dico/parcels2/blockvisitor/JobDispatcher.kt2
-rw-r--r--src/main/kotlin/io/dico/parcels2/blockvisitor/RegionTraverser.kt2
-rw-r--r--src/main/kotlin/io/dico/parcels2/command/ParcelCommandBuilder.kt2
-rw-r--r--src/main/kotlin/io/dico/parcels2/command/ParcelTarget.kt2
-rw-r--r--src/main/kotlin/io/dico/parcels2/defaultimpl/DefaultParcelGenerator.kt4
-rw-r--r--src/main/kotlin/io/dico/parcels2/listener/ParcelListeners.kt4
-rw-r--r--src/main/kotlin/io/dico/parcels2/storage/exposed/ExposedBacking.kt2
-rw-r--r--src/main/kotlin/io/dico/parcels2/util/MainThreadDispatcher.kt2
-rw-r--r--src/main/kotlin/io/dico/parcels2/util/ext/Misc.kt3
-rw-r--r--src/main/kotlin/io/dico/parcels2/util/math/Math.kt (renamed from src/main/kotlin/io/dico/parcels2/util/math/ext/Math.kt)2
-rw-r--r--src/main/kotlin/io/dico/parcels2/util/math/Vec3d.kt1
-rw-r--r--src/main/kotlin/io/dico/parcels2/util/math/Vec3i.kt1
27 files changed, 68 insertions, 333 deletions
diff --git a/dicore3/command/src/main/java/io/dico/dicore/command/Command.java b/dicore3/command/src/main/java/io/dico/dicore/command/Command.java
index e7c2e93..e423529 100644
--- a/dicore3/command/src/main/java/io/dico/dicore/command/Command.java
+++ b/dicore3/command/src/main/java/io/dico/dicore/command/Command.java
@@ -91,18 +91,18 @@ public abstract class Command {
* ---- CONTEXT FILTERS ----
* Filter the contexts. For example, if the sender must be a player but it's the console,
* throw a CommandException describing the problem.
- * <p>
- * The index of the first element in contextFilters whose priority is POST_PARAMETERS
- * Computed by {@link #computeContextFilterPostParameterIndex()}
*/
- private transient int contextFilterPostParameterIndex;
+ private transient int postParameterFilterCount = 0;
public Command addContextFilter(IContextFilter contextFilter) {
Objects.requireNonNull(contextFilter);
if (!contextFilters.contains(contextFilter)) {
contextFilters.add(contextFilter);
contextFilters.sort(null);
- computeContextFilterPostParameterIndex();
+
+ if (contextFilter.getPriority().compareTo(Priority.POST_PARAMETERS) >= 0) {
+ postParameterFilterCount++;
+ }
}
return this;
}
@@ -114,19 +114,11 @@ public abstract class Command {
public Command removeContextFilter(IContextFilter contextFilter) {
boolean ret = contextFilters.remove(contextFilter);
if (ret) {
- computeContextFilterPostParameterIndex();
- }
- return this;
- }
-
- private void computeContextFilterPostParameterIndex() {
- List<IContextFilter> contextFilters = this.contextFilters;
- contextFilterPostParameterIndex = 0;
- for (int i = contextFilters.size() - 1; i >= 0; i--) {
- if (contextFilters.get(i).getPriority() != Priority.POST_PARAMETERS) {
- contextFilterPostParameterIndex = i + 1;
+ if (contextFilter.getPriority().compareTo(Priority.POST_PARAMETERS) >= 0) {
+ postParameterFilterCount--;
}
}
+ return this;
}
// ---- CONTROL FLOW IN COMMAND TREES ----
@@ -154,7 +146,7 @@ public abstract class Command {
public void executeWithContext(ExecutionContext context) throws CommandException {
//System.out.println("In Command.execute(sender, caller, buffer)#try{");
int i, n;
- for (i = 0, n = contextFilterPostParameterIndex; i < n; i++) {
+ for (i = 0, n = contextFilters.size() - postParameterFilterCount; i < n; i++) {
contextFilters.get(i).filterContext(context);
}
@@ -183,7 +175,7 @@ public abstract class Command {
public List<String> tabCompleteWithContext(ExecutionContext context, Location location) throws CommandException {
int i, n;
- for (i = 0, n = contextFilterPostParameterIndex; i < n; i++) {
+ for (i = 0, n = contextFilters.size() - postParameterFilterCount; i < n; i++) {
contextFilters.get(i).filterContext(context);
}
diff --git a/dicore3/command/src/main/java/io/dico/dicore/command/ExecutionContext.java b/dicore3/command/src/main/java/io/dico/dicore/command/ExecutionContext.java
index 0608b80..c473166 100644
--- a/dicore3/command/src/main/java/io/dico/dicore/command/ExecutionContext.java
+++ b/dicore3/command/src/main/java/io/dico/dicore/command/ExecutionContext.java
@@ -1,6 +1,6 @@
package io.dico.dicore.command;
-import io.dico.dicore.command.chat.Formatting;
+import io.dico.dicore.Formatting;
import io.dico.dicore.command.parameter.ArgumentBuffer;
import io.dico.dicore.command.parameter.ContextParser;
import io.dico.dicore.command.parameter.Parameter;
diff --git a/dicore3/command/src/main/java/io/dico/dicore/command/RootCommandAddress.java b/dicore3/command/src/main/java/io/dico/dicore/command/RootCommandAddress.java
index c76bd14..aa84b67 100644
--- a/dicore3/command/src/main/java/io/dico/dicore/command/RootCommandAddress.java
+++ b/dicore3/command/src/main/java/io/dico/dicore/command/RootCommandAddress.java
@@ -78,7 +78,9 @@ public class RootCommandAddress extends ModifiableCommandAddress implements ICom
}
private static void debugChildren(ModifiableCommandAddress address) {
- for (ModifiableCommandAddress child : new HashSet<ModifiableCommandAddress>(address.getChildren().values())) {
+ Collection<String> keys = address.getChildrenMainKeys();
+ for (String key : keys) {
+ ChildCommandAddress child = address.getChild(key);
System.out.println(child.getAddress());
debugChildren(child);
}
@@ -180,10 +182,10 @@ public class RootCommandAddress extends ModifiableCommandAddress implements ICom
targetAddress = getCommandTarget(context, buffer);
Command target = targetAddress.getCommand();
- if (target == null || target instanceof DefaultGroupCommand) {
+ if (target == null) {
if (targetAddress.hasHelpCommand()) {
target = targetAddress.getHelpCommand().getCommand();
- } else if (target == null){
+ } else {
return false;
}
}
diff --git a/dicore3/command/src/main/java/io/dico/dicore/command/chat/AbstractChatController.java b/dicore3/command/src/main/java/io/dico/dicore/command/chat/AbstractChatController.java
index 858337a..000c094 100644
--- a/dicore3/command/src/main/java/io/dico/dicore/command/chat/AbstractChatController.java
+++ b/dicore3/command/src/main/java/io/dico/dicore/command/chat/AbstractChatController.java
@@ -1,5 +1,6 @@
package io.dico.dicore.command.chat;
+import io.dico.dicore.Formatting;
import io.dico.dicore.command.CommandException;
import io.dico.dicore.command.EMessageType;
import io.dico.dicore.command.ExecutionContext;
diff --git a/dicore3/command/src/main/java/io/dico/dicore/command/chat/Formatting.java b/dicore3/command/src/main/java/io/dico/dicore/command/chat/Formatting.java
deleted file mode 100644
index 576dfb5..0000000
--- a/dicore3/command/src/main/java/io/dico/dicore/command/chat/Formatting.java
+++ /dev/null
@@ -1,278 +0,0 @@
-package io.dico.dicore.command.chat;
-
-import gnu.trove.map.TCharObjectMap;
-import gnu.trove.map.hash.TCharObjectHashMap;
-
-public final class Formatting implements CharSequence {
- public static final char FORMAT_CHAR = '\u00a7';
- private static final TCharObjectMap<Formatting> singleCharInstances = new TCharObjectHashMap<>(16, .5F, '\0');
-
- public static final Formatting
- BLACK = from('0'),
- DARK_BLUE = from('1'),
- DARL_GREEN = from('2'),
- CYAN = from('3'),
- DARK_RED = from('4'),
- PURPLE = from('5'),
- ORANGE = from('6'),
- GRAY = from('7'),
- DARK_GRAY = from('8'),
- BLUE = from('9'),
- GREEN = from('a'),
- AQUA = from('b'),
- RED = from('c'),
- PINK = from('d'),
- YELLOW = from('e'),
- WHITE = from('f'),
- BOLD = from('l'),
- STRIKETHROUGH = from('m'),
- UNDERLINE = from('n'),
- ITALIC = from('o'),
- MAGIC = from('k'),
- RESET = from('r'),
- EMPTY = from('\0');
-
- public static String stripAll(String value) {
- return stripAll(FORMAT_CHAR, value);
- }
-
- public static String stripAll(char alternateChar, String value) {
- int index = value.indexOf(alternateChar);
- int max;
- if (index == -1 || index == (max = value.length() - 1)) {
- return value;
- }
-
- StringBuilder result = new StringBuilder();
- int from = 0;
- do {
- if (isRecognizedChar(value.charAt(index + 1))) {
- result.append(value, from, index);
- from = index + 2;
- } else {
- result.append(value, from, from = index + 2);
- }
-
- index = value.indexOf(alternateChar, index + 1);
- } while (index != -1 && index != max && from <= max);
-
- if (from <= max) {
- result.append(value, from, value.length());
- }
- return result.toString();
- }
-
- public static String stripFirst(String value) {
- return stripFirst(FORMAT_CHAR, value);
- }
-
- public static String stripFirst(char alternateChar, String value) {
- int index = value.indexOf(alternateChar);
- int max;
- if (index == -1 || index == (max = value.length() - 1)) {
- return value;
- }
-
- StringBuilder result = new StringBuilder(value.length());
- int from = 0;
- if (isRecognizedChar(value.charAt(index + 1))) {
- result.append(value, from, index);
- from = index + 2;
- } else {
- result.append(value, from, from = index + 2);
- }
-
- if (from < max) {
- result.append(value, from, value.length());
- }
- return result.toString();
- }
-
- public static Formatting from(char c) {
- if (isRecognizedChar(c)) {
- c = Character.toLowerCase(c);
- Formatting res = singleCharInstances.get(c);
- if (res == null) {
- singleCharInstances.put(c, res = new Formatting(c));
- }
- return res;
- }
- return EMPTY;
- }
-
- public static Formatting from(String chars) {
- return chars.length() == 1 ? from(chars.charAt(0)) : getFormats(chars, '\0');
- }
-
- public static Formatting getFormats(String input) {
- return getFormats(input, FORMAT_CHAR);
- }
-
- public static Formatting getFormats(String input, char formatChar) {
- return getFormats(input, 0, input.length(), formatChar);
- }
-
- public static Formatting getFormats(String input, int start, int end, char formatChar) {
- if ((start < 0) || (start > end) || (end > input.length())) {
- throw new IndexOutOfBoundsException("start " + start + ", end " + end + ", input.length() " + input.length());
- }
-
- boolean needsFormatChar = formatChar != '\0';
- char[] formats = new char[6];
- // just make sure it's not the same as formatChar
- char previous = (char) (formatChar + 1);
-
- for (int i = start; i < end; i++) {
- char c = input.charAt(i);
-
- if (previous == formatChar || !needsFormatChar) {
- if (isColourChar(c) || isResetChar(c)) {
- formats = new char[6];
- formats[0] = Character.toLowerCase(c);
- } else if (isFormatChar(c)) {
- char format = Character.toLowerCase(c);
- for (int j = 0; j < 6; j++) {
- if (formats[j] == '\0') {
- formats[j] = format;
- break;
- } else if (formats[j] == format) {
- break;
- }
- }
- }
- }
-
- previous = c;
- }
-
- return formats[1] == '\0' ? from(formats[0]) : new Formatting(formats);
- }
-
- public static String translate(String input) {
- return translateChars('&', input);
- }
-
- public static String translateChars(char alternateChar, String input) {
- return translateFormat(alternateChar, FORMAT_CHAR, input);
- }
-
- public static String revert(String input) {
- return revertChars('&', input);
- }
-
- public static String revertChars(char alternateChar, String input) {
- return translateFormat(FORMAT_CHAR, alternateChar, input);
- }
-
- public static String translateFormat(char fromChar, char toChar, String input) {
- if (input == null) {
- return null;
- }
- int n = input.length();
- if (n < 2) {
- return input;
- }
- char[] result = null;
- char previous = input.charAt(0);
- for (int i = 1; i < n; i++) {
- char c = input.charAt(i);
- if (previous == fromChar && isRecognizedChar(c)) {
- if (result == null) {
- result = input.toCharArray();
- }
- result[i - 1] = toChar;
- }
- previous = c;
- }
- return result == null ? input : String.valueOf(result);
- }
-
- public static void translate(StringBuilder input) {
- translateChars('&', input);
- }
-
- public static void translateChars(char alternateChar, StringBuilder input) {
- translateFormat(alternateChar, FORMAT_CHAR, input);
- }
-
- public static void revert(StringBuilder input) {
- revertChars('&', input);
- }
-
- public static void revertChars(char alternateChar, StringBuilder input) {
- translateFormat(FORMAT_CHAR, alternateChar, input);
- }
-
- public static void translateFormat(char fromChar, char toChar, StringBuilder input) {
- if (input == null) {
- return;
- }
- int n = input.length();
- if (n < 2) {
- return;
- }
- char previous = input.charAt(0);
- for (int i = 1; i < n; i++) {
- char c = input.charAt(i);
- if (previous == fromChar && isRecognizedChar(c)) {
- input.setCharAt(i - 1, toChar);
- }
- previous = c;
- }
- }
-
- private static boolean isRecognizedChar(char c) {
- return isColourChar(c) || isFormatChar(c) || isResetChar(c);
- }
-
- private static boolean isColourChar(char c) {
- return "0123456789abcdefABCDEF".indexOf(c) > -1;
- }
-
- private static boolean isResetChar(char c) {
- return c == 'r' || c == 'R';
- }
-
- private static boolean isFormatChar(char c) {
- return "lmnokLMNOK".indexOf(c) > -1;
- }
-
- private final String format;
-
- private Formatting(char[] formats) {
- StringBuilder format = new StringBuilder(12);
- for (char c : formats) {
- if (c != '\0') {
- format.append(FORMAT_CHAR).append(c);
- } else {
- break;
- }
- }
- this.format = format.toString();
- }
-
- private Formatting(char c) {
- this.format = (c != '\0') ? String.valueOf(new char[]{FORMAT_CHAR, c}) : "";
- }
-
- @Override
- public int length() {
- return format.length();
- }
-
- @Override
- public char charAt(int index) {
- return format.charAt(index);
- }
-
- @Override
- public String subSequence(int start, int end) {
- return format.substring(start, end);
- }
-
- @Override
- public String toString() {
- return format;
- }
-
-} \ No newline at end of file
diff --git a/dicore3/command/src/main/java/io/dico/dicore/command/chat/IChatController.java b/dicore3/command/src/main/java/io/dico/dicore/command/chat/IChatController.java
index 271ea20..a514499 100644
--- a/dicore3/command/src/main/java/io/dico/dicore/command/chat/IChatController.java
+++ b/dicore3/command/src/main/java/io/dico/dicore/command/chat/IChatController.java
@@ -1,5 +1,6 @@
package io.dico.dicore.command.chat;
+import io.dico.dicore.Formatting;
import io.dico.dicore.command.CommandException;
import io.dico.dicore.command.EMessageType;
import io.dico.dicore.command.ExecutionContext;
diff --git a/dicore3/command/src/main/java/io/dico/dicore/command/chat/help/defaults/DefaultPageLayout.java b/dicore3/command/src/main/java/io/dico/dicore/command/chat/help/defaults/DefaultPageLayout.java
index e8f9bce..886b7b1 100644
--- a/dicore3/command/src/main/java/io/dico/dicore/command/chat/help/defaults/DefaultPageLayout.java
+++ b/dicore3/command/src/main/java/io/dico/dicore/command/chat/help/defaults/DefaultPageLayout.java
@@ -4,7 +4,7 @@ import io.dico.dicore.command.EMessageType;
import io.dico.dicore.command.ExecutionContext;
import io.dico.dicore.command.ICommandAddress;
import io.dico.dicore.command.ModifiableCommandAddress;
-import io.dico.dicore.command.chat.Formatting;
+import io.dico.dicore.Formatting;
import io.dico.dicore.command.chat.IChatController;
import io.dico.dicore.command.chat.help.IPageBorder;
import io.dico.dicore.command.chat.help.IPageLayout;
diff --git a/dicore3/command/src/main/java/io/dico/dicore/command/chat/help/defaults/DescriptionHelpTopic.java b/dicore3/command/src/main/java/io/dico/dicore/command/chat/help/defaults/DescriptionHelpTopic.java
index fb8de57..ae88ea2 100644
--- a/dicore3/command/src/main/java/io/dico/dicore/command/chat/help/defaults/DescriptionHelpTopic.java
+++ b/dicore3/command/src/main/java/io/dico/dicore/command/chat/help/defaults/DescriptionHelpTopic.java
@@ -4,7 +4,7 @@ import io.dico.dicore.command.Command;
import io.dico.dicore.command.EMessageType;
import io.dico.dicore.command.ExecutionContext;
import io.dico.dicore.command.ICommandAddress;
-import io.dico.dicore.command.chat.Formatting;
+import io.dico.dicore.Formatting;
import io.dico.dicore.command.chat.help.IHelpComponent;
import io.dico.dicore.command.chat.help.IHelpTopic;
import io.dico.dicore.command.chat.help.SimpleHelpComponent;
diff --git a/dicore3/command/src/main/java/io/dico/dicore/command/chat/help/defaults/SubcommandsHelpTopic.java b/dicore3/command/src/main/java/io/dico/dicore/command/chat/help/defaults/SubcommandsHelpTopic.java
index 59912cd..cfa3bb1 100644
--- a/dicore3/command/src/main/java/io/dico/dicore/command/chat/help/defaults/SubcommandsHelpTopic.java
+++ b/dicore3/command/src/main/java/io/dico/dicore/command/chat/help/defaults/SubcommandsHelpTopic.java
@@ -3,7 +3,7 @@ package io.dico.dicore.command.chat.help.defaults;
import io.dico.dicore.command.EMessageType;
import io.dico.dicore.command.ExecutionContext;
import io.dico.dicore.command.ICommandAddress;
-import io.dico.dicore.command.chat.Formatting;
+import io.dico.dicore.Formatting;
import io.dico.dicore.command.chat.help.IHelpComponent;
import io.dico.dicore.command.chat.help.IHelpTopic;
import io.dico.dicore.command.chat.help.SimpleHelpComponent;
diff --git a/dicore3/command/src/main/java/io/dico/dicore/command/chat/help/defaults/SyntaxHelpTopic.java b/dicore3/command/src/main/java/io/dico/dicore/command/chat/help/defaults/SyntaxHelpTopic.java
index 25392c8..d0e3ebe 100644
--- a/dicore3/command/src/main/java/io/dico/dicore/command/chat/help/defaults/SyntaxHelpTopic.java
+++ b/dicore3/command/src/main/java/io/dico/dicore/command/chat/help/defaults/SyntaxHelpTopic.java
@@ -4,7 +4,7 @@ import io.dico.dicore.command.Command;
import io.dico.dicore.command.EMessageType;
import io.dico.dicore.command.ExecutionContext;
import io.dico.dicore.command.ICommandAddress;
-import io.dico.dicore.command.chat.Formatting;
+import io.dico.dicore.Formatting;
import io.dico.dicore.command.chat.help.IHelpComponent;
import io.dico.dicore.command.chat.help.IHelpTopic;
import io.dico.dicore.command.chat.help.SimpleHelpComponent;
diff --git a/dicore3/command/src/main/java/io/dico/dicore/command/parameter/ContextParser.java b/dicore3/command/src/main/java/io/dico/dicore/command/parameter/ContextParser.java
index 8a3f236..3bfcf9b 100644
--- a/dicore3/command/src/main/java/io/dico/dicore/command/parameter/ContextParser.java
+++ b/dicore3/command/src/main/java/io/dico/dicore/command/parameter/ContextParser.java
@@ -105,7 +105,7 @@ public class ContextParser {
requireInput = m_curParamIndex <= m_requiredIndex;
} else if (m_buffer.hasNext()) {
- throw new CommandException("Too many arguments");
+ throw new CommandException("Too many arguments for /" + m_context.getAddress().getAddress());
} else {
m_done = true;
diff --git a/dicore3/command/src/main/java/io/dico/dicore/command/predef/DefaultGroupCommand.java b/dicore3/command/src/main/java/io/dico/dicore/command/predef/DefaultGroupCommand.java
index 6c03d8e..12483cc 100644
--- a/dicore3/command/src/main/java/io/dico/dicore/command/predef/DefaultGroupCommand.java
+++ b/dicore3/command/src/main/java/io/dico/dicore/command/predef/DefaultGroupCommand.java
@@ -6,7 +6,8 @@ import io.dico.dicore.command.IContextFilter;
import org.bukkit.command.CommandSender;
public class DefaultGroupCommand extends PredefinedCommand<DefaultGroupCommand> {
- private static final DefaultGroupCommand instance = new DefaultGroupCommand(false);
+ private static final DefaultGroupCommand instance;
+ private static final IContextFilter noArgumentFilter;
public static DefaultGroupCommand getInstance() {
return instance;
@@ -14,6 +15,7 @@ public class DefaultGroupCommand extends PredefinedCommand<DefaultGroupCommand>
private DefaultGroupCommand(boolean modifiable) {
addContextFilter(IContextFilter.INHERIT_PERMISSIONS);
+ addContextFilter(noArgumentFilter);
this.modifiable = modifiable;
}
@@ -32,4 +34,23 @@ public class DefaultGroupCommand extends PredefinedCommand<DefaultGroupCommand>
return null;
}
+ static {
+ noArgumentFilter = new IContextFilter() {
+ @Override
+ public void filterContext(ExecutionContext context) throws CommandException {
+ if (context.getProcessedBuffer().hasNext()) {
+ throw new CommandException("No such command: /" + context.getAddress().getAddress()
+ + " " + context.getProcessedBuffer().next());
+ }
+ }
+
+ @Override
+ public Priority getPriority() {
+ return Priority.EARLY;
+ }
+ };
+
+ instance = new DefaultGroupCommand(false);
+ }
+
}
diff --git a/dicore3/core/src/main/java/io/dico/dicore/Formatting.java b/dicore3/core/src/main/java/io/dico/dicore/Formatting.java
index 869ec4c..eac6ac5 100644
--- a/dicore3/core/src/main/java/io/dico/dicore/Formatting.java
+++ b/dicore3/core/src/main/java/io/dico/dicore/Formatting.java
@@ -9,12 +9,10 @@
package io.dico.dicore;
-import gnu.trove.map.TCharObjectMap;
-import gnu.trove.map.hash.TCharObjectHashMap;
-
public final class Formatting implements CharSequence {
public static final char FORMAT_CHAR = '\u00a7';
- private static final TCharObjectMap<Formatting> singleCharInstances = new TCharObjectHashMap<>(16, .5F, '\0');
+ private static final String CACHED_CHARS = "0123456789abcdefklmnor";
+ private static final Formatting[] singleCharInstances = new Formatting[CACHED_CHARS.length()];
public static final Formatting
BLACK = from('0'),
@@ -100,9 +98,12 @@ public final class Formatting implements CharSequence {
public static Formatting from(char c) {
if (isRecognizedChar(c)) {
c = Character.toLowerCase(c);
- Formatting res = singleCharInstances.get(c);
+ int index = CACHED_CHARS.indexOf(c);
+ if (index == -1) return EMPTY;
+
+ Formatting res = singleCharInstances[index];
if (res == null) {
- singleCharInstances.put(c, res = new Formatting(c));
+ singleCharInstances[index] = res = new Formatting(c);
}
return res;
}
@@ -229,13 +230,13 @@ public final class Formatting implements CharSequence {
previous = c;
}
}
-
+
private static boolean isRecognizedChar(char c) {
return isColourChar(c) || isFormatChar(c) || isResetChar(c);
}
private static boolean isColourChar(char c) {
- return "0123456789abcdefABCDEF".indexOf(c) > -1;
+ return "0123456789abcdefABCDEF".indexOf(c) >= 0;
}
private static boolean isResetChar(char c) {
@@ -243,7 +244,7 @@ public final class Formatting implements CharSequence {
}
private static boolean isFormatChar(char c) {
- return "lmnokLMNOK".indexOf(c) > -1;
+ return "klmnoKLMNO".indexOf(c) >= 0;
}
private final String format;
diff --git a/src/main/kotlin/io/dico/parcels2/Interactable.kt b/src/main/kotlin/io/dico/parcels2/Interactable.kt
index 825be94..c301340 100644
--- a/src/main/kotlin/io/dico/parcels2/Interactable.kt
+++ b/src/main/kotlin/io/dico/parcels2/Interactable.kt
@@ -1,6 +1,6 @@
package io.dico.parcels2
-import io.dico.parcels2.util.math.ext.ceilDiv
+import io.dico.parcels2.util.math.ceilDiv
import io.dico.parcels2.util.ext.getMaterialsWithWoodTypePrefix
import org.bukkit.Material
import java.util.EnumMap
diff --git a/src/main/kotlin/io/dico/parcels2/ParcelWorld.kt b/src/main/kotlin/io/dico/parcels2/ParcelWorld.kt
index 87e4c68..a3c6c24 100644
--- a/src/main/kotlin/io/dico/parcels2/ParcelWorld.kt
+++ b/src/main/kotlin/io/dico/parcels2/ParcelWorld.kt
@@ -3,7 +3,7 @@ package io.dico.parcels2
import io.dico.parcels2.options.RuntimeWorldOptions
import io.dico.parcels2.storage.Storage
import io.dico.parcels2.util.math.Vec2i
-import io.dico.parcels2.util.math.ext.floor
+import io.dico.parcels2.util.math.floor
import org.bukkit.Location
import org.bukkit.World
import org.bukkit.block.Block
diff --git a/src/main/kotlin/io/dico/parcels2/blockvisitor/JobDispatcher.kt b/src/main/kotlin/io/dico/parcels2/blockvisitor/JobDispatcher.kt
index 702a680..c6bcacc 100644
--- a/src/main/kotlin/io/dico/parcels2/blockvisitor/JobDispatcher.kt
+++ b/src/main/kotlin/io/dico/parcels2/blockvisitor/JobDispatcher.kt
@@ -2,7 +2,7 @@ package io.dico.parcels2.blockvisitor
import io.dico.parcels2.ParcelsPlugin
import io.dico.parcels2.logger
-import io.dico.parcels2.util.math.ext.clampMin
+import io.dico.parcels2.util.math.clampMin
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.CoroutineStart.LAZY
diff --git a/src/main/kotlin/io/dico/parcels2/blockvisitor/RegionTraverser.kt b/src/main/kotlin/io/dico/parcels2/blockvisitor/RegionTraverser.kt
index bd00407..dc8ac28 100644
--- a/src/main/kotlin/io/dico/parcels2/blockvisitor/RegionTraverser.kt
+++ b/src/main/kotlin/io/dico/parcels2/blockvisitor/RegionTraverser.kt
@@ -3,7 +3,7 @@ package io.dico.parcels2.blockvisitor
import io.dico.parcels2.util.math.Dimension
import io.dico.parcels2.util.math.Region
import io.dico.parcels2.util.math.Vec3i
-import io.dico.parcels2.util.math.ext.clampMax
+import io.dico.parcels2.util.math.clampMax
private typealias Scope = SequenceScope<Vec3i>
diff --git a/src/main/kotlin/io/dico/parcels2/command/ParcelCommandBuilder.kt b/src/main/kotlin/io/dico/parcels2/command/ParcelCommandBuilder.kt
index 891988c..6a604c3 100644
--- a/src/main/kotlin/io/dico/parcels2/command/ParcelCommandBuilder.kt
+++ b/src/main/kotlin/io/dico/parcels2/command/ParcelCommandBuilder.kt
@@ -88,7 +88,7 @@ private fun generateCommands(address: ICommandAddress, vararg names: String) {
while (addresses.isNotEmpty()) {
val cur = addresses.poll()
- addresses.addAll(cur.children.values.distinct())
+ cur.childrenMainKeys.mapTo(addresses) { cur.getChild(it) }
if (cur.hasCommand()) {
ReflectiveRegistration.generateCommands(cur, names)
}
diff --git a/src/main/kotlin/io/dico/parcels2/command/ParcelTarget.kt b/src/main/kotlin/io/dico/parcels2/command/ParcelTarget.kt
index 05a10bd..f4d051e 100644
--- a/src/main/kotlin/io/dico/parcels2/command/ParcelTarget.kt
+++ b/src/main/kotlin/io/dico/parcels2/command/ParcelTarget.kt
@@ -17,7 +17,7 @@ import io.dico.parcels2.command.ParcelTarget.TargetKind.Companion.PREFER_OWNED_F
import io.dico.parcels2.command.ParcelTarget.TargetKind.Companion.REAL
import io.dico.parcels2.storage.Storage
import io.dico.parcels2.util.math.Vec2i
-import io.dico.parcels2.util.math.ext.floor
+import io.dico.parcels2.util.math.floor
import org.bukkit.command.CommandSender
import org.bukkit.entity.Player
diff --git a/src/main/kotlin/io/dico/parcels2/defaultimpl/DefaultParcelGenerator.kt b/src/main/kotlin/io/dico/parcels2/defaultimpl/DefaultParcelGenerator.kt
index 25d76e3..51671d4 100644
--- a/src/main/kotlin/io/dico/parcels2/defaultimpl/DefaultParcelGenerator.kt
+++ b/src/main/kotlin/io/dico/parcels2/defaultimpl/DefaultParcelGenerator.kt
@@ -6,8 +6,8 @@ import io.dico.parcels2.options.DefaultGeneratorOptions
import io.dico.parcels2.util.math.Region
import io.dico.parcels2.util.math.Vec2i
import io.dico.parcels2.util.math.Vec3i
-import io.dico.parcels2.util.math.ext.even
-import io.dico.parcels2.util.math.ext.umod
+import io.dico.parcels2.util.math.even
+import io.dico.parcels2.util.math.umod
import io.dico.parcels2.util.math.get
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.CoroutineStart.UNDISPATCHED
diff --git a/src/main/kotlin/io/dico/parcels2/listener/ParcelListeners.kt b/src/main/kotlin/io/dico/parcels2/listener/ParcelListeners.kt
index ff96536..94fca4b 100644
--- a/src/main/kotlin/io/dico/parcels2/listener/ParcelListeners.kt
+++ b/src/main/kotlin/io/dico/parcels2/listener/ParcelListeners.kt
@@ -10,8 +10,8 @@ import io.dico.parcels2.util.ext.*
import io.dico.parcels2.util.math.Dimension
import io.dico.parcels2.util.math.Vec3d
import io.dico.parcels2.util.math.Vec3i
-import io.dico.parcels2.util.math.ext.clampMax
-import io.dico.parcels2.util.math.ext.clampMin
+import io.dico.parcels2.util.math.clampMax
+import io.dico.parcels2.util.math.clampMin
import org.bukkit.Location
import org.bukkit.Material.*
import org.bukkit.World
diff --git a/src/main/kotlin/io/dico/parcels2/storage/exposed/ExposedBacking.kt b/src/main/kotlin/io/dico/parcels2/storage/exposed/ExposedBacking.kt
index e3ed21b..fa68338 100644
--- a/src/main/kotlin/io/dico/parcels2/storage/exposed/ExposedBacking.kt
+++ b/src/main/kotlin/io/dico/parcels2/storage/exposed/ExposedBacking.kt
@@ -6,7 +6,7 @@ import com.zaxxer.hikari.HikariDataSource
import io.dico.parcels2.*
import io.dico.parcels2.PlayerProfile.Star.name
import io.dico.parcels2.storage.*
-import io.dico.parcels2.util.math.ext.clampMax
+import io.dico.parcels2.util.math.clampMax
import io.dico.parcels2.util.ext.synchronized
import kotlinx.coroutines.*
import kotlinx.coroutines.channels.ArrayChannel
diff --git a/src/main/kotlin/io/dico/parcels2/util/MainThreadDispatcher.kt b/src/main/kotlin/io/dico/parcels2/util/MainThreadDispatcher.kt
index ce1bf0f..3eb2e81 100644
--- a/src/main/kotlin/io/dico/parcels2/util/MainThreadDispatcher.kt
+++ b/src/main/kotlin/io/dico/parcels2/util/MainThreadDispatcher.kt
@@ -36,7 +36,7 @@ fun MainThreadDispatcher(plugin: Plugin): MainThreadDispatcher {
with (continuation) { resumeUndispatched(Unit) }
}
- val millis = TimeUnit.MILLISECONDS.convert(time, unit)
+ val millis = unit.toMillis(time)
plugin.server.scheduler.runTaskLater(plugin, task, (millis + 25) / 50 - 1)
}
}
diff --git a/src/main/kotlin/io/dico/parcels2/util/ext/Misc.kt b/src/main/kotlin/io/dico/parcels2/util/ext/Misc.kt
index a826687..75aba35 100644
--- a/src/main/kotlin/io/dico/parcels2/util/ext/Misc.kt
+++ b/src/main/kotlin/io/dico/parcels2/util/ext/Misc.kt
@@ -2,10 +2,7 @@ package io.dico.parcels2.util.ext
import io.dico.dicore.Formatting
import io.dico.parcels2.logger
-import org.bukkit.Bukkit
-import org.bukkit.OfflinePlayer
import java.io.File
-import java.util.UUID
fun File.tryCreate(): Boolean {
if (exists()) {
diff --git a/src/main/kotlin/io/dico/parcels2/util/math/ext/Math.kt b/src/main/kotlin/io/dico/parcels2/util/math/Math.kt
index 1211894..12c3e9f 100644
--- a/src/main/kotlin/io/dico/parcels2/util/math/ext/Math.kt
+++ b/src/main/kotlin/io/dico/parcels2/util/math/Math.kt
@@ -1,4 +1,4 @@
-package io.dico.parcels2.util.math.ext
+package io.dico.parcels2.util.math
fun Double.floor(): Int {
val down = toInt()
diff --git a/src/main/kotlin/io/dico/parcels2/util/math/Vec3d.kt b/src/main/kotlin/io/dico/parcels2/util/math/Vec3d.kt
index 45e6216..787f46c 100644
--- a/src/main/kotlin/io/dico/parcels2/util/math/Vec3d.kt
+++ b/src/main/kotlin/io/dico/parcels2/util/math/Vec3d.kt
@@ -1,6 +1,5 @@
package io.dico.parcels2.util.math
-import io.dico.parcels2.util.math.ext.floor
import org.bukkit.Location
import kotlin.math.sqrt
diff --git a/src/main/kotlin/io/dico/parcels2/util/math/Vec3i.kt b/src/main/kotlin/io/dico/parcels2/util/math/Vec3i.kt
index 418fd0f..a721afa 100644
--- a/src/main/kotlin/io/dico/parcels2/util/math/Vec3i.kt
+++ b/src/main/kotlin/io/dico/parcels2/util/math/Vec3i.kt
@@ -1,6 +1,5 @@
package io.dico.parcels2.util.math
-import io.dico.parcels2.util.math.ext.clampMax
import org.bukkit.Location
import org.bukkit.World
import org.bukkit.block.Block