diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java index 086aa853..6f3bc1ab 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java @@ -3,6 +3,7 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -132,6 +133,8 @@ public class ToreterrorEntity extends Monster implements GeoEntity { private Vec3 spinDirection = Vec3.ZERO; private int spinStrafeSign = 1; private int spinStuckTicks; + private Vec3 spinProgressAnchor = Vec3.ZERO; + private int spinProgressTicks; private final Map spinHitCooldowns = new HashMap<>(); public ToreterrorEntity(EntityType entityType, Level level) { @@ -514,6 +517,16 @@ public class ToreterrorEntity extends Monster implements GeoEntity { this.spinStuckTicks = 0; } + this.spinProgressTicks++; + if (this.spinProgressTicks >= 20) { + if (this.position().distanceToSqr(this.spinProgressAnchor) < 4.0D) { + this.beginSpinEnd(); + return; + } + this.spinProgressAnchor = this.position(); + this.spinProgressTicks = 0; + } + int elapsed = this.spinLoopTotalTicks - this.spinLoopTicks; if (elapsed % SPIN_HIT_INTERVAL == 0) { this.applySpinDamage(); @@ -679,6 +692,8 @@ public class ToreterrorEntity extends Monster implements GeoEntity { this.spinDirection = Vec3.ZERO; this.spinStrafeSign = 1; this.spinStuckTicks = 0; + this.spinProgressAnchor = Vec3.ZERO; + this.spinProgressTicks = 0; } private Vec3 calcLaunchVelocity(Vec3 from, Vec3 to, double minSpeed) { @@ -699,6 +714,7 @@ public class ToreterrorEntity extends Monster implements GeoEntity { if (!(this.level() instanceof ServerLevel serverLevel)) return; LivingEntity target = this.getTarget(); if (target == null) return; + this.playSound(AntarchySoundEvents.SQUIDZOOKA_FIRE.get(), 0.8F, 0.9F + this.random.nextFloat() * 0.2F); Vec3 from = new Vec3(this.getX(), this.getEyeY(), this.getZ()); Vec3 to = new Vec3(target.getX(), target.getEyeY(), target.getZ()); Vec3 baseVel = calcLaunchVelocity(from, to, 1.5); @@ -892,6 +908,8 @@ public class ToreterrorEntity extends Monster implements GeoEntity { ToreterrorEntity.this.spinLoopTicks = ToreterrorEntity.this.spinLoopTotalTicks; ToreterrorEntity.this.spinEndTicks = 0; ToreterrorEntity.this.spinStuckTicks = 0; + ToreterrorEntity.this.spinProgressAnchor = ToreterrorEntity.this.position(); + ToreterrorEntity.this.spinProgressTicks = 0; ToreterrorEntity.this.spinStrafeSign = ToreterrorEntity.this.random.nextBoolean() ? 1 : -1; ToreterrorEntity.this.spinHitCooldowns.clear(); ToreterrorEntity.this.spinDirection = target == null diff --git a/common/src/main/resources/data/antarchy/tags/worldgen/biome/octopus_bomb_spawn_biomes.json b/common/src/main/resources/data/antarchy/tags/worldgen/biome/octopus_bomb_spawn_biomes.json new file mode 100644 index 00000000..d3150f98 --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/worldgen/biome/octopus_bomb_spawn_biomes.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:deep_ocean", + "minecraft:deep_cold_ocean", + "minecraft:deep_lukewarm_ocean", + "minecraft:deep_frozen_ocean" + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/structure/toreterror_arena.json b/common/src/main/resources/data/antarchy/worldgen/structure/toreterror_arena.json index b0f7f64a..0af857c1 100644 --- a/common/src/main/resources/data/antarchy/worldgen/structure/toreterror_arena.json +++ b/common/src/main/resources/data/antarchy/worldgen/structure/toreterror_arena.json @@ -2,7 +2,7 @@ "type": "integrated_api:generic_structure", "start_pool": "antarchy:toreterror_arena/toreterror_arena", "size": 2, - "valid_biome_radius_check": 3, + "valid_biome_radius_check": 2, "biomes": "#antarchy:has_structure/toreterror_arena_biomes", "step": "surface_structures", "terrain_adaptation": "none", 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 c9223b9d..ca588be3 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java @@ -26,6 +26,14 @@ public final class AntarchyFabric implements ModInitializer { Registries.PLACED_FEATURE, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "shellstone_lower") ); + private static final TagKey MISSILE_SQUID_SPAWN_BIOMES = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "missile_squid_spawn_biomes") + ); + private static final TagKey OCTOPUS_BOMB_SPAWN_BIOMES = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "octopus_bomb_spawn_biomes") + ); @Override public void onInitialize() { @@ -55,5 +63,17 @@ public final class AntarchyFabric implements ModInitializer { GenerationStep.Decoration.UNDERGROUND_ORES, SHELLSTONE_LOWER ); + BiomeModifications.addSpawn( + BiomeSelectors.tag(MISSILE_SQUID_SPAWN_BIOMES), + net.minecraft.world.entity.MobCategory.MONSTER, + AntarchyFabricContent.MISSILE_SQUID.get(), + 2, 1, 2 + ); + BiomeModifications.addSpawn( + BiomeSelectors.tag(OCTOPUS_BOMB_SPAWN_BIOMES), + net.minecraft.world.entity.MobCategory.MONSTER, + AntarchyFabricContent.OCTOPUS_BOMB.get(), + 2, 1, 2 + ); } } diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java index 1584e2d5..70d25f9f 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java @@ -61,10 +61,11 @@ public final class AntarchyFabricEvents { if (entity instanceof ServerPlayer sp) { BloodglassManager.handleDeath(sp); } - if (!(entity instanceof MissileSquidEntity missileSquid)) { - return; - } - if (missileSquid.isSpawnedByKraken()) { + if (entity instanceof MissileSquidEntity missileSquid) { + if (missileSquid.isSpawnedByKraken()) { + return; + } + } else if (entity.getType() != net.minecraft.world.entity.EntityType.SQUID) { return; } if (!(entity.level() instanceof ServerLevel serverLevel)) { diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java index 618d228e..4db16c61 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java @@ -114,8 +114,11 @@ public final class AntarchyNeoForgeEvents { } public static void onMissileSquidDeath(LivingDeathEvent event) { - if (!(event.getEntity() instanceof MissileSquidEntity missileSquid)) return; - if (missileSquid.isSpawnedByKraken()) return; + if (event.getEntity() instanceof MissileSquidEntity missileSquid) { + if (missileSquid.isSpawnedByKraken()) return; + } else if (event.getEntity().getType() != EntityType.SQUID) { + return; + } if (!(event.getEntity().level() instanceof ServerLevel serverLevel)) return; BlockPos deathPos = event.getEntity().blockPosition(); diff --git a/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/octopus_bomb_spawns.json b/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/octopus_bomb_spawns.json new file mode 100644 index 00000000..063d82a6 --- /dev/null +++ b/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/octopus_bomb_spawns.json @@ -0,0 +1,12 @@ +{ + "type": "neoforge:add_spawns", + "biomes": "#antarchy:octopus_bomb_spawn_biomes", + "spawners": [ + { + "type": "antarchy:octopus_bomb", + "weight": 2, + "minCount": 1, + "maxCount": 2 + } + ] +}