Prechádzať zdrojové kódy

command help for players, error lib for snuvi with history, new enchantment snuvi api, several new / changed snuvi commands

Kajetan Johannes Hammerle 4 rokov pred
rodič
commit
2c0b9be8e0

+ 2 - 0
src/main/java/me/km/snuviscript/MinecraftFunctions.java

@@ -46,6 +46,8 @@ public class MinecraftFunctions {
         TextCommands.registerFunctions(sm);       
         BanCommands.registerFunctions(sm, server);
         ShopCommands.registerFunctions(sm);
+        ErrorCommands.registerFunctions(sm);
+        EnchantmentCommands.registerFunctions(sm);
         Commands.registerFunctions(sm, scripts, perms, scheduler, server, commands);
     }
 }

+ 34 - 0
src/main/java/me/km/snuviscript/RingArray.java

@@ -0,0 +1,34 @@
+package me.km.snuviscript;
+
+public class RingArray<T> {
+    private int length = 0;
+    private int index = 0;
+    private final T[] data;
+
+    public RingArray(int maxLength) {
+        data = (T[]) new Object[maxLength];
+    }
+
+    public void add(T t) {
+        data[index] = t;
+        length = Math.min(length + 1, data.length);
+        index = (index + 1) % data.length;
+    }
+
+    public int getLength() {
+        return length;
+    }
+
+    public T get(int index) {
+        if(index < 0 || index >= length) {
+            return null;
+        }
+        index = (this.index - length + index + data.length) % data.length;
+        return data[index];
+    }
+
+    public void clear() {
+        index = 0;
+        length = 0;
+    }
+}

+ 15 - 36
src/main/java/me/km/snuviscript/SnuviLogger.java

@@ -11,6 +11,7 @@ public class SnuviLogger implements ISnuviLogger {
     private boolean printToConsole = true;
     private MinecraftServer server = null;
     private Permissions perms = null;
+    private final RingArray<String> history = new RingArray(100);
 
     public void setConsoleLogging(boolean b) {
         printToConsole = b;
@@ -21,68 +22,46 @@ public class SnuviLogger implements ISnuviLogger {
         this.perms = perms;
     }
 
+    public RingArray<String> getHistory() {
+        return history;
+    }
+
     @Override
     public void print(String message, Exception ex, String function, String scriptname, Script sc, StackTrace lines) {
         StringBuilder sb = new StringBuilder();
         sb.append("[§cLogger§r] ");
 
         String color;
-
         if(ex == null) {
             color = "§e";
-            sb.append(color);
-            sb.append("debug: '§r");
-            sb.append(message);
-            sb.append(color);
-            sb.append("'");
+            sb.append(color).append("debug: '§r").append(message).append(color).append("'");
         } else {
             color = "§c";
-            sb.append(color);
-            sb.append(ex.getClass().getSimpleName());
-            sb.append("§r: '");
-            sb.append(color);
-            sb.append(ex.getMessage());
+            sb.append(color).append(ex.getClass().getSimpleName()).append("§r: '").append(color).append(ex.getMessage());
             if(message != null && !message.isEmpty()) {
-                sb.append(" - ");
-                sb.append(message);
+                sb.append(" - ").append(message);
             }
             sb.append("§r'");
         }
-
         if(scriptname != null && !scriptname.isEmpty()) {
-            sb.append(" in script '");
-            sb.append(color);
-            sb.append(scriptname);
-            sb.append("§r'");
+            sb.append(" in script '").append(color).append(scriptname).append("§r'");
         }
-
         if(sc != null) {
-            sb.append(" id '");
-            sb.append(color);
-            sb.append(sc.getId());
-            sb.append("§r'");
+            sb.append(" id '").append(color).append(sc.getId()).append("§r'");
         }
-
         if(function != null && !function.isEmpty()) {
-            sb.append(" in function '");
-            sb.append(color);
-            sb.append(function);
-            sb.append("§r'");
+            sb.append(" in function '").append(color).append(function).append("§r'");
         }
-
         if(lines != null) {
-            sb.append(" in line '");
-            sb.append(color);
-            sb.append(lines);
-            sb.append("§r'");
+            sb.append(" in line '").append(color).append(lines).append("§r'");
         }
 
-        StringTextComponent text = new StringTextComponent(sb.toString());
-
+        String s = sb.toString();
+        history.add(s);
+        StringTextComponent text = new StringTextComponent(s);
         if(printToConsole && server != null) {
             server.sendMessage(text);
         }
-
         if(server != null && perms != null && server.getPlayerList() != null) {
             server.getPlayerList().getPlayers().forEach(p -> {
                 if(perms.has(p, "script.error")) {

+ 3 - 0
src/main/java/me/km/snuviscript/commands/CommandCommands.java

@@ -97,6 +97,9 @@ public class CommandCommands {
                 case "Enchantment":
                     arg = Commands.argument(in[1].getString(sc), (ArgumentType) EnchantmentArgument.enchantment());
                     break;
+                case "Player":
+                    arg = Commands.argument(in[1].getString(sc), (ArgumentType) EntityArgument.player());
+                    break;
                 default:
                     throw new IllegalArgumentException(String.format("'%s' is not a valid special help", name));
             }

+ 3 - 6
src/main/java/me/km/snuviscript/commands/Commands.java

@@ -16,19 +16,16 @@ import net.minecraft.util.text.StringTextComponent;
 public class Commands {
     public static void registerFunctions(ScriptManager sm, Scripts scripts, Permissions perms, SnuviScheduler scheduler,
             MinecraftServer server, ModCommandManager commands) {
-        sm.registerFunction("setmotd", (sc, in) -> {
+        sm.registerConsumer("setmotd", (sc, in) -> {
             server.getServerStatusResponse().setServerDescription(new StringTextComponent(in[0].getString(sc)));
-            return Void.TYPE;
         });
-        sm.registerFunction("msg", (sc, in) -> {
+        sm.registerConsumer("msg", (sc, in) -> {
             sendMessageToGroup(server, scripts, perms, in[0].get(sc), sc, concat(sc, 1, "", in));
-            return Void.TYPE;
         });
         sm.registerFunction("removeformat", (sc, in) -> SnuviUtils.connect(sc, in, 0).replaceAll("§.", ""));
-        sm.registerFunction("command", (sc, in) -> {
+        sm.registerConsumer("command", (sc, in) -> {
             final String s = SnuviUtils.connect(sc, in, 0);
             scheduler.scheduleTask(() -> commands.handleCommand(server.getCommandSource(), s));
-            return Void.TYPE;
         });
         sm.registerFunction("isplayer", (sc, in) -> {
             Object o = in[0].get(sc);

+ 27 - 0
src/main/java/me/km/snuviscript/commands/EnchantmentCommands.java

@@ -0,0 +1,27 @@
+package me.km.snuviscript.commands;
+
+import java.util.Map;
+import me.hammerle.snuviscript.code.ScriptManager;
+import me.km.utils.Mapper;
+import net.minecraft.enchantment.Enchantment;
+import net.minecraft.enchantment.EnchantmentHelper;
+import net.minecraft.item.ItemStack;
+
+public class EnchantmentCommands {
+    public static void registerFunctions(ScriptManager sm) {
+        sm.registerFunction("enchantment.get", (sc, in) -> Mapper.getEnchantment(in[0].getString(sc)));
+        sm.registerFunction("enchantment.add", (sc, in) -> {
+            ((ItemStack) in[1].get(sc)).addEnchantment((Enchantment) in[0].get(sc), in[2].getInt(sc));
+            return true;
+        });
+        sm.registerFunction("enchantment.getlevel", (sc, in) -> {
+            return (double) EnchantmentHelper.getEnchantmentLevel((Enchantment) in[0].get(sc), (ItemStack) in[1].get(sc));
+        });
+        sm.registerFunction("enchantment.readfromitem", (sc, in) -> {
+            return EnchantmentHelper.getEnchantments((ItemStack) in[0].get(sc));
+        });
+        sm.registerConsumer("enchantment.writetoitem", (sc, in) -> {
+            EnchantmentHelper.setEnchantments((Map<Enchantment, Integer>) in[0].get(sc), (ItemStack) in[1].get(sc));
+        });
+    }
+}

+ 3 - 3
src/main/java/me/km/snuviscript/commands/EntityCommands.java

@@ -219,14 +219,14 @@ public class EntityCommands {
         sm.registerConsumer("entity.addeffect", (sc, in) -> {
             LivingEntity base = (LivingEntity) in[0].get(sc);
             Effect potion = Mapper.getPotion(in[1].getString(sc));
-            if(potion == null) // doing this only to prevent EffectInstance doing shit
-            {
+            if(potion == null) { // doing this only to prevent EffectInstance doing shit
                 throw new IllegalArgumentException("potion does not exist");
             }
             if(base.isPotionActive(potion)) {
                 base.removePotionEffect(potion);
             }
-            base.addPotionEffect(new EffectInstance(potion, in[2].getInt(sc), in[3].getInt(sc)));
+            boolean showParticles = in.length >= 3 ? in[2].getBoolean(sc) : true;
+            base.addPotionEffect(new EffectInstance(potion, in[2].getInt(sc), in[3].getInt(sc), false, showParticles));
         });
         sm.registerConsumer("entity.cleareffects", (sc, in) -> {
             ((LivingEntity) in[0].get(sc)).clearActivePotions();

+ 21 - 0
src/main/java/me/km/snuviscript/commands/ErrorCommands.java

@@ -0,0 +1,21 @@
+package me.km.snuviscript.commands;
+
+import me.hammerle.snuviscript.code.ScriptManager;
+import me.km.snuviscript.SnuviLogger;
+
+public class ErrorCommands {
+    public static void registerFunctions(ScriptManager sm) {
+        sm.registerConsumer("error.clear", (sc, in) -> {
+            ((SnuviLogger) sm.getLogger()).getHistory().clear();
+        });
+        sm.registerFunction("error.getsize", (sc, in) -> {
+            return (double) ((SnuviLogger) sm.getLogger()).getHistory().getLength();
+        });
+        sm.registerFunction("error.getindex", (sc, in) -> {
+            return ((SnuviLogger) sm.getLogger()).getHistory().get(in[0].getInt(sc));
+        });
+        sm.registerConsumer("error.setconsoleprint", (sc, in) -> {
+            ((SnuviLogger) sm.getLogger()).setConsoleLogging(in[0].getBoolean(sc));
+        });
+    }
+}

+ 0 - 11
src/main/java/me/km/snuviscript/commands/ItemCommands.java

@@ -7,8 +7,6 @@ import me.km.utils.ItemStackUtils;
 import me.km.utils.Location;
 import me.km.utils.Mapper;
 import net.minecraft.block.Block;
-import net.minecraft.enchantment.Enchantment;
-import net.minecraft.enchantment.EnchantmentHelper;
 import net.minecraft.entity.ai.attributes.AttributeModifier;
 import net.minecraft.entity.player.PlayerEntity;
 import net.minecraft.inventory.EquipmentSlotType;
@@ -26,7 +24,6 @@ import net.minecraft.util.text.StringTextComponent;
 import net.minecraft.world.World;
 
 public class ItemCommands {
-    @SuppressWarnings("")
     public static void registerFunctions(ScriptManager sm) {
         sm.registerConsumer("item.drop", (sc, in) -> {
             Location l = (Location) in[0].get(sc);
@@ -61,14 +58,6 @@ public class ItemCommands {
         sm.registerConsumer("item.addlore", (sc, in) -> {
             ItemStackUtils.addLore((ItemStack) in[0].get(sc), SnuviUtils.connect(sc, in, 2), in[1].getInt(sc));
         });
-        sm.registerFunction("item.addenchant", (sc, in) -> {
-            ItemStack stack = (ItemStack) in[0].get(sc);
-            Enchantment ench = Mapper.getEnchantment(in[1].getString(sc));
-            int i = in[2].getInt(sc);
-            stack.addEnchantment(ench, i);
-            return true;
-        });
-        sm.registerFunction("item.getenchantlevel", (sc, in) -> (double) EnchantmentHelper.getEnchantmentLevel(Mapper.getEnchantment(in[1].getString(sc)), (ItemStack) in[0].get(sc)));
         sm.registerConsumer("item.setcooldown", (sc, in) -> {
             ((PlayerEntity) in[0].get(sc)).getCooldownTracker().setCooldown(((ItemStack) in[1].get(sc)).getItem(), in[2].getInt(sc));
         });

+ 6 - 5
src/main/java/me/km/snuviscript/commands/TextCommands.java

@@ -42,19 +42,20 @@ public class TextCommands {
         sm.registerFunction("text.link", (sc, in) -> {
             StringTextComponent text = new StringTextComponent(in[0].getString(sc));
             Style style = text.getStyle();
-            style.setColor(TextFormatting.RED);
-            style.setBold(true);
             style.setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, in[1].getString(sc)));
             return text;
         });
+        sm.registerFunction("text.clipboard", (sc, in) -> {
+            StringTextComponent text = new StringTextComponent(in[0].getString(sc));
+            Style style = text.getStyle();
+            style.setClickEvent(new ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, in[1].getString(sc)));
+            return text;
+        });
         sm.registerFunction("text.copytext", (sc, in) -> {
             String s = in[1].getString(sc);
             s = s.replace(" ", "%20");
-
             StringTextComponent text = new StringTextComponent(in[0].getString(sc));
             Style style = text.getStyle();
-            style.setColor(TextFormatting.RED);
-            style.setBold(true);
             style.setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, "http://minecraft.hammerle.me/showtext.php/?text=" + s));
             return text;
         });