From fcf2b2a4e9f83bb352e09c166ffeb7eb56bf33ad Mon Sep 17 00:00:00 2001 From: Me <135455255+IcarussOne@users.noreply.github.com> Date: Fri, 27 Sep 2024 05:42:57 -0500 Subject: [PATCH] Make Furious Zombies spawn naturally --- .../NewCrimsonRevelations.java | 2 ++ .../crimsonrevelations/config/CRConfig.java | 16 +++++++++++++ .../crimsonrevelations/init/CREntities.java | 15 +++++++++++- .../crimsonrevelations/init/CRRegistry.java | 23 ++++++++++++++++++ .../entity/EntityGiantBrainyZombieMixin.java | 24 +++++++++++++++++++ .../mixins.crimsonrevelations.entities.json | 3 ++- 6 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 src/main/java/mod/icarus/crimsonrevelations/mixin/entity/EntityGiantBrainyZombieMixin.java diff --git a/src/main/java/mod/icarus/crimsonrevelations/NewCrimsonRevelations.java b/src/main/java/mod/icarus/crimsonrevelations/NewCrimsonRevelations.java index abffb26..38e96a1 100644 --- a/src/main/java/mod/icarus/crimsonrevelations/NewCrimsonRevelations.java +++ b/src/main/java/mod/icarus/crimsonrevelations/NewCrimsonRevelations.java @@ -4,6 +4,7 @@ import mod.icarus.crimsonrevelations.events.CRClientEvents; import mod.icarus.crimsonrevelations.events.CREvents; import mod.icarus.crimsonrevelations.init.CRCreativeTabs; +import mod.icarus.crimsonrevelations.init.CREntities; import mod.icarus.crimsonrevelations.init.CRRecipes; import mod.icarus.crimsonrevelations.init.CRRenderRegistry; import mod.icarus.crimsonrevelations.init.CRResearchRegistry; @@ -54,6 +55,7 @@ public void init(FMLInitializationEvent event) { @EventHandler public void postinit(FMLPostInitializationEvent event) { + CREntities.registerEntitySpawns(); CRCompatHandler.postInit(); } } diff --git a/src/main/java/mod/icarus/crimsonrevelations/config/CRConfig.java b/src/main/java/mod/icarus/crimsonrevelations/config/CRConfig.java index 67fd512..cd1785d 100644 --- a/src/main/java/mod/icarus/crimsonrevelations/config/CRConfig.java +++ b/src/main/java/mod/icarus/crimsonrevelations/config/CRConfig.java @@ -19,6 +19,22 @@ public class CRConfig { public static TAIntegrationSettings thaumic_augmentation_settings = new TAIntegrationSettings(); public static class GeneralSettings { + @Config.Name("Furious Zombie: Spawning") + @Config.Comment("Enables Furious Zombies to spawn naturally. [default: true]") + @Config.RequiresMcRestart + public boolean FURIOUS_ZOMBIE_SPAWNING = true; + + @Config.Name("Furious Zombie: Underground Spawning") + @Config.Comment("Enables Furious Zombies to spawn naturally underground. [default: false]") + @Config.RequiresMcRestart + public boolean FURIOUS_ZOMBIE_UNDERGROUND_SPAWNING = false; + + @Config.Name("Furious Zombie: Spawn Weight") + @Config.Comment("Default spawn weight of Furious Zombies. [default: 5]") + @Config.RangeInt(min = 0, max = 99999) + @Config.RequiresMcRestart + public int FURIOUS_ZOMBIE_WEIGHT = 5; + @Config.Name("Primordial Scribing Tools: Curiosity Chance") @Config.Comment("The chance for a curiosity to be obtained from the Primordial Scribing Tools. [default: 0.3]") @Config.RangeDouble(min = 0.0D, max = 1.0D) diff --git a/src/main/java/mod/icarus/crimsonrevelations/init/CREntities.java b/src/main/java/mod/icarus/crimsonrevelations/init/CREntities.java index ce1a12e..b673f70 100644 --- a/src/main/java/mod/icarus/crimsonrevelations/init/CREntities.java +++ b/src/main/java/mod/icarus/crimsonrevelations/init/CREntities.java @@ -4,8 +4,11 @@ import mod.icarus.crimsonrevelations.config.CRConfig; import mod.icarus.crimsonrevelations.entity.boss.EntityOvergrownTaintacle; import mod.icarus.crimsonrevelations.entity.projectile.EntityPrimalArrow; + import net.minecraft.entity.Entity; +import net.minecraft.entity.EnumCreatureType; import net.minecraft.util.ResourceLocation; + import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.fml.common.Loader; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; @@ -14,6 +17,9 @@ import net.minecraftforge.fml.common.registry.EntityRegistry; import net.minecraftforge.fml.common.registry.GameRegistry; +import thaumcraft.common.entities.monster.EntityBrainyZombie; +import thaumcraft.common.entities.monster.EntityGiantBrainyZombie; + @EventBusSubscriber(modid = NewCrimsonRevelations.MODID) @GameRegistry.ObjectHolder(NewCrimsonRevelations.MODID) public class CREntities { @@ -24,8 +30,15 @@ public static void registerEntities(RegistryEvent.Register event) { //registerEntity("cultist_archer", EntityCultistArcher.class, id++, 64, 3, true, 0x1C1A2F, 0x5649B4); registerEntity("primal_arrow", EntityPrimalArrow.class, id++, 64, 1, true); - if (Loader.isModLoaded("thaumicaugmentation") && CRConfig.mod_integration_settings.TA_INTEGRATION) + if (Loader.isModLoaded("thaumicaugmentation") && CRConfig.mod_integration_settings.TA_INTEGRATION) { registerEntity("overgrown_taintacle", EntityOvergrownTaintacle.class, id++, 64, 3, true, 0x1C1A2F, 0x5649B4); + } + } + + public static void registerEntitySpawns() { + if (CRConfig.general_settings.FURIOUS_ZOMBIE_SPAWNING) { + EntityRegistry.addSpawn(EntityGiantBrainyZombie.class, CRConfig.general_settings.FURIOUS_ZOMBIE_WEIGHT, 1, 1, EnumCreatureType.MONSTER, CRRegistry.getEntityBiomes(EntityBrainyZombie.class)); + } } public static void registerEntity(String name, Class clazz, int id, int trackingRange, int updateFrequency, boolean sendVelocityUpdates, int eggColor1, int eggColor2) { diff --git a/src/main/java/mod/icarus/crimsonrevelations/init/CRRegistry.java b/src/main/java/mod/icarus/crimsonrevelations/init/CRRegistry.java index e8344b7..f6e9864 100644 --- a/src/main/java/mod/icarus/crimsonrevelations/init/CRRegistry.java +++ b/src/main/java/mod/icarus/crimsonrevelations/init/CRRegistry.java @@ -1,12 +1,18 @@ package mod.icarus.crimsonrevelations.init; +import java.util.ArrayList; +import java.util.List; + import javax.annotation.Nonnull; import com.google.common.base.Preconditions; import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EnumCreatureType; import net.minecraft.item.Item; import net.minecraft.util.ResourceLocation; +import net.minecraft.world.biome.Biome; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.registries.IForgeRegistryEntry; @@ -32,4 +38,21 @@ public static T setup(@Nonnull final T entry, @N ((Item) entry).setTranslationKey(registryName.getNamespace() + "." + registryName.getPath()).setCreativeTab(NewCrimsonRevelations.tabCR); return entry; } + + // Gets biomes from selected entity. + public static Biome[] getEntityBiomes(Class spawn) { + List biomes = new ArrayList<>(); + + for (Biome biome : Biome.REGISTRY) { + List spawnList = biome.getSpawnableList(EnumCreatureType.MONSTER); + + for (Biome.SpawnListEntry list : spawnList) + if (list.entityClass == spawn) { + biomes.add(biome); + break; + } + } + + return biomes.toArray(new Biome[0]); + } } diff --git a/src/main/java/mod/icarus/crimsonrevelations/mixin/entity/EntityGiantBrainyZombieMixin.java b/src/main/java/mod/icarus/crimsonrevelations/mixin/entity/EntityGiantBrainyZombieMixin.java new file mode 100644 index 0000000..c6ed8c4 --- /dev/null +++ b/src/main/java/mod/icarus/crimsonrevelations/mixin/entity/EntityGiantBrainyZombieMixin.java @@ -0,0 +1,24 @@ +package mod.icarus.crimsonrevelations.mixin.entity; + +import mod.icarus.crimsonrevelations.config.CRConfig; +import net.minecraft.entity.monster.EntityMob; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import thaumcraft.common.entities.monster.EntityGiantBrainyZombie; + +@Mixin(value = EntityGiantBrainyZombie.class, remap = false) +public class EntityGiantBrainyZombieMixin extends EntityMob { + public EntityGiantBrainyZombieMixin(World world) { + super(world); + } + + @Override + public boolean getCanSpawnHere() { + if (!CRConfig.general_settings.FURIOUS_ZOMBIE_UNDERGROUND_SPAWNING) { + return super.getCanSpawnHere() && this.world.canSeeSky(new BlockPos(this)); + } else { + return super.getCanSpawnHere(); + } + } +} diff --git a/src/main/resources/mixins.crimsonrevelations.entities.json b/src/main/resources/mixins.crimsonrevelations.entities.json index b8d9450..9d19cac 100644 --- a/src/main/resources/mixins.crimsonrevelations.entities.json +++ b/src/main/resources/mixins.crimsonrevelations.entities.json @@ -6,7 +6,8 @@ "mixins": [ "EntityCultistClericMixin", "EntityCultistKnightMixin", - "EntityCultistPortalLesserMixin" + "EntityCultistPortalLesserMixin", + "EntityGiantBrainyZombieMixin" ], "client": [], "server": []