From 1767ab23f840f779afc0d4cf4bbe133f75c5d7ce Mon Sep 17 00:00:00 2001 From: pietru Date: Sat, 2 Nov 2024 00:54:54 +0100 Subject: [PATCH] bugfix in region setup, add anti mob spawn --- build.gradle | 2 +- gradle.properties | 4 +-- .../net/pietru/cookie_utils/api/Region.java | 16 ++++++++++ .../cookie_utils/mixins/MobSpawnerMixin.java | 30 +++++++++++++++++++ .../permissions/ObjectPermList.java | 2 ++ .../cookie_utils/setups/regionSetup.java | 1 + src/main/resources/cookie_utils.mixins.json | 3 +- 7 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 src/main/java/net/pietru/cookie_utils/mixins/MobSpawnerMixin.java diff --git a/build.gradle b/build.gradle index 887ce35..fed4b03 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ repositories { name "Cosmic Reach" url "https://github.com/CRModders/CosmicArchive/raw/main/versions" patternLayout { - artifact "[classifier]/[revision]/client/Cosmic Reach-[revision].jar" + artifact "[classifier]/[revision]/client/Cosmic-Reach-[revision].jar" } // This is required in Gradle 6.0+ as metadata file (ivy.xml) is mandatory metadataSources { diff --git a/gradle.properties b/gradle.properties index dea6a15..ece8822 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,9 +9,9 @@ group=net.pietru id=cookie_utils # Dependency Versions -cosmic_reach_version=0.3.2-pre10 +cosmic_reach_version=0.3.4 # If unspecified, will use the version above -cosmic_reach_server_version=0.3.2-pre10 +cosmic_reach_server_version=0.3.4 cosmic_quilt_version=2.3.1 #2.2.0 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 0f66590..7e5a043 100644 --- a/src/main/java/net/pietru/cookie_utils/api/Region.java +++ b/src/main/java/net/pietru/cookie_utils/api/Region.java @@ -70,6 +70,21 @@ public class Region { return can; } + public static boolean can_enter_position(Vector3 position,String action){ + boolean can = is_not_reloading; + + if (is_not_reloading) + for (int i = 0; i< areas.size; i++){ + Area a = areas.get(i); + if (a.enabled && a.does_intersect(position)){ + can=a.get_action_bool(action); + break; + } + } + + return can; + } + public static boolean is_area_user_type(Vector3 position,String player_id,String type){ boolean can = false; @@ -144,6 +159,7 @@ public class Region { perms.set_bool_perm("explode", region.getBoolean("explode", false)); perms.set_bool_perm("enter", region.getBoolean("enter", true)); + perms.set_bool_perm("enter", region.getBoolean("spawn_mob", true)); } diff --git a/src/main/java/net/pietru/cookie_utils/mixins/MobSpawnerMixin.java b/src/main/java/net/pietru/cookie_utils/mixins/MobSpawnerMixin.java new file mode 100644 index 0000000..b2c9d49 --- /dev/null +++ b/src/main/java/net/pietru/cookie_utils/mixins/MobSpawnerMixin.java @@ -0,0 +1,30 @@ +package net.pietru.cookie_utils.mixins; + +import com.badlogic.gdx.math.Vector3; +import com.llamalad7.mixinextras.sugar.Local; +import finalforeach.cosmicreach.entities.MobSpawner; +import finalforeach.cosmicreach.world.Zone; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import static net.pietru.cookie_utils.api.Region.can_enter_position; + +@Mixin(MobSpawner.class) +public class MobSpawnerMixin { + + @Shadow + int numberOfMobs; + @Shadow + private final Vector3 tmpSpawnPackLoc = new Vector3(); + + @Inject(method = "spawnMob", at = @At("HEAD"), cancellable = true) + private void event_spawnMob(CallbackInfo ci, @Local Zone zone){ + if (!can_enter_position(tmpSpawnPackLoc,"spawn_mob")) { + ++numberOfMobs; + 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 883f887..d167efd 100644 --- a/src/main/java/net/pietru/cookie_utils/permissions/ObjectPermList.java +++ b/src/main/java/net/pietru/cookie_utils/permissions/ObjectPermList.java @@ -36,6 +36,7 @@ public class ObjectPermList { val.addChild("explode", new JsonValue(false)); val.addChild("enter", new JsonValue(true)); + val.addChild("spawn_mob", new JsonValue(true)); } public static void get_default_perms(ObjectPermList val){ @@ -45,5 +46,6 @@ public class ObjectPermList { val.set_bool_perm("explode", false); val.set_bool_perm("enter", true); + val.set_bool_perm("spawn_mob", true); } } diff --git a/src/main/java/net/pietru/cookie_utils/setups/regionSetup.java b/src/main/java/net/pietru/cookie_utils/setups/regionSetup.java index b3f3792..ebc50dc 100644 --- a/src/main/java/net/pietru/cookie_utils/setups/regionSetup.java +++ b/src/main/java/net/pietru/cookie_utils/setups/regionSetup.java @@ -32,6 +32,7 @@ public class regionSetup extends Setup { area.setCorners(p1,p2); if (!name.endsWith(".json")) name+=".json"; + area.name=name; run_setup_finish(); }); diff --git a/src/main/resources/cookie_utils.mixins.json b/src/main/resources/cookie_utils.mixins.json index e5958ef..8193ab8 100644 --- a/src/main/resources/cookie_utils.mixins.json +++ b/src/main/resources/cookie_utils.mixins.json @@ -8,8 +8,9 @@ "BlockBreakMixin", "BlockPlaceMixin", "InteractBlockMixin", - "MessagePacketMixin", "LoginPacketMixin", + "MessagePacketMixin", + "MobSpawnerMixin", "PlayerPositionMixin", "ServerSingletonsMixin" ],