ソースを参照

changes for the snuvi script update

Kajetan Johannes Hammerle 6 年 前
コミット
3b2ae86c63

+ 1 - 1
src/main/java/me/km/networking/CampFireInventory.java

@@ -43,7 +43,7 @@ public class SnuviTask
             }
             catch(Exception ex)
             {
-                KajetansMod.scripts.getSnuviParser().getLogger().print(ex.getLocalizedMessage(), ex, null, null, null, -1);
+                KajetansMod.scripts.getScriptManager().getLogger().print(ex.getLocalizedMessage(), ex, null, null, null, -1);
             }
             if(rtimer <= 0 || noRepeat)
             {

+ 1 - 1
src/main/java/me/km/snuviscript/CommandGiveUp.java

@@ -37,7 +37,7 @@ public class CommandGiveUp extends ModuleCommand
             this.getModule().send(cs, "Du hast kein Script an dich gebunden.");
             return true;
         }
-        KajetansMod.scripts.getSnuviParser().callEvent("player_giveup", script, (sc) -> ScriptVars.setPlayerVars(sc, p), null);
+        KajetansMod.scripts.getScriptManager().callEvent("player_giveup", script, (sc) -> ScriptVars.setPlayerVars(sc, p), null);
         return true;
     }
 }

+ 23 - 12
src/main/java/me/km/snuviscript/CommandScript.java

@@ -6,7 +6,7 @@ import me.km.module.Module;
 import me.km.module.ModuleCommand;
 import java.util.Collection;
 import me.hammerle.snuviscript.code.Script;
-import me.hammerle.snuviscript.variable.Variable;
+import me.hammerle.snuviscript.inputprovider.Variable;
 import me.km.utils.Utils;
 import me.km.exception.PlayerNotFoundException;
 import net.minecraft.command.ICommandSender;
