diff --git a/src/main/java/net/pietru/cookie_utils/api/Region.java b/src/main/java/net/pietru/cookie_utils/api/Region.java index f88174c..8a54f33 100644 --- a/src/main/java/net/pietru/cookie_utils/api/Region.java +++ b/src/main/java/net/pietru/cookie_utils/api/Region.java @@ -185,6 +185,7 @@ public class Region { perms.set_bool_perm("break", region.getBoolean("break", false)); perms.set_bool_perm("interact", region.getBoolean("interact", false)); perms.set_bool_perm("laser", region.getBoolean("laser", false)); + perms.set_bool_perm("be_laser", region.getBoolean("laser", true)); perms.set_bool_perm("explode", region.getBoolean("explode", false)); perms.set_bool_perm("enter", region.getBoolean("enter", true)); @@ -251,9 +252,24 @@ public class Region { if (!perms_folder.exists()) { perms_folder.mkdirs(); } + + try { + Json json = new Json(); + json.setOutputType(JsonWriter.OutputType.json); + JsonValue def = PlayerAreaPerm.get_default_perms(); + String txt = def.toString(); + BufferedWriter writer = new BufferedWriter(new FileWriter(get_path_string(perms_folder.getPath(),"example.json"))); + writer.write(json.prettyPrint(txt)); + writer.close(); + } catch (Exception e) { + e.printStackTrace(); + } + ArrayList perms = directory_utils.list_files_in_dir_recursive(perms_folder,((dir, name) -> name.endsWith(".json"))); System.out.println("[AREA] Trying to load %s perms.".replace("%s", String.valueOf(perms.size()))); for (File f : perms) { + if (f.getName().equals("example.json")) + continue; JsonValue perm_json; try { perm_json=jsonReader.parse(Gdx.files.absolute(f.getPath())); @@ -261,6 +277,11 @@ public class Region { System.err.println("[AREA] Perms file \"%s\" had encountered exception while loading...".replace("%s", f.getPath())); continue; } + if (perm_json==null){ + System.err.println("[AREA] Perms file \"%s\" had encountered exception while loading...".replace("%s", f.getPath())); + continue; + } + PlayerAreaPerm perm = new PlayerAreaPerm(); perm.player_id=perm_json.getString("player_id", ""); @@ -279,6 +300,7 @@ public class Region { player_perms.set_bool_perm("place", perm_json.getBoolean("place", false)); player_perms.set_bool_perm("break", perm_json.getBoolean("break", false)); player_perms.set_bool_perm("interact", perm_json.getBoolean("interact", false)); + player_perms.set_bool_perm("laser", perm_json.getBoolean("laser", false)); player_perms.set_bool_perm("explode", perm_json.getBoolean("explode", false)); player_perms.set_bool_perm("enter", perm_json.getBoolean("enter", false)); @@ -287,19 +309,6 @@ public class Region { area.player_perms.add(perm); } - - try { - Json json = new Json(); - json.setOutputType(JsonWriter.OutputType.json); - JsonValue def = PlayerAreaPerm.get_default_perms(); - String txt = def.toString(); - BufferedWriter writer = new BufferedWriter(new FileWriter(get_path_string(perms_folder.getPath(),"example.json"))); - writer.write(json.prettyPrint(txt)); - writer.close(); - } catch (Exception e) { - e.printStackTrace(); - } - - System.out.println("[AREA] Loaded %s permissions.".replace("%s",String.valueOf(areas.size))); + System.out.println("[AREA] Loaded %s permissions.".replace("%s",String.valueOf(area.player_perms.size))); } } diff --git a/src/main/java/net/pietru/cookie_utils/mixins/EntityLaserProjectileMixin.java b/src/main/java/net/pietru/cookie_utils/mixins/EntityLaserProjectileMixin.java index 3e6d893..91a6a80 100644 --- a/src/main/java/net/pietru/cookie_utils/mixins/EntityLaserProjectileMixin.java +++ b/src/main/java/net/pietru/cookie_utils/mixins/EntityLaserProjectileMixin.java @@ -10,6 +10,7 @@ import finalforeach.cosmicreach.entities.EntityUniqueId; import finalforeach.cosmicreach.entities.player.Player; import finalforeach.cosmicreach.networking.packets.MessagePacket; import finalforeach.cosmicreach.networking.server.ServerSingletons; +import finalforeach.cosmicreach.savelib.crbin.CRBSerialized; import finalforeach.cosmicreach.util.Axis; import finalforeach.cosmicreach.world.Zone; import net.pietru.cookie_utils.permissions.Permissions; @@ -45,8 +46,11 @@ public class EntityLaserProjectileMixin extends EntityMixin { MessagePacket packet = new MessagePacket("[Server] " + (is_not_reloading ? "Sorry, but this area is under protection." : "Sorry but you can't do this action right now. [Config Reload In Progress]")); packet.setupAndSend(ServerSingletons.getConnection(plr)); } - }else - if (can_edit_block(blockPos, "laser")) + }else { + if (sourceEntityId==null && can_edit_block(blockPos, "be_laser")) ci.cancel(); + else if (can_edit_block(blockPos, "laser")) + ci.cancel(); + } } } 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 f38e00f..a9a6dff 100644 --- a/src/main/java/net/pietru/cookie_utils/permissions/ObjectPermList.java +++ b/src/main/java/net/pietru/cookie_utils/permissions/ObjectPermList.java @@ -35,6 +35,7 @@ public class ObjectPermList { val.addChild("break", new JsonValue(false)); val.addChild("interact", new JsonValue(false)); val.addChild("laser", new JsonValue(false)); + val.addChild("be_laser", new JsonValue(true)); val.addChild("explode", new JsonValue(false)); val.addChild("enter", new JsonValue(true)); @@ -48,6 +49,7 @@ public class ObjectPermList { val.set_bool_perm("break", false); val.set_bool_perm("interact", false); val.set_bool_perm("laser", false); + val.set_bool_perm("be_laser", true); val.set_bool_perm("explode", false); val.set_bool_perm("enter", true);