diff --git a/src/main/java/carpet/mixins/SpawnHelperMixin.java b/src/main/java/carpet/mixins/SpawnHelperMixin.java index b8e07c76..edfb9500 100644 --- a/src/main/java/carpet/mixins/SpawnHelperMixin.java +++ b/src/main/java/carpet/mixins/SpawnHelperMixin.java @@ -153,7 +153,8 @@ public class SpawnHelperMixin value = "INVOKE", target = "Lnet/minecraft/server/world/ServerWorld;spawnEntityAndPassengers(Lnet/minecraft/entity/Entity;)V" )) - private static void spawnEntity(ServerWorld world, Entity entity_1) + private static void spawnEntity(ServerWorld world, Entity entity_1, + SpawnGroup group, ServerWorld world2, Chunk chunk, BlockPos pos, SpawnHelper.Checker checker, SpawnHelper.Runner runner) { if (CarpetSettings.lagFreeSpawning) // we used the mob - next time we will create a new one when needed @@ -164,7 +165,7 @@ public class SpawnHelperMixin SpawnReporter.registerSpawn( //world.method_27983(), // getDimensionType //dimension.getType(), // getDimensionType (MobEntity) entity_1, - entity_1.getType().getSpawnGroup(), + group, //entity_1.getType().getSpawnGroup(), entity_1.getBlockPos()); } if (!SpawnReporter.mock_spawns) diff --git a/src/main/java/carpet/utils/SpawnReporter.java b/src/main/java/carpet/utils/SpawnReporter.java index 2e43a416..6e21bcb2 100644 --- a/src/main/java/carpet/utils/SpawnReporter.java +++ b/src/main/java/carpet/utils/SpawnReporter.java @@ -5,6 +5,7 @@ import carpet.mixins.WeightedPickerEntryMixin; import it.unimi.dsi.fastutil.objects.Object2IntMap; import it.unimi.dsi.fastutil.objects.Object2LongMap; import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap; +import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.entity.Entity; import net.minecraft.entity.SpawnGroup; @@ -15,6 +16,7 @@ import net.minecraft.entity.SpawnReason; import net.minecraft.entity.mob.MobEntity; import net.minecraft.entity.passive.OcelotEntity; import net.minecraft.server.MinecraftServer; +import net.minecraft.tag.BlockTags; import net.minecraft.text.BaseText; import net.minecraft.server.world.ServerWorld; import net.minecraft.util.DyeColor; @@ -368,8 +370,8 @@ public class SpawnReporter { there_are_mobs_to_list = true; double hours = overall_spawn_ticks.get(code)/72000.0; - report.add(Messenger.s(String.format(" > %s (%.1f min), %.1f m/t, {%.1f%%F / %.1f%%- / %.1f%%+}; %.2f s/att", - getWorldCode(dim), + report.add(Messenger.s(String.format(" > %s%s (%.1f min), %.1f m/t, %%{%.1fF %.1f- %.1f+}; %.2f s/att", + enumcreaturetype.getName().substring(0,3), getWorldCode(dim), 60*hours, (1.0D*spawn_cap_count.get(code))/ spawn_attempts.get(code), (100.0D*spawn_ticks_full.get(code))/ spawn_attempts.get(code), @@ -475,9 +477,17 @@ public class SpawnReporter if ( SpawnRestriction.canSpawn(etype,worldIn, SpawnReason.NATURAL, pos, worldIn.random) && SpawnHelper.canSpawn(SpawnRestriction.getLocation(etype), worldIn, pos, etype) && - mob.canSpawn(worldIn, SpawnReason.NATURAL) // && mob.canSpawn(worldIn) // entity collisions + mob.canSpawn(worldIn, SpawnReason.NATURAL) + // && mob.canSpawn(worldIn) // entity collisions // mostly - except ocelots ) { + if (etype == EntityType.OCELOT) + { + BlockState blockState = worldIn.getBlockState(pos.down()); + if ((pos.getY() < worldIn.getSeaLevel()) || !(blockState.isOf(Blocks.GRASS_BLOCK) || blockState.isIn(BlockTags.LEAVES))) { + continue; + } + } will_spawn += 1; } }