@@ -69,7 +69,7 @@ public class CommandScript extends ModuleCommand
                     {
                         try
                         {
-                            Script sc = KajetansMod.scripts.getSnuviParser().getScript(Integer.parseInt(arg[1]));
+                            Script sc = KajetansMod.scripts.getScriptManager().getScript(Integer.parseInt(arg[1]));
                             if(sc == null)
                             {
                                 throw new NumberFormatException();
@@ -99,7 +99,7 @@ public class CommandScript extends ModuleCommand
                     {
                         try
                         {
-                            Script sc = KajetansMod.scripts.getSnuviParser().getScript(Integer.parseInt(arg[1]));
+                            Script sc = KajetansMod.scripts.getScriptManager().getScript(Integer.parseInt(arg[1]));
                             if(sc == null)
                             {
                                 throw new NumberFormatException();
@@ -223,7 +223,7 @@ public class CommandScript extends ModuleCommand
                 }*/
                 case "see":
                 {
-                    Collection<Script> scripts = KajetansMod.scripts.getSnuviParser().getScripts();
+                    Collection<Script> scripts = KajetansMod.scripts.getScriptManager().getScripts();
                     if(scripts.isEmpty())
                     {
                         m.send(cs, "Momentan sind keine Scripts aktiv.");
@@ -232,7 +232,7 @@ public class CommandScript extends ModuleCommand
                     m.send(cs, "Folgende Scripts sind aktiv:");
                     scripts.forEach(sc ->
                     {
-                        m.sendHelpListElement(cs, sc.getSimpleName(), "(" + sc.getId() + ")");
+                        m.sendHelpListElement(cs, sc.getName(), "(" + sc.getId() + ")");
                         KajetansMod.scripts.getPlayerList(sc.getId()).forEach(uuid -> 
                         {
                             EntityPlayerMP p = KajetansMod.server.getPlayerList().getPlayerByUUID(uuid);
@@ -250,16 +250,27 @@ public class CommandScript extends ModuleCommand
                             if(arg[1].equals("all"))
                             {
                                 KajetansMod.scripts.clearPlayerRegistry();
-                                KajetansMod.scripts.getSnuviParser().termAllUnsafe();
-                                m.send(cs, "Alle aktiven Scripts wurden beendet.");
+                                if(KajetansMod.scripts.getScriptManager().removeScriptsSafe())
+                                {
+                                    m.send(cs, "Alle aktiven Scripts wurden beendet.");
+                                }
+                                else
+                                {
+                                    m.send(cs, "Iterating is not allowed currently");
+                                }
                                 return true;
                             }
-                            Script qd = KajetansMod.scripts.getSnuviParser().getScript(Integer.parseInt(arg[1]));
-                            if(!KajetansMod.scripts.getSnuviParser().termUnsafe(qd))
+                            int id = Integer.parseInt(arg[1]);
+                            Script qd = KajetansMod.scripts.getScriptManager().getScript(id);
+                            if(qd != null)
                             {
-                                throw new NumberFormatException();
+                                KajetansMod.scripts.getScriptManager().removeScriptSafe(qd);
+                                m.send(cs, "Das Script '" + qd.getName() + "' wurde beendet.");
+                            }
+                            else
+                            {
+                                m.send(cs, String.format("Script-ID '%d' is not valid", id));
                             }
-                            m.send(cs, "Das Script '" + qd.getName() + "' wurde beendet.");
                         }
                         catch(NumberFormatException ex)
                         {
@@ -267,7 +278,7 @@ public class CommandScript extends ModuleCommand
                         } 
                         catch(Exception ex)
                         {
-                            m.send(cs, "Beim unsicheren Beenden eines Scripts trat ein Fehler auf.");
+                            m.send(cs, "Beim Beenden eines Scripts trat ein Fehler auf.");
                             ex.printStackTrace();
                         } 
                         return true;

ファイルの差分が大きいため隠しています
+ 188 - 188
src/main/java/me/km/snuviscript/MinecraftFunctions.java


+ 4 - 4
src/main/java/me/km/snuviscript/ScriptBank.java

@@ -3,7 +3,7 @@ package me.km.snuviscript;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.UUID;
-import me.hammerle.snuviscript.code.Compiler;
+import me.hammerle.snuviscript.code.SnuviUtils;
 import me.km.KajetansMod;
 import me.km.databank.IStatement;
 
@@ -85,7 +85,7 @@ public class ScriptBank
             {
                 if(rs.next())
                 {
-                    return Compiler.convert(rs.getString(1));
+                    return SnuviUtils.convert(rs.getString(1));
                 }
                 return error;
             }
@@ -169,7 +169,7 @@ public class ScriptBank
             {
                 if(rs.next())
                 {
-                    return Compiler.convert(rs.getString(1));
+                    return SnuviUtils.convert(rs.getString(1));
                 }
                 return null;
             }
@@ -267,7 +267,7 @@ public class ScriptBank
             {
                 if(rs.next())
                 {
-                    return Compiler.convert(rs.getString(1));
+                    return SnuviUtils.convert(rs.getString(1));
                 }
                 return null;
             }

+ 15 - 15
src/main/java/me/km/snuviscript/ScriptEvents.java

@@ -5,8 +5,8 @@ import java.util.Arrays;
 import java.util.List;
 import java.util.function.Consumer;
 import java.util.stream.Collectors;
-import me.hammerle.snuviscript.code.Compiler;
 import me.hammerle.snuviscript.code.Script;
+import me.hammerle.snuviscript.code.SnuviUtils;
 import me.kcm.events.PlayerPreRespawnEvent;
 import me.kcm.events.PlayerTabListNameEvent;
 import me.km.KajetansMod;
@@ -57,7 +57,7 @@ public class ScriptEvents
     
     private static void handleEvent(EntityPlayer p, String event, Consumer<Script> before, Consumer<Script> after)
     {      
-        KajetansMod.scripts.getSnuviParser().callEvent(event, (sc) -> 
+        KajetansMod.scripts.getScriptManager().callEvent(event, (sc) -> 
         {
             ScriptVars.setPlayerVars(sc, p); 
             before.accept(sc);
@@ -68,7 +68,7 @@ public class ScriptEvents
             Script data = KajetansMod.scripts.getScript(p);
             if(data != null)
             {
-                KajetansMod.scripts.getSnuviParser().callEvent(event, data, (sc) -> 
+                KajetansMod.scripts.getScriptManager().callEvent(event, data, (sc) -> 
                 {
                     ScriptVars.setPlayerVars(sc, p); 
                     before.accept(sc);
@@ -90,7 +90,7 @@ public class ScriptEvents
         }
         catch(Exception ex)
         {
-            KajetansMod.scripts.logger.print("invalid var in '" + name + "' event", ex, null, sc.getName(), sc, sc.getActiveRealLine());
+            KajetansMod.scripts.logger.print("invalid var in '" + name + "' event", ex, null, sc.getName(), sc, sc.getActiveSourceLine());
         }
     }
          
@@ -108,7 +108,7 @@ public class ScriptEvents
     
     public static boolean onInventoryClick(Script script, SnuviInventory inv, int slot, ClickType click, EntityPlayer p)
     {
-        KajetansMod.scripts.getSnuviParser().callEvent("inv_click", script, sc -> 
+        KajetansMod.scripts.getScriptManager().callEvent("inv_click", script, sc -> 
         {
             ScriptVars.setPlayerVars(sc, p); 
             sc.setVar("inv_id", (double) inv.getId());
@@ -122,7 +122,7 @@ public class ScriptEvents
 
     public static void onInventoryClose(Script script, SnuviInventory inv, EntityPlayer p)
     {
-        KajetansMod.scripts.getSnuviParser().callEvent("inv_close", script, sc -> 
+        KajetansMod.scripts.getScriptManager().callEvent("inv_close", script, sc -> 
         {
             ScriptVars.setPlayerVars(sc, p); 
             sc.setVar("inv_id", (double) inv.getId());
@@ -176,7 +176,7 @@ public class ScriptEvents
             }
             catch(Exception ex)
             {
-                KajetansMod.scripts.logger.print("invalid var in 'player_hurt' event", ex, null, sc.getName(), sc, sc.getActiveRealLine());
+                KajetansMod.scripts.logger.print("invalid var in 'player_hurt' event", ex, null, sc.getName(), sc, sc.getActiveSourceLine());
             }
         });
     } 
@@ -243,7 +243,7 @@ public class ScriptEvents
                 }
                 catch(Exception ex)
                 {
-                    KajetansMod.scripts.logger.print("invalid var in 'player_heal' event", ex, null, sc.getName(), sc, sc.getActiveRealLine());
+                    KajetansMod.scripts.logger.print("invalid var in 'player_heal' event", ex, null, sc.getName(), sc, sc.getActiveSourceLine());
                 }
             });
         }
@@ -297,7 +297,7 @@ public class ScriptEvents
             }
             catch(Exception ex)
             {
-                KajetansMod.scripts.logger.print("invalid var in 'player_death' event", ex, null, sc.getName(), sc, sc.getActiveRealLine());
+                KajetansMod.scripts.logger.print("invalid var in 'player_death' event", ex, null, sc.getName(), sc, sc.getActiveSourceLine());
             }
         });
     } 
@@ -326,7 +326,7 @@ public class ScriptEvents
             }
             catch(Exception ex)
             {
-                KajetansMod.scripts.logger.print("invalid var in 'entity_hurt' event", ex, null, sc.getName(), sc, sc.getActiveRealLine());
+                KajetansMod.scripts.logger.print("invalid var in 'entity_hurt' event", ex, null, sc.getName(), sc, sc.getActiveSourceLine());
             }
         });
     }
@@ -639,7 +639,7 @@ public class ScriptEvents
             }
             catch(Exception ex)
             {
-                KajetansMod.scripts.logger.print("invalid var in 'item_use_start' event", ex, null, sc.getName(), sc, sc.getActiveRealLine());
+                KajetansMod.scripts.logger.print("invalid var in 'item_use_start' event", ex, null, sc.getName(), sc, sc.getActiveSourceLine());
             }
         });
     }
@@ -730,7 +730,7 @@ public class ScriptEvents
             handleEvent((EntityPlayer) e.getSender(), "command", (sc) -> 
             {
                 sc.setVar("command", e.getCommand().getName()); 
-                sc.setVar("args", Arrays.stream(e.getParameters()).map(s -> Compiler.convert(s)).collect(Collectors.toList()));
+                sc.setVar("args", Arrays.stream(e.getParameters()).map(s -> SnuviUtils.convert(s)).collect(Collectors.toList()));
                 sc.setVar("cancel", e.isCanceled()); 
             }, (sc) -> 
             {
@@ -750,7 +750,7 @@ public class ScriptEvents
             }
             else
             {
-                sc.setVar("args", Arrays.stream(args).map(s -> Compiler.convert(s)).collect(Collectors.toList()));
+                sc.setVar("args", Arrays.stream(args).map(s -> SnuviUtils.convert(s)).collect(Collectors.toList()));
             }
         });
     }
@@ -779,7 +779,7 @@ public class ScriptEvents
             }
             catch(Exception ex)
             {
-                KajetansMod.scripts.logger.print("invalid var in 'chat' event", ex, null, sc.getName(), sc, sc.getActiveRealLine());
+                KajetansMod.scripts.logger.print("invalid var in 'chat' event", ex, null, sc.getName(), sc, sc.getActiveSourceLine());
             }
         });
     }
