diff --git a/src/main/java/net/pietru/cookie_utils/api/Area.java b/src/main/java/net/pietru/cookie_utils/api/Area.java index 4ccf59e..42e575a 100644 --- a/src/main/java/net/pietru/cookie_utils/api/Area.java +++ b/src/main/java/net/pietru/cookie_utils/api/Area.java @@ -46,9 +46,10 @@ public class Area { } public boolean does_intersect(Vector3 c){ - c.x=(int)c.x; - c.y=(int)c.y; - c.z=(int)c.z; + Vector3 n = c.cpy(); + n.x=(int)n.x; + n.y=(int)n.y; + n.z=(int)n.z; return space.contains(c); } diff --git a/src/main/java/net/pietru/cookie_utils/mixins/PlayerPositionMixin.java b/src/main/java/net/pietru/cookie_utils/mixins/PlayerPositionMixin.java index 29f439e..0923d33 100644 --- a/src/main/java/net/pietru/cookie_utils/mixins/PlayerPositionMixin.java +++ b/src/main/java/net/pietru/cookie_utils/mixins/PlayerPositionMixin.java @@ -88,7 +88,14 @@ public class PlayerPositionMixin { ScriptsDB.run_script(area.scriptFile, "on_area_player_enter", context); } + } + if (area!=null) { + ExecutionContext context = new ExecutionContext(); + context.store_player_data(account); + context.store_area_data(area); + + ScriptsDB.run_script(area.scriptFile, "on_area_player_move", context); } } } diff --git a/src/main/java/net/pietru/cookie_utils/scripting/BaseScript.java b/src/main/java/net/pietru/cookie_utils/scripting/BaseScript.java index 646cbf1..78750b6 100644 --- a/src/main/java/net/pietru/cookie_utils/scripting/BaseScript.java +++ b/src/main/java/net/pietru/cookie_utils/scripting/BaseScript.java @@ -155,7 +155,7 @@ public class BaseScript { public static String get_if_variable(String token,ExecutionContext context){ if (token.startsWith("#")) - return String.valueOf(context.variable.get(token.substring(1))); + return String.valueOf(context.get_value(token.substring(1))); return token; } diff --git a/src/main/java/net/pietru/cookie_utils/scripting/ExecutionContext.java b/src/main/java/net/pietru/cookie_utils/scripting/ExecutionContext.java index 435af35..2e8efa9 100644 --- a/src/main/java/net/pietru/cookie_utils/scripting/ExecutionContext.java +++ b/src/main/java/net/pietru/cookie_utils/scripting/ExecutionContext.java @@ -12,6 +12,20 @@ public class ExecutionContext { public BaseScript script; public Map variable = new HashMap<>(); + public void set_value(String key, Object value){ + variable.remove(key); + + variable.put(key, value); + } + + public Object get_value(String key, Object def_value){ + return variable.getOrDefault(key,def_value); + } + + public Object get_value(String key){ + return get_value(key,""); + } + public void store_player_data(Account account){ variable.put("event_player_id", account.getUniqueId()); Player player = account.getPlayer(); diff --git a/src/main/java/net/pietru/cookie_utils/scripting/ScriptsDB.java b/src/main/java/net/pietru/cookie_utils/scripting/ScriptsDB.java index 2f02315..6cc9c7c 100644 --- a/src/main/java/net/pietru/cookie_utils/scripting/ScriptsDB.java +++ b/src/main/java/net/pietru/cookie_utils/scripting/ScriptsDB.java @@ -12,6 +12,8 @@ public class ScriptsDB { public static Map scripts_storage = new HashMap<>(); public static void run_script(String script,String event,ExecutionContext context){ + if (!is_not_reloading) + return; if (scripts_storage.containsKey(script)) scripts_storage.get(script).handle(event,context); } diff --git a/src/main/java/net/pietru/cookie_utils/scripting/tokens/TokenMath.java b/src/main/java/net/pietru/cookie_utils/scripting/tokens/TokenMath.java index 3c5ec9a..eade5b2 100644 --- a/src/main/java/net/pietru/cookie_utils/scripting/tokens/TokenMath.java +++ b/src/main/java/net/pietru/cookie_utils/scripting/tokens/TokenMath.java @@ -11,7 +11,10 @@ public class TokenMath implements BaseToken { "add", "sub", "mul", - "dev" + "dev", + "mod", + "floor", + "toInt" ); @@ -67,12 +70,15 @@ public class TokenMath implements BaseToken { case "sub" -> a-b; case "mul" -> a*b; case "dev" -> a/b; + case "mod" -> a % b; + case "floor" -> (float)Math.floor(a); + case "toInt" -> (int)a; default -> 0; }; String key = BaseScript.get_if_variable(tokens[step+3],executionContext); - executionContext.variable.put(key,c); + executionContext.set_value(key,c); return true; diff --git a/src/main/java/net/pietru/cookie_utils/scripting/tokens/TokenSet.java b/src/main/java/net/pietru/cookie_utils/scripting/tokens/TokenSet.java index aebf332..3ba6885 100644 --- a/src/main/java/net/pietru/cookie_utils/scripting/tokens/TokenSet.java +++ b/src/main/java/net/pietru/cookie_utils/scripting/tokens/TokenSet.java @@ -32,7 +32,7 @@ public class TokenSet implements BaseToken { String key = BaseScript.get_if_variable(tokens[step+1],executionContext); String val = String.join(" ", BaseScript.get_string(tokens, step+2)); - executionContext.variable.put(key,val); + executionContext.set_value(key,val); return true; }