alpha mantis boss, mantis spin fix, overworld mantis spawns, elythia turtle fix

This commit is contained in:
craisinlord committed 2026-07-05 23:22:55 -05:00
1 parent fe2e4d55a4
commit ebf8abcdbd
24 files changed
+509 -5

No files matched your search

@@ -100,6 +100,12 @@ public final class AntarchySettings {
private static double mantisMovementSpeed = 0.42D;
private static double mantisFlyingSpeed = 0.77D;
private static boolean mantisIgnoreLightLevel = false;
private static double alphaMantisHealth = 500.0D;
private static double alphaMantisAttackDamage = 18.0D;
private static double alphaMantisMovementSpeed = 0.42D;
private static double alphaMantisFlyingSpeed = 0.77D;
private static int alphaMantisSummonIntervalTicks = 300;
private static int alphaMantisMaxMinions = 4;
private static double krakenProjectileDamageTakenMultiplier = 0.5D;
private static boolean krakenSquidSpawnEnabled = true;
private static boolean krakenMassSpawnEnabled = true;
@@ -789,6 +795,30 @@ public final class AntarchySettings {
mantisIgnoreLightLevel = value;
}
public static double alphaMantisHealth() {
return alphaMantisHealth;
}
public static double alphaMantisAttackDamage() {
return alphaMantisAttackDamage;
}
public static double alphaMantisMovementSpeed() {
return alphaMantisMovementSpeed;
}
public static double alphaMantisFlyingSpeed() {
return alphaMantisFlyingSpeed;
}
public static int alphaMantisSummonIntervalTicks() {
return alphaMantisSummonIntervalTicks;
}
public static int alphaMantisMaxMinions() {
return alphaMantisMaxMinions;
}
public static double waspHealth() {
return waspHealth;
}
@@ -1193,6 +1223,30 @@ public final class AntarchySettings {
mantisFlyingSpeed = value;
}
public static void setAlphaMantisHealth(double value) {
alphaMantisHealth = value;
}
public static void setAlphaMantisAttackDamage(double value) {
alphaMantisAttackDamage = value;
}
public static void setAlphaMantisMovementSpeed(double value) {
alphaMantisMovementSpeed = value;
}
public static void setAlphaMantisFlyingSpeed(double value) {
alphaMantisFlyingSpeed = value;
}
public static void setAlphaMantisSummonIntervalTicks(int value) {
alphaMantisSummonIntervalTicks = value;
}
public static void setAlphaMantisMaxMinions(int value) {
alphaMantisMaxMinions = value;
}
public static void setKrakenProjectileDamageTakenMultiplier(double value) {
krakenProjectileDamageTakenMultiplier = value;
}
@@ -0,0 +1,23 @@
package com.craisinlord.antarchy.content.client.model;
import com.craisinlord.antarchy.Antarchy;
import com.craisinlord.antarchy.content.entity.AlphaMantisEntity;
import net.minecraft.resources.ResourceLocation;
import software.bernie.geckolib.model.GeoModel;
public class AlphaMantisModel extends GeoModel<AlphaMantisEntity> {
@Override
public ResourceLocation getModelResource(AlphaMantisEntity animatable) {
return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/mantis.geo.json");
}
@Override
public ResourceLocation getTextureResource(AlphaMantisEntity animatable) {
return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/mantis_alpha.png");
}
@Override
public ResourceLocation getAnimationResource(AlphaMantisEntity animatable) {
return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/mantis.animation.json");
}
}
@@ -0,0 +1,15 @@
package com.craisinlord.antarchy.content.client.renderer;
import com.craisinlord.antarchy.content.client.model.AlphaMantisModel;
import com.craisinlord.antarchy.content.entity.AlphaMantisEntity;
import net.minecraft.client.renderer.entity.EntityRendererProvider;
import software.bernie.geckolib.renderer.GeoEntityRenderer;
public class AlphaMantisRenderer extends GeoEntityRenderer<AlphaMantisEntity> {
public AlphaMantisRenderer(EntityRendererProvider.Context context) {
super(context, new AlphaMantisModel());
this.shadowRadius = 1.5F;
// Mantis renders at 1.25x; the alpha is 1.5x bigger overall
this.withScale(1.875F);
}
}
@@ -0,0 +1,184 @@
package com.craisinlord.antarchy.content.entity;
import com.craisinlord.antarchy.config.AntarchySettings;
import com.craisinlord.antarchy.content.AntarchyObjects;
import com.craisinlord.antarchy.content.AntarchyTags;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.network.chat.Component;
import net.minecraft.server.level.ServerBossEvent;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.util.RandomSource;
import net.minecraft.world.BossEvent;
import net.minecraft.world.Difficulty;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.Mob;
import net.minecraft.world.entity.MobSpawnType;
import net.minecraft.world.entity.ai.attributes.AttributeSupplier;
import net.minecraft.world.entity.ai.attributes.Attributes;
import net.minecraft.world.entity.monster.Monster;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.ServerLevelAccessor;
import net.minecraft.world.level.block.LeavesBlock;
import net.minecraft.world.level.levelgen.Heightmap;
import net.minecraft.world.phys.AABB;
import org.jetbrains.annotations.Nullable;
public class AlphaMantisEntity extends MantisEntity {
private final ServerBossEvent bossEvent =
new ServerBossEvent(Component.translatable("entity.antarchy.alpha_mantis"), BossEvent.BossBarColor.GREEN, BossEvent.BossBarOverlay.PROGRESS);
private int summonCooldownTicks;
public AlphaMantisEntity(EntityType<? extends AlphaMantisEntity> entityType, Level level) {
super(entityType, level);
this.xpReward = 60;
this.summonCooldownTicks = AntarchySettings.alphaMantisSummonIntervalTicks() / 2;
}
public static AttributeSupplier.Builder createAttributes() {
return Mob.createMobAttributes()
.add(Attributes.MAX_HEALTH, AntarchySettings.alphaMantisHealth())
.add(Attributes.ATTACK_DAMAGE, AntarchySettings.alphaMantisAttackDamage())
.add(Attributes.MOVEMENT_SPEED, AntarchySettings.alphaMantisMovementSpeed())
.add(Attributes.FLYING_SPEED, AntarchySettings.alphaMantisFlyingSpeed())
.add(Attributes.FOLLOW_RANGE, 48.0D)
.add(Attributes.ARMOR, 8.0D)
.add(Attributes.KNOCKBACK_RESISTANCE, 0.8D);
}
public static boolean checkAlphaMantisSpawnRules(EntityType<AlphaMantisEntity> entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) {
if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER || spawnReason == MobSpawnType.COMMAND) {
return true;
}
if (level.getDifficulty() == Difficulty.PEACEFUL) {
return false;
}
if (spawnReason != MobSpawnType.NATURAL) {
return false;
}
boolean atSurface = level.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, pos).getY() <= pos.getY();
boolean posOpen = level.isEmptyBlock(pos) && level.isEmptyBlock(pos.above()) && level.getFluidState(pos).isEmpty();
boolean onSolidGround = level.getBlockState(pos.below()).isFaceSturdy(level, pos.below(), Direction.UP)
&& !(level.getBlockState(pos.below()).getBlock() instanceof LeavesBlock);
if (!posOpen || !onSolidGround || !atSurface) {
return false;
}
// Only one alpha at a time in the area
if (!level.getLevel().getEntitiesOfClass(AlphaMantisEntity.class, new AABB(pos).inflate(128.0D), Entity::isAlive).isEmpty()) {
return false;
}
boolean ignoreLightLevel = AntarchySettings.mantisIgnoreLightLevel();
// Daytime overworld spawns can't pass the vanilla darkness check, so no light gate here
if (level.getLevel().isDay() && level.getBiome(pos).is(AntarchyTags.Biomes.MANTIS_OVERWORLD_SPAWN_BIOMES)) {
return level.canSeeSky(pos);
}
if (level.getLevel().isNight() && level.getBiome(pos).is(AntarchyTags.Biomes.MANTIS_SPAWN_BIOMES)) {
return ignoreLightLevel || Monster.checkMonsterSpawnRules(entityType, level, spawnReason, pos, random);
}
return false;
}
@Override
public void tick() {
super.tick();
if (this.level().isClientSide) {
return;
}
if (this.isDeadOrDying()) {
this.bossEvent.setProgress(0.0F);
return;
}
this.bossEvent.setProgress(this.getHealth() / this.getMaxHealth());
this.tickMinionSummon();
}
private void tickMinionSummon() {
LivingEntity target = this.getTarget();
if (target == null || !target.isAlive()) {
return;
}
if (this.summonCooldownTicks > 0) {
this.summonCooldownTicks--;
return;
}
this.summonCooldownTicks = AntarchySettings.alphaMantisSummonIntervalTicks();
if (!(this.level() instanceof ServerLevel serverLevel)) {
return;
}
int nearbyMinions = serverLevel.getEntitiesOfClass(
MantisEntity.class,
this.getBoundingBox().inflate(32.0D),
mantis -> mantis.isAlive() && !(mantis instanceof AlphaMantisEntity)
).size();
int maxMinions = AntarchySettings.alphaMantisMaxMinions();
if (nearbyMinions >= maxMinions) {
return;
}
int toSummon = Math.min(1 + this.random.nextInt(2), maxMinions - nearbyMinions);
for (int i = 0; i < toSummon; i++) {
MantisEntity minion = AntarchyObjects.MANTIS.get().create(serverLevel);
if (minion == null) {
continue;
}
double angle = this.random.nextDouble() * Math.PI * 2.0D;
double distance = 3.0D + this.random.nextDouble() * 3.0D;
minion.moveTo(
this.getX() + Math.cos(angle) * distance,
this.getY() + 0.5D,
this.getZ() + Math.sin(angle) * distance,
this.random.nextFloat() * 360.0F,
0.0F
);
minion.finalizeSpawn(serverLevel, serverLevel.getCurrentDifficultyAt(minion.blockPosition()), MobSpawnType.MOB_SUMMONED, null);
minion.setTarget(target);
serverLevel.addFreshEntity(minion);
}
this.playSound(com.craisinlord.antarchy.content.AntarchySoundEvents.MANTIS_AMBIENT.get(), 2.0F, 0.6F);
}
@Override
public void setTarget(@Nullable LivingEntity target) {
super.setTarget(target);
// A boss that despawns mid-fight is no boss — stay loaded once engaged
if (target != null) {
this.setPersistenceRequired();
}
}
@Override
public void startSeenByPlayer(ServerPlayer player) {
super.startSeenByPlayer(player);
this.bossEvent.addPlayer(player);
}
@Override
public void stopSeenByPlayer(ServerPlayer player) {
super.stopSeenByPlayer(player);
this.bossEvent.removePlayer(player);
}
@Override
public void setCustomName(@Nullable Component name) {
super.setCustomName(name);
this.bossEvent.setName(this.getDisplayName());
}
}
@@ -71,6 +71,7 @@ public class MantisEntity extends Monster implements GeoEntity {
public MantisEntity(EntityType<? extends MantisEntity> entityType, Level level) {
super(entityType, level);
this.lookControl = new SteadyLookControl(this);
this.setNoGravity(false);
this.setPathfindingMalus(PathType.WATER, -1.0F);
this.setPathfindingMalus(PathType.WATER_BORDER, 16.0F);
@@ -117,8 +118,9 @@ public class MantisEntity extends Monster implements GeoEntity {
boolean ignoreLightLevel = AntarchySettings.mantisIgnoreLightLevel();
// Daytime overworld spawns can't pass the vanilla darkness check, so no light gate here
if (level.getLevel().isDay() && level.getBiome(pos).is(AntarchyTags.Biomes.MANTIS_OVERWORLD_SPAWN_BIOMES)) {
return atSurface && level.canSeeSky(pos) && (ignoreLightLevel || Monster.checkMonsterSpawnRules(entityType, level, spawnReason, pos, random));
return atSurface && level.canSeeSky(pos);
}
// Elythia meadow (and any future mantis_spawn_biomes): nighttime, no sky-access requirement
@@ -206,6 +208,14 @@ public class MantisEntity extends Monster implements GeoEntity {
LivingEntity target = this.getTarget();
if (target != null && target.isAlive()) {
this.getLookControl().setLookAt(target, 30.0F, 30.0F);
// If the target is horizontally inside our (wide) footprint, walking toward
// it only makes us pivot in place — hold position, attack reach covers it
double dx = target.getX() - this.getX();
double dz = target.getZ() - this.getZ();
double halfWidth = this.getBbWidth() * 0.5D;
if (!this.isFlyingNow() && dx * dx + dz * dz < halfWidth * halfWidth) {
this.getNavigation().stop();
}
} else if (this.flyBurstTicks <= 0 && this.flyCooldownTicks <= 0 && this.onGround() && this.random.nextInt(180) == 0) {
this.startFlightBurst();
}
@@ -320,6 +330,31 @@ public class MantisEntity extends Monster implements GeoEntity {
return this.flyBurstTicks > 0;
}
/**
* The mantis hitbox is several blocks wide, so a melee-range target is often
* horizontally inside the footprint. The yaw from body center to such a target
* flips wildly as the target moves past the center, which made the mantis spin
* instead of facing the player — hold the current heading in that case.
*/
private static class SteadyLookControl extends net.minecraft.world.entity.ai.control.LookControl {
SteadyLookControl(Mob mob) {
super(mob);
}
@Override
public void tick() {
if (this.lookAtCooldown > 0) {
double dx = this.wantedX - this.mob.getX();
double dz = this.wantedZ - this.mob.getZ();
double halfWidth = this.mob.getBbWidth() * 0.5D;
if (dx * dx + dz * dz < halfWidth * halfWidth) {
return;
}
}
super.tick();
}
}
private void tickDebugLog() {
if (++this.debugLogTicks < 100) {
return;
@@ -378,7 +378,7 @@ public class BigBerthaItem extends SwordItem implements GeoItem {
player.fallDistance = 0.0F;
player.getCooldowns().addCooldown(this, TORETERROR_COOLDOWN_TICKS);
player.awardStat(Stats.ITEM_USED.get(this));
level.playSound(null, player.blockPosition(), SoundEvents.GENERIC_EXPLODE.value(), SoundSource.PLAYERS, 1.0F, 0.6F);
level.playSound(null, player.blockPosition(), AntarchySoundEvents.TORETERROR_JUMP_UP.get(), SoundSource.PLAYERS, 1.2F, 0.9F);
}
private void applyToreterrorLanding(ServerLevel level, ServerPlayer player) {
@@ -394,7 +394,7 @@ public class BigBerthaItem extends SwordItem implements GeoItem {
victim.push(normalized.x * 2.5D, 0.6D, normalized.z * 2.5D);
victim.hurtMarked = true;
}
level.playSound(null, player.blockPosition(), SoundEvents.GENERIC_EXPLODE.value(), SoundSource.PLAYERS, 1.5F, 0.75F);
level.playSound(null, player.blockPosition(), AntarchySoundEvents.TORETERROR_JUMP_LAND.get(), SoundSource.PLAYERS, 1.2F, 0.9F);
level.sendParticles(ParticleTypes.EXPLOSION, player.getX(), player.getY() + 0.5D, player.getZ(), 4, 1.5D, 0.3D, 1.5D, 0.0D);
level.sendParticles(ParticleTypes.SPLASH, player.getX(), player.getY() + 0.5D, player.getZ(), 60, 3.0D, 0.5D, 3.0D, 0.2D);
level.sendParticles(ParticleTypes.CRIT, player.getX(), player.getY() + 0.5D, player.getZ(), 20, 2.0D, 0.5D, 2.0D, 0.1D);
@@ -165,6 +165,7 @@
"entity.antarchy.moleworm": "Moleworm",
"entity.antarchy.molevore": "Molevore",
"entity.antarchy.mantis": "Mantis",
"entity.antarchy.alpha_mantis": "Alpha Mantis",
"entity.antarchy.triffid": "Triffid",
"entity.antarchy.toreterror": "Toreterror",
"entity.antarchy.water_bomb": "Water Bomb",
@@ -402,6 +403,7 @@
"item.antarchy.molevore_spawn_egg": "Molevore Spawn Egg",
"item.antarchy.reverie_spawn_egg": "Reverie Spawn Egg",
"item.antarchy.mantis_spawn_egg": "Mantis Spawn Egg",
"item.antarchy.alpha_mantis_spawn_egg": "Alpha Mantis Spawn Egg",
"biome.antarchy.moleworm_caves": "Moleworm Caves",
"biome.antarchy.butterfly_fields": "Butterfly Fields",
"biome.antarchy.torchflower_fields": "Torchflower Fields",
@@ -0,0 +1,3 @@
{
"parent": "minecraft:item/template_spawn_egg"
}
@@ -0,0 +1,90 @@
{
"type": "minecraft:entity",
"pools": [
{
"rolls": 1.0,
"entries": [
{
"type": "minecraft:item",
"name": "antarchy:mantis_claw"
}
],
"functions": [
{
"function": "minecraft:set_count",
"count": {
"type": "minecraft:uniform",
"min": 3.0,
"max": 4.0
}
},
{
"function": "minecraft:enchanted_count_increase",
"enchantment": "minecraft:looting",
"count": {
"type": "minecraft:uniform",
"min": 0.0,
"max": 2.0
}
}
]
},
{
"rolls": 1.0,
"entries": [
{
"type": "minecraft:item",
"name": "antarchy:uranium_nugget"
}
],
"functions": [
{
"function": "minecraft:set_count",
"count": {
"type": "minecraft:uniform",
"min": 2.0,
"max": 4.0
}
},
{
"function": "minecraft:enchanted_count_increase",
"enchantment": "minecraft:looting",
"count": {
"type": "minecraft:uniform",
"min": 0.0,
"max": 2.0
}
}
]
},
{
"rolls": 1.0,
"entries": [
{
"type": "minecraft:item",
"name": "antarchy:titanium_nugget"
}
],
"functions": [
{
"function": "minecraft:set_count",
"count": {
"type": "minecraft:uniform",
"min": 2.0,
"max": 4.0
}
},
{
"function": "minecraft:enchanted_count_increase",
"enchantment": "minecraft:looting",
"count": {
"type": "minecraft:uniform",
"min": 0.0,
"max": 2.0
}
}
]
}
],
"random_sequence": "antarchy:entities/alpha_mantis"
}
@@ -121,6 +121,12 @@
"weight": 20,
"minCount": 1,
"maxCount": 1
},
{
"type": "antarchy:alpha_mantis",
"weight": 1,
"minCount": 1,
"maxCount": 1
}
],
"axolotls": [],
@@ -69,7 +69,6 @@
"axolotls": [],
"underground_water_creature": [],
"water_creature": [
{ "type": "minecraft:turtle", "weight": 5, "minCount": 1, "maxCount": 2 },
{ "type": "antarchy:octopus_bomb", "weight": 4, "minCount": 1, "maxCount": 2 }],
"water_ambient": [
{ "type": "antarchy:cheep", "weight": 10, "minCount": 3, "maxCount": 6 },
@@ -8,6 +8,7 @@
"antarchy:brutalfly",
"antarchy:bed_bug",
"antarchy:mantis",
"antarchy:alpha_mantis",
"antarchy:scorpion",
"antarchy:emperor_scorpion"
]
@@ -34,6 +34,10 @@ public final class AntarchyFabric implements ModInitializer {
Registries.BIOME,
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "octopus_bomb_spawn_biomes")
);
private static final TagKey<net.minecraft.world.level.biome.Biome> MANTIS_OVERWORLD_SPAWN_BIOMES = TagKey.create(
Registries.BIOME,
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "mantis_overworld_spawn_biomes")
);
@Override
public void onInitialize() {
@@ -75,5 +79,17 @@ public final class AntarchyFabric implements ModInitializer {
AntarchyFabricContent.OCTOPUS_BOMB.get(),
2, 1, 2
);
BiomeModifications.addSpawn(
BiomeSelectors.tag(MANTIS_OVERWORLD_SPAWN_BIOMES),
net.minecraft.world.entity.MobCategory.MONSTER,
AntarchyFabricContent.MANTIS.get(),
8, 1, 1
);
BiomeModifications.addSpawn(
BiomeSelectors.tag(MANTIS_OVERWORLD_SPAWN_BIOMES),
net.minecraft.world.entity.MobCategory.MONSTER,
AntarchyFabricContent.ALPHA_MANTIS.get(),
1, 1, 1
);
}
}
@@ -65,6 +65,7 @@ import com.craisinlord.antarchy.content.entity.JumpyBugEntity;
import com.craisinlord.antarchy.content.entity.StinkBugEntity;
import com.craisinlord.antarchy.content.entity.OuranwoodBoatEntity;
import com.craisinlord.antarchy.content.entity.OuranwoodChestBoatEntity;
import com.craisinlord.antarchy.content.entity.AlphaMantisEntity;
import com.craisinlord.antarchy.content.entity.MantisEntity;
import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity;
import com.craisinlord.antarchy.content.entity.EmperorScorpionEntity;
@@ -789,6 +790,11 @@ public final class AntarchyFabricContent {
.sized(3.125F, 2.5F)
.clientTrackingRange(8)
.build("mantis"));
public static final DeferredHolder<EntityType<?>, EntityType<AlphaMantisEntity>> ALPHA_MANTIS = ENTITY_TYPES.register("alpha_mantis",
() -> EntityType.Builder.of(AlphaMantisEntity::new, MobCategory.MONSTER)
.sized(4.0F, 3.25F)
.clientTrackingRange(10)
.build("alpha_mantis"));
public static final DeferredHolder<EntityType<?>, EntityType<OuranwoodBoatEntity>> OURANWOOD_BOAT_ENTITY = ENTITY_TYPES.register("ouranwood_boat",
() -> EntityType.Builder.<OuranwoodBoatEntity>of(OuranwoodBoatEntity::new, MobCategory.MISC)
.sized(1.375F, 0.5625F)
@@ -1645,6 +1651,8 @@ public final class AntarchyFabricContent {
() -> new DeferredSpawnEggItem(MOLEWORM, 0xB8B8B8, 0x8A623A, new Item.Properties()));
public static final DeferredItem<DeferredSpawnEggItem> MANTIS_SPAWN_EGG = ITEMS.register("mantis_spawn_egg",
() -> new DeferredSpawnEggItem(MANTIS, 0xF8F8F2, 0x63B44A, new Item.Properties()));
public static final DeferredItem<DeferredSpawnEggItem> ALPHA_MANTIS_SPAWN_EGG = ITEMS.register("alpha_mantis_spawn_egg",
() -> new DeferredSpawnEggItem(ALPHA_MANTIS, 0x8FDD6C, 0x2F5D22, new Item.Properties()));
public static final DeferredItem<DeferredSpawnEggItem> MOLEVORE_SPAWN_EGG = ITEMS.register("molevore_spawn_egg",
() -> new DeferredSpawnEggItem(MOLEVORE, 0x4A4A4A, 0x6B4A2B, new Item.Properties().rarity(Rarity.UNCOMMON)));
public static final DeferredItem<DeferredSpawnEggItem> TRIFFID_SPAWN_EGG = ITEMS.register("triffid_spawn_egg",
@@ -1799,6 +1807,7 @@ public final class AntarchyFabricContent {
FabricDefaultAttributeRegistry.register(WASP.get(), WaspEntity.createAttributes().build());
FabricDefaultAttributeRegistry.register(BOMBER.get(), BomberEntity.createAttributes().build());
FabricDefaultAttributeRegistry.register(MANTIS.get(), MantisEntity.createAttributes().build());
FabricDefaultAttributeRegistry.register(ALPHA_MANTIS.get(), AlphaMantisEntity.createAttributes().build());
FabricDefaultAttributeRegistry.register(TRIFFID.get(), TriffidEntity.createAttributes().build());
FabricDefaultAttributeRegistry.register(LUCID.get(), LucidEntity.createAttributes().build());
FabricDefaultAttributeRegistry.register(SCORPION.get(), ScorpionEntity.createAttributes().build());
@@ -1845,6 +1854,7 @@ public final class AntarchyFabricContent {
SpawnPlacements.register(NIGHTMARE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, NightmareEntity::canSpawn);
SpawnPlacements.register(MOLEWORM.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MolewormEntity::canSpawn);
SpawnPlacements.register(MANTIS.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MantisEntity::canSpawn);
SpawnPlacements.register(ALPHA_MANTIS.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, AlphaMantisEntity::checkAlphaMantisSpawnRules);
SpawnPlacements.register(MOLEVORE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MolevoreEntity::canSpawn);
SpawnPlacements.register(BED_BUG.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BedBugEntity::canSpawn);
SpawnPlacements.register(LUCID.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, LucidEntity::canSpawn);
@@ -1942,7 +1952,7 @@ public final class AntarchyFabricContent {
case "easter_bunny_spawn_egg", "flying_squirrel_spawn_egg", "caterpillar_spawn_egg",
"butterfly_spawn_egg", "reverie_spawn_egg", "brutalfly_spawn_egg",
"red_ant_spawn_egg", "brown_ant_spawn_egg", "rainbow_ant_spawn_egg", "termite_spawn_egg",
"moleworm_spawn_egg", "mantis_spawn_egg", "molevore_spawn_egg", "triffid_spawn_egg",
"moleworm_spawn_egg", "mantis_spawn_egg", "alpha_mantis_spawn_egg", "molevore_spawn_egg", "triffid_spawn_egg",
"apple_cow_spawn_egg", "golden_apple_cow_spawn_egg", "enchanted_golden_apple_cow_spawn_egg",
"honeyed_apple_cow_spawn_egg", "dr_trayaurus_spawn_egg", "wasp_spawn_egg",
"bomber_spawn_egg", "jumpy_bug_spawn_egg", "spit_bug_spawn_egg", "stink_bug_spawn_egg", "cloud_shark_spawn_egg", "kraken_spawn_egg", "missile_squid_spawn_egg", "octopus_bomb_spawn_egg",
@@ -77,6 +77,7 @@ public final class AntarchyFabricClientBootstrap {
EntityRendererRegistry.register(AntarchyFabricContent.RAINBOW_ANT.get(), AntRenderer::new);
EntityRendererRegistry.register(AntarchyFabricContent.MOLEWORM.get(), MolewormRenderer::new);
EntityRendererRegistry.register(AntarchyFabricContent.MANTIS.get(), MantisRenderer::new);
EntityRendererRegistry.register(AntarchyFabricContent.ALPHA_MANTIS.get(), AlphaMantisRenderer::new);
EntityRendererRegistry.register(AntarchyFabricContent.MOLEVORE.get(), MolevoreRenderer::new);
EntityRendererRegistry.register(AntarchyFabricContent.TRIFFID.get(), TriffidRenderer::new);
EntityRendererRegistry.register(AntarchyFabricContent.OURANWOOD_BOAT_ENTITY.get(), context -> new OuranwoodBoatRenderer<>(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/boat/ouranwood.png"), false));
@@ -109,6 +109,13 @@ public final class AntarchyConfigModuleNeoforge {
AntarchySettings.setMantisFlyingSpeed(AntarchyMobsConfig.mantisFlyingSpeed());
AntarchySettings.setMantisIgnoreLightLevel(AntarchyMobsConfig.mantisIgnoreLightLevel());
AntarchySettings.setAlphaMantisHealth(AntarchyMobsConfig.alphaMantisHealth());
AntarchySettings.setAlphaMantisAttackDamage(AntarchyMobsConfig.alphaMantisAttackDamage());
AntarchySettings.setAlphaMantisMovementSpeed(AntarchyMobsConfig.alphaMantisMovementSpeed());
AntarchySettings.setAlphaMantisFlyingSpeed(AntarchyMobsConfig.alphaMantisFlyingSpeed());
AntarchySettings.setAlphaMantisSummonIntervalTicks(AntarchyMobsConfig.alphaMantisSummonIntervalTicks());
AntarchySettings.setAlphaMantisMaxMinions(AntarchyMobsConfig.alphaMantisMaxMinions());
AntarchySettings.setTriffidHealth(AntarchyMobsConfig.triffidHealth());
AntarchySettings.setTriffidAttackDamage(AntarchyMobsConfig.triffidAttackDamage());
AntarchySettings.setTriffidGrabDamage(AntarchyMobsConfig.triffidGrabDamage());
@@ -90,6 +90,16 @@ public final class AntarchyMobsConfig {
private static final ModConfigSpec.BooleanValue MANTIS_IGNORE_LIGHT_LEVEL;
// Alpha Mantis
private static final ModConfigSpec.DoubleValue ALPHA_MANTIS_HEALTH;
private static final ModConfigSpec.DoubleValue ALPHA_MANTIS_ATTACK_DAMAGE;
private static final ModConfigSpec.DoubleValue ALPHA_MANTIS_MOVEMENT_SPEED;
private static final ModConfigSpec.DoubleValue ALPHA_MANTIS_FLYING_SPEED;
private static final ModConfigSpec.IntValue ALPHA_MANTIS_SUMMON_INTERVAL_TICKS;
private static final ModConfigSpec.IntValue ALPHA_MANTIS_MAX_MINIONS;
// Triffid
private static final ModConfigSpec.DoubleValue TRIFFID_HEALTH;
@@ -368,6 +378,18 @@ public final class AntarchyMobsConfig {
b.pop();
// Alpha Mantis
b.push("alphaMantis");
ALPHA_MANTIS_HEALTH = b.comment("Base max health.") .defineInRange("health", 500.0D, 1.0D, 32768.0D);
ALPHA_MANTIS_ATTACK_DAMAGE = b.comment("Base attack damage.") .defineInRange("attackDamage", 18.0D, 0.0D, 1024.0D);
ALPHA_MANTIS_MOVEMENT_SPEED = b.comment("Base movement speed.") .defineInRange("movementSpeed", 0.42D, 0.0D, 10.0D);
ALPHA_MANTIS_FLYING_SPEED = b.comment("Base flying speed.") .defineInRange("flyingSpeed", 0.77D, 0.0D, 10.0D);
ALPHA_MANTIS_SUMMON_INTERVAL_TICKS = b.comment("Ticks between mantis minion summons while in combat.") .defineInRange("summonIntervalTicks", 300, 20, 72000);
ALPHA_MANTIS_MAX_MINIONS = b.comment("Maximum summoned mantises alive near the alpha at once.") .defineInRange("maxMinions", 4, 0, 32);
b.pop();
// Triffid
b.push("triffid");
@@ -589,6 +611,12 @@ public final class AntarchyMobsConfig {
static double mantisMovementSpeed() { return MANTIS_MOVEMENT_SPEED.get(); }
static double mantisFlyingSpeed() { return MANTIS_FLYING_SPEED.get(); }
static boolean mantisIgnoreLightLevel() { return MANTIS_IGNORE_LIGHT_LEVEL.get(); }
static double alphaMantisHealth() { return ALPHA_MANTIS_HEALTH.get(); }
static double alphaMantisAttackDamage() { return ALPHA_MANTIS_ATTACK_DAMAGE.get(); }
static double alphaMantisMovementSpeed() { return ALPHA_MANTIS_MOVEMENT_SPEED.get(); }
static double alphaMantisFlyingSpeed() { return ALPHA_MANTIS_FLYING_SPEED.get(); }
static int alphaMantisSummonIntervalTicks() { return ALPHA_MANTIS_SUMMON_INTERVAL_TICKS.get(); }
static int alphaMantisMaxMinions() { return ALPHA_MANTIS_MAX_MINIONS.get(); }
static double triffidHealth() { return TRIFFID_HEALTH.get(); }
static double triffidAttackDamage() { return TRIFFID_ATTACK_DAMAGE.get(); }
@@ -93,6 +93,7 @@ public final class AntarchyNeoForgeClient {
event.registerEntityRenderer(AntarchyNeoforgeEntites.RAINBOW_ANT.get(), context -> withParalyzedGeoLayer(new AntRenderer(context)));
event.registerEntityRenderer(AntarchyNeoforgeEntites.MOLEWORM.get(), context -> withParalyzedGeoLayer(new MolewormRenderer(context)));
event.registerEntityRenderer(AntarchyNeoforgeEntites.MANTIS.get(), context -> withParalyzedGeoLayer(new MantisRenderer(context)));
event.registerEntityRenderer(AntarchyNeoforgeEntites.ALPHA_MANTIS.get(), context -> withParalyzedGeoLayer(new AlphaMantisRenderer(context)));
event.registerEntityRenderer(AntarchyNeoforgeEntites.MOLEVORE.get(), context -> withParalyzedGeoLayer(new MolevoreRenderer(context)));
event.registerEntityRenderer(AntarchyNeoforgeEntites.TRIFFID.get(), context -> withParalyzedGeoLayer(new TriffidRenderer(context)));
event.registerEntityRenderer(AntarchyNeoforgeEntites.OURANWOOD_BOAT_ENTITY.get(), context -> new OuranwoodBoatRenderer<>(context, OURANWOOD_BOAT_TEXTURE, false));
@@ -59,6 +59,7 @@ public class AntarchyNeoforgeCreativeModeTabs {
event.accept(AntarchyNeoforgeItems.RAINBOW_ANT_SPAWN_EGG.get());
event.accept(AntarchyNeoforgeItems.MOLEWORM_SPAWN_EGG.get());
event.accept(AntarchyNeoforgeItems.MANTIS_SPAWN_EGG.get());
event.accept(AntarchyNeoforgeItems.ALPHA_MANTIS_SPAWN_EGG.get());
event.accept(AntarchyNeoforgeItems.MOLEVORE_SPAWN_EGG.get());
event.accept(AntarchyNeoforgeItems.TRIFFID_SPAWN_EGG.get());
event.accept(AntarchyNeoforgeItems.APPLE_COW_SPAWN_EGG.get());
@@ -17,6 +17,7 @@ import com.craisinlord.antarchy.content.entity.EmperorScorpionEntity;
import com.craisinlord.antarchy.content.entity.HushProjectileEntity;
import com.craisinlord.antarchy.content.entity.HerculesBeetleEntity;
import com.craisinlord.antarchy.content.entity.JumpyBugEntity;
import com.craisinlord.antarchy.content.entity.AlphaMantisEntity;
import com.craisinlord.antarchy.content.entity.MantisEntity;
import com.craisinlord.antarchy.content.entity.MissileSquidEntity;
import com.craisinlord.antarchy.content.entity.OctopusBombEntity;
@@ -91,6 +92,11 @@ public final class AntarchyNeoforgeEntites {
.sized(3.125F, 2.5F)
.clientTrackingRange(8)
.build("mantis"));
public static final DeferredHolder<EntityType<?>, EntityType<AlphaMantisEntity>> ALPHA_MANTIS = ENTITY_TYPES.register("alpha_mantis",
() -> EntityType.Builder.of(AlphaMantisEntity::new, MobCategory.MONSTER)
.sized(4.0F, 3.25F)
.clientTrackingRange(10)
.build("alpha_mantis"));
public static final DeferredHolder<EntityType<?>, EntityType<OuranwoodBoatEntity>> OURANWOOD_BOAT_ENTITY = ENTITY_TYPES.register("ouranwood_boat",
() -> EntityType.Builder.<OuranwoodBoatEntity>of(OuranwoodBoatEntity::new, MobCategory.MISC)
.sized(1.375F, 0.5625F)
@@ -50,6 +50,7 @@ public class AntarchyNeoforgeEntityAttributes {
event.put(AntarchyNeoforgeEntites.WASP.get(), WaspEntity.createAttributes().build());
event.put(AntarchyNeoforgeEntites.BOMBER.get(), BomberEntity.createAttributes().build());
event.put(AntarchyNeoforgeEntites.MANTIS.get(), MantisEntity.createAttributes().build());
event.put(AntarchyNeoforgeEntites.ALPHA_MANTIS.get(), AlphaMantisEntity.createAttributes().build());
event.put(AntarchyNeoforgeEntites.TRIFFID.get(), TriffidEntity.createAttributes().build());
event.put(AntarchyNeoforgeEntites.LUCID.get(), LucidEntity.createAttributes().build());
event.put(AntarchyNeoforgeEntites.SCORPION.get(), ScorpionEntity.createAttributes().build());
@@ -500,6 +500,8 @@ public final class AntarchyNeoforgeItems {
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.MOLEWORM, 0xB8B8B8, 0x8A623A, new Item.Properties()));
public static final DeferredItem<DeferredSpawnEggItem> MANTIS_SPAWN_EGG = ITEMS.register("mantis_spawn_egg",
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.MANTIS, 0xF8F8F2, 0x63B44A, new Item.Properties()));
public static final DeferredItem<DeferredSpawnEggItem> ALPHA_MANTIS_SPAWN_EGG = ITEMS.register("alpha_mantis_spawn_egg",
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.ALPHA_MANTIS, 0x8FDD6C, 0x2F5D22, new Item.Properties().rarity(Rarity.UNCOMMON)));
public static final DeferredItem<DeferredSpawnEggItem> MOLEVORE_SPAWN_EGG = ITEMS.register("molevore_spawn_egg",
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.MOLEVORE, 0x4A4A4A, 0x6B4A2B, new Item.Properties().rarity(Rarity.UNCOMMON)));
public static final DeferredItem<DeferredSpawnEggItem> TRIFFID_SPAWN_EGG = ITEMS.register("triffid_spawn_egg",
@@ -40,6 +40,7 @@ public class AntarchyNeoforgeSpawnPlacements {
event.register(AntarchyNeoforgeEntites.NIGHTMARE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, NightmareEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR);
event.register(AntarchyNeoforgeEntites.MOLEWORM.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MolewormEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR);
event.register(AntarchyNeoforgeEntites.MANTIS.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MantisEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR);
event.register(AntarchyNeoforgeEntites.ALPHA_MANTIS.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, AlphaMantisEntity::checkAlphaMantisSpawnRules, RegisterSpawnPlacementsEvent.Operation.OR);
event.register(AntarchyNeoforgeEntites.MOLEVORE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MolevoreEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR);
event.register(AntarchyNeoforgeEntites.BED_BUG.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BedBugEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR);
event.register(AntarchyNeoforgeEntites.LUCID.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, LucidEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR);
@@ -0,0 +1,18 @@
{
"type": "neoforge:add_spawns",
"biomes": "#antarchy:mantis_overworld_spawn_biomes",
"spawners": [
{
"type": "antarchy:mantis",
"weight": 8,
"minCount": 1,
"maxCount": 1
},
{
"type": "antarchy:alpha_mantis",
"weight": 1,
"minCount": 1,
"maxCount": 1
}
]
}