From ee4f09c094b4dd81251abd7dab24d1c384704a54 Mon Sep 17 00:00:00 2001 From: craisinlord Date: Sun, 5 Jul 2026 23:22:55 -0500 Subject: [PATCH] alpha mantis boss, mantis spin fix, overworld mantis spawns, elythia turtle fix --- .../antarchy/config/AntarchySettings.java | 54 +++++ .../client/model/AlphaMantisModel.java | 23 +++ .../client/renderer/AlphaMantisRenderer.java | 15 ++ .../content/entity/AlphaMantisEntity.java | 184 ++++++++++++++++++ .../antarchy/content/entity/MantisEntity.java | 37 +++- .../antarchy/content/item/BigBerthaItem.java | 4 +- .../resources/assets/antarchy/lang/en_us.json | 2 + .../models/item/alpha_mantis_spawn_egg.json | 3 + .../loot_table/entities/alpha_mantis.json | 90 +++++++++ .../worldgen/biome/elythia_meadow.json | 6 + .../worldgen/biome/elythia_ocean.json | 1 - .../minecraft/tags/entity_type/arthropod.json | 1 + .../antarchy/fabric/AntarchyFabric.java | 16 ++ .../fabric/AntarchyFabricContent.java | 12 +- .../client/AntarchyFabricClientBootstrap.java | 1 + .../AntarchyConfigModuleNeoforge.java | 7 + .../antarchy/neoforge/AntarchyMobsConfig.java | 28 +++ .../client/AntarchyNeoForgeClient.java | 1 + .../AntarchyNeoforgeCreativeModeTabs.java | 1 + .../registry/AntarchyNeoforgeEntites.java | 6 + .../AntarchyNeoforgeEntityAttributes.java | 1 + .../registry/AntarchyNeoforgeItems.java | 2 + .../AntarchyNeoforgeSpawnPlacements.java | 1 + .../biome_modifier/mantis_spawns.json | 18 ++ 24 files changed, 509 insertions(+), 5 deletions(-) create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/client/model/AlphaMantisModel.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/client/renderer/AlphaMantisRenderer.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/entity/AlphaMantisEntity.java create mode 100644 common/src/main/resources/assets/antarchy/models/item/alpha_mantis_spawn_egg.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/entities/alpha_mantis.json create mode 100644 neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/mantis_spawns.json diff --git a/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java b/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java index a17e9d62..c487fde7 100644 --- a/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java +++ b/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java @@ -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; } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/model/AlphaMantisModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/AlphaMantisModel.java new file mode 100644 index 00000000..d4a9071f --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/model/AlphaMantisModel.java @@ -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 { + @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"); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/AlphaMantisRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/AlphaMantisRenderer.java new file mode 100644 index 00000000..6ee5cedf --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/AlphaMantisRenderer.java @@ -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 { + 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); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/AlphaMantisEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/AlphaMantisEntity.java new file mode 100644 index 00000000..e82d97fd --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/AlphaMantisEntity.java @@ -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 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 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()); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/MantisEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/MantisEntity.java index 5174df37..025fd490 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/MantisEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/MantisEntity.java @@ -71,6 +71,7 @@ public class MantisEntity extends Monster implements GeoEntity { public MantisEntity(EntityType 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; diff --git a/common/src/main/java/com/craisinlord/antarchy/content/item/BigBerthaItem.java b/common/src/main/java/com/craisinlord/antarchy/content/item/BigBerthaItem.java index de04c0dc..e280010f 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/item/BigBerthaItem.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/item/BigBerthaItem.java @@ -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); diff --git a/common/src/main/resources/assets/antarchy/lang/en_us.json b/common/src/main/resources/assets/antarchy/lang/en_us.json index a023eacb..43015e4f 100644 --- a/common/src/main/resources/assets/antarchy/lang/en_us.json +++ b/common/src/main/resources/assets/antarchy/lang/en_us.json @@ -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", @@ -400,6 +401,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", diff --git a/common/src/main/resources/assets/antarchy/models/item/alpha_mantis_spawn_egg.json b/common/src/main/resources/assets/antarchy/models/item/alpha_mantis_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/alpha_mantis_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/entities/alpha_mantis.json b/common/src/main/resources/data/antarchy/loot_table/entities/alpha_mantis.json new file mode 100644 index 00000000..bd585f00 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/entities/alpha_mantis.json @@ -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" +} diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/elythia_meadow.json b/common/src/main/resources/data/antarchy/worldgen/biome/elythia_meadow.json index ef2c2ebd..124875e2 100644 --- a/common/src/main/resources/data/antarchy/worldgen/biome/elythia_meadow.json +++ b/common/src/main/resources/data/antarchy/worldgen/biome/elythia_meadow.json @@ -121,6 +121,12 @@ "weight": 20, "minCount": 1, "maxCount": 1 + }, + { + "type": "antarchy:alpha_mantis", + "weight": 1, + "minCount": 1, + "maxCount": 1 } ], "axolotls": [], diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/elythia_ocean.json b/common/src/main/resources/data/antarchy/worldgen/biome/elythia_ocean.json index c22a5def..da24502b 100644 --- a/common/src/main/resources/data/antarchy/worldgen/biome/elythia_ocean.json +++ b/common/src/main/resources/data/antarchy/worldgen/biome/elythia_ocean.json @@ -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 }, diff --git a/common/src/main/resources/data/minecraft/tags/entity_type/arthropod.json b/common/src/main/resources/data/minecraft/tags/entity_type/arthropod.json index 520257ad..26157504 100644 --- a/common/src/main/resources/data/minecraft/tags/entity_type/arthropod.json +++ b/common/src/main/resources/data/minecraft/tags/entity_type/arthropod.json @@ -8,6 +8,7 @@ "antarchy:brutalfly", "antarchy:bed_bug", "antarchy:mantis", + "antarchy:alpha_mantis", "antarchy:jumpy_bug", "antarchy:spit_bug", "antarchy:stink_bug", diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java index ca588be3..7db898f7 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java @@ -34,6 +34,10 @@ public final class AntarchyFabric implements ModInitializer { Registries.BIOME, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "octopus_bomb_spawn_biomes") ); + private static final TagKey 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 + ); } } diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java index dbb19dd4..0e15ad89 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java @@ -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; @@ -823,6 +824,11 @@ public final class AntarchyFabricContent { .sized(3.125F, 2.5F) .clientTrackingRange(8) .build("mantis")); + public static final DeferredHolder, EntityType> 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> OURANWOOD_BOAT_ENTITY = ENTITY_TYPES.register("ouranwood_boat", () -> EntityType.Builder.of(OuranwoodBoatEntity::new, MobCategory.MISC) .sized(1.375F, 0.5625F) @@ -1726,6 +1732,8 @@ public final class AntarchyFabricContent { () -> new DeferredSpawnEggItem(MOLEWORM, 0xB8B8B8, 0x8A623A, new Item.Properties())); public static final DeferredItem MANTIS_SPAWN_EGG = ITEMS.register("mantis_spawn_egg", () -> new DeferredSpawnEggItem(MANTIS, 0xF8F8F2, 0x63B44A, new Item.Properties())); + public static final DeferredItem ALPHA_MANTIS_SPAWN_EGG = ITEMS.register("alpha_mantis_spawn_egg", + () -> new DeferredSpawnEggItem(ALPHA_MANTIS, 0x8FDD6C, 0x2F5D22, new Item.Properties())); public static final DeferredItem MOLEVORE_SPAWN_EGG = ITEMS.register("molevore_spawn_egg", () -> new DeferredSpawnEggItem(MOLEVORE, 0x4A4A4A, 0x6B4A2B, new Item.Properties().rarity(Rarity.UNCOMMON))); public static final DeferredItem TRIFFID_SPAWN_EGG = ITEMS.register("triffid_spawn_egg", @@ -1917,6 +1925,7 @@ public final class AntarchyFabricContent { FabricDefaultAttributeRegistry.register(JUMPY_BUG.get(), JumpyBugEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(SPIT_BUG.get(), SpitBugEntity.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()); @@ -1974,6 +1983,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(STINK_BUG.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, StinkBugEntity::canSpawn); @@ -2075,7 +2085,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", diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java index 27a03573..26e59a6b 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java @@ -78,6 +78,7 @@ public final class AntarchyFabricClientBootstrap { EntityRendererRegistry.register(AntarchyFabricContent.TERMITE.get(), TermiteRenderer::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)); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java index 05e0a1bb..25589dc8 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java @@ -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()); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMobsConfig.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMobsConfig.java index f2595747..20186b82 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMobsConfig.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMobsConfig.java @@ -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(); } diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java index 2cbcdc08..b004845e 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java @@ -94,6 +94,7 @@ public final class AntarchyNeoForgeClient { event.registerEntityRenderer(AntarchyNeoforgeEntites.TERMITE.get(), context -> withParalyzedGeoLayer(new TermiteRenderer(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)); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java index 98f4fcba..257986f9 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java @@ -60,6 +60,7 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.TERMITE_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()); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java index bd7aa921..f760a577 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java @@ -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; @@ -93,6 +94,11 @@ public final class AntarchyNeoforgeEntites { .sized(3.125F, 2.5F) .clientTrackingRange(8) .build("mantis")); + public static final DeferredHolder, EntityType> 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> OURANWOOD_BOAT_ENTITY = ENTITY_TYPES.register("ouranwood_boat", () -> EntityType.Builder.of(OuranwoodBoatEntity::new, MobCategory.MISC) .sized(1.375F, 0.5625F) diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java index e83eccc3..0c483c6c 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java @@ -53,6 +53,7 @@ public class AntarchyNeoforgeEntityAttributes { event.put(AntarchyNeoforgeEntites.JUMPY_BUG.get(), JumpyBugEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.SPIT_BUG.get(), SpitBugEntity.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()); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java index 17559a02..fb9c2d73 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java @@ -513,6 +513,8 @@ public final class AntarchyNeoforgeItems { () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.MOLEWORM, 0xB8B8B8, 0x8A623A, new Item.Properties())); public static final DeferredItem MANTIS_SPAWN_EGG = ITEMS.register("mantis_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.MANTIS, 0xF8F8F2, 0x63B44A, new Item.Properties())); + public static final DeferredItem 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 MOLEVORE_SPAWN_EGG = ITEMS.register("molevore_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.MOLEVORE, 0x4A4A4A, 0x6B4A2B, new Item.Properties().rarity(Rarity.UNCOMMON))); public static final DeferredItem TRIFFID_SPAWN_EGG = ITEMS.register("triffid_spawn_egg", diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java index fbb6a581..c0af0888 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java @@ -42,6 +42,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.STINK_BUG.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, StinkBugEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); diff --git a/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/mantis_spawns.json b/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/mantis_spawns.json new file mode 100644 index 00000000..961e3cd9 --- /dev/null +++ b/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/mantis_spawns.json @@ -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 + } + ] +}