From f9f538589f24977a37009a26152a32b4250eec83 Mon Sep 17 00:00:00 2001 From: pietru Date: Mon, 24 Feb 2025 17:47:07 +0100 Subject: [PATCH] bugfix get_string, expand player vars, add TokenMessage, improvements to TokenParticle and TokenPlayer --- .../cookie_utils/scripting/BaseScript.java | 6 +- .../scripting/ExecutionContext.java | 2 + .../scripting/tokens/TokenMessage.java | 87 +++++++++++++++++++ .../scripting/tokens/TokenParticle.java | 10 +-- .../scripting/tokens/TokenPlayer.java | 6 +- 5 files changed, 97 insertions(+), 14 deletions(-) create mode 100644 src/main/java/net/pietru/cookie_utils/scripting/tokens/TokenMessage.java 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 9890489..4b2b88e 100644 --- a/src/main/java/net/pietru/cookie_utils/scripting/BaseScript.java +++ b/src/main/java/net/pietru/cookie_utils/scripting/BaseScript.java @@ -27,6 +27,8 @@ public class BaseScript { for (String key : TokenMath.valid_tokens) tokens.put(key, new TokenMath()); + tokens.put("message", new TokenMessage()); + colors.put("light_gray", Color.LIGHT_GRAY); colors.put("gray", Color.GRAY); @@ -173,7 +175,7 @@ public class BaseScript { text.add(tokens[i].substring(0,tokens[i].length()-1)); break; } else { - text.add(tokens[step]); + text.add(tokens[i]); } } } @@ -187,7 +189,7 @@ public class BaseScript { text.add(tokens[i].substring(0,tokens[i].length()-1)); break; } else { - text.add(tokens[step]); + text.add(tokens[i]); } } } else { 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 50a87f0..4474f39 100644 --- a/src/main/java/net/pietru/cookie_utils/scripting/ExecutionContext.java +++ b/src/main/java/net/pietru/cookie_utils/scripting/ExecutionContext.java @@ -35,6 +35,8 @@ public class ExecutionContext { public void store_player_data(Account account){ variable.put("event_player_id", account.getUniqueId()); + variable.put("event_player_username", account.getUsername()); + variable.put("event_player_displayname", account.getDisplayName()); Player player = account.getPlayer(); Vector3 pos = player.getPosition(); variable.put("event_player_pos_x", pos.x); diff --git a/src/main/java/net/pietru/cookie_utils/scripting/tokens/TokenMessage.java b/src/main/java/net/pietru/cookie_utils/scripting/tokens/TokenMessage.java new file mode 100644 index 0000000..9a1cb3e --- /dev/null +++ b/src/main/java/net/pietru/cookie_utils/scripting/tokens/TokenMessage.java @@ -0,0 +1,87 @@ +package net.pietru.cookie_utils.scripting.tokens; + +import finalforeach.cosmicreach.GameSingletons; +import finalforeach.cosmicreach.entities.player.Player; +import finalforeach.cosmicreach.networking.packets.MessagePacket; +import finalforeach.cosmicreach.networking.packets.ParticleSystemPacket; +import finalforeach.cosmicreach.networking.server.ServerSingletons; +import finalforeach.cosmicreach.world.Zone; +import net.pietru.cookie_utils.scripting.BaseScript; +import net.pietru.cookie_utils.scripting.ExecutionContext; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import static net.pietru.cookie_utils.utils.player_utils.parseAsPlayer; + +public class TokenMessage implements BaseToken { + + public static final List optional_args = List.of( + "player", + "zone" + ); + + @Override + public String get_token_checker_id() { + return "token_message"; + } + + @Override + public boolean canHandle(String[] tokens, int step) { + String token = tokens[step]; + return token.equals("message") && tokens.length>=step+next_token(tokens,step); + } + + /** + * token_name + * message + * */ + @Override + public int next_token(String[] tokens, int step) { + ArrayList msg_arr = BaseScript.get_string(tokens, step+1); + return 1+msg_arr.size()+BaseScript.get_dynamic_tokens(BaseScript.get_optional_args( + tokens, + step+1+msg_arr.size(), + optional_args + )); + } + + @Override + public boolean handle(String[] tokens, int step, ExecutionContext executionContext) { + String token = tokens[step]; + if (!token.equals("message")) + return false; + + ArrayList msg_arr = BaseScript.get_string(tokens, step+1); + String msg = BaseScript.get_if_variable(String.join(" ", msg_arr),executionContext); + + Map args = BaseScript.get_optional_args( + tokens, + step+1+msg_arr.size(), + optional_args, + executionContext + ); + + MessagePacket packet = new MessagePacket(msg); + if (args.containsKey("player")) { + Player player = parseAsPlayer(BaseScript.get_if_variable(args.get("player"), executionContext)); + if (player == null) { + BaseScript.log_token_error(this, "Failed to parse player."); + return false; + } + packet.setupAndSend(ServerSingletons.getConnection(player)); + } else { + if (args.containsKey("zone")) { + String zoneId = BaseScript.get_if_variable(args.get("zone"), executionContext); + Zone zone = GameSingletons.world.getZoneIfExists(zoneId); + if (zone != null) + ServerSingletons.SERVER.broadcast(zone, packet); + } + else + for (Zone wz : GameSingletons.world.getZones()) + ServerSingletons.SERVER.broadcast(wz, packet); + } + return true; + } +} diff --git a/src/main/java/net/pietru/cookie_utils/scripting/tokens/TokenParticle.java b/src/main/java/net/pietru/cookie_utils/scripting/tokens/TokenParticle.java index 6c8ede3..4872206 100644 --- a/src/main/java/net/pietru/cookie_utils/scripting/tokens/TokenParticle.java +++ b/src/main/java/net/pietru/cookie_utils/scripting/tokens/TokenParticle.java @@ -40,11 +40,7 @@ public class TokenParticle implements BaseToken { @Override public boolean canHandle(String[] tokens, int step) { String token = tokens[step]; - return token.equals("particle") && tokens.length>=step+5+BaseScript.get_dynamic_tokens(BaseScript.get_optional_args( - tokens, - step+5, - optional_args - )); + return token.equals("particle") && tokens.length>=step+next_token(tokens,step); } /** @@ -56,11 +52,11 @@ public class TokenParticle implements BaseToken { * */ @Override public int next_token(String[] tokens, int step) { - return 5+BaseScript.get_optional_args( + return 5+BaseScript.get_dynamic_tokens(BaseScript.get_optional_args( tokens, step+5, optional_args - ).size()*2; + )); } @Override diff --git a/src/main/java/net/pietru/cookie_utils/scripting/tokens/TokenPlayer.java b/src/main/java/net/pietru/cookie_utils/scripting/tokens/TokenPlayer.java index aa0fbf0..066c31c 100644 --- a/src/main/java/net/pietru/cookie_utils/scripting/tokens/TokenPlayer.java +++ b/src/main/java/net/pietru/cookie_utils/scripting/tokens/TokenPlayer.java @@ -30,11 +30,7 @@ public class TokenPlayer implements BaseToken { @Override public boolean canHandle(String[] tokens, int step) { String token = tokens[step]; - return token.equals("player") && tokens.length>=step+2+BaseScript.get_optional_args( - tokens, - step, - optional_args - ).size()*2; + return token.equals("player") && tokens.length>=step+next_token(tokens,step); } /**