From 30c5a0d9cdf4e7b4bcb252d04ac7847b791e1c77 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Fri, 13 Aug 2021 13:21:46 -0400 Subject: [PATCH] CHATTY --- .../com/volmit/iris/core/ProjectManager.java | 11 +- .../iris/core/decrees/CMDIrisStudio.java | 27 ++++- .../volmit/iris/core/project/IrisProject.java | 6 +- .../iris/util/decree/DecreeContext.java | 1 + .../iris/util/decree/DecreeExecutor.java | 12 +++ .../iris/util/decree/DecreeParameter.java | 17 +++ .../util/decree/DecreeParameterHandler.java | 10 ++ .../iris/util/decree/annotations/Decree.java | 6 ++ .../util/decree/handlers/BiomeHandler.java | 7 ++ .../util/decree/handlers/ByteHandler.java | 7 ++ .../decree/handlers/DimensionHandler.java | 6 ++ .../util/decree/handlers/DoubleHandler.java | 8 ++ .../util/decree/handlers/FloatHandler.java | 8 ++ .../util/decree/handlers/IntegerHandler.java | 8 ++ .../util/decree/handlers/LongHandler.java | 7 ++ .../util/decree/handlers/PlayerHandler.java | 6 ++ .../util/decree/handlers/RegionHandler.java | 6 ++ .../util/decree/handlers/ShortHandler.java | 7 ++ .../util/decree/handlers/StringHandler.java | 8 ++ .../util/decree/handlers/WorldHandler.java | 6 ++ .../decree/virtual/VirtualDecreeCommand.java | 21 +++- .../volmit/iris/util/plugin/VolmitSender.java | 101 +++++++++++++++++- 22 files changed, 282 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/ProjectManager.java b/src/main/java/com/volmit/iris/core/ProjectManager.java index 483e37ac7..fb90ce471 100644 --- a/src/main/java/com/volmit/iris/core/ProjectManager.java +++ b/src/main/java/com/volmit/iris/core/ProjectManager.java @@ -322,9 +322,14 @@ public class ProjectManager { return activeProject != null && activeProject.isOpen(); } + public void open(VolmitSender sender, String dimm) { + open(sender, 1337, dimm); + } + + public void open(VolmitSender sender, long seed, String dimm) { try { - open(sender, dimm, () -> + open(sender,seed, dimm, () -> { if (sender.isPlayer()) { } @@ -336,14 +341,14 @@ public class ProjectManager { } } - public void open(VolmitSender sender, String dimm, Runnable onDone) throws IrisException { + public void open(VolmitSender sender, long seed, String dimm, Runnable onDone) throws IrisException { if (isProjectOpen()) { close(); } IrisProject project = new IrisProject(new File(getWorkspaceFolder(), dimm)); activeProject = project; - project.open(sender, onDone); + project.open(sender, seed, onDone); } public File getWorkspaceFolder(String... sub) { diff --git a/src/main/java/com/volmit/iris/core/decrees/CMDIrisStudio.java b/src/main/java/com/volmit/iris/core/decrees/CMDIrisStudio.java index 41dc6c8e0..ed71b7620 100644 --- a/src/main/java/com/volmit/iris/core/decrees/CMDIrisStudio.java +++ b/src/main/java/com/volmit/iris/core/decrees/CMDIrisStudio.java @@ -18,19 +18,36 @@ package com.volmit.iris.core.decrees; +import com.volmit.iris.Iris; import com.volmit.iris.engine.object.dimensional.IrisDimension; import com.volmit.iris.util.decree.DecreeExecutor; import com.volmit.iris.util.decree.annotations.Decree; import com.volmit.iris.util.decree.annotations.Param; +import com.volmit.iris.util.format.C; -@Decree(name = "studio", aliases = {"std", "s"}, description = "Studio Commands") +@Decree(name = "studio", aliases = {"std", "s"}, description = "Studio Commands", studio = true) public class CMDIrisStudio implements DecreeExecutor { - @Decree(description = "Open a new studio world", aliases = "o") + @Decree(description = "Open a new studio world", aliases = "o", sync = true) public void open( - @Param(name = "dimension", defaultValue = "overworld", aliases = "dim") - IrisDimension dimension) + @Param(name = "dimension", defaultValue = "overworld", aliases = "dim", required = true) + IrisDimension dimension, + @Param(name = "seed", defaultValue = "1337", aliases = "s") + long seed) { - sender().sendMessage(message + "!"); + Iris.proj.open(sender(), dimension.getLoadKey()); + } + + @Decree(description = "Close an open studio project", aliases = "x", sync = true) + public void close() + { + if (!Iris.proj.isProjectOpen()) { + sender().sendMessage(C.RED + "No open studio projects."); + return; + } + + Iris.proj.getActiveProject().getActiveProvider().getTarget().getWorld().evacuate(); + Iris.proj.close(); + sender().sendMessage(C.YELLOW + "Project Closed"); } } diff --git a/src/main/java/com/volmit/iris/core/project/IrisProject.java b/src/main/java/com/volmit/iris/core/project/IrisProject.java index 2c584e668..77bfa184d 100644 --- a/src/main/java/com/volmit/iris/core/project/IrisProject.java +++ b/src/main/java/com/volmit/iris/core/project/IrisProject.java @@ -98,12 +98,12 @@ public class IrisProject { } public void open(VolmitSender sender) throws IrisException { - open(sender, () -> + open(sender, 1337, () -> { }); } - public void open(VolmitSender sender, Runnable onDone) throws IrisException { + public void open(VolmitSender sender, long seed, Runnable onDone) throws IrisException { if (isOpen()) { close(); } @@ -171,7 +171,7 @@ public class IrisProject { J.a(() -> activeProvider = (PlatformChunkGenerator) IrisToolbelt.createWorld() - .seed(1337) + .seed(seed) .sender(sender) .studio(true) .name("iris/" + UUID.randomUUID()) diff --git a/src/main/java/com/volmit/iris/util/decree/DecreeContext.java b/src/main/java/com/volmit/iris/util/decree/DecreeContext.java index 82a9ebdc9..1bd3a139a 100644 --- a/src/main/java/com/volmit/iris/util/decree/DecreeContext.java +++ b/src/main/java/com/volmit/iris/util/decree/DecreeContext.java @@ -18,6 +18,7 @@ package com.volmit.iris.util.decree; +import com.volmit.iris.Iris; import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.plugin.VolmitSender; import com.volmit.iris.util.scheduling.ChronoLatch; diff --git a/src/main/java/com/volmit/iris/util/decree/DecreeExecutor.java b/src/main/java/com/volmit/iris/util/decree/DecreeExecutor.java index 57c73514d..464c0f7cc 100644 --- a/src/main/java/com/volmit/iris/util/decree/DecreeExecutor.java +++ b/src/main/java/com/volmit/iris/util/decree/DecreeExecutor.java @@ -18,6 +18,8 @@ package com.volmit.iris.util.decree; +import com.volmit.iris.core.tools.IrisToolbelt; +import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.util.plugin.VolmitSender; public interface DecreeExecutor { @@ -26,6 +28,16 @@ public interface DecreeExecutor { return DecreeContext.get(); } + default Engine engine() + { + if(sender().isPlayer()) + { + return IrisToolbelt.access(sender().player().getWorld()).getEngine(); + } + + return null; + } + default T get(T v, T ifUndefined) { return v == null ? ifUndefined : v; diff --git a/src/main/java/com/volmit/iris/util/decree/DecreeParameter.java b/src/main/java/com/volmit/iris/util/decree/DecreeParameter.java index 75034f3ad..85376f295 100644 --- a/src/main/java/com/volmit/iris/util/decree/DecreeParameter.java +++ b/src/main/java/com/volmit/iris/util/decree/DecreeParameter.java @@ -82,4 +82,21 @@ public class DecreeParameter { public Object getDefaultValue() throws DecreeParsingException, DecreeWhichException { return param.defaultValue().isEmpty() ? null : getHandler().parse(param.defaultValue()); } + + public boolean hasDefault() { + return !param.defaultValue().isEmpty(); + } + + public String example() { + KList ff = getHandler().getPossibilities(); + ff = ff != null ? ff : new KList<>(); + KList f = ff.convert((i) -> getHandler().toStringForce(i)); + if(f.isEmpty()) + { + f = new KList<>(); + f.add(getHandler().getRandomDefault()); + } + + return f.getRandom(); + } } diff --git a/src/main/java/com/volmit/iris/util/decree/DecreeParameterHandler.java b/src/main/java/com/volmit/iris/util/decree/DecreeParameterHandler.java index 7aae1b91d..4b1091867 100644 --- a/src/main/java/com/volmit/iris/util/decree/DecreeParameterHandler.java +++ b/src/main/java/com/volmit/iris/util/decree/DecreeParameterHandler.java @@ -37,6 +37,11 @@ public interface DecreeParameterHandler { */ String toString(T t); + default String toStringForce(Object t) + { + return toString((T)t); + } + /** * Should parse a String into the designated type * @param in The string to parse @@ -90,4 +95,9 @@ public interface DecreeParameterHandler { return matches; } + + default String getRandomDefault() + { + return "NOEXAMPLE"; + } } diff --git a/src/main/java/com/volmit/iris/util/decree/annotations/Decree.java b/src/main/java/com/volmit/iris/util/decree/annotations/Decree.java index 02987adec..5d569ad1b 100644 --- a/src/main/java/com/volmit/iris/util/decree/annotations/Decree.java +++ b/src/main/java/com/volmit/iris/util/decree/annotations/Decree.java @@ -36,6 +36,12 @@ public @interface Decree { */ String name() default ""; + /** + * Only allow if studio mode is enabled + * @return defaults to false + */ + boolean studio() default false; + boolean sync() default false; /** diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/BiomeHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/BiomeHandler.java index e3af00151..1409cf14e 100644 --- a/src/main/java/com/volmit/iris/util/decree/handlers/BiomeHandler.java +++ b/src/main/java/com/volmit/iris/util/decree/handlers/BiomeHandler.java @@ -27,6 +27,7 @@ import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.decree.DecreeParameterHandler; import com.volmit.iris.util.decree.exceptions.DecreeParsingException; import com.volmit.iris.util.decree.exceptions.DecreeWhichException; +import com.volmit.iris.util.math.RNG; import java.io.File; @@ -88,4 +89,10 @@ public class BiomeHandler implements DecreeParameterHandler { public boolean supports(Class type) { return type.equals(IrisBiome.class); } + + @Override + public String getRandomDefault() + { + return "biome"; + } } diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/ByteHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/ByteHandler.java index d61e368a4..1fee2277b 100644 --- a/src/main/java/com/volmit/iris/util/decree/handlers/ByteHandler.java +++ b/src/main/java/com/volmit/iris/util/decree/handlers/ByteHandler.java @@ -21,6 +21,7 @@ package com.volmit.iris.util.decree.handlers; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.decree.DecreeParameterHandler; import com.volmit.iris.util.decree.exceptions.DecreeParsingException; +import com.volmit.iris.util.math.RNG; public class ByteHandler implements DecreeParameterHandler { @Override @@ -50,4 +51,10 @@ public class ByteHandler implements DecreeParameterHandler { public boolean supports(Class type) { return type.equals(Byte.class) || type.equals(byte.class); } + + @Override + public String getRandomDefault() + { + return RNG.r.i(0, Byte.MAX_VALUE) + ""; + } } diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/DimensionHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/DimensionHandler.java index 567149292..bb5aa88fa 100644 --- a/src/main/java/com/volmit/iris/util/decree/handlers/DimensionHandler.java +++ b/src/main/java/com/volmit/iris/util/decree/handlers/DimensionHandler.java @@ -89,4 +89,10 @@ public class DimensionHandler implements DecreeParameterHandler { public boolean supports(Class type) { return type.equals(IrisDimension.class); } + + @Override + public String getRandomDefault() + { + return "dimension"; + } } diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/DoubleHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/DoubleHandler.java index 43db64528..45c4c7b92 100644 --- a/src/main/java/com/volmit/iris/util/decree/handlers/DoubleHandler.java +++ b/src/main/java/com/volmit/iris/util/decree/handlers/DoubleHandler.java @@ -21,6 +21,8 @@ package com.volmit.iris.util.decree.handlers; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.decree.DecreeParameterHandler; import com.volmit.iris.util.decree.exceptions.DecreeParsingException; +import com.volmit.iris.util.format.Form; +import com.volmit.iris.util.math.RNG; public class DoubleHandler implements DecreeParameterHandler { @Override @@ -50,4 +52,10 @@ public class DoubleHandler implements DecreeParameterHandler { public String toString(Double f) { return f.toString(); } + + @Override + public String getRandomDefault() + { + return Form.f(RNG.r.d(0, 99.99), 1) + ""; + } } diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/FloatHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/FloatHandler.java index ef107f3d0..27f127f80 100644 --- a/src/main/java/com/volmit/iris/util/decree/handlers/FloatHandler.java +++ b/src/main/java/com/volmit/iris/util/decree/handlers/FloatHandler.java @@ -21,6 +21,8 @@ package com.volmit.iris.util.decree.handlers; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.decree.DecreeParameterHandler; import com.volmit.iris.util.decree.exceptions.DecreeParsingException; +import com.volmit.iris.util.format.Form; +import com.volmit.iris.util.math.RNG; public class FloatHandler implements DecreeParameterHandler { @Override @@ -50,4 +52,10 @@ public class FloatHandler implements DecreeParameterHandler { public String toString(Float f) { return f.toString(); } + + @Override + public String getRandomDefault() + { + return Form.f(RNG.r.d(0, 99.99), 1) + ""; + } } diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/IntegerHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/IntegerHandler.java index 09a1a86b3..b9bb6f983 100644 --- a/src/main/java/com/volmit/iris/util/decree/handlers/IntegerHandler.java +++ b/src/main/java/com/volmit/iris/util/decree/handlers/IntegerHandler.java @@ -21,6 +21,8 @@ package com.volmit.iris.util.decree.handlers; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.decree.DecreeParameterHandler; import com.volmit.iris.util.decree.exceptions.DecreeParsingException; +import com.volmit.iris.util.format.Form; +import com.volmit.iris.util.math.RNG; public class IntegerHandler implements DecreeParameterHandler { @Override @@ -50,4 +52,10 @@ public class IntegerHandler implements DecreeParameterHandler { public String toString(Integer f) { return f.toString(); } + + @Override + public String getRandomDefault() + { + return RNG.r.i(0, 99) + ""; + } } diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/LongHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/LongHandler.java index 69ff82222..1d7085a16 100644 --- a/src/main/java/com/volmit/iris/util/decree/handlers/LongHandler.java +++ b/src/main/java/com/volmit/iris/util/decree/handlers/LongHandler.java @@ -21,6 +21,7 @@ package com.volmit.iris.util.decree.handlers; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.decree.DecreeParameterHandler; import com.volmit.iris.util.decree.exceptions.DecreeParsingException; +import com.volmit.iris.util.math.RNG; public class LongHandler implements DecreeParameterHandler { @Override @@ -50,4 +51,10 @@ public class LongHandler implements DecreeParameterHandler { public String toString(Long f) { return f.toString(); } + + @Override + public String getRandomDefault() + { + return RNG.r.i(0, 99) + ""; + } } diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/PlayerHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/PlayerHandler.java index 5045ea822..5f0e395d6 100644 --- a/src/main/java/com/volmit/iris/util/decree/handlers/PlayerHandler.java +++ b/src/main/java/com/volmit/iris/util/decree/handlers/PlayerHandler.java @@ -67,4 +67,10 @@ public class PlayerHandler implements DecreeParameterHandler { public boolean supports(Class type) { return type.equals(Player.class); } + + @Override + public String getRandomDefault() + { + return "playername"; + } } diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/RegionHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/RegionHandler.java index 452fbf957..58dd64757 100644 --- a/src/main/java/com/volmit/iris/util/decree/handlers/RegionHandler.java +++ b/src/main/java/com/volmit/iris/util/decree/handlers/RegionHandler.java @@ -87,4 +87,10 @@ public class RegionHandler implements DecreeParameterHandler { public boolean supports(Class type) { return type.equals(IrisRegion.class); } + + @Override + public String getRandomDefault() + { + return "region"; + } } diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/ShortHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/ShortHandler.java index ad7714bfe..6fb6d6ce4 100644 --- a/src/main/java/com/volmit/iris/util/decree/handlers/ShortHandler.java +++ b/src/main/java/com/volmit/iris/util/decree/handlers/ShortHandler.java @@ -21,6 +21,7 @@ package com.volmit.iris.util.decree.handlers; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.decree.DecreeParameterHandler; import com.volmit.iris.util.decree.exceptions.DecreeParsingException; +import com.volmit.iris.util.math.RNG; public class ShortHandler implements DecreeParameterHandler { @Override @@ -50,4 +51,10 @@ public class ShortHandler implements DecreeParameterHandler { public String toString(Short f) { return f.toString(); } + + @Override + public String getRandomDefault() + { + return RNG.r.i(0, 99) + ""; + } } diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/StringHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/StringHandler.java index 27e7ee567..501b446cc 100644 --- a/src/main/java/com/volmit/iris/util/decree/handlers/StringHandler.java +++ b/src/main/java/com/volmit/iris/util/decree/handlers/StringHandler.java @@ -21,6 +21,7 @@ package com.volmit.iris.util.decree.handlers; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.decree.DecreeParameterHandler; import com.volmit.iris.util.decree.exceptions.DecreeParsingException; +import com.volmit.iris.util.math.RNG; /** * Abstraction can sometimes breed stupidity @@ -45,4 +46,11 @@ public class StringHandler implements DecreeParameterHandler { public boolean supports(Class type) { return type.equals(String.class); } + + @Override + public String getRandomDefault() + { + return new KList().qadd("text").qadd("string") + .qadd("blah").qadd("derp").qadd("yolo").getRandom(); + } } diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/WorldHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/WorldHandler.java index b3f437799..f82e9709c 100644 --- a/src/main/java/com/volmit/iris/util/decree/handlers/WorldHandler.java +++ b/src/main/java/com/volmit/iris/util/decree/handlers/WorldHandler.java @@ -67,4 +67,10 @@ public class WorldHandler implements DecreeParameterHandler { public boolean supports(Class type) { return type.equals(World.class); } + + @Override + public String getRandomDefault() + { + return "world"; + } } diff --git a/src/main/java/com/volmit/iris/util/decree/virtual/VirtualDecreeCommand.java b/src/main/java/com/volmit/iris/util/decree/virtual/VirtualDecreeCommand.java index f3139a0a7..37b93c194 100644 --- a/src/main/java/com/volmit/iris/util/decree/virtual/VirtualDecreeCommand.java +++ b/src/main/java/com/volmit/iris/util/decree/virtual/VirtualDecreeCommand.java @@ -19,6 +19,7 @@ package com.volmit.iris.util.decree.virtual; import com.volmit.iris.Iris; +import com.volmit.iris.core.IrisSettings; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.decree.DecreeContext; @@ -82,10 +83,11 @@ public class VirtualDecreeCommand { if(childRoot == null) { - i.set(v, i.getType().getConstructor().newInstance()); + childRoot = i.getType().getConstructor().newInstance(); + i.set(v, childRoot); } - c.getNodes().add(createRoot(c, v)); + c.getNodes().add(createRoot(c, childRoot)); } for(Method i : v.getClass().getDeclaredMethods()) @@ -120,11 +122,20 @@ public class VirtualDecreeCommand { return "/" + n.reverse().qadd(getName()).toString(" "); } + public String getParentPath() + { + return getParent().getPath(); + } + public String getName() { return isNode() ? getNode().getName() : getType().getDeclaredAnnotation(Decree.class).name(); } + private boolean isStudio() { + return isNode() ? getNode().getDecree().studio() : getType().getDeclaredAnnotation(Decree.class).studio(); + } + public String getDescription() { return isNode() ? getNode().getDescription() : getType().getDeclaredAnnotation(Decree.class).description(); @@ -262,6 +273,12 @@ public class VirtualDecreeCommand { public boolean invoke(VolmitSender sender, KList args, KList skip) { + if(isStudio() && !IrisSettings.get().isStudio()) + { + sender.sendMessage(C.RED + "To use Iris Studio Commands, please enable studio in Iris/settings.json (settings auto-reload)"); + return false; + } + Iris.debug("@ " + getPath() + " with " + args.toString(", ")); if(isNode()) { diff --git a/src/main/java/com/volmit/iris/util/plugin/VolmitSender.java b/src/main/java/com/volmit/iris/util/plugin/VolmitSender.java index a10440da8..237063351 100644 --- a/src/main/java/com/volmit/iris/util/plugin/VolmitSender.java +++ b/src/main/java/com/volmit/iris/util/plugin/VolmitSender.java @@ -20,10 +20,12 @@ package com.volmit.iris.util.plugin; import com.volmit.iris.Iris; import com.volmit.iris.core.IrisSettings; +import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.decree.virtual.VirtualDecreeCommand; import com.volmit.iris.util.format.C; import com.volmit.iris.util.format.Form; import com.volmit.iris.util.math.M; +import com.volmit.iris.util.math.RNG; import com.volmit.iris.util.scheduling.J; import lombok.Getter; import lombok.Setter; @@ -259,6 +261,11 @@ public class VolmitSender implements CommandSender { return MiniMessage.get().parse(a); } + private Component createComponentRaw(String message) { + String t = C.translateAlternateColorCodes('&', getTag() + message); + return MiniMessage.get().parse(t); + } + public void showWaiting(String passive, CompletableFuture f) { AtomicInteger v = new AtomicInteger(); AtomicReference g = new AtomicReference<>(); @@ -301,6 +308,24 @@ public class VolmitSender implements CommandSender { } } + + public void sendMessageRaw(String message) { + if (message.contains("")) { + s.sendMessage(message.replaceAll("\\Q\\E", "")); + return; + } + + try { + Iris.audiences.sender(s).sendMessage(createComponentRaw(message)); + } catch (Throwable e) { + String t = C.translateAlternateColorCodes('&', getTag() + message); + String a = C.aura(t, IrisSettings.get().getGeneral().getSpinh(), IrisSettings.get().getGeneral().getSpins(), IrisSettings.get().getGeneral().getSpinb()); + + Iris.debug("Failure to parse " + a); + s.sendMessage(C.translateAlternateColorCodes('&', getTag() + message)); + } + } + @Override public void sendMessage(String[] messages) { for (String str : messages) @@ -335,6 +360,30 @@ public class VolmitSender implements CommandSender { return s.spigot(); } + private String pickRandoms(int max, VirtualDecreeCommand i) + { + KList m = new KList<>(); + for(int ix = 0; ix < max; ix++) + { + m.add((i.isNode() + ? (i.getNode().getParameters().isNotEmpty()) + ? "Or: " + + i.getParentPath() + + " " + + i.getName() + " " + + i.getNode().getParameters().shuffleCopy(RNG.r).convert((f) + -> (f.isRequired() || RNG.r.b(0.5) + ? "" + f.getNames().getRandom() + "=" + + "" + f.example() + : "")) + .toString(" ") + : "" + : "")); + } + + return m.removeDuplicates().convert((iff) -> iff.replaceAll("\\Q \\E", " ")).toString("\n"); + } + public void sendDecreeHelp(VirtualDecreeCommand v) { int m = v.getNodes().size(); @@ -342,7 +391,57 @@ public class VolmitSender implements CommandSender { { for(VirtualDecreeCommand i : v.getNodes()) { - sendMessage(i.getPath() + " - " + i.getDescription()); + if(isPlayer()) + { + //@builder + sendMessageRaw( + " "" + f).toString(", ") + "\n" + + "" + i.getDescription() + "\n" + + "" + (i.isNode() + ? ((i.getNode().getParameters().isEmpty() + ? "There are no parameters." + : "Hover over all of the parameters to learn more.") + "\n") + : "This is a command category. Run " + i.getPath()) + + (i.isNode() + ? (i.getNode().getParameters().isNotEmpty()) + ? "Usage: " + + i.getParentPath() + + " " + + i.getName() + " " + + i.getNode().getParameters().convert((f) + -> "" + f.example()) + .toString(" ") + "\n" + : "" + : "") + + (i.isNode() ? pickRandoms(Math.min(i.getNode().getParameters().size() + 1, 5), i) : "") + + "'>" + + "" +i.getName() + "" + + (i.isNode() ? + " " + i.getNode().getParameters().convert((f) + -> " "" + ff).toString(", ") + "\n" + + "" + f.getDescription() + "\n" + + (f.isRequired() + ? "This parameter is required." + : (f.hasDefault() + ? "Defaults to \""+f.getParam().defaultValue()+"\" if undefined." + : "This parameter is optional.")) + + "'>" + + (f.isRequired() ? "[" : "") + + "" + f.getName() + + (f.isRequired() ? "]" : "") + + "").toString(" ") + : " - Category of Commands" + ) + ); + //@done + } + + else + { + sendMessage(i.getPath() + "()"); + } } }