Skip to content

Commit

Permalink
Make Furious Zombies spawn naturally
Browse files Browse the repository at this point in the history
  • Loading branch information
IcarussOne committed Sep 27, 2024
1 parent 82ab558 commit fcf2b2a
Show file tree
Hide file tree
Showing 6 changed files with 81 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -54,6 +55,7 @@ public void init(FMLInitializationEvent event) {

@EventHandler
public void postinit(FMLPostInitializationEvent event) {
CREntities.registerEntitySpawns();
CRCompatHandler.postInit();
}
}
16 changes: 16 additions & 0 deletions src/main/java/mod/icarus/crimsonrevelations/config/CRConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
15 changes: 14 additions & 1 deletion src/main/java/mod/icarus/crimsonrevelations/init/CREntities.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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 {
Expand All @@ -24,8 +30,15 @@ public static void registerEntities(RegistryEvent.Register<EntityEntry> 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<? extends Entity> clazz, int id, int trackingRange, int updateFrequency, boolean sendVelocityUpdates, int eggColor1, int eggColor2) {
Expand Down
23 changes: 23 additions & 0 deletions src/main/java/mod/icarus/crimsonrevelations/init/CRRegistry.java
Original file line number Diff line number Diff line change
@@ -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;

Expand All @@ -32,4 +38,21 @@ public static <T extends IForgeRegistryEntry> 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<? extends Entity> spawn) {
List<Biome> biomes = new ArrayList<>();

for (Biome biome : Biome.REGISTRY) {
List<Biome.SpawnListEntry> spawnList = biome.getSpawnableList(EnumCreatureType.MONSTER);

for (Biome.SpawnListEntry list : spawnList)
if (list.entityClass == spawn) {
biomes.add(biome);
break;
}
}

return biomes.toArray(new Biome[0]);
}
}
Original file line number Diff line number Diff line change
@@ -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();
}
}
}
3 changes: 2 additions & 1 deletion src/main/resources/mixins.crimsonrevelations.entities.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
"mixins": [
"EntityCultistClericMixin",
"EntityCultistKnightMixin",
"EntityCultistPortalLesserMixin"
"EntityCultistPortalLesserMixin",
"EntityGiantBrainyZombieMixin"
],
"client": [],
"server": []
Expand Down

0 comments on commit fcf2b2a

Please sign in to comment.