diff --git a/build.gradle b/build.gradle index e7e40fe0..0a206e0a 100644 --- a/build.gradle +++ b/build.gradle @@ -10,8 +10,8 @@ archivesBaseName = project.archives_base_name version = project.minecraft_version+'-'+project.mod_version+'+v'+new Date().format('yyMMdd') group = project.maven_group -minecraft { - accessWidener "src/main/resources/carpet.accesswidener" +loom { + accessWidenerPath = file("src/main/resources/carpet.accesswidener") } dependencies { diff --git a/gradle.properties b/gradle.properties index 1d284125..82e7a3cd 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,8 +4,8 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties # check these on https://fabricmc.net/use # or better: https://modmuss50.me/fabric.html - minecraft_version=1.18_experimental-snapshot-2 - yarn_mappings=1.18_experimental-snapshot-2+build.3 + minecraft_version=1.18_experimental-snapshot-3 + yarn_mappings=1.18_experimental-snapshot-3+build.1 loader_version=0.11.6 fabric_version=0.37.2+1.18_experimental diff --git a/src/main/java/carpet/commands/SpawnCommand.java b/src/main/java/carpet/commands/SpawnCommand.java index 1f9010d4..68c17e63 100644 --- a/src/main/java/carpet/commands/SpawnCommand.java +++ b/src/main/java/carpet/commands/SpawnCommand.java @@ -1,6 +1,7 @@ package carpet.commands; import carpet.CarpetSettings; +import carpet.fakes.SpawnGroupInterface; import carpet.helpers.HopperCounter; import carpet.helpers.TickSpeed; import carpet.settings.SettingsManager; @@ -251,7 +252,7 @@ public class SpawnCommand private static int setMobcaps(ServerCommandSource source, int hostile_cap) { - double desired_ratio = (double)hostile_cap/ SpawnGroup.MONSTER.getCapacity(); + double desired_ratio = (double)hostile_cap/ ((SpawnGroupInterface)(Object)SpawnGroup.MONSTER).getInitialSpawnCap(); SpawnReporter.mobcap_exponent = 4.0*Math.log(desired_ratio)/Math.log(2.0); Messenger.m(source, String.format("gi Mobcaps for hostile mobs changed to %d, other groups will follow", hostile_cap)); return 1; diff --git a/src/main/java/carpet/fakes/SpawnGroupInterface.java b/src/main/java/carpet/fakes/SpawnGroupInterface.java new file mode 100644 index 00000000..6f28807e --- /dev/null +++ b/src/main/java/carpet/fakes/SpawnGroupInterface.java @@ -0,0 +1,6 @@ +package carpet.fakes; + +public interface SpawnGroupInterface +{ + int getInitialSpawnCap(); +} diff --git a/src/main/java/carpet/mixins/SpawnGroup_spawnMixin.java b/src/main/java/carpet/mixins/SpawnGroup_spawnMixin.java new file mode 100644 index 00000000..bbad9dda --- /dev/null +++ b/src/main/java/carpet/mixins/SpawnGroup_spawnMixin.java @@ -0,0 +1,29 @@ +package carpet.mixins; + +import carpet.fakes.SpawnGroupInterface; +import carpet.utils.SpawnReporter; +import net.minecraft.entity.SpawnGroup; +import org.spongepowered.asm.mixin.Final; +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.CallbackInfoReturnable; + +@Mixin(SpawnGroup.class) +public class SpawnGroup_spawnMixin implements SpawnGroupInterface +{ + @Shadow @Final private int capacity; + + @Inject(method = "getCapacity", at = @At("HEAD"), cancellable = true) + private void getModifiedCapacity(CallbackInfoReturnable cir) + { + cir.setReturnValue ((int) ((double)capacity*(Math.pow(2.0,(SpawnReporter.mobcap_exponent/4))))); + } + + @Override + public int getInitialSpawnCap() + { + return capacity; + } +} diff --git a/src/main/java/carpet/mixins/SpawnHelperInnerMixin.java b/src/main/java/carpet/mixins/SpawnHelperInnerMixin.java index 2f4478b2..d5d863fd 100644 --- a/src/main/java/carpet/mixins/SpawnHelperInnerMixin.java +++ b/src/main/java/carpet/mixins/SpawnHelperInnerMixin.java @@ -20,15 +20,15 @@ public class SpawnHelperInnerMixin implements SpawnHelperInnerInterface @Shadow @Final private GravityField densityField; - @Shadow @Final private Object2IntOpenHashMap groupToCount; + //@Shadow @Final private Object2IntOpenHashMap groupToCount; - @Inject(method = "isBelowCap", at = @At("HEAD"), cancellable = true) + /*@Inject(method = "isBelowCap", at = @At("HEAD"), cancellable = true) private void changeMobCaps(SpawnGroup entityCategory, CallbackInfoReturnable cir) { int newCap = (int) ((double)entityCategory.getCapacity()*(Math.pow(2.0,(SpawnReporter.mobcap_exponent/4)))); int i = newCap * spawningChunkCount / SpawnReporter.MAGIC_NUMBER; cir.setReturnValue(groupToCount.getInt(entityCategory) < i); - } + }*/ diff --git a/src/main/java/carpet/mixins/SpawnHelperMixin.java b/src/main/java/carpet/mixins/SpawnHelperMixin.java index 4f4b7c75..df3a3331 100644 --- a/src/main/java/carpet/mixins/SpawnHelperMixin.java +++ b/src/main/java/carpet/mixins/SpawnHelperMixin.java @@ -282,7 +282,7 @@ public class SpawnHelperMixin if ((spawnAnimals || !entityCategory.isPeaceful()) && (spawnMonsters || entityCategory.isPeaceful()) && (shouldSpawnAnimals || !entityCategory.isRare()) ) { RegistryKey dim = world.getRegistryKey(); // getDimensionType; - int newCap = (int) ((double)entityCategory.getCapacity()*(Math.pow(2.0,(SpawnReporter.mobcap_exponent/4)))); + int newCap = entityCategory.getCapacity(); //(int) ((double)entityCategory.getCapacity()*(Math.pow(2.0,(SpawnReporter.mobcap_exponent/4)))); int int_2 = SpawnReporter.chunkCounts.get(dim); // eligible chunks for spawning int int_3 = newCap * int_2 / CHUNK_AREA; //current spawning limits int mobCount = info.getGroupToCount().getInt(entityCategory); @@ -303,7 +303,7 @@ public class SpawnHelperMixin SpawnReporter.spawn_cap_count.get(key) + mobCount); } - if (mobCount <= int_3 || SpawnReporter.mock_spawns) + if (mobCount <= int_3 || SpawnReporter.mock_spawns) //TODO this will not float with player based mobcaps { //place 0 to indicate there were spawn attempts for a category //if (entityCategory != EntityCategory.CREATURE || world.getServer().getTicks() % 400 == 0) diff --git a/src/main/java/carpet/script/api/Monitoring.java b/src/main/java/carpet/script/api/Monitoring.java index 5be0ee9a..becfe31e 100644 --- a/src/main/java/carpet/script/api/Monitoring.java +++ b/src/main/java/carpet/script/api/Monitoring.java @@ -52,7 +52,7 @@ public class Monitoring { Map retDict = new HashMap<>(); for (SpawnGroup category: mobcounts.keySet()) { - int currentCap = (int)(category.getCapacity() * chunks / SpawnReporter.currentMagicNumber()); // MAGIC_NUMBER + int currentCap = (int)(category.getCapacity() * chunks / SpawnReporter.MAGIC_NUMBER); retDict.put( new StringValue(category.asString().toLowerCase(Locale.ROOT)), ListValue.of( @@ -67,7 +67,7 @@ public class Monitoring { if (cat == null) throw new InternalExpressionException("Unreconized mob category: "+catString); return ListValue.of( new NumericValue(mobcounts.getInt(cat)), - new NumericValue((int)(cat.getCapacity() * chunks / SpawnReporter.currentMagicNumber())) + new NumericValue((int)(cat.getCapacity() * chunks / SpawnReporter.MAGIC_NUMBER)) ); }); } diff --git a/src/main/java/carpet/script/utils/WorldTools.java b/src/main/java/carpet/script/utils/WorldTools.java index 3fb82e87..11e83f62 100644 --- a/src/main/java/carpet/script/utils/WorldTools.java +++ b/src/main/java/carpet/script/utils/WorldTools.java @@ -110,7 +110,7 @@ public class WorldTools //chunkGenerator2 = GeneratorOptions.createOverworldGenerator(server.getRegistryManager().get(Registry.BIOME_KEY), server.getRegistryManager().get(Registry.NOISE_SETTINGS_WORLDGEN), (seed==null)?l:seed); // from world/gen/GeneratorOptions - chunkGenerator2 = new NoiseChunkGenerator(MultiNoiseBiomeSource.method_35242(server.getRegistryManager().get(Registry.BIOME_KEY), seed), seed, () -> { + chunkGenerator2 = new NoiseChunkGenerator(MultiNoiseBiomeSource.createVanillaSource(server.getRegistryManager().get(Registry.BIOME_KEY), seed), seed, () -> { return server.getRegistryManager().get(Registry.CHUNK_GENERATOR_SETTINGS_KEY).getOrThrow(ChunkGeneratorSettings.OVERWORLD); }); diff --git a/src/main/java/carpet/utils/SpawnReporter.java b/src/main/java/carpet/utils/SpawnReporter.java index 87d2cfcd..9178781a 100644 --- a/src/main/java/carpet/utils/SpawnReporter.java +++ b/src/main/java/carpet/utils/SpawnReporter.java @@ -95,10 +95,10 @@ public class SpawnReporter } public static final int MAGIC_NUMBER = (int)Math.pow(17.0D, 2.0D); - public static double currentMagicNumber() + /*public static double currentMagicNumber() { return MAGIC_NUMBER / (Math.pow(2.0,(SpawnReporter.mobcap_exponent/4))); - } + }*/ public static List printMobcapsForDimension(ServerWorld world, boolean multiline) { @@ -120,7 +120,7 @@ public class SpawnReporter for (SpawnGroup enumcreaturetype : SpawnGroup.values()) { int cur = dimCounts.getOrDefault(enumcreaturetype, -1); - int max = (int)(chunkcount * ((double)enumcreaturetype.getCapacity() / currentMagicNumber())); // from ServerChunkManager.CHUNKS_ELIGIBLE_FOR_SPAWNING + int max = (int)(chunkcount * ((double)enumcreaturetype.getCapacity() / MAGIC_NUMBER)); // from ServerChunkManager.CHUNKS_ELIGIBLE_FOR_SPAWNING String color = Messenger.heatmap_color(cur, max); String mobColor = Messenger.creatureTypeColor(enumcreaturetype); if (multiline) diff --git a/src/main/resources/carpet.mixins.json b/src/main/resources/carpet.mixins.json index 40d083d7..ac67391f 100644 --- a/src/main/resources/carpet.mixins.json +++ b/src/main/resources/carpet.mixins.json @@ -7,6 +7,7 @@ "BarrierBlock_updateSuppressionBlockMixin", "SpawnHelperInnerMixin", + "SpawnGroup_spawnMixin", "CommandManagerMixin", "ServerPlayNetworkHandlerMixin",