From ce97ad3c86dd893d90718c92370fe0b64b37b016 Mon Sep 17 00:00:00 2001 From: pietru2004 <51274570+pietru2004@users.noreply.github.com> Date: Mon, 28 Oct 2024 09:41:24 +0100 Subject: [PATCH] add setup, add setting and clearing groups --- readme.md | 4 +- .../pietru/cookie_utils/api/TextCommands.java | 29 ++++++ .../permissions/ObjectPermList.java | 9 ++ .../cookie_utils/permissions/Permissions.java | 10 ++ .../net/pietru/cookie_utils/setups/Setup.java | 63 +++++++++++++ .../cookie_utils/setups/regionSetup.java | 94 +++++++++++++++++++ .../cookie_utils/setups/setupCreator.java | 21 +++++ src/main/resources/quilt.mod.json | 2 +- 8 files changed, 229 insertions(+), 3 deletions(-) create mode 100644 src/main/java/net/pietru/cookie_utils/setups/Setup.java create mode 100644 src/main/java/net/pietru/cookie_utils/setups/regionSetup.java create mode 100644 src/main/java/net/pietru/cookie_utils/setups/setupCreator.java diff --git a/readme.md b/readme.md index b161f55..56016db 100644 --- a/readme.md +++ b/readme.md @@ -3,8 +3,8 @@ Server sideMod/Plugin for game Cosmic Reach.\ Based on the example mod for the [Cosmic Quilt](https://codeberg.org/CRModders/cosmic-quilt) Loader ## Mod requires -- Cosmic Reach (0.3.2-pre5 +) -- Cosmic Quilt (2.3.2+) +- Cosmic Reach (0.3.2-pre10 +) +- Cosmic Quilt (2.3.1+)

diff --git a/src/main/java/net/pietru/cookie_utils/api/TextCommands.java b/src/main/java/net/pietru/cookie_utils/api/TextCommands.java index f990055..6bf8f38 100644 --- a/src/main/java/net/pietru/cookie_utils/api/TextCommands.java +++ b/src/main/java/net/pietru/cookie_utils/api/TextCommands.java @@ -9,9 +9,11 @@ import finalforeach.cosmicreach.networking.server.ServerSingletons; import finalforeach.cosmicreach.savelib.utils.TriConsumer; import io.netty.channel.ChannelHandlerContext; import net.pietru.cookie_utils.permissions.Permissions; +import net.pietru.cookie_utils.setups.Setup; import java.util.HashMap; import java.util.Map; +import java.util.Objects; import static net.pietru.cookie_utils.api.Region.reload_area_player_perms; import static net.pietru.cookie_utils.api.Region.reload_regions; @@ -57,6 +59,22 @@ public class TextCommands { packet.playerUniqueId=account.getUniqueId(); packet.setupAndSend(channelHandlerContext); }); + commands.put("setup",(args, networkIdentity, channelHandlerContext) -> { + Account account = ServerSingletons.getAccount(networkIdentity); + boolean started = false; + if (args.length==2) + started = Setup.start(account.getUniqueId(),args[1]); + + MessagePacket packet = new MessagePacket(started ? "Starting setup.." : "Failed to start setup..."); + packet.playerUniqueId=account.getUniqueId(); + packet.setupAndSend(channelHandlerContext); + + if (started){ + packet = new MessagePacket(Setup.setups.get(account.getUniqueId()).get_step_hint()); + packet.playerUniqueId=account.getUniqueId(); + packet.setupAndSend(channelHandlerContext); + } + }); commands.put("perm_code",(args, networkIdentity, channelHandlerContext) -> { @@ -75,6 +93,17 @@ public class TextCommands { } }); + commands.put("group",(args, networkIdentity, channelHandlerContext) -> { + if (args.length==4) { + if (Objects.equals(args[1], "set")) + Permissions.set_group(args[2],args[3]); + } + else if (args.length==3) { + if (Objects.equals(args[1], "clear")) + Permissions.clear_group(args[2]); + } + }); + commands.put("reload_regions",(args, networkIdentity, channelHandlerContext) -> { MessagePacket packet = null; diff --git a/src/main/java/net/pietru/cookie_utils/permissions/ObjectPermList.java b/src/main/java/net/pietru/cookie_utils/permissions/ObjectPermList.java index 13443ce..4737dde 100644 --- a/src/main/java/net/pietru/cookie_utils/permissions/ObjectPermList.java +++ b/src/main/java/net/pietru/cookie_utils/permissions/ObjectPermList.java @@ -32,4 +32,13 @@ public class ObjectPermList { val.addChild("canExplode", new JsonValue(false)); val.addChild("canEnter", new JsonValue(true)); } + + public static void get_default_perms(ObjectPermList val){ + val.set_bool_perm("canPlace", false); + val.set_bool_perm("canBreak", false); + val.set_bool_perm("canInteract", false); + + val.set_bool_perm("canExplode", false); + val.set_bool_perm("canEnter", true); + } } diff --git a/src/main/java/net/pietru/cookie_utils/permissions/Permissions.java b/src/main/java/net/pietru/cookie_utils/permissions/Permissions.java index 594f4af..e826e8b 100644 --- a/src/main/java/net/pietru/cookie_utils/permissions/Permissions.java +++ b/src/main/java/net/pietru/cookie_utils/permissions/Permissions.java @@ -114,6 +114,16 @@ public class Permissions { return has_user_special_perm(playerId) || group.has_perm(perm); } + public static void set_group(String playerId,String group){ + player_group.put(playerId,group); + reload_player_groups(false); + } + + public static void clear_group(String playerId){ + player_group.remove(playerId); + reload_player_groups(false); + } + ///////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////// ///////////sudo code///////////////////////////////////////////////////////////////// diff --git a/src/main/java/net/pietru/cookie_utils/setups/Setup.java b/src/main/java/net/pietru/cookie_utils/setups/Setup.java new file mode 100644 index 0000000..8b3755d --- /dev/null +++ b/src/main/java/net/pietru/cookie_utils/setups/Setup.java @@ -0,0 +1,63 @@ +package net.pietru.cookie_utils.setups; + +import com.badlogic.gdx.math.Vector3; +import finalforeach.cosmicreach.blocks.BlockPosition; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +public abstract class Setup { + + public static Map setups = new HashMap<>(); + + public static boolean start(String playerId, String setupId){ + if (!setups.containsKey(playerId)) + return false; + Setup setup = setupCreator.get(setupId); + if (setup==null) + return false; + setups.put(playerId,setup); + return true; + } + + + public boolean isActive = true; + public int step = 0; + public ArrayList steps = new ArrayList<>(); + public ArrayList step_hints = new ArrayList<>(); + + public abstract void register(); + + public void run_step(){ + if (!isActive) + return; + if (steps.size()<=step) { + isActive=false; + run_setup_finish(); + return; + } + Runnable runnable = steps.get(step); + step++; + runnable.run(); + } + + public String get_step_hint(){ + if (step_hints.size()<=step) { + return ""; + } + return step_hints.get(step); + } + + public abstract String get_setup_perm(); + + public boolean is_last_step(){ + return steps.size()-1 == step; + } + public abstract void run_setup_finish(); + public abstract void run_setup_canceled(); + + public abstract boolean set_setup_text(String value); + public abstract boolean set_setup_vector3(Vector3 value); + public abstract boolean set_setup_block_pos(BlockPosition value); +} diff --git a/src/main/java/net/pietru/cookie_utils/setups/regionSetup.java b/src/main/java/net/pietru/cookie_utils/setups/regionSetup.java new file mode 100644 index 0000000..9c4cddd --- /dev/null +++ b/src/main/java/net/pietru/cookie_utils/setups/regionSetup.java @@ -0,0 +1,94 @@ +package net.pietru.cookie_utils.setups; + +import com.badlogic.gdx.math.Vector3; +import com.badlogic.gdx.utils.Json; +import com.badlogic.gdx.utils.JsonWriter; +import finalforeach.cosmicreach.blocks.BlockPosition; +import finalforeach.cosmicreach.io.SaveLocation; +import net.pietru.cookie_utils.api.Area; +import net.pietru.cookie_utils.permissions.ObjectPermList; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; + +import static net.pietru.cookie_utils.utils.directory_utils.get_path_string; + +public class regionSetup extends Setup { + Vector3 p1; + Vector3 p2; + String name=""; + + Area area; + + public regionSetup() { + steps.add(()->{}); + steps.add(()->{}); + steps.add(()->{ + area = new Area(); + area.enabled=true; + ObjectPermList.get_default_perms(area.perms); + area.setCorners(p1,p2); + if (!name.endsWith(".json")) + name+=".json"; + run_setup_finish(); + }); + + step_hints.add("Please select first position..."); + step_hints.add("Please select second position..."); + step_hints.add("Please enter region name (single word)..."); + } + + @Override + public void register() { + setupCreator.registerSetupCreator("region", regionSetup::new); + } + + @Override + public String get_setup_perm() { + return "setup.region"; + } + + @Override + public void run_setup_finish() { + isActive=false; + File area_file = new File(get_path_string(SaveLocation.getSaveFolder().getPath(),"regions",name)); + try { + if (!area_file.exists()) { + Json json = new Json(); + json.setOutputType(JsonWriter.OutputType.json); + BufferedWriter writer = new BufferedWriter(new FileWriter(area_file.getPath())); + writer.write(json.prettyPrint(area)); + writer.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void run_setup_canceled() { + + } + + @Override + public boolean set_setup_text(String value) { + if (step==2) + name=value; + return step==2; + } + + @Override + public boolean set_setup_vector3(Vector3 value) { + return false; + } + + @Override + public boolean set_setup_block_pos(BlockPosition value) { + if (step==0) + p1=new Vector3(value.getGlobalX(),value.getGlobalY(),value.getGlobalZ()); + else if (step==1) + p2=new Vector3(value.getGlobalX(),value.getGlobalY(),value.getGlobalZ()); + return step==0 || step==1; + } +} diff --git a/src/main/java/net/pietru/cookie_utils/setups/setupCreator.java b/src/main/java/net/pietru/cookie_utils/setups/setupCreator.java new file mode 100644 index 0000000..0d67f82 --- /dev/null +++ b/src/main/java/net/pietru/cookie_utils/setups/setupCreator.java @@ -0,0 +1,21 @@ +package net.pietru.cookie_utils.setups; + +import com.badlogic.gdx.utils.ObjectMap; + +public interface setupCreator { + ObjectMap setupCreators = new ObjectMap<>(); + + static void registerSetupCreators() { + regionSetup.register(); + } + + static void registerSetupCreator(String setupId, setupCreator creator) { + setupCreators.put(setupId, creator); + } + + Setup create(); + + static Setup get(String setupId) { + return setupId == null ? null : setupCreators.get(setupId).create(); + } +} diff --git a/src/main/resources/quilt.mod.json b/src/main/resources/quilt.mod.json index a783784..b8b8214 100644 --- a/src/main/resources/quilt.mod.json +++ b/src/main/resources/quilt.mod.json @@ -31,7 +31,7 @@ "depends": [ { "id": "cosmic_quilt", - "versions": ">=2.0.2" + "versions": ">=2.3.1" }, { "id": "cosmic_reach",