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",