@@ -798,7 +798,7 @@ public class ScriptEvents
             }
             catch(Exception ex)
             {
-                KajetansMod.scripts.logger.print("invalid var in 'tab_list' event", ex, null, sc.getName(), sc, sc.getActiveRealLine());
+                KajetansMod.scripts.logger.print("invalid var in 'tab_list' event", ex, null, sc.getName(), sc, sc.getActiveSourceLine());
             }
         });
     }

+ 16 - 17
src/main/java/me/km/snuviscript/ScriptInventoryHolder.java

@@ -2,7 +2,6 @@ package me.km.snuviscript;
 
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.Collections;
 import me.km.KajetansMod;
 import me.km.module.Module;
@@ -11,7 +10,7 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.UUID;
 import me.hammerle.snuviscript.code.Script;
-import me.hammerle.snuviscript.code.SnuviParser;
+import me.hammerle.snuviscript.code.ScriptManager;
 import me.km.chatchannel.ChatChannel;
 import me.km.events.CustomEventCaller;
 import net.minecraft.entity.player.EntityPlayer;
@@ -19,7 +18,7 @@ import net.minecraft.util.text.TextFormatting;
 
 public class ScriptModule extends Module
 {
-    private final SnuviParser parser;
+    private final ScriptManager manager;
     protected final SnuviLogger logger;
     private final HashMap<UUID, Integer> playerScript;   
     private final HashMap<Integer, List<UUID>> registeredPlayers; 
@@ -31,9 +30,9 @@ public class ScriptModule extends Module
         super(prefix, color);
         
         logger = new SnuviLogger();
-        parser = new SnuviParser(logger, KajetansMod.scheduler);
+        manager = new ScriptManager(logger, KajetansMod.scheduler);
         
-        MinecraftFunctions.registerFunctions(parser);
+        MinecraftFunctions.registerFunctions(manager);
         
         playerScript = new HashMap<>();
         registeredPlayers = new HashMap<>();
@@ -42,9 +41,9 @@ public class ScriptModule extends Module
         registerEvent(new ScriptEvents());
     }
     
-    public SnuviParser getSnuviParser()
+    public ScriptManager getScriptManager()
     {
-        return parser;
+        return manager;
     }
     
     public ScriptBank getDatabank()
@@ -108,7 +107,7 @@ public class ScriptModule extends Module
         }       
         getOrCreatePlayerList(sc.getId()).add(p.getUniqueID());
         ScriptVars.setPlayerVars(sc, p); 
-        parser.callEvent("player_join", sc, null, null);
+        manager.callEvent("player_join", sc, null, null);
         return true;
     } 
         
@@ -126,7 +125,7 @@ public class ScriptModule extends Module
             return null;
         }
         // player mapping does not necessary mean the script is valid
-        Script sc = parser.getScript(id);
+        Script sc = manager.getScript(id);
         if(sc == null)
         {
             playerScript.remove(p.getUniqueID());
@@ -151,7 +150,7 @@ public class ScriptModule extends Module
         boolean b = list.remove(p.getUniqueID());
         if(list.isEmpty())
         {
-            Script sc = parser.getScript(id);
+            Script sc = manager.getScript(id);
             if(sc == null)
             {
                 ChatChannel.getDevChannel().sendWarning("Das ungültige Script von '" + p.getName() + "' wurde entfernt. (2)");
@@ -159,9 +158,9 @@ public class ScriptModule extends Module
             }
             if(sc != callingScript)
             {
-                parser.callEvent("player_kicked", sc, (innerSc) -> ScriptVars.setPlayerVars(innerSc, p), null);
+                manager.callEvent("player_kicked", sc, (innerSc) -> ScriptVars.setPlayerVars(innerSc, p), null);
             }
-            parser.termSafe(sc);
+            manager.removeScriptSafe(sc);
         }
         return b;
     }
@@ -182,8 +181,8 @@ public class ScriptModule extends Module
         {
             return false;
         }
-        Arrays.setAll(names, i -> "scripts/" + names[i]);
-        parser.startScript(false, sc -> 
+        Arrays.setAll(names, i -> "scripts/" + names[i] + ".txt");
+        manager.startScript(false, sc -> 
         {
             int id = sc.getId();
             playerScript.put(p.getUniqueID(), id);
@@ -194,13 +193,13 @@ public class ScriptModule extends Module
             registeredPlayers.remove(sc.getId());
             
             CustomEventCaller.removeScriptData(sc);
-        }, ".txt", names);
+        }, names[0], names);
         return true;
     }
     
     public void startScript(String... names)
     {
-        Arrays.setAll(names, i -> "scripts/" + names[i]);
-        parser.startScript(true, sc -> {}, sc -> CustomEventCaller.removeScriptData(sc), ".txt", names);
+        Arrays.setAll(names, i -> "scripts/" + names[i] + ".txt");
+        manager.startScript(true, sc -> {}, sc -> CustomEventCaller.removeScriptData(sc), names[0], names);
     }
 }

+ 2 - 2
src/main/java/me/km/snuviscript/ScriptVars.java

@@ -11,7 +11,7 @@ public class SnuviLogger implements ISnuviLogger
     @Override
     public void print(String message, Exception ex, String function, String scriptname, Script sc, int line) 
     {
-        if(KajetansMod.debugMode || (sc != null && sc.isStackTracePrinted()))
+        if(KajetansMod.debugMode)
         {
             Module m = KajetansMod.scripts;
             if(scriptname != null)
@@ -32,7 +32,7 @@ public class SnuviLogger implements ISnuviLogger
             if(ex != null)
             {
                 m.sendHelpListElementToConsole("exception", ex.getClass().getSimpleName());
-                m.sendHelpListElementToConsole("exception", ex.getMessage());
+                m.sendHelpListElementToConsole("exception", String.valueOf(ex.getMessage()));
             }
             if(function != null)
             {

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません