diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancements/cops_n_robbers.json b/common-1.20.1/src/main/resources/data/antarchy/advancements/cops_n_robbers.json new file mode 100644 index 00000000..7c0cf9b8 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/advancements/cops_n_robbers.json @@ -0,0 +1,42 @@ +{ + "parent": "minecraft:adventure/root", + "criteria": { + "discover_ruined_prison": { + "conditions": { + "player": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "location": { + "structure": "antarchy:ruined_prison" + } + } + } + ] + }, + "trigger": "minecraft:location" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.cops_n_robbers.description" + }, + "frame": "task", + "icon": { + "count": 1, + "item": "minecraft:iron_bars" + }, + "show_toast": true, + "title": { + "translate": "advancements.antarchy.cops_n_robbers.title" + } + }, + "requirements": [ + [ + "discover_ruined_prison" + ] + ], + "sends_telemetry_event": true +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/tags/worldgen/biome/cloud_shark_spawn_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/ruined_prison_biomes.json similarity index 58% rename from common-1.21.1/src/main/resources/data/antarchy/tags/worldgen/biome/cloud_shark_spawn_biomes.json rename to common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/ruined_prison_biomes.json index 6968700c..8d8c39a8 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/tags/worldgen/biome/cloud_shark_spawn_biomes.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/ruined_prison_biomes.json @@ -1,6 +1,6 @@ { "replace": false, "values": [ - "antarchy:cloud_sea" + "antarchy:elythia_meadow" ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/ruined_prison.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/ruined_prison.json new file mode 100644 index 00000000..07fdd9be --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/ruined_prison.json @@ -0,0 +1,22 @@ +{ + "type": "integrated_api:generic_structure", + "start_pool": "antarchy:ruined_prison/ruined_prison", + "size": 12, + "terrain_height_radius_check": 4, + "allowed_terrain_height_range": 14, + "valid_biome_radius_check": 1, + "biomes": "#antarchy:has_structure/ruined_prison_biomes", + "step": "surface_structures", + "enhanced_terrain_adaptation": { + "type": "integrated_api:none" + }, + "project_start_to_heightmap": "WORLD_SURFACE_WG", + "start_height": { + "type": "minecraft:constant", + "value": { + "absolute": 0 + } + }, + "spawn_overrides": {}, + "liquid_settings": "ignore_waterlogging" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/ruined_prison/ruined_prison.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/ruined_prison/ruined_prison.json new file mode 100644 index 00000000..fcc71392 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/ruined_prison/ruined_prison.json @@ -0,0 +1,22 @@ +{ + "name": "antarchy:ruined_prison/ruined_prison", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:ruined_prison/ruined_prison", + "processors": "antarchy:generic_processor", + "projection": "rigid", + "enhanced_terrain_adaptation": { + "type": "integrated_api:custom", + "carves": true, + "beards": true, + "kernel_size": 35, + "kernel_distance": 35 + }, + "element_type": "integrated_api:integrated_api_single_pool_element" + } + } + ] +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/compat/infinity/InfinityCompatBridge.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/compat/infinity/InfinityCompatBridge.java index 0e35dcc3..73a35c87 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/compat/infinity/InfinityCompatBridge.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/compat/infinity/InfinityCompatBridge.java @@ -1,6 +1,8 @@ package com.craisinlord.antarchy.compat.infinity; +import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.util.RandomSource; @@ -23,4 +25,13 @@ public interface InfinityCompatBridge { default boolean requestWarp(ServerPlayer player, ResourceLocation dimensionId) { return false; } + + /** + * Converts an already-ignited vanilla Nether portal frame at {@code anyPortalBlockPos} into a real, permanent + * Infinite Dimensions portal to {@code dimensionId}, generating the dimension first if it doesn't exist yet. + * Mirrors what Infinity itself does when a written book is thrown into a lit portal. + */ + default boolean createPhysicalPortal(ServerLevel level, BlockPos anyPortalBlockPos, ResourceLocation dimensionId) { + return false; + } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java index ce1ec642..f52e235e 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java @@ -288,7 +288,7 @@ public final class AntarchySettings { private static int emperorScorpionWeaknessTicks = 120; private static int emperorScorpionSummonIntervalTicks = 140; private static int emperorScorpionMaxSummonedScorpions = 4; - private static int emperorScorpionMaxNearbyScorpions = 3; + private static int emperorScorpionMaxNearbyScorpions = 4; private static int emperorScorpionHardenCooldownTicks = 2400; private static double emperorScorpionDamageRange = 80.0D; private static int emperorScorpionMinDespawnTicks = 6000; @@ -344,6 +344,7 @@ public final class AntarchySettings { private static double triffidHealth = 80.0D; private static double triffidAttackDamage = 10.0D; private static double triffidGrabDamage = 15.0D; + private static int triffidSweepHitCooldownTicks = 10; private static double molevoreHealth = 60.0D; private static double molevoreAttackDamage = 10.0D; private static double molevoreMovementSpeed = 0.27D; @@ -2243,6 +2244,9 @@ public final class AntarchySettings { public static double triffidGrabDamage() { return triffidGrabDamage; } public static void setTriffidGrabDamage(double value) { triffidGrabDamage = value; } + public static int triffidSweepHitCooldownTicks() { return triffidSweepHitCooldownTicks; } + public static void setTriffidSweepHitCooldownTicks(int value) { triffidSweepHitCooldownTicks = value; } + public static double molevoreHealth() { return molevoreHealth; } public static void setMolevoreHealth(double value) { molevoreHealth = value; } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/config/ConfigResetGuard.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/config/ConfigResetGuard.java index afc1eacf..c81fd12d 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/config/ConfigResetGuard.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/config/ConfigResetGuard.java @@ -6,7 +6,7 @@ import java.nio.file.Files; import java.nio.file.Path; public final class ConfigResetGuard { - public static final int RESET_GENERATION = 5; + public static final int RESET_GENERATION = 6; private static final String MARKER_FILE_NAME = ".config_generation"; private ConfigResetGuard() { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java index f2fc7719..11679bc7 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java @@ -108,6 +108,8 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier> STINK_BUG = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") + public static Supplier> ROLLY_POLLY = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") public static Supplier> CHEEP = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") public static Supplier> DORRIE = (Supplier>) UNBOUND; @@ -605,6 +607,10 @@ public final class AntarchyObjects { OURANWOOD_DEER = supplier; } + public static void setRollyPolly(Supplier> supplier) { + ROLLY_POLLY = supplier; + } + public static void setGlimmer(Supplier> supplier) { GLIMMER = supplier; } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchySoundEvents.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchySoundEvents.java index bd197f36..7a372c0c 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchySoundEvents.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchySoundEvents.java @@ -31,6 +31,7 @@ public final class AntarchySoundEvents { public static Supplier BRUTALFLY_IDLE = (Supplier) UNBOUND; public static Supplier BRUTALFLY_DEATH = (Supplier) UNBOUND; public static Supplier ELYTHIA_FIREFLY_AMBIENT = (Supplier) UNBOUND; + public static Supplier ELYTHIA_OURANWOOD_FOREST_AMBIENT = (Supplier) UNBOUND; public static Supplier MISSILE_SQUID_AMBIENT = (Supplier) UNBOUND; public static Supplier MISSILE_SQUID_HURT = (Supplier) UNBOUND; public static Supplier MISSILE_SQUID_DEATH = (Supplier) UNBOUND; @@ -195,6 +196,7 @@ public final class AntarchySoundEvents { Supplier brutalflyIdle, Supplier brutalflyDeath, Supplier elythiaFireflyAmbient, + Supplier elythiaOuranwoodForestAmbient, Supplier missileSquidAmbient, Supplier missileSquidHurt, Supplier missileSquidDeath, @@ -355,6 +357,7 @@ public final class AntarchySoundEvents { BRUTALFLY_IDLE = brutalflyIdle; BRUTALFLY_DEATH = brutalflyDeath; ELYTHIA_FIREFLY_AMBIENT = elythiaFireflyAmbient; + ELYTHIA_OURANWOOD_FOREST_AMBIENT = elythiaOuranwoodForestAmbient; MISSILE_SQUID_AMBIENT = missileSquidAmbient; MISSILE_SQUID_HURT = missileSquidHurt; MISSILE_SQUID_DEATH = missileSquidDeath; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java index bc03c33b..2ad9e7c1 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java @@ -38,6 +38,7 @@ public final class AntarchyTags { public static final TagKey ELYTHIA_PORTAL_FRAMES = TagKey.create(Registries.BLOCK, id("elythia_portal_frames")); public static final TagKey THORAXIS_PORTAL_FRAMES = TagKey.create(Registries.BLOCK, id("thoraxis_portal_frames")); public static final TagKey CAVARYN_PORTAL_FRAMES = TagKey.create(Registries.BLOCK, id("cavaryn_portal_frames")); + public static final TagKey RAINBOW_PORTAL_FRAMES = TagKey.create(Registries.BLOCK, id("rainbow_portal_frames")); public static final TagKey ROLLY_CAVERN_CARVEABLE = TagKey.create(Registries.BLOCK, id("rolly_cavern_carveable")); public static final TagKey MINERS_DREAM_CARVABLE = TagKey.create(Registries.BLOCK, id("miners_dream_carvable")); public static final TagKey BLUESTONE_COMPONENTS = TagKey.create(Registries.BLOCK, id("bluestone_components")); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/CloudBlock.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/CloudBlock.java index a9f42662..c7d54bbe 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/CloudBlock.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/CloudBlock.java @@ -57,6 +57,16 @@ public final class CloudBlock extends Block implements BucketPickup { return adjacentBlockState.is(this) || super.skipRendering(state, adjacentBlockState, side); } + @Override + protected boolean propagatesSkylightDown(BlockState state, BlockGetter level, BlockPos pos) { + return true; + } + + @Override + protected int getLightBlock(BlockState state, BlockGetter level, BlockPos pos) { + return 0; + } + @Override public void fallOn(Level level, BlockState state, BlockPos pos, Entity entity, float fallDistance) { entity.causeFallDamage(fallDistance, 0.0F, level.damageSources().fall()); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/WaterBombModel.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/WaterBombModel.java new file mode 100644 index 00000000..2636a470 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/WaterBombModel.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.WaterBombEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class WaterBombModel extends GeoModel { + @Override + public ResourceLocation getModelResource(WaterBombEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/water_bomb.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(WaterBombEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/vfx/water_bomb.png"); + } + + @Override + public ResourceLocation getAnimationResource(WaterBombEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/water_bomb.animation.json"); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/NightmarePortalRenderer.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/NightmarePortalRenderer.java index 10aa7709..d58e53ef 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/NightmarePortalRenderer.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/NightmarePortalRenderer.java @@ -3,14 +3,11 @@ package com.craisinlord.antarchy.content.client.renderer; import com.craisinlord.antarchy.content.client.model.NightmarePortalModel; import com.craisinlord.antarchy.content.entity.nightmare.NightmarePortalEntity; import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexConsumer; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.entity.EntityRendererProvider; -import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.resources.ResourceLocation; import org.jetbrains.annotations.Nullable; -import software.bernie.geckolib.cache.object.BakedGeoModel; import software.bernie.geckolib.renderer.GeoEntityRenderer; public class NightmarePortalRenderer extends GeoEntityRenderer { @@ -21,17 +18,11 @@ public class NightmarePortalRenderer extends GeoEntityRenderer { - - private static final ResourceLocation WATER_TEXTURE = ResourceLocation.withDefaultNamespace("textures/block/water_still.png"); +public class WaterBombRenderer extends GeoEntityRenderer { public WaterBombRenderer(EntityRendererProvider.Context context) { - super(context); + super(context, new WaterBombModel()); + this.shadowRadius = 0.0F; } @Override - protected int getBlockLightLevel(WaterBombEntity entity, BlockPos pos) { - return 12; + protected void applyRotations(WaterBombEntity animatable, PoseStack poseStack, float ageInTicks, float rotationYaw, float partialTick, float nativeScale) { + float appliedYaw = Mth.rotLerp(partialTick, animatable.yRotO, animatable.getYRot()); + float appliedPitch = Mth.lerp(partialTick, animatable.xRotO, animatable.getXRot()); + poseStack.mulPose(Axis.YP.rotationDegrees(appliedYaw - 90.0F)); + poseStack.mulPose(Axis.XP.rotationDegrees(-appliedPitch)); } @Override - public void render(WaterBombEntity entity, float entityYaw, float partialTick, PoseStack poseStack, MultiBufferSource buffer, int packedLight) { - poseStack.pushPose(); - poseStack.mulPose(this.entityRenderDispatcher.cameraOrientation()); - float scale = entity.isHuge() ? 1.5F : 0.5F; + protected float getDeathMaxRotation(WaterBombEntity animatable) { + return 0.0F; + } + + @Override + public void preRender(PoseStack poseStack, WaterBombEntity animatable, software.bernie.geckolib.cache.object.BakedGeoModel bakedModel, net.minecraft.client.renderer.MultiBufferSource bufferSource, com.mojang.blaze3d.vertex.VertexConsumer buffer, boolean isReRender, float partialTick, int packedLight, int packedOverlay, int colour) { + float scale = animatable.isHuge() ? 1.5F : 0.5F; poseStack.scale(scale, scale, scale); - - VertexConsumer vertexConsumer = buffer.getBuffer(RenderType.entityTranslucent(WATER_TEXTURE)); - PoseStack.Pose pose = poseStack.last(); - Matrix4f matrix4f = pose.pose(); - addVertex(vertexConsumer, pose, matrix4f, -0.5F, -0.5F, 0.0F, 1.0F, packedLight); - addVertex(vertexConsumer, pose, matrix4f, 0.5F, -0.5F, 1.0F, 1.0F, packedLight); - addVertex(vertexConsumer, pose, matrix4f, 0.5F, 0.5F, 1.0F, 0.0F, packedLight); - addVertex(vertexConsumer, pose, matrix4f, -0.5F, 0.5F, 0.0F, 0.0F, packedLight); - - poseStack.popPose(); - super.render(entity, entityYaw, partialTick, poseStack, buffer, packedLight); - } - - private static void addVertex(VertexConsumer vertexConsumer, PoseStack.Pose pose, Matrix4f matrix4f, - float x, float y, float u, float v, int packedLight) { - vertexConsumer.addVertex(matrix4f, x, y, 0.0F) - .setColor(0.05F, 0.15F, 0.6F, 0.9F) - .setUv(u, v) - .setOverlay(OverlayTexture.NO_OVERLAY) - .setLight(packedLight) - .setNormal(pose, 0.0F, 0.0F, 1.0F); - } - - @Override - public ResourceLocation getTextureLocation(WaterBombEntity entity) { - return WATER_TEXTURE; + super.preRender(poseStack, animatable, bakedModel, bufferSource, buffer, isReRender, partialTick, packedLight, packedOverlay, colour); } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/effect/DreadMobEffect.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/effect/DreadMobEffect.java index 2b7eba54..2fa336b8 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/effect/DreadMobEffect.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/effect/DreadMobEffect.java @@ -7,7 +7,6 @@ import net.minecraft.world.effect.MobEffect; import net.minecraft.world.effect.MobEffectCategory; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.phys.Vec3; public final class DreadMobEffect extends MobEffect { public DreadMobEffect() { @@ -23,8 +22,7 @@ public final class DreadMobEffect extends MobEffect { int maxTicks = Math.max(minTicks, (int) Math.round(AntarchySettings.dreadHallucinationMobMaxInterval() * 20.0D)); int averageTicks = (minTicks + maxTicks) / 2; if (player.getRandom().nextInt(averageTicks) == 0) { - Vec3 spawnPos = player.position().add(0.0D, player.getBbHeight() * 0.6D, 0.0D); - NightmareBiteEntity.spawnAt(serverLevel, spawnPos, player.getYRot(), false); + NightmareBiteEntity.spawnAt(serverLevel, player, false); } } return true; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/AlphaMantisEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/AlphaMantisEntity.java index 5d8692d8..2d8ce151 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/AlphaMantisEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/AlphaMantisEntity.java @@ -63,7 +63,12 @@ public class AlphaMantisEntity extends MantisEntity { @Override public boolean hurt(DamageSource source, float amount) { - return super.hurt(source, BossCombatUtil.capSingleHitAtHalfHealth(this, amount)); + float preHealth = this.getHealth(); + boolean hurt = super.hurt(source, amount); + if (hurt) { + BossCombatUtil.clampHalfHealthCrossing(this, preHealth); + } + return hurt; } public static boolean checkAlphaMantisSpawnRules(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/EmperorScorpionEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/EmperorScorpionEntity.java index fcf5885e..6b019824 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/EmperorScorpionEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/EmperorScorpionEntity.java @@ -19,6 +19,7 @@ import net.minecraft.server.level.ServerBossEvent; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvent; +import net.minecraft.util.Mth; import net.minecraft.util.RandomSource; import net.minecraft.world.BossEvent; import net.minecraft.world.Difficulty; @@ -34,8 +35,6 @@ import net.minecraft.world.entity.ai.attributes.AttributeSupplier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.goal.FloatGoal; import net.minecraft.world.entity.ai.goal.Goal; -import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; -import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; import net.minecraft.world.entity.ai.goal.RandomStrollGoal; import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; @@ -81,22 +80,19 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { private static final double CLAW_LUNGE_LIFT = 0.02D; private static final double STING_LUNGE_SPEED = 0.08D; private static final double STING_LUNGE_LIFT = 0.01D; - private static final double CLAW_RANGE = 5.25D; - private static final double STING_RANGE = 5.75D; + private static final double CLAW_REACH = 5.0D; + private static final double STING_REACH = 6.0D; + private static final double CLAW_HIT_REACH = 6.25D; + private static final double STING_HIT_REACH = 7.5D; + private static final double DIRECT_APPROACH_RANGE = 12.0D; + private static final float DIRECT_APPROACH_TURN_RATE = 10.0F; + private static final float DIRECT_APPROACH_ALIGN_THRESHOLD = 45.0F; private static final int HARDEN_START_TICKS = 11; private static final int HARDEN_END_TICKS = 20; private static final int HARDEN_HEAL_INTERVAL_TICKS = 20; private static final float HARDEN_HEAL_AMOUNT = 2.0F; private static final int HARDEN_MIN_DURATION_TICKS = 100; private static final int HARDEN_MAX_DURATION_TICKS = 200; - private static final double CLAW_VERTICAL_TOLERANCE = 2.5D; - private static final double STING_VERTICAL_TOLERANCE = 3.25D; - private static final double CLAW_FORWARD_DOT = 0.05D; - private static final double STING_FORWARD_DOT = 0.45D; - private static final double CLAW_STRIKE_FORWARD = 2.6D; - private static final double STING_STRIKE_FORWARD = 3.4D; - private static final double CLAW_STRIKE_RADIUS = 2.35D; - private static final double STING_STRIKE_RADIUS = 2.15D; private static final double ENCOUNTER_HOME_RADIUS = 72.0D; private static final double ENCOUNTER_LEASH_RADIUS = 96.0D; private static final double HOME_REACHED_RADIUS = 9.0D; @@ -133,9 +129,6 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { private int hardenHealTicks; private int hardenSummonedScorpions; private int disengageTicks; - private float hardenLockedYaw; - private float hardenLockedPitch; - private float attackYaw; private boolean attackDamageApplied; private AttackType currentAttack = AttackType.NONE; private HardenPhase hardenPhase = HardenPhase.NONE; @@ -181,8 +174,6 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { this.goalSelector.addGoal(0, new FloatGoal(this)); this.goalSelector.addGoal(1, new EmperorScorpionCombatGoal()); this.goalSelector.addGoal(5, new RandomStrollGoal(this, 0.8D)); - this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 12.0F)); - this.goalSelector.addGoal(7, new RandomLookAroundGoal(this)); this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); } @@ -197,10 +188,11 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { if (this.isHardenedStateActive()) { return false; } - amount = BossCombatUtil.capSingleHitAtHalfHealth(this, amount); + float preHealth = this.getHealth(); boolean hurt = super.hurt(source, amount); if (hurt) { this.hasTakenDamage = true; + BossCombatUtil.clampHalfHealthCrossing(this, preHealth); } return hurt; } @@ -244,11 +236,6 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { return 1.5F; } - @Override - public int getMaxHeadYRot() { - return 40; - } - @Override public void tick() { super.tick(); @@ -326,7 +313,6 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { this.previousAttack = attackType; this.attackAnimTicks = attackType.animTicks(); this.attackDamageApplied = false; - this.attackYaw = this.getYRot(); this.getNavigation().stop(); if (attackType == AttackType.CLAW) { this.clawCooldownTicks = AntarchySettings.emperorScorpionClawCooldownTicks(); @@ -345,12 +331,6 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { return; } - if (this.attackAnimTicks > this.currentAttack.commitTick()) { - this.getLookControl().setLookAt(this.attackTarget, 30.0F, 30.0F); - this.attackYaw = this.getYRot(); - } else { - this.lockAttackRotation(); - } if (!this.attackDamageApplied && this.attackAnimTicks == this.currentAttack.hitTick() && this.canHitAttackTarget(this.attackTarget, this.currentAttack)) { @@ -367,25 +347,8 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { if (!target.isAlive() || !this.hasLineOfSight(target)) { return false; } - Vec3 origin = this.getStrikeOrigin(attackType); - Vec3 targetCenter = target.position().add(0.0D, target.getBbHeight() * 0.5D, 0.0D); - Vec3 offset = targetCenter.subtract(origin); - double verticalTolerance = attackType == AttackType.STING ? STING_VERTICAL_TOLERANCE : CLAW_VERTICAL_TOLERANCE; - if (Math.abs(offset.y) > verticalTolerance) { - return false; - } - Vec3 horizontal = new Vec3(offset.x, 0.0D, offset.z); - if (horizontal.lengthSqr() < 1.0E-6D) { - return true; - } - Vec3 forward = Vec3.directionFromRotation(0.0F, this.attackYaw); - double forwardDot = horizontal.normalize().dot(new Vec3(forward.x, 0.0D, forward.z).normalize()); - double minForwardDot = attackType == AttackType.STING ? STING_FORWARD_DOT : CLAW_FORWARD_DOT; - if (forwardDot < minForwardDot) { - return false; - } - double strikeRadius = attackType == AttackType.STING ? STING_STRIKE_RADIUS : CLAW_STRIKE_RADIUS; - return origin.distanceToSqr(targetCenter) <= strikeRadius * strikeRadius; + double reach = attackType == AttackType.STING ? STING_HIT_REACH : CLAW_HIT_REACH; + return this.distanceToSqr(target) <= reach * reach; } private void resetAttackState() { @@ -395,11 +358,10 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { this.attackTarget = null; } - private Vec3 getStrikeOrigin(AttackType attackType) { - Vec3 forward = Vec3.directionFromRotation(0.0F, this.attackYaw); - double forwardOffset = attackType == AttackType.STING ? STING_STRIKE_FORWARD : CLAW_STRIKE_FORWARD; - double verticalOffset = attackType == AttackType.STING ? this.getBbHeight() * 0.8D : this.getBbHeight() * 0.52D; - return this.position().add(forward.x * forwardOffset, verticalOffset, forward.z * forwardOffset); + private float approachYaw(float current, float target, float maxDeltaPerTick) { + float delta = Mth.wrapDegrees(target - current); + delta = Math.max(-maxDeltaPerTick, Math.min(maxDeltaPerTick, delta)); + return current + delta; } private void tickHardenState() { @@ -416,10 +378,6 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { switch (this.getHardenPhase()) { case CASTING -> { - LivingEntity target = this.getTarget(); - if (target != null) { - this.getLookControl().setLookAt(target, 20.0F, 20.0F); - } if (this.hardenCastTicks % this.hardenCastSpawnTicks == 0 && this.hardenSummonedScorpions < AntarchySettings.emperorScorpionMaxSummonedScorpions() && this.countOwnedNearbyScorpionMinions() < AntarchySettings.emperorScorpionMaxNearbyScorpions()) { @@ -435,13 +393,11 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { } } case START -> { - this.lockHardenRotation(); if (--this.hardenStateTicks <= 0) { this.beginHardened(); } } case ACTIVE -> { - this.lockHardenRotation(); Vec3 motion = this.getDeltaMovement(); this.setDeltaMovement(0.0D, motion.y, 0.0D); if (--this.hardenDurationTicks <= 0) { @@ -454,7 +410,6 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { } } case END -> { - this.lockHardenRotation(); Vec3 motion = this.getDeltaMovement(); this.setDeltaMovement(0.0D, motion.y, 0.0D); if (--this.hardenStateTicks <= 0) { @@ -481,8 +436,6 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { private void beginHardening() { this.setHardenPhase(HardenPhase.START); this.hardenStateTicks = HARDEN_START_TICKS; - this.hardenLockedYaw = this.getYRot(); - this.hardenLockedPitch = this.getXRot(); this.playSound(AntarchySoundEvents.EMPEROR_SCORPION_ROAR.get(), 1.0F, 0.95F + this.random.nextFloat() * 0.05F); this.setAggressive(false); } @@ -540,7 +493,6 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { return; } horizontal = horizontal.normalize().scale(horizontalSpeed); - this.attackYaw = (float) (net.minecraft.util.Mth.atan2(horizontal.z, horizontal.x) * (180.0D / Math.PI)) - 90.0F; this.setDeltaMovement(this.getDeltaMovement().add(horizontal.x, verticalSpeed, horizontal.z)); this.hasImpulse = true; } @@ -603,27 +555,6 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { this.entityData.set(HARDEN_PHASE, phase.ordinal()); } - private void lockAttackRotation() { - this.setYRot(this.attackYaw); - this.setYHeadRot(this.attackYaw); - this.yBodyRot = this.attackYaw; - this.yBodyRotO = this.attackYaw; - this.yHeadRotO = this.attackYaw; - } - - private void lockHardenRotation() { - if (!this.isHardenSequenceActive()) { - return; - } - this.setYRot(this.hardenLockedYaw); - this.setYHeadRot(this.hardenLockedYaw); - this.yBodyRot = this.hardenLockedYaw; - this.yBodyRotO = this.hardenLockedYaw; - this.yHeadRotO = this.hardenLockedYaw; - this.setXRot(this.hardenLockedPitch); - this.xRotO = this.hardenLockedPitch; - } - private void updateAnimationState() { if (this.isDeadOrDying()) { this.setAnimationState(ANIM_DEATH); @@ -746,7 +677,6 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { this.encounterHome = new BlockPos(tag.getInt("EncounterHomeX"), tag.getInt("EncounterHomeY"), tag.getInt("EncounterHomeZ")); } this.resetAttackState(); - this.attackYaw = this.getYRot(); if (this.getHardenPhase() == HardenPhase.CASTING) { this.setHardenPhase(HardenPhase.NONE); } @@ -949,7 +879,12 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { } private final class EmperorScorpionCombatGoal extends Goal { - private static final double CHASE_SPEED = 1.1D; + private static final double CHASE_SPEED = 1.15D; + + private int repathCooldownTicks; + private double repathTargetX; + private double repathTargetY; + private double repathTargetZ; private EmperorScorpionCombatGoal() { this.setFlags(EnumSet.of(Goal.Flag.MOVE, Goal.Flag.LOOK)); @@ -964,12 +899,14 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { @Override public boolean canContinueToUse() { LivingEntity target = EmperorScorpionEntity.this.getTarget(); - return (target != null && target.isAlive()) || EmperorScorpionEntity.this.isAttackLocked(); + return EmperorScorpionEntity.this.isAttackLocked() + || (target != null && target.isAlive() && !EmperorScorpionEntity.this.isHardenSequenceActive()); } @Override public void start() { EmperorScorpionEntity.this.setAggressive(true); + this.repathCooldownTicks = 0; } @Override @@ -980,70 +917,85 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { @Override public void tick() { + if (EmperorScorpionEntity.this.isAttackLocked() || EmperorScorpionEntity.this.isHardenSequenceActive()) { + return; + } + LivingEntity target = EmperorScorpionEntity.this.getTarget(); if (target == null) { + return; + } + + if (EmperorScorpionEntity.this.isWithinMeleeAttackRange(target) && EmperorScorpionEntity.this.hasLineOfSight(target)) { EmperorScorpionEntity.this.getNavigation().stop(); + EmperorScorpionEntity.this.setDeltaMovement(0.0D, EmperorScorpionEntity.this.getDeltaMovement().y, 0.0D); + AttackType attackType = EmperorScorpionEntity.this.selectAttack(target); + if (attackType != AttackType.NONE) { + EmperorScorpionEntity.this.beginAttack(target, attackType); + } return; } - if (EmperorScorpionEntity.this.isHardenSequenceActive()) { - this.stopMovement(); + if (EmperorScorpionEntity.this.distanceToSqr(target) <= DIRECT_APPROACH_RANGE * DIRECT_APPROACH_RANGE + && EmperorScorpionEntity.this.hasLineOfSight(target)) { + EmperorScorpionEntity.this.getNavigation().stop(); + this.approachDirectly(target); return; } - EmperorScorpionEntity.this.getLookControl().setLookAt(target, 30.0F, 30.0F); - - if (EmperorScorpionEntity.this.isAttackLocked()) { - this.stopMovement(); - return; - } - - if (!EmperorScorpionEntity.this.hasLineOfSight(target)) { - EmperorScorpionEntity.this.getNavigation().moveTo(target, CHASE_SPEED); - return; - } - - if (!EmperorScorpionEntity.this.isWithinMeleeAttackRange(target)) { - EmperorScorpionEntity.this.getNavigation().moveTo(target, CHASE_SPEED); - return; - } - - this.stopMovement(); - AttackType attackType = EmperorScorpionEntity.this.selectAttack(target); - if (attackType == AttackType.NONE) { - EmperorScorpionEntity.this.getNavigation().moveTo(target, CHASE_SPEED); - return; - } - - EmperorScorpionEntity.this.beginAttack(target, attackType); + this.tryRepath(target); } - private void stopMovement() { - EmperorScorpionEntity.this.getNavigation().stop(); - EmperorScorpionEntity.this.setSpeed(0.0F); - EmperorScorpionEntity.this.setZza(0.0F); + private void approachDirectly(LivingEntity target) { + double dx = target.getX() - EmperorScorpionEntity.this.getX(); + double dz = target.getZ() - EmperorScorpionEntity.this.getZ(); + if (dx * dx + dz * dz < 1.0E-4D) { + return; + } + float targetYaw = (float) (Mth.atan2(dz, dx) * (180.0D / Math.PI)) - 90.0F; + float currentYaw = EmperorScorpionEntity.this.getYRot(); + float newYaw = EmperorScorpionEntity.this.approachYaw(currentYaw, targetYaw, DIRECT_APPROACH_TURN_RATE); + EmperorScorpionEntity.this.setYRot(newYaw); + EmperorScorpionEntity.this.setYHeadRot(newYaw); + EmperorScorpionEntity.this.yBodyRot = newYaw; + EmperorScorpionEntity.this.yBodyRotO = newYaw; + + Vec3 currentMotion = EmperorScorpionEntity.this.getDeltaMovement(); + float headingError = Math.abs(Mth.wrapDegrees(targetYaw - currentYaw)); + if (headingError <= DIRECT_APPROACH_ALIGN_THRESHOLD) { + double speed = EmperorScorpionEntity.this.getAttributeValue(Attributes.MOVEMENT_SPEED) * CHASE_SPEED; + Vec3 forward = Vec3.directionFromRotation(0.0F, newYaw).scale(speed); + EmperorScorpionEntity.this.setDeltaMovement(forward.x, currentMotion.y, forward.z); + } else { + EmperorScorpionEntity.this.setDeltaMovement(0.0D, currentMotion.y, 0.0D); + } + } + + private void tryRepath(LivingEntity target) { + if (--this.repathCooldownTicks > 0 + && target.distanceToSqr(this.repathTargetX, this.repathTargetY, this.repathTargetZ) < 1.0D) { + return; + } + this.repathTargetX = target.getX(); + this.repathTargetY = target.getY(); + this.repathTargetZ = target.getZ(); + this.repathCooldownTicks = 4 + EmperorScorpionEntity.this.random.nextInt(7); + if (!EmperorScorpionEntity.this.getNavigation().moveTo(target, CHASE_SPEED)) { + this.repathCooldownTicks += 15; + } } } @Override public boolean isWithinMeleeAttackRange(LivingEntity target) { - if (this.encounterHome != null && target.distanceToSqr(Vec3.atCenterOf(this.encounterHome)) > ENCOUNTER_HOME_RADIUS * ENCOUNTER_HOME_RADIUS) { - return false; - } - return this.distanceToSqr(target) <= STING_RANGE * STING_RANGE; + return this.distanceToSqr(target) <= CLAW_REACH * CLAW_REACH; } private AttackType selectAttack(LivingEntity target) { - double horizontalDistance = this.distanceToSqr(target); - boolean inClawRange = this.clawCooldownTicks <= 0 && horizontalDistance <= CLAW_RANGE * CLAW_RANGE; - boolean inStingRange = this.stingCooldownTicks <= 0 && horizontalDistance <= STING_RANGE * STING_RANGE; - boolean canClaw = inClawRange && this.hasLineOfSight(target); - boolean canSting = inStingRange && this.hasLineOfSight(target); + double distSqr = this.distanceToSqr(target); + boolean canClaw = this.clawCooldownTicks <= 0 && distSqr <= CLAW_REACH * CLAW_REACH && this.hasLineOfSight(target); + boolean canSting = this.stingCooldownTicks <= 0 && distSqr <= STING_REACH * STING_REACH && this.hasLineOfSight(target); if (canClaw && canSting) { - double heightDifference = target.getY() - this.getY(); - if (heightDifference > 1.25D || horizontalDistance > CLAW_RANGE * CLAW_RANGE * 0.7D) { - return this.previousAttack == AttackType.STING && this.random.nextFloat() < 0.5F ? AttackType.CLAW : AttackType.STING; - } return this.previousAttack == AttackType.CLAW && this.random.nextFloat() < 0.55F ? AttackType.STING : AttackType.CLAW; } if (canSting) { @@ -1075,14 +1027,6 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { default -> 0; }; } - - private int commitTick() { - return switch (this) { - case CLAW -> Math.max(1, this.hitTick() + 3); - case STING -> Math.max(1, this.hitTick() + 4); - default -> 0; - }; - } } private enum HardenPhase { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/HerculesBeetleEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/HerculesBeetleEntity.java index 035c3763..ab930778 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/HerculesBeetleEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/HerculesBeetleEntity.java @@ -56,6 +56,8 @@ import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal; import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; +import net.minecraft.world.entity.ai.goal.target.OwnerHurtByTargetGoal; +import net.minecraft.world.entity.ai.goal.target.OwnerHurtTargetGoal; import net.minecraft.world.entity.ai.navigation.FlyingPathNavigation; import net.minecraft.world.entity.ai.navigation.PathNavigation; import net.minecraft.world.entity.animal.FlyingAnimal; @@ -141,6 +143,7 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl private static final int CRY_COOLDOWN_TICKS = 120; private static final int COMBAT_RESET_TICKS = 60; private static final int IMPACT_SHAKE_TICKS = 25; + private static final int AIRBORNE_ANIMATION_HYSTERESIS_TICKS = 4; private static final double FLIGHT_SPEED = 1.38D; private static final double GROUND_SPEED = 0.34D; private static final double CHARGE_SPEED = 1.5D; @@ -250,6 +253,8 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl && !this.isKnockedDown() && !player.isCreative() && !player.isSpectator())); + this.targetSelector.addGoal(3, new OwnerHurtByTargetGoal(this)); + this.targetSelector.addGoal(4, new OwnerHurtTargetGoal(this)); } @Override @@ -529,12 +534,11 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl this.setAnimationState(ANIM_KNOCKED_DOWN_IDLE); return; } - if (this.isFlying()) { + if (this.isFlying() || this.airborneTicks > AIRBORNE_ANIMATION_HYSTERESIS_TICKS) { this.setAnimationState(ANIM_FLY); return; } if (!this.onGround()) { - this.setAnimationState(ANIM_IDLE); return; } if (this.getControllingPassenger() instanceof Player rider) { @@ -594,13 +598,16 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl amount *= 0.5F; } - amount = BossCombatUtil.capSingleHitAtHalfHealth(this, amount); + float preHealth = this.getHealth(); if (!this.level().isClientSide && !this.isTame() && !this.isKnockedDown() && !this.isDeadOrDying()) { float knockThreshold = Math.max(1.0F, this.getMaxHealth() * 0.05F); if (this.getHealth() - amount <= knockThreshold) { float allowedDamage = Math.max(0.0F, this.getHealth() - knockThreshold); boolean hurt = allowedDamage <= 0.0F || super.hurt(source, allowedDamage); + if (hurt) { + BossCombatUtil.clampHalfHealthCrossing(this, preHealth); + } if (hurt && this.isAlive()) { this.enterKnockedDown(); } @@ -608,7 +615,11 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl } } - return super.hurt(source, amount); + boolean hurt = super.hurt(source, amount); + if (hurt) { + BossCombatUtil.clampHalfHealthCrossing(this, preHealth); + } + return hurt; } @Override @@ -616,6 +627,9 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl if (super.isInvulnerableTo(source)) { return true; } + if (this.isTame()) { + return false; + } return BossCombatUtil.isOutOfDamageRange(this, AntarchySettings.herculesBeetleDamageRange()); } @@ -1227,7 +1241,10 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl @Override public boolean canAttack(LivingEntity target) { if (target instanceof Player player) { - return !this.isTame() && !player.isCreative() && !player.isSpectator() && super.canAttack(target); + if (this.isTame() && this.isOwnedBy(player)) { + return false; + } + return !player.isCreative() && !player.isSpectator() && super.canAttack(target); } return super.canAttack(target); } @@ -1237,7 +1254,10 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl return false; } if (target instanceof Player player) { - return !player.isCreative() && !player.isSpectator() && !this.isTame(); + if (this.isTame() && this.isOwnedBy(player)) { + return false; + } + return !player.isCreative() && !player.isSpectator(); } return target.canBeSeenAsEnemy(); } @@ -1402,8 +1422,8 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl @Override public boolean canUse() { - return !HerculesBeetleEntity.this.isTame() - && !HerculesBeetleEntity.this.isKnockedDown() + return !HerculesBeetleEntity.this.isKnockedDown() + && !HerculesBeetleEntity.this.isVehicle() && HerculesBeetleEntity.this.getTarget() != null && HerculesBeetleEntity.this.canAttack(HerculesBeetleEntity.this.getTarget()); } @@ -1413,8 +1433,8 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl LivingEntity target = HerculesBeetleEntity.this.getTarget(); return target != null && target.isAlive() - && !HerculesBeetleEntity.this.isTame() && !HerculesBeetleEntity.this.isKnockedDown() + && !HerculesBeetleEntity.this.isVehicle() && HerculesBeetleEntity.this.canAttack(target); } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/RollyPollyEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/RollyPollyEntity.java index 8b1143cf..d698de4a 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/RollyPollyEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/RollyPollyEntity.java @@ -7,6 +7,7 @@ import com.craisinlord.antarchy.content.AntarchySoundEvents; import java.util.EnumSet; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.core.particles.ItemParticleOption; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.nbt.CompoundTag; @@ -21,6 +22,7 @@ import net.minecraft.advancements.CriteriaTriggers; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; +import net.minecraft.world.Difficulty; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.AgeableMob; import net.minecraft.world.entity.EntityType; @@ -108,7 +110,15 @@ public class RollyPollyEntity extends TamableAnimal implements GeoEntity { return true; } - return Mob.checkMobSpawnRules(entityType, level, spawnReason, pos, random); + BlockPos belowPos = pos.below(); + if (level.getDifficulty() == Difficulty.PEACEFUL) { + return false; + } + return level.getBlockState(pos).isAir() + && level.getBlockState(pos.above()).isAir() + && level.getFluidState(pos).isEmpty() + && level.getFluidState(pos.above()).isEmpty() + && level.getBlockState(belowPos).isFaceSturdy(level, belowPos, Direction.UP); } public static AttributeSupplier.Builder createAttributes() { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/StinkBugEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/StinkBugEntity.java index 46cac86d..cac976e1 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/StinkBugEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/StinkBugEntity.java @@ -4,9 +4,9 @@ import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.effect.StinkyBehavior; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; import net.minecraft.util.RandomSource; -import net.minecraft.world.Difficulty; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.AgeableMob; import net.minecraft.world.entity.EntityType; @@ -25,6 +25,7 @@ import net.minecraft.sounds.SoundEvent; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.Difficulty; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; @@ -68,8 +69,15 @@ public class StinkBugEntity extends Animal implements GeoEntity { if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER || spawnReason == MobSpawnType.COMMAND) { return true; } - return level.getDifficulty() != Difficulty.PEACEFUL - && Mob.checkMobSpawnRules(entityType, level, spawnReason, pos, random); + BlockPos belowPos = pos.below(); + if (level.getDifficulty() == Difficulty.PEACEFUL) { + return false; + } + return level.getBlockState(pos).isAir() + && level.getBlockState(pos.above()).isAir() + && level.getFluidState(pos).isEmpty() + && level.getFluidState(pos.above()).isEmpty() + && level.getBlockState(belowPos).isFaceSturdy(level, belowPos, Direction.UP); } @Override diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/TriffidEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/TriffidEntity.java index 3916b514..99284b5b 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/TriffidEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/TriffidEntity.java @@ -4,9 +4,9 @@ import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; -import java.util.HashSet; +import java.util.HashMap; import java.util.List; -import java.util.Set; +import java.util.Map; import java.util.UUID; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -78,7 +78,7 @@ public class TriffidEntity extends Monster implements GeoEntity { private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlayAndHold("death"); private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); - private final Set sweepHitEntities = new HashSet<>(); + private final Map sweepHitCooldowns = new HashMap<>(); private int actionTicks; private int attackCooldown; @@ -341,7 +341,6 @@ public class TriffidEntity extends Monster implements GeoEntity { this.actionTicks = SWEEP_TOTAL_TICKS; this.attackCooldown = SWEEP_COOLDOWN_TICKS; this.actionStartYaw = this.getAngleTo(target) - 100.0F; - this.sweepHitEntities.clear(); this.setYRot(this.actionStartYaw); this.playSound(AntarchySoundEvents.TRIFFID_ATTACK.get(), 0.9F, 0.75F); } @@ -351,6 +350,7 @@ public class TriffidEntity extends Monster implements GeoEntity { float progress = elapsed / (float) SWEEP_TOTAL_TICKS; this.setYRot(this.actionStartYaw + 200.0F * progress); + this.tickSweepHitCooldowns(); if (elapsed >= SWEEP_ACTIVE_START && elapsed <= SWEEP_ACTIVE_END) { this.applySweepDamage(); } @@ -358,10 +358,17 @@ public class TriffidEntity extends Monster implements GeoEntity { this.actionTicks--; if (this.actionTicks <= 0) { this.setActionState(ACTION_NONE); - this.sweepHitEntities.clear(); } } + private void tickSweepHitCooldowns() { + if (this.sweepHitCooldowns.isEmpty()) { + return; + } + this.sweepHitCooldowns.replaceAll((uuid, ticksRemaining) -> ticksRemaining - 1); + this.sweepHitCooldowns.values().removeIf(ticksRemaining -> ticksRemaining <= 0); + } + private void applySweepDamage() { if (!(this.level() instanceof ServerLevel serverLevel)) { return; @@ -374,7 +381,7 @@ public class TriffidEntity extends Monster implements GeoEntity { ); for (LivingEntity candidate : candidates) { - if (candidate == this || this.sweepHitEntities.contains(candidate.getUUID())) { + if (candidate == this || this.sweepHitCooldowns.containsKey(candidate.getUUID())) { continue; } if (this.distanceTo(candidate) > SWEEP_RANGE) { @@ -386,9 +393,12 @@ public class TriffidEntity extends Monster implements GeoEntity { continue; } - if (candidate.hurt(AntarchyDamageSources.triffidMauling(serverLevel, this), (float) AntarchySettings.triffidAttackDamage())) { - this.sweepHitEntities.add(candidate.getUUID()); - } + // Put the entity on cooldown before hurting it, regardless of hurt()'s result: a + // shield or armor effect can absorb the damage and make hurt() return false without + // granting the vanilla invulnerability window, which would otherwise let this attack + // re-attempt damage on the same entity every single tick of the active window. + this.sweepHitCooldowns.put(candidate.getUUID(), AntarchySettings.triffidSweepHitCooldownTicks()); + candidate.hurt(AntarchyDamageSources.triffidMauling(serverLevel, this), (float) AntarchySettings.triffidAttackDamage()); } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/WaterBombEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/WaterBombEntity.java index e2de6b7b..baf33597 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/WaterBombEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/WaterBombEntity.java @@ -28,22 +28,35 @@ import net.minecraft.network.syncher.SynchedEntityData; import java.util.HashMap; import java.util.Map; import java.util.UUID; +import software.bernie.geckolib.animatable.GeoEntity; +import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationController; +import software.bernie.geckolib.animation.AnimationState; +import software.bernie.geckolib.animation.PlayState; +import software.bernie.geckolib.animation.RawAnimation; +import software.bernie.geckolib.util.GeckoLibUtil; -public class WaterBombEntity extends ThrowableProjectile { +public class WaterBombEntity extends ThrowableProjectile implements GeoEntity { + + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); private static final EntityDataAccessor HUGE = SynchedEntityData.defineId(WaterBombEntity.class, EntityDataSerializers.BOOLEAN); + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); private int lifetimeTicks; private final Map hitCooldowns = new HashMap<>(); public WaterBombEntity(EntityType entityType, Level level) { super(entityType, level); this.lifetimeTicks = AntarchySettings.waterBombLifetimeTicks(); + this.configureProjectile(); } public WaterBombEntity(Level level, LivingEntity owner) { super(AntarchyObjects.WATER_BOMB.get(), owner, level); this.lifetimeTicks = AntarchySettings.waterBombLifetimeTicks(); + this.configureProjectile(); } public WaterBombEntity(Level level, LivingEntity owner, boolean huge) { @@ -51,6 +64,10 @@ public class WaterBombEntity extends ThrowableProjectile { this.entityData.set(HUGE, huge); } + private void configureProjectile() { + this.noCulling = true; + } + @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { builder.define(HUGE, false); @@ -68,6 +85,7 @@ public class WaterBombEntity extends ThrowableProjectile { @Override public void tick() { super.tick(); + this.realignToMotion(); this.hitCooldowns.replaceAll((uuid, cd) -> cd - 1); this.hitCooldowns.entrySet().removeIf(e -> e.getValue() <= 0); @@ -143,4 +161,29 @@ public class WaterBombEntity extends ThrowableProjectile { this.lifetimeTicks = tag.contains("LifetimeTicks") ? tag.getInt("LifetimeTicks") : AntarchySettings.waterBombLifetimeTicks(); if (tag.contains("Huge")) this.entityData.set(HUGE, tag.getBoolean("Huge")); } + + private void realignToMotion() { + Vec3 motion = this.getDeltaMovement(); + if (motion.lengthSqr() < 1.0E-6D) { + return; + } + + double horizontal = Math.sqrt(motion.x * motion.x + motion.z * motion.z); + this.setYRot((float) (net.minecraft.util.Mth.atan2(motion.z, motion.x) * (180.0D / Math.PI)) - 90.0F); + this.setXRot((float) (-(net.minecraft.util.Mth.atan2(motion.y, horizontal) * (180.0D / Math.PI)))); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "water_bomb_controller", 0, this::waterBombController)); + } + + private PlayState waterBombController(AnimationState state) { + return state.setAndContinue(IDLE_ANIM); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/RainbowAntEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/RainbowAntEntity.java index 15ae5a29..7a50da07 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/RainbowAntEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/RainbowAntEntity.java @@ -4,6 +4,7 @@ import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.compat.infinity.InfinityCompat; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.content.portal.RainbowPortalIgniter; import net.minecraft.core.registries.Registries; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; @@ -75,6 +76,31 @@ public class RainbowAntEntity extends BaseAntEntity implements GeoEntity { return this.hasActiveInfinityDestination() || super.requiresCustomPersistence(); } + /** + * Called on death. If this ant has already been activated (fed its reagent) and Infinity integration is + * enabled, looks for a nearby unlit obsidian Nether-portal frame and, if found, ignites it as a permanent + * physical Infinity Dimensions portal to this ant's assigned dimension. + */ + public boolean tryIgniteInfinityPortalOnDeath() { + if (!this.infinityActivated) { + return false; + } + if (!AntarchySettings.permanentPortalsEnabled() || !AntarchySettings.rainbowAntsLeadToInfinityDimensions() + || !InfinityCompat.get().isAvailable()) { + return false; + } + if (!(this.level() instanceof ServerLevel serverLevel)) { + return false; + } + + ResourceLocation dimensionId = this.resolveDimensionId(); + if (dimensionId == null) { + return false; + } + + return RainbowPortalIgniter.tryIgnite(serverLevel, this.getBoundingBox(), dimensionId); + } + @Override public InteractionResult mobInteract(Player player, InteractionHand hand) { if (!AntTeleportHelper.isRightClickDimensionEnabled(this)) { @@ -189,6 +215,11 @@ public class RainbowAntEntity extends BaseAntEntity implements GeoEntity { return child; } + @Override + public boolean isFood(ItemStack stack) { + return this.infinityActivated && super.isFood(stack); + } + @Override protected ResourceKey destinationDimension() { return AntarchySettings.rainbowAntNonInfinityFallbackDimension(); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/brutalfly/BrutalflyEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/brutalfly/BrutalflyEntity.java index ec932890..f24f0c7b 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/brutalfly/BrutalflyEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/brutalfly/BrutalflyEntity.java @@ -384,7 +384,12 @@ public class BrutalflyEntity extends Monster implements GeoEntity { } return true; } - return super.hurt(source, BossCombatUtil.capSingleHitAtHalfHealth(this, amount)); + float preHealth = this.getHealth(); + boolean hurt = super.hurt(source, amount); + if (hurt) { + BossCombatUtil.clampHalfHealthCrossing(this, preHealth); + } + return hurt; } @Override diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/cloud_shark/CloudSharkEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/cloud_shark/CloudSharkEntity.java index 71b5983f..0b5c8984 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/cloud_shark/CloudSharkEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/cloud_shark/CloudSharkEntity.java @@ -138,7 +138,11 @@ public class CloudSharkEntity extends Monster implements GeoEntity { HurtByTargetGoal hurtByTargetGoal = new HurtByTargetGoal(this); hurtByTargetGoal.setAlertOthers(CloudSharkEntity.class); this.targetSelector.addGoal(1, hurtByTargetGoal); - this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, CloudSharkEntity::isTargetablePlayer)); + } + + private static boolean isTargetablePlayer(LivingEntity target) { + return !(target instanceof Player player) || (!player.isCreative() && !player.isSpectator()); } @Override @@ -194,7 +198,7 @@ public class CloudSharkEntity extends Monster implements GeoEntity { LivingEntity target = this.getTarget(); if ((target == null || !target.isAlive()) && this.tickCount % 10 == 0) { Player nearbyPlayer = this.level().getNearestPlayer(this, 32.0D); - if (nearbyPlayer != null && this.canAttack(nearbyPlayer)) { + if (nearbyPlayer != null && isTargetablePlayer(nearbyPlayer) && this.canAttack(nearbyPlayer)) { this.setTarget(nearbyPlayer); target = nearbyPlayer; } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/flying_squirrel/FlyingSquirrelEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/flying_squirrel/FlyingSquirrelEntity.java index 26e66a99..5f5f5a5f 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/flying_squirrel/FlyingSquirrelEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/flying_squirrel/FlyingSquirrelEntity.java @@ -6,7 +6,6 @@ import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.block.OuranwoodAcornBlock; import com.craisinlord.antarchy.content.block.OuranwoodLeavesBlock; -import com.mojang.logging.LogUtils; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.particles.ItemParticleOption; @@ -55,14 +54,11 @@ import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; import software.bernie.geckolib.animation.*; import software.bernie.geckolib.animation.AnimationState; import software.bernie.geckolib.util.GeckoLibUtil; -import org.slf4j.Logger; - import java.util.EnumSet; import java.util.Optional; import java.util.UUID; public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { - private static final Logger LOGGER = LogUtils.getLogger(); private static final ResourceKey ELYTHIA_DIMENSION = ResourceKey.create( Registries.DIMENSION, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "elythia") @@ -405,6 +401,10 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { this.tickPickupAnimation(); this.tickQuirkAnimation(); this.syncQuirkAnimationTrigger(); + if (this.hasActiveQuirkAnimation()) { + this.cancelTravel(); + this.setDeltaMovement(Vec3.ZERO); + } if (this.isClimbingToShoulder()) { Player shoulderPlayer = this.shoulderPlayerId != null @@ -812,14 +812,10 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { int variant = this.random.nextBoolean() ? QUIRK_1 : QUIRK_2; this.setQuirkVariant(variant); this.setQuirkTicks(variant == QUIRK_1 ? QUIRK_1_DURATION_TICKS : QUIRK_2_DURATION_TICKS); - LOGGER.info("FlyingSquirrel animation selected={} tick={}", variant == QUIRK_2 ? QUIRK_2_TRIGGER : QUIRK_1_TRIGGER, this.tickCount); this.quirkCooldownTicks = this.nextQuirkCooldown(); } private void stopQuirkAnimation() { - if (this.getQuirkVariant() != QUIRK_NONE || this.getQuirkTicks() > 0) { - LOGGER.info("FlyingSquirrel animation state cleared variant={} tick={}", this.getQuirkVariant(), this.tickCount); - } this.setQuirkTicks(0); this.setQuirkVariant(QUIRK_NONE); } @@ -828,9 +824,6 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { int quirkVariant = this.getQuirkVariant(); if (quirkVariant != QUIRK_NONE && this.getQuirkTicks() > 0 && this.lastTriggeredQuirkVariant != quirkVariant) { String triggerName = quirkVariant == QUIRK_2 ? QUIRK_2_TRIGGER : QUIRK_1_TRIGGER; - if (!this.level().isClientSide) { - LOGGER.info("FlyingSquirrel triggerAnim called={} tick={}", triggerName, this.tickCount); - } this.triggerAnim(QUIRK_CONTROLLER, triggerName); this.lastTriggeredQuirkVariant = quirkVariant; return; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java index 315c6fb9..bd64c024 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java @@ -369,7 +369,12 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO return false; } - return super.hurt(source, BossCombatUtil.capSingleHitAtHalfHealth(this, amount)); + float preHealth = this.getHealth(); + boolean hurt = super.hurt(source, amount); + if (hurt) { + BossCombatUtil.clampHalfHealthCrossing(this, preHealth); + } + return hurt; } @Override diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareBiteEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareBiteEntity.java index eb12455d..54a7f75a 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareBiteEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareBiteEntity.java @@ -1,16 +1,22 @@ package com.craisinlord.antarchy.content.entity.nightmare; +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.AntarchyObjects; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundSource; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; import software.bernie.geckolib.animation.AnimatableManager; @@ -20,12 +26,26 @@ import software.bernie.geckolib.animation.PlayState; import software.bernie.geckolib.animation.RawAnimation; import software.bernie.geckolib.util.GeckoLibUtil; +import java.util.UUID; + public class NightmareBiteEntity extends Entity implements GeoEntity { private static final EntityDataAccessor PHASE_TWO = SynchedEntityData.defineId(NightmareBiteEntity.class, EntityDataSerializers.BOOLEAN); private static final RawAnimation BITE_ANIM = RawAnimation.begin().thenPlay("bite"); + private static final int LIFETIME_TICKS = 12; + private static final int SOUND_TICK = 7; + private static final int DAMAGE_TICK = 8; + private static final double START_SIDE_OFFSET = 1.35D; + private static final double START_BACK_OFFSET = 1.4D; + private static final double END_SIDE_OFFSET = 0.15D; + private static final double END_BACK_OFFSET = 0.2D; private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); private int ageTicks; + private int approachSide = 1; + private boolean biteSoundPlayed; + private boolean biteDamageApplied; + @Nullable + private UUID targetId; public NightmareBiteEntity(EntityType entityType, Level level) { super(entityType, level); @@ -34,10 +54,12 @@ public class NightmareBiteEntity extends Entity implements GeoEntity { this.noCulling = true; } - public static NightmareBiteEntity spawnAt(ServerLevel level, Vec3 pos, float yaw, boolean phaseTwo) { + public static NightmareBiteEntity spawnAt(ServerLevel level, Player target, boolean phaseTwo) { NightmareBiteEntity bite = new NightmareBiteEntity(AntarchyObjects.NIGHTMARE_BITE.get(), level); - bite.moveTo(pos.x, pos.y, pos.z, yaw, 0.0F); + bite.targetId = target.getUUID(); bite.setPhaseTwo(phaseTwo); + bite.approachSide = target.getRandom().nextBoolean() ? 1 : -1; + bite.updateTrackingPosition(target, 0.0D); level.addFreshEntity(bite); return bite; } @@ -90,21 +112,90 @@ public class NightmareBiteEntity extends Entity implements GeoEntity { if (this.level().isClientSide) { return; } - if (++this.ageTicks >= 12) { + LivingEntity target = this.resolveTarget(); + if (target == null || !target.isAlive() || !target.hasEffect(AntarchyObjects.DREAD.get())) { + this.discard(); + return; + } + int nextAge = ++this.ageTicks; + double progress = Math.min(1.0D, nextAge / (double) DAMAGE_TICK); + this.updateTrackingPosition(target, progress); + if (!this.biteSoundPlayed && nextAge >= SOUND_TICK) { + this.biteSoundPlayed = true; + this.level().playSound(null, this.getX(), this.getY(), this.getZ(), AntarchySoundEvents.NIGHTMARE_BITE.get(), SoundSource.HOSTILE, 0.75F, 0.86F + this.random.nextFloat() * 0.1F); + } + if (!this.biteDamageApplied && nextAge >= DAMAGE_TICK) { + this.biteDamageApplied = true; + this.performBite(target); + } + if (nextAge >= LIFETIME_TICKS) { this.discard(); } } + @Nullable + private LivingEntity resolveTarget() { + if (!(this.level() instanceof ServerLevel serverLevel) || this.targetId == null) { + return null; + } + Entity entity = serverLevel.getEntity(this.targetId); + return entity instanceof LivingEntity livingEntity ? livingEntity : null; + } + + private void updateTrackingPosition(LivingEntity target, double progress) { + Vec3 forward = target.getLookAngle().multiply(1.0D, 0.0D, 1.0D); + if (forward.lengthSqr() < 1.0E-4D) { + forward = this.getViewVector(1.0F).multiply(1.0D, 0.0D, 1.0D); + } + if (forward.lengthSqr() < 1.0E-4D) { + forward = new Vec3(0.0D, 0.0D, 1.0D); + } + forward = forward.normalize(); + Vec3 right = new Vec3(-forward.z, 0.0D, forward.x); + double sideOffset = START_SIDE_OFFSET + (END_SIDE_OFFSET - START_SIDE_OFFSET) * progress; + double backOffset = START_BACK_OFFSET + (END_BACK_OFFSET - START_BACK_OFFSET) * progress; + Vec3 desiredPos = target.position() + .add(0.0D, target.getBbHeight() * 0.55D, 0.0D) + .add(right.scale(this.approachSide * sideOffset)) + .subtract(forward.scale(backOffset)); + Vec3 toTarget = target.getEyePosition().subtract(desiredPos); + this.setPos(desiredPos.x, desiredPos.y, desiredPos.z); + if (toTarget.lengthSqr() > 1.0E-4D) { + float yaw = (float) Math.toDegrees(Math.atan2(toTarget.z, toTarget.x)) - 90.0F; + this.setYRot(yaw); + } + } + + private void performBite(LivingEntity target) { + if (target.distanceToSqr(this) > 6.25D) { + return; + } + float damage = (float) Math.max(3.0D, AntarchySettings.nightmareAttackDamage() * 0.35D); + target.hurt(this.damageSources().magic(), damage); + } + @Override public void addAdditionalSaveData(CompoundTag tag) { tag.putBoolean("PhaseTwo", this.isPhaseTwo()); tag.putInt("AgeTicks", this.ageTicks); + tag.putInt("ApproachSide", this.approachSide); + tag.putBoolean("BiteSoundPlayed", this.biteSoundPlayed); + tag.putBoolean("BiteDamageApplied", this.biteDamageApplied); + if (this.targetId != null) { + tag.putUUID("TargetId", this.targetId); + } } @Override public void readAdditionalSaveData(CompoundTag tag) { this.setPhaseTwo(tag.getBoolean("PhaseTwo")); this.ageTicks = tag.getInt("AgeTicks"); + this.approachSide = tag.getInt("ApproachSide"); + this.biteSoundPlayed = tag.getBoolean("BiteSoundPlayed"); + this.biteDamageApplied = tag.getBoolean("BiteDamageApplied"); + if (tag.hasUUID("TargetId")) { + this.targetId = tag.getUUID("TargetId"); + } } @Override diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java index db148401..f99e5ef0 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java @@ -5,7 +5,6 @@ import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; -import com.mojang.logging.LogUtils; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.particles.ParticleTypes; @@ -15,6 +14,8 @@ import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; import net.minecraft.util.Mth; import net.minecraft.util.RandomSource; import net.minecraft.world.Difficulty; @@ -54,13 +55,11 @@ import software.bernie.geckolib.animation.AnimationState; import software.bernie.geckolib.animation.PlayState; import software.bernie.geckolib.animation.RawAnimation; import software.bernie.geckolib.util.GeckoLibUtil; -import org.slf4j.Logger; - +import java.util.ArrayList; import java.util.EnumSet; import java.util.List; public class NightmareEntity extends Monster implements GeoEntity { - private static final Logger LOGGER = LogUtils.getLogger(); private static final EntityDataAccessor ANIMATION_STATE = SynchedEntityData.defineId(NightmareEntity.class, EntityDataSerializers.INT); private static final EntityDataAccessor ACTIVE_SPECIAL_ANIMATION = SynchedEntityData.defineId(NightmareEntity.class, EntityDataSerializers.INT); private static final EntityDataAccessor ROARING = SynchedEntityData.defineId(NightmareEntity.class, EntityDataSerializers.BOOLEAN); @@ -81,6 +80,7 @@ public class NightmareEntity extends Monster implements GeoEntity { private static final String PHASE_TWO_TEXTURE_KEY = "PhaseTwoTexture"; private static final String PHASE_TRANSITIONING_KEY = "PhaseTransitioning"; private static final String PHASE_TRANSITION_TICKS_KEY = "PhaseTransitionTicks"; + private static final String PENDING_PHASE_TRANSITION_KEY = "PendingPhaseTransition"; private static final String PORTAL_COOLDOWN_KEY = "PortalCooldown"; private static final String PORTAL_ATTACK_TICKS_KEY = "PortalAttackTicks"; private static final String PORTAL_ATTACK_HIT_KEY = "PortalAttackHitApplied"; @@ -115,20 +115,28 @@ public class NightmareEntity extends Monster implements GeoEntity { private static final int DREAD_TICKS = 160; private static final int WEAKNESS_TICKS = 100; private static final int BLOCK_BREAK_TICKS = 10; + private static final int TAKEOFF_COMMIT_TICKS = 8; + private static final int ROAR_FLIGHT_RECOVERY_TICKS = 16; private static final int FLIGHT_CEILING_CLEARANCE_BLOCKS = 4; private static final int PHASE_TWO_TRANSITION_TICKS = 80; private static final int PHASE_TWO_TEXTURE_SWAP_TICKS = 53; - private static final int PORTAL_TOTAL_TICKS = 28; - private static final int PORTAL_TELEPORT_TICK = 12; - private static final int PORTAL_DAMAGE_TICK = 18; - private static final int PORTAL_TRAVEL_INVULNERABLE_TICKS = 8; - private static final int PORTAL_LIFETIME_TICKS = 60; + private static final int PORTAL_TOTAL_TICKS = 74; + private static final int PORTAL_ENTER_TICK = 20; + private static final int PORTAL_HIDE_TICK = 55; + private static final int PORTAL_TELEPORT_TICK = 56; + private static final int PORTAL_REAPPEAR_TICK = 57; + private static final int PORTAL_DAMAGE_TICK = 61; + private static final int PORTAL_TRAVEL_INVULNERABLE_TICKS = PORTAL_REAPPEAR_TICK - PORTAL_HIDE_TICK; + private static final int PORTAL_LIFETIME_TICKS = 84; private static final double PATROL_SPEED = 0.34D; private static final double COMBAT_FLIGHT_SPEED = 0.725D; private static final double GROUND_APPROACH_SPEED = 0.82D; private static final double ATTACK_START_RANGE_SQR = 42.25D; - private static final double ATTACK_REACH_RADIUS = 2.65D; + private static final double ATTACK_HIT_FORWARD_OFFSET = 1.7D; + private static final double ATTACK_HIT_HALF_WIDTH = 1.85D; + private static final double ATTACK_HIT_MIN_Y_OFFSET = -0.35D; + private static final double ATTACK_HIT_MAX_Y_OFFSET = 2.3D; private static final double ATTACK_COMMIT_HORIZONTAL_RANGE = 4.2D; private static final double ATTACK_COMMIT_HORIZONTAL_RANGE_SQR = ATTACK_COMMIT_HORIZONTAL_RANGE * ATTACK_COMMIT_HORIZONTAL_RANGE; private static final double FLIGHT_ENGAGE_RANGE_SQR = 42.25D; @@ -136,16 +144,32 @@ public class NightmareEntity extends Monster implements GeoEntity { private static final double FLIGHT_ATTACK_RANGE_SQR = 49.0D; private static final double ROAR_RETRY_DISTANCE_SQR = 400.0D; private static final double PHASE_TWO_HEALTH_FRACTION = 0.5D; - private static final double PORTAL_RANGE = 32.0D; + private static final double PORTAL_RANGE = 72.0D; private static final double PORTAL_MIN_RANGE_SQR = 49.0D; - private static final double PORTAL_ENTRY_EXIT_MIN_RANGE_SQR = 49.0D; - private static final double PORTAL_EXIT_OFFSET = 2.35D; + private static final double PORTAL_ENTRY_EXIT_MIN_RANGE_SQR = 225.0D; + private static final double PORTAL_EXIT_OFFSET = 15.0D; + private static final double PORTAL_EXIT_SIDE_OFFSET = 4.5D; + private static final double PORTAL_EXIT_AIR_HEIGHT = 3.0D; private static final double FLYING_APPROACH_STRAFE_OFFSET = 2.1D; - private static final double FLYING_APPROACH_HEIGHT = 0.45D; - private static final double FLYING_APPROACH_HEIGHT_PHASE_TWO = 0.8D; + private static final double FLYING_APPROACH_HEIGHT = 0.0D; + private static final double FLYING_APPROACH_HEIGHT_PHASE_TWO = 0.12D; private static final double FLYING_APPROACH_TOO_CLOSE_RANGE_SQR = 9.0D; private static final double FLYING_OVERHEAD_STALL_RANGE_SQR = 4.0D; - private static final double FLYING_OVERHEAD_STALL_HEIGHT = 2.1D; + private static final double FLYING_OVERHEAD_STALL_HEIGHT = 1.35D; + private static final double FLYING_OVERHEAD_RELEASE_HEIGHT = 1.0D; + private static final double LOW_PROFILE_FLIGHT_DISENGAGE_RANGE_SQR = 12.25D; + private static final double LOW_PROFILE_FLIGHT_DISENGAGE_VERTICAL = 1.4D; + private static final double LOW_PROFILE_FLIGHT_DISENGAGE_OVERHEAD = 1.35D; + private static final double FLYING_OVERHEAD_DESCENT_BACK_OFFSET = 2.3D; + private static final double FLYING_OVERHEAD_DESCENT_SIDE_OFFSET = 2.4D; + private static final double FLYING_ATTACK_MAX_OVERHEAD_COMMIT_HEIGHT = 1.2D; + private static final double FLYING_ATTACK_BODY_TARGET_HEIGHT = 0.65D; + private static final double FLYING_ATTACK_MIN_TARGET_HEIGHT = 0.16D; + private static final double LOW_PROFILE_TARGET_MAX_HEIGHT = 1.2D; + private static final double LOW_PROFILE_OVERHEAD_DESCENT_BACK_OFFSET = 2.9D; + private static final double LOW_PROFILE_OVERHEAD_DESCENT_SIDE_OFFSET = 3.0D; + private static final double LOW_PROFILE_TOO_CLOSE_BACK_OFFSET = 3.2D; + private static final double LOW_PROFILE_TOO_CLOSE_STRAFE_SCALE = 0.85D; private static final double ANIMATION_MOVEMENT_THRESHOLD_SQR = 0.01D; private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); @@ -165,15 +189,15 @@ public class NightmareEntity extends Monster implements GeoEntity { private static final String SPECIAL_PHASE_TWO_TRIGGER = "phase2"; private static final String SPECIAL_PORTAL_ENTER_TRIGGER = "portal_enter"; private static final String SPECIAL_PORTAL_EXIT_TRIGGER = "portal_out"; - private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenPlayAndHold("attack"); - private static final RawAnimation ATTACK_P2_ANIM = RawAnimation.begin().thenPlayAndHold("attack_P2"); - private static final RawAnimation FLY_ATTACK_ANIM = RawAnimation.begin().thenPlayAndHold("attack2"); - private static final RawAnimation FLY_ATTACK_P2_ANIM = RawAnimation.begin().thenPlayAndHold("attack2_P2"); - private static final RawAnimation ROAR_ANIM = RawAnimation.begin().thenPlayAndHold("roar"); - private static final RawAnimation ROAR_P2_ANIM = RawAnimation.begin().thenPlayAndHold("roar_P2"); - private static final RawAnimation PHASE_TWO_TRANSITION_ANIM = RawAnimation.begin().thenPlayAndHold("phase2"); - private static final RawAnimation PORTAL_ENTER_ANIM = RawAnimation.begin().thenPlayAndHold("portal_enter"); - private static final RawAnimation PORTAL_EXIT_ANIM = RawAnimation.begin().thenPlayAndHold("portal_out"); + private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenPlay("attack"); + private static final RawAnimation ATTACK_P2_ANIM = RawAnimation.begin().thenPlay("attack_P2"); + private static final RawAnimation FLY_ATTACK_ANIM = RawAnimation.begin().thenPlay("attack2"); + private static final RawAnimation FLY_ATTACK_P2_ANIM = RawAnimation.begin().thenPlay("attack2_P2"); + private static final RawAnimation ROAR_ANIM = RawAnimation.begin().thenPlay("roar"); + private static final RawAnimation ROAR_P2_ANIM = RawAnimation.begin().thenPlay("roar_P2"); + private static final RawAnimation PHASE_TWO_TRANSITION_ANIM = RawAnimation.begin().thenPlay("phase2"); + private static final RawAnimation PORTAL_ENTER_ANIM = RawAnimation.begin().thenPlay("portal_enter"); + private static final RawAnimation PORTAL_EXIT_ANIM = RawAnimation.begin().thenPlay("portal_out"); private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlayAndHold("death"); private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); @@ -192,10 +216,12 @@ public class NightmareEntity extends Monster implements GeoEntity { private int portalCooldown; private int portalAttackTicks; private int portalTravelTicks; + private int takeoffCommitTicks; private boolean attackHitApplied; private boolean introRoarUsed; private boolean flyingToTarget; private boolean portalAttackHitApplied; + private boolean pendingPhaseTransition; private int lastTriggeredSpecialAnimation = SPECIAL_NONE; private Vec3 portalExitPos; @Nullable @@ -277,7 +303,7 @@ public class NightmareEntity extends Monster implements GeoEntity { } private PlayState mainAnimController(AnimationState state) { - if (this.hasActiveSpecialAnimation()) { + if (this.shouldBlockLocomotionAnimation()) { return PlayState.STOP; } int animState = this.getAnimationState(); @@ -323,7 +349,10 @@ public class NightmareEntity extends Monster implements GeoEntity { return; } - this.setNoGravity((this.flyingToTarget || this.portalAttackTicks > 0 || this.portalTravelTicks > 0) && !this.isTooCloseToCeiling()); + this.setNoGravity(!this.pendingPhaseTransition + && !this.isPhaseTransitioning() + && (this.flyingToTarget || this.portalAttackTicks > 0 || this.portalTravelTicks > 0) + && !this.isTooCloseToCeiling()); int prevAirborneTicks = this.airborneTicks; this.airborneTicks = this.onGround() ? 0 : this.airborneTicks + 1; @@ -337,6 +366,8 @@ public class NightmareEntity extends Monster implements GeoEntity { if (this.landingCooldown > 0) this.landingCooldown--; if (this.portalCooldown > 0) this.portalCooldown--; if (this.portalTravelTicks > 0) this.portalTravelTicks--; + if (this.takeoffCommitTicks > 0) this.takeoffCommitTicks--; + this.setInvisible(this.portalTravelTicks > 0); LivingEntity target = this.getTarget(); if (!this.canTargetEntity(target)) { @@ -360,6 +391,10 @@ public class NightmareEntity extends Monster implements GeoEntity { return; } + if (this.pendingPhaseTransition) { + this.tickPendingPhaseTransition(target); + } + if (this.isPhaseTransitioning()) { this.tickPhaseTransition(target); } else if (this.portalAttackTicks > 0) { @@ -396,7 +431,7 @@ public class NightmareEntity extends Monster implements GeoEntity { boolean hurt = clampedAmount > 0.0F && super.hurt(source, clampedAmount); if (hurt || clampedAmount <= 0.0F) { this.setHealth(threshold); - this.startPhaseTransition(); + this.beginPhaseTransitionSequence(); return true; } return false; @@ -497,6 +532,7 @@ public class NightmareEntity extends Monster implements GeoEntity { tag.putBoolean(PHASE_TWO_TEXTURE_KEY, this.hasPhaseTwoTexture()); tag.putBoolean(PHASE_TRANSITIONING_KEY, this.isPhaseTransitioning()); tag.putInt(PHASE_TRANSITION_TICKS_KEY, this.phaseTransitionTicks); + tag.putBoolean(PENDING_PHASE_TRANSITION_KEY, this.pendingPhaseTransition); tag.putInt(PORTAL_COOLDOWN_KEY, this.portalCooldown); tag.putInt(PORTAL_ATTACK_TICKS_KEY, this.portalAttackTicks); tag.putBoolean(PORTAL_ATTACK_HIT_KEY, this.portalAttackHitApplied); @@ -536,6 +572,7 @@ public class NightmareEntity extends Monster implements GeoEntity { this.setPhaseTwoTexture(tag.contains(PHASE_TWO_TEXTURE_KEY) ? tag.getBoolean(PHASE_TWO_TEXTURE_KEY) : this.isPhaseTwo() && !this.isPhaseTransitioning()); this.setPhaseTransitioning(tag.getBoolean(PHASE_TRANSITIONING_KEY)); this.phaseTransitionTicks = tag.getInt(PHASE_TRANSITION_TICKS_KEY); + this.pendingPhaseTransition = tag.getBoolean(PENDING_PHASE_TRANSITION_KEY); if (tag.contains(PORTAL_EXIT_X_KEY)) { this.portalExitPos = new Vec3(tag.getDouble(PORTAL_EXIT_X_KEY), tag.getDouble(PORTAL_EXIT_Y_KEY), tag.getDouble(PORTAL_EXIT_Z_KEY)); } else { @@ -552,9 +589,13 @@ public class NightmareEntity extends Monster implements GeoEntity { this.portalAttackTicks = 0; this.portalTravelTicks = 0; this.phaseTransitionTicks = 0; + this.pendingPhaseTransition = false; + this.flyingToTarget = false; this.clearActiveSpecialAnimation(); this.setRoaring(false); this.setDeltaMovement(Vec3.ZERO); + this.setNoGravity(false); + this.setInvisible(false); this.getNavigation().stop(); this.clearNightmarePortals(); } @@ -567,6 +608,14 @@ public class NightmareEntity extends Monster implements GeoEntity { if (this.deathTime == 1) { this.selectSpecialAnimation(SPECIAL_DEATH); } + this.setNoGravity(false); + if (!this.onGround()) { + Vec3 fall = this.getDeltaMovement().multiply(0.6D, 0.0D, 0.6D); + this.setDeltaMovement(fall.x, Math.min(fall.y, 0.0D) - 0.08D, fall.z); + this.hasImpulse = true; + } else { + this.setDeltaMovement(Vec3.ZERO); + } if (this.deathTime >= DEATH_TICKS) { this.remove(RemovalReason.KILLED); this.dropExperience(this); @@ -635,7 +684,7 @@ public class NightmareEntity extends Monster implements GeoEntity { private void startRoar() { this.roarTicks = this.introRoarUsed ? COMBAT_ROAR_TICKS : INTRO_ROAR_TICKS; this.introRoarUsed = true; - this.roarCooldown = 240 + this.random.nextInt(140); + this.roarCooldown = 420 + this.random.nextInt(180); this.attackAnimationTicks = 0; this.attackHitApplied = false; this.setRoaring(true); @@ -660,6 +709,9 @@ public class NightmareEntity extends Monster implements GeoEntity { if (--this.roarTicks <= 0) { this.roarTicks = 0; this.setRoaring(false); + this.flyingToTarget = false; + this.takeoffCommitTicks = 0; + this.landingCooldown = Math.max(this.landingCooldown, ROAR_FLIGHT_RECOVERY_TICKS); this.clearActiveSpecialAnimation(); this.attackCooldown = Math.max(this.attackCooldown, 18); } @@ -671,10 +723,23 @@ public class NightmareEntity extends Monster implements GeoEntity { this.attackCooldown = ATTACK_TOTAL_TICKS + 12; this.selectSpecialAnimation(this.selectAttackSpecialAnimation()); this.getNavigation().stop(); - Vec3 lunge = target.getEyePosition().subtract(this.getEyePosition()); + this.faceTowardTarget(target, 180.0F); + Vec3 lungeTarget = this.shouldUseFlyingLocomotion() + ? new Vec3(target.getX(), this.getFlyingAttackTargetY(target), target.getZ()) + : target.getEyePosition(); + Vec3 lunge = lungeTarget.subtract(this.getEyePosition()); if (lunge.lengthSqr() > 1.0E-4D) { Vec3 normalized = lunge.normalize(); - this.setDeltaMovement(this.getDeltaMovement().scale(0.3D).add(normalized.x * 0.85D, normalized.y * 0.18D, normalized.z * 0.85D)); + double verticalBoost = this.shouldUseFlyingLocomotion() ? 0.34D : 0.18D; + Vec3 current = this.getDeltaMovement(); + double upward = this.shouldUseFlyingLocomotion() + ? Math.max(normalized.y * verticalBoost, -0.08D) + : normalized.y * verticalBoost; + this.setDeltaMovement( + normalized.x * 0.85D, + current.y * 0.18D + upward, + normalized.z * 0.85D + ); this.hasImpulse = true; } } @@ -690,7 +755,7 @@ public class NightmareEntity extends Monster implements GeoEntity { if (!this.attackHitApplied && elapsed >= ATTACK_DAMAGE_TICK) { this.attackHitApplied = true; this.playNightmareBiteSound(); - this.performAttackHit(); + this.performAttackHit(target); } if (--this.attackAnimationTicks <= 0) { this.attackAnimationTicks = 0; @@ -698,10 +763,37 @@ public class NightmareEntity extends Monster implements GeoEntity { } } + private void beginPhaseTransitionSequence() { + this.attackAnimationTicks = 0; + this.portalAttackTicks = 0; + this.portalTravelTicks = 0; + this.attackHitApplied = false; + this.portalAttackHitApplied = false; + this.portalExitPos = null; + this.pendingPhaseTransition = !this.onGround(); + this.flyingToTarget = false; + this.clearNightmarePortals(); + this.getNavigation().stop(); + this.setRoaring(false); + this.setInvisible(false); + this.setNoGravity(false); + this.roarCooldown = Math.max(this.roarCooldown, 80); + this.portalCooldown = Math.max(this.portalCooldown, 140); + if (this.pendingPhaseTransition) { + Vec3 fall = this.getDeltaMovement(); + this.setDeltaMovement(fall.x * 0.25D, Math.min(fall.y, 0.0D) - 0.08D, fall.z * 0.25D); + this.clearActiveSpecialAnimation(); + return; + } + this.startPhaseTransition(); + } + private void startPhaseTransition() { this.setPhaseTwo(true); this.setPhaseTwoTexture(false); this.setPhaseTransitioning(true); + this.pendingPhaseTransition = false; + this.flyingToTarget = false; this.selectSpecialAnimation(SPECIAL_PHASE_TWO); this.phaseTransitionTicks = PHASE_TWO_TRANSITION_TICKS; this.attackAnimationTicks = 0; @@ -713,14 +805,42 @@ public class NightmareEntity extends Monster implements GeoEntity { this.clearNightmarePortals(); this.getNavigation().stop(); this.setRoaring(false); + this.setInvisible(false); this.setDeltaMovement(Vec3.ZERO); + this.setNoGravity(false); this.roarCooldown = Math.max(this.roarCooldown, 80); this.portalCooldown = Math.max(this.portalCooldown, 140); + this.playSound(AntarchySoundEvents.NIGHTMARE_ROAR.get(), 2.2F, 0.68F + this.random.nextFloat() * 0.06F); + } + + private void tickPendingPhaseTransition(@Nullable LivingEntity target) { + this.getNavigation().stop(); + this.setNoGravity(false); + this.flyingToTarget = false; + this.clearActiveSpecialAnimation(); + if (target != null) { + this.getLookControl().setLookAt(target, 35.0F, 20.0F); + } + if (!this.onGround()) { + Vec3 fall = this.getDeltaMovement(); + this.setDeltaMovement(fall.x * 0.35D, Math.min(fall.y, 0.0D) - 0.08D, fall.z * 0.35D); + this.hasImpulse = true; + return; + } + this.setDeltaMovement(Vec3.ZERO); + this.startPhaseTransition(); } private void tickPhaseTransition(@Nullable LivingEntity target) { this.getNavigation().stop(); - this.setDeltaMovement(this.getDeltaMovement().scale(0.45D)); + this.setNoGravity(false); + if (!this.onGround()) { + Vec3 fall = this.getDeltaMovement(); + this.setDeltaMovement(fall.x * 0.2D, Math.min(fall.y, 0.0D) - 0.08D, fall.z * 0.2D); + this.hasImpulse = true; + } else { + this.setDeltaMovement(Vec3.ZERO); + } this.getMoveControl().setWantedPosition(this.getX(), this.getY(), this.getZ(), 0.0D); if (target != null) { this.getLookControl().setLookAt(target, 35.0F, 20.0F); @@ -762,7 +882,8 @@ public class NightmareEntity extends Monster implements GeoEntity { this.attackHitApplied = false; this.attackCooldown = 24; this.portalCooldown = 180 + this.random.nextInt(100); - this.selectSpecialAnimation(SPECIAL_PORTAL_ENTER); + this.setInvisible(false); + this.clearActiveSpecialAnimation(); this.getNavigation().stop(); this.entryPortal = NightmarePortalEntity.spawnAt(serverLevel, entryPos, this, this.position(), PORTAL_LIFETIME_TICKS); this.exitPortal = NightmarePortalEntity.spawnAt(serverLevel, exitPos, this, this.position(), PORTAL_LIFETIME_TICKS); @@ -777,11 +898,41 @@ public class NightmareEntity extends Monster implements GeoEntity { this.setDeltaMovement(this.getDeltaMovement().scale(0.55D)); if (target != null) { this.getLookControl().setLookAt(target, 35.0F, 20.0F); + this.faceTowardTarget(target, 12.0F); } int elapsed = PORTAL_TOTAL_TICKS - this.portalAttackTicks; + if (elapsed == PORTAL_ENTER_TICK) { + this.selectSpecialAnimation(SPECIAL_PORTAL_ENTER); + this.flyingToTarget = false; + this.setDeltaMovement(Vec3.ZERO); + this.hasImpulse = true; + } + if (elapsed >= PORTAL_ENTER_TICK && elapsed < PORTAL_REAPPEAR_TICK) { + this.flyingToTarget = false; + this.getMoveControl().setWantedPosition(this.getX(), this.getY(), this.getZ(), 0.0D); + this.setDeltaMovement(Vec3.ZERO); + } + if (elapsed == PORTAL_HIDE_TICK) { + this.portalTravelTicks = Math.max(this.portalTravelTicks, PORTAL_TRAVEL_INVULNERABLE_TICKS); + this.setInvisible(true); + this.setDeltaMovement(Vec3.ZERO); + this.hasImpulse = true; + } if (elapsed == PORTAL_TELEPORT_TICK && this.portalExitPos != null) { this.executePortalTeleport(target); } + if (elapsed == PORTAL_REAPPEAR_TICK) { + this.setInvisible(false); + this.flyingToTarget = !this.onGround(); + this.selectSpecialAnimation(SPECIAL_PORTAL_EXIT); + if (target != null) { + this.faceTowardTarget(target, 180.0F); + } + this.resumePortalExitFlight(target); + } + if (elapsed > PORTAL_REAPPEAR_TICK && !this.onGround()) { + this.resumePortalExitFlight(target); + } if (!this.portalAttackHitApplied && elapsed >= PORTAL_DAMAGE_TICK) { this.portalAttackHitApplied = true; this.performPortalExitHit(); @@ -791,15 +942,18 @@ public class NightmareEntity extends Monster implements GeoEntity { this.portalExitPos = null; this.clearNightmarePortals(); this.clearActiveSpecialAnimation(); + this.setInvisible(false); } } private void executePortalTeleport(@Nullable LivingEntity target) { if (this.portalExitPos == null) return; + this.level().playSound(null, this.getX(), this.getY(), this.getZ(), SoundEvents.PORTAL_TRAVEL, SoundSource.HOSTILE, 0.22F, 0.96F + this.random.nextFloat() * 0.08F); this.portalTravelTicks = PORTAL_TRAVEL_INVULNERABLE_TICKS; this.setPortalCooldown(); - this.selectSpecialAnimation(SPECIAL_PORTAL_EXIT); + this.setInvisible(true); this.teleportTo(this.portalExitPos.x, this.portalExitPos.y, this.portalExitPos.z); + this.level().playSound(null, this.getX(), this.getY(), this.getZ(), SoundEvents.ENDERMAN_TELEPORT, SoundSource.HOSTILE, 0.3F, 0.92F + this.random.nextFloat() * 0.08F); if (target != null) { this.faceTowardTarget(target, 180.0F); } @@ -807,14 +961,59 @@ public class NightmareEntity extends Monster implements GeoEntity { this.hasImpulse = true; } - private void performAttackHit() { - AABB hitBox = this.getBoundingBox() - .inflate(ATTACK_REACH_RADIUS, 1.5D, ATTACK_REACH_RADIUS) - .expandTowards(this.getViewVector(1.0F).scale(1.9D)); - List victims = this.level().getEntitiesOfClass(LivingEntity.class, hitBox, this::canTargetEntity); + private void resumePortalExitFlight(@Nullable LivingEntity target) { + if (this.onGround()) { + this.flyingToTarget = false; + return; + } + Vec3 destination = target != null + ? this.getFlightApproachPosition(target) + : this.position().add(this.getViewVector(1.0F).scale(3.0D)); + this.getMoveControl().setWantedPosition(destination.x, destination.y, destination.z, COMBAT_FLIGHT_SPEED); + Vec3 current = this.getDeltaMovement(); + if (current.lengthSqr() < 0.04D) { + Vec3 launch = destination.subtract(this.position()); + if (launch.lengthSqr() < 1.0E-4D) { + launch = this.getViewVector(1.0F); + } + if (launch.lengthSqr() > 1.0E-4D) { + Vec3 normalized = launch.normalize(); + this.setDeltaMovement(normalized.x * 0.42D, Math.max(normalized.y * 0.22D, -0.02D), normalized.z * 0.42D); + this.hasImpulse = true; + } + } + } + + private void performAttackHit(@Nullable LivingEntity target) { + Vec3 forward = this.getViewVector(1.0F).multiply(1.0D, 0.0D, 1.0D); + if (forward.lengthSqr() < 1.0E-4D) { + float yawRadians = this.getYRot() * Mth.DEG_TO_RAD; + forward = new Vec3(-Mth.sin(yawRadians), 0.0D, Mth.cos(yawRadians)); + } + if (forward.lengthSqr() < 1.0E-4D) { + forward = new Vec3(0.0D, 0.0D, 1.0D); + } + forward = forward.normalize(); + Vec3 strikeOrigin = this.position() + .add(0.0D, this.getBbHeight() * 0.55D, 0.0D) + .add(forward.scale(0.4D)); + Vec3 strikeCenter = strikeOrigin + .add(forward.scale(ATTACK_HIT_FORWARD_OFFSET)); + AABB hitBox = new AABB( + Math.min(strikeOrigin.x, strikeCenter.x) - ATTACK_HIT_HALF_WIDTH, + this.getBoundingBox().minY + ATTACK_HIT_MIN_Y_OFFSET, + Math.min(strikeOrigin.z, strikeCenter.z) - ATTACK_HIT_HALF_WIDTH, + Math.max(strikeOrigin.x, strikeCenter.x) + ATTACK_HIT_HALF_WIDTH, + this.getBoundingBox().minY + ATTACK_HIT_MAX_Y_OFFSET, + Math.max(strikeOrigin.z, strikeCenter.z) + ATTACK_HIT_HALF_WIDTH + ); + List victims = new ArrayList<>(this.level().getEntitiesOfClass(LivingEntity.class, hitBox, this::canTargetEntity)); + if (target != null && this.canTargetEntity(target) && !victims.contains(target) && this.canConnectAttackTo(target, forward, hitBox)) { + victims.add(0, target); + } float damage = (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE); for (LivingEntity victim : victims) { - if (!this.isInFront(victim.position(), -0.25D)) continue; + if (!this.canConnectAttackTo(victim, forward, hitBox)) continue; if (victim.hurt(this.nightmareDamageSource(), damage)) { this.applyNightmareStrikeEffects(victim); this.knockAway(victim, 1.15D, 0.3D); @@ -826,6 +1025,31 @@ public class NightmareEntity extends Monster implements GeoEntity { } } + private boolean canConnectAttackTo(LivingEntity victim, Vec3 forward, AABB hitBox) { + if (!this.hasLineOfSight(victim)) { + return false; + } + Vec3 victimCenter = victim.getBoundingBox().getCenter(); + if (!this.isInFront(victimCenter, -0.42D)) { + return false; + } + if (victim.getBoundingBox().inflate(0.1D).intersects(hitBox)) { + return true; + } + Vec3 toVictim = victimCenter.subtract(this.position()).multiply(1.0D, 0.0D, 1.0D); + double forwardDistance = toVictim.dot(forward); + if (forwardDistance < 0.15D || forwardDistance > ATTACK_HIT_FORWARD_OFFSET + 1.25D) { + return false; + } + Vec3 lateral = toVictim.subtract(forward.scale(forwardDistance)); + if (lateral.lengthSqr() > (ATTACK_HIT_HALF_WIDTH + 0.55D) * (ATTACK_HIT_HALF_WIDTH + 0.55D)) { + return false; + } + double minY = this.getBoundingBox().minY + ATTACK_HIT_MIN_Y_OFFSET; + double maxY = this.getBoundingBox().minY + ATTACK_HIT_MAX_Y_OFFSET + 0.4D; + return victim.getBoundingBox().maxY >= minY && victim.getBoundingBox().minY <= maxY; + } + private void performPortalExitHit() { if (this.portalExitPos == null) return; AABB hitBox = this.getBoundingBox().move(this.portalExitPos.subtract(this.position())).inflate(1.7D, 1.2D, 1.7D); @@ -906,6 +1130,12 @@ public class NightmareEntity extends Monster implements GeoEntity { if (!this.hasLineOfSight(target) || this.distanceToSqr(target) > ATTACK_START_RANGE_SQR) return false; double hdSqr = this.horizontalDistanceToSqr(target); double verticalDistance = Math.abs(target.getEyeY() - this.getEyeY()); + if (this.shouldUseFlyingLocomotion()) { + double overheadGap = this.getY() - target.getY(); + return hdSqr <= ATTACK_COMMIT_HORIZONTAL_RANGE_SQR + && verticalDistance <= 2.5D + && overheadGap <= FLYING_ATTACK_MAX_OVERHEAD_COMMIT_HEIGHT; + } return hdSqr <= ATTACK_COMMIT_HORIZONTAL_RANGE_SQR && verticalDistance <= 4.0D; } @@ -913,10 +1143,29 @@ public class NightmareEntity extends Monster implements GeoEntity { if (target == null || this.isTooCloseToCeiling()) { return false; } + boolean lowProfileTarget = this.isLowProfileFlightTarget(target); + if (this.flyingToTarget && this.takeoffCommitTicks > 0) { + return true; + } double distanceSqr = this.distanceToSqr(target); double verticalDistance = Math.abs(target.getEyeY() - this.getEyeY()); + double horizontalDistanceSqr = this.horizontalDistanceToSqr(target); + double overheadGap = this.getY() - target.getY(); + if (lowProfileTarget + && horizontalDistanceSqr <= LOW_PROFILE_FLIGHT_DISENGAGE_RANGE_SQR + && verticalDistance <= LOW_PROFILE_FLIGHT_DISENGAGE_VERTICAL + && overheadGap <= LOW_PROFILE_FLIGHT_DISENGAGE_OVERHEAD) { + return false; + } if (this.flyingToTarget) { - return distanceSqr > ATTACK_COMMIT_HORIZONTAL_RANGE_SQR || verticalDistance > 1.25D; + if (horizontalDistanceSqr <= ATTACK_COMMIT_HORIZONTAL_RANGE_SQR + && verticalDistance <= FLYING_OVERHEAD_RELEASE_HEIGHT + && overheadGap <= FLYING_ATTACK_MAX_OVERHEAD_COMMIT_HEIGHT) { + return false; + } + return distanceSqr > ATTACK_COMMIT_HORIZONTAL_RANGE_SQR + || verticalDistance > 1.0D + || overheadGap > FLYING_ATTACK_MAX_OVERHEAD_COMMIT_HEIGHT; } if (distanceSqr >= FLIGHT_ENGAGE_RANGE_SQR) { return true; @@ -941,15 +1190,52 @@ public class NightmareEntity extends Monster implements GeoEntity { double height = this.isPhaseTwo() ? FLYING_APPROACH_HEIGHT_PHASE_TWO : FLYING_APPROACH_HEIGHT; double horizontalDistanceSqr = this.horizontalDistanceToSqr(target); double overheadGap = this.getY() - target.getY(); - Vec3 anchor = target.position().subtract(forward.scale(1.4D)).add(right.scale(strafe)); + boolean lowProfileTarget = this.isLowProfileFlightTarget(target); + double attackTargetY = this.getFlyingAttackTargetY(target); + Vec3 anchor = target.position().subtract(forward.scale(1.8D)).add(right.scale(strafe)); if (horizontalDistanceSqr <= FLYING_OVERHEAD_STALL_RANGE_SQR && overheadGap >= FLYING_OVERHEAD_STALL_HEIGHT) { - anchor = target.position().add(right.scale(strafe * 1.4D)).subtract(forward.scale(0.6D)); - return new Vec3(anchor.x, target.getEyeY() + 0.15D, anchor.z); + double sideOffset = lowProfileTarget ? LOW_PROFILE_OVERHEAD_DESCENT_SIDE_OFFSET : FLYING_OVERHEAD_DESCENT_SIDE_OFFSET; + double backOffset = lowProfileTarget ? LOW_PROFILE_OVERHEAD_DESCENT_BACK_OFFSET : FLYING_OVERHEAD_DESCENT_BACK_OFFSET; + anchor = target.position() + .add(right.scale(strafe > 0.0D ? sideOffset : -sideOffset)) + .subtract(forward.scale(backOffset)); + return new Vec3(anchor.x, attackTargetY, anchor.z); } if (horizontalDistanceSqr <= FLYING_APPROACH_TOO_CLOSE_RANGE_SQR) { - anchor = target.position().subtract(forward.scale(2.4D)); + double backOffset = lowProfileTarget ? LOW_PROFILE_TOO_CLOSE_BACK_OFFSET : 2.8D; + double strafeScale = lowProfileTarget ? LOW_PROFILE_TOO_CLOSE_STRAFE_SCALE : 0.6D; + anchor = target.position().subtract(forward.scale(backOffset)).add(right.scale(strafe * strafeScale)); } - return new Vec3(anchor.x, target.getEyeY() + height, anchor.z); + return new Vec3(anchor.x, attackTargetY + height, anchor.z); + } + + private Vec3 getFlightDescentPosition(LivingEntity target) { + Vec3 toTarget = target.position().subtract(this.position()).multiply(1.0D, 0.0D, 1.0D); + if (toTarget.lengthSqr() < 1.0E-4D) { + toTarget = this.getViewVector(1.0F).multiply(1.0D, 0.0D, 1.0D); + } + if (toTarget.lengthSqr() < 1.0E-4D) { + toTarget = new Vec3(0.0D, 0.0D, 1.0D); + } + Vec3 forward = toTarget.normalize(); + Vec3 right = new Vec3(-forward.z, 0.0D, forward.x); + double side = this.tickCount % 20 < 10 ? 1.0D : -1.0D; + boolean lowProfileTarget = this.isLowProfileFlightTarget(target); + double sideOffset = lowProfileTarget ? 1.15D : 0.9D; + double backOffset = lowProfileTarget ? 1.2D : 0.9D; + Vec3 anchor = target.position() + .subtract(forward.scale(backOffset)) + .add(right.scale(side * sideOffset)); + return new Vec3(anchor.x, this.getFlyingAttackTargetY(target), anchor.z); + } + + private boolean isLowProfileFlightTarget(LivingEntity target) { + return target.getBbHeight() <= LOW_PROFILE_TARGET_MAX_HEIGHT; + } + + private double getFlyingAttackTargetY(LivingEntity target) { + double targetHeight = Mth.clamp(target.getBbHeight() * 0.4D, FLYING_ATTACK_MIN_TARGET_HEIGHT, FLYING_ATTACK_BODY_TARGET_HEIGHT); + return target.getY() + targetHeight; } private double horizontalDistanceToSqr(LivingEntity target) { @@ -1006,9 +1292,11 @@ public class NightmareEntity extends Monster implements GeoEntity { Vec3 right = new Vec3(-forward.z, 0.0D, forward.x); Vec3[] candidates = new Vec3[] { target.position().subtract(forward.scale(PORTAL_EXIT_OFFSET)), - target.position().subtract(forward.scale(1.4D)).add(right.scale(2.25D)), - target.position().subtract(forward.scale(1.4D)).subtract(right.scale(2.25D)), - target.position().add(forward.scale(2.4D)) + target.position().subtract(forward.scale(PORTAL_EXIT_OFFSET)).add(0.0D, PORTAL_EXIT_AIR_HEIGHT, 0.0D), + target.position().subtract(forward.scale(PORTAL_EXIT_OFFSET)).add(right.scale(PORTAL_EXIT_SIDE_OFFSET)), + target.position().subtract(forward.scale(PORTAL_EXIT_OFFSET)).subtract(right.scale(PORTAL_EXIT_SIDE_OFFSET)), + target.position().subtract(forward.scale(PORTAL_EXIT_OFFSET)).add(right.scale(PORTAL_EXIT_SIDE_OFFSET)).add(0.0D, PORTAL_EXIT_AIR_HEIGHT, 0.0D), + target.position().subtract(forward.scale(PORTAL_EXIT_OFFSET)).subtract(right.scale(PORTAL_EXIT_SIDE_OFFSET)).add(0.0D, PORTAL_EXIT_AIR_HEIGHT, 0.0D) }; for (Vec3 candidate : candidates) { Vec3 adjusted = this.findValidPortalPosition(candidate); @@ -1024,7 +1312,7 @@ public class NightmareEntity extends Monster implements GeoEntity { @Nullable private Vec3 findValidPortalPosition(Vec3 base) { EntityDimensions dimensions = this.getType().getDimensions(); - for (int yOffset = 1; yOffset >= -1; yOffset--) { + for (int yOffset = 4; yOffset >= -3; yOffset--) { Vec3 candidate = new Vec3(base.x, base.y + yOffset, base.z); AABB box = dimensions.makeBoundingBox(candidate); if (this.level().noCollision(this, box)) { @@ -1081,9 +1369,11 @@ public class NightmareEntity extends Monster implements GeoEntity { return; } if (this.hasActiveSpecialAnimation()) { - this.groundMoveTicks = 0; - this.tickWingFlapSound(); - return; + if (this.shouldBlockLocomotionAnimation()) { + this.groundMoveTicks = 0; + this.tickWingFlapSound(); + return; + } } if (this.flyingToTarget) { this.groundMoveTicks = 0; @@ -1091,7 +1381,7 @@ public class NightmareEntity extends Monster implements GeoEntity { this.tickWingFlapSound(); return; } - if (this.isNoGravity() || this.airborneTicks >= MIN_AIRBORNE_TICKS_FOR_FLY_ANIM) { + if (this.shouldUseFlyingLocomotion()) { this.groundMoveTicks = 0; this.setAnimationState(ANIM_FLY); this.tickWingFlapSound(); @@ -1131,8 +1421,29 @@ public class NightmareEntity extends Monster implements GeoEntity { return this.getActiveSpecialAnimation() != SPECIAL_NONE; } + private boolean shouldBlockLocomotionAnimation() { + int specialAnimation = this.getActiveSpecialAnimation(); + if (specialAnimation == SPECIAL_NONE) { + return false; + } + if (specialAnimation == SPECIAL_ROAR || specialAnimation == SPECIAL_ROAR_P2) { + return false; + } + if (specialAnimation == SPECIAL_PORTAL_EXIT) { + return false; + } + if (specialAnimation == SPECIAL_PHASE_TWO) { + return true; + } + return true; + } + + private boolean shouldUseFlyingLocomotion() { + return this.flyingToTarget || this.isNoGravity() || !this.onGround() || this.airborneTicks >= MIN_AIRBORNE_TICKS_FOR_FLY_ANIM; + } + private int selectAttackSpecialAnimation() { - boolean flyingAttack = this.isNoGravity() || this.airborneTicks >= MIN_AIRBORNE_TICKS_FOR_FLY_ANIM || this.flyingToTarget; + boolean flyingAttack = this.shouldUseFlyingLocomotion(); if (flyingAttack) { return this.isPhaseTwo() ? SPECIAL_FLY_ATTACK_P2 : SPECIAL_FLY_ATTACK; } @@ -1141,16 +1452,9 @@ public class NightmareEntity extends Monster implements GeoEntity { private void selectSpecialAnimation(int specialAnimation) { this.setActiveSpecialAnimation(specialAnimation); - if (!this.level().isClientSide) { - LOGGER.info("Nightmare animation selected={} tick={}", this.specialAnimationName(specialAnimation), this.tickCount); - } } private void clearActiveSpecialAnimation() { - int specialAnimation = this.getActiveSpecialAnimation(); - if (specialAnimation != SPECIAL_NONE && !this.level().isClientSide) { - LOGGER.info("Nightmare animation state cleared={} tick={}", this.specialAnimationName(specialAnimation), this.tickCount); - } this.setActiveSpecialAnimation(SPECIAL_NONE); } @@ -1159,9 +1463,6 @@ public class NightmareEntity extends Monster implements GeoEntity { if (activeSpecialAnimation != SPECIAL_NONE && this.lastTriggeredSpecialAnimation != activeSpecialAnimation) { String triggerName = this.specialAnimationTrigger(activeSpecialAnimation); if (triggerName != null) { - if (!this.level().isClientSide) { - LOGGER.info("Nightmare triggerAnim called={} tick={}", triggerName, this.tickCount); - } this.triggerAnim(SPECIAL_CONTROLLER, triggerName); } this.lastTriggeredSpecialAnimation = activeSpecialAnimation; @@ -1189,11 +1490,6 @@ public class NightmareEntity extends Monster implements GeoEntity { }; } - private String specialAnimationName(int specialAnimation) { - String triggerName = this.specialAnimationTrigger(specialAnimation); - return triggerName != null ? triggerName : "none"; - } - private final class NightmarePhaseTransitionGoal extends Goal { NightmarePhaseTransitionGoal() { this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK, Flag.JUMP)); @@ -1280,6 +1576,7 @@ public class NightmareEntity extends Monster implements GeoEntity { && NightmareEntity.this.landingCooldown <= 0 && NightmareEntity.this.shouldUseFlightPressure(target) && !NightmareEntity.this.isPhaseTransitioning() + && !NightmareEntity.this.isRoaring() && NightmareEntity.this.portalAttackTicks <= 0; } @@ -1288,12 +1585,14 @@ public class NightmareEntity extends Monster implements GeoEntity { LivingEntity target = NightmareEntity.this.getTarget(); return target != null && NightmareEntity.this.shouldUseFlightPressure(target) + && !NightmareEntity.this.isRoaring() && NightmareEntity.this.portalAttackTicks <= 0; } @Override public void start() { NightmareEntity.this.flyingToTarget = true; + NightmareEntity.this.takeoffCommitTicks = TAKEOFF_COMMIT_TICKS; } @Override @@ -1316,6 +1615,27 @@ public class NightmareEntity extends Monster implements GeoEntity { NightmareEntity.this.setDeltaMovement(NightmareEntity.this.getDeltaMovement().add(0.0D, 0.38D, 0.0D)); NightmareEntity.this.hasImpulse = true; } + double horizontalDistanceSqr = NightmareEntity.this.horizontalDistanceToSqr(target); + double overheadGap = NightmareEntity.this.getY() - target.getY(); + if (horizontalDistanceSqr <= ATTACK_COMMIT_HORIZONTAL_RANGE_SQR + && overheadGap > FLYING_ATTACK_MAX_OVERHEAD_COMMIT_HEIGHT) { + Vec3 descentPos = NightmareEntity.this.getFlightDescentPosition(target); + NightmareEntity.this.faceTowardTarget(target, 14.0F); + NightmareEntity.this.getMoveControl().setWantedPosition( + descentPos.x, + descentPos.y, + descentPos.z, + COMBAT_FLIGHT_SPEED * 1.08D + ); + return; + } + if (horizontalDistanceSqr <= FLYING_OVERHEAD_STALL_RANGE_SQR + && overheadGap >= FLYING_OVERHEAD_STALL_HEIGHT + && NightmareEntity.this.attackCooldown <= 0 + && NightmareEntity.this.canStartAttackOn(target)) { + NightmareEntity.this.startAttack(target); + return; + } if (NightmareEntity.this.attackCooldown <= 0 && NightmareEntity.this.canStartAttackOn(target)) { NightmareEntity.this.startAttack(target); return; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmarePortalEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmarePortalEntity.java index 5b39f941..7a1e32f9 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmarePortalEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmarePortalEntity.java @@ -6,6 +6,8 @@ import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; @@ -23,8 +25,11 @@ import software.bernie.geckolib.util.GeckoLibUtil; import java.util.UUID; public class NightmarePortalEntity extends Entity implements GeoEntity { + private static final int OPEN_TICKS = 10; + private static final int CLOSE_TICKS = 10; private static final EntityDataAccessor CLOSING = SynchedEntityData.defineId(NightmarePortalEntity.class, EntityDataSerializers.BOOLEAN); - private static final RawAnimation OPEN_ANIM = RawAnimation.begin().thenPlay("open").thenLoop("idle"); + private static final RawAnimation OPEN_ANIM = RawAnimation.begin().thenPlay("open"); + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); private static final RawAnimation CLOSE_ANIM = RawAnimation.begin().thenPlay("close"); private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); @@ -48,6 +53,7 @@ public class NightmarePortalEntity extends Entity implements GeoEntity { portal.fallbackDestination = fallbackDestination; portal.lifetimeTicks = lifetimeTicks; level.addFreshEntity(portal); + level.playSound(null, pos.x, pos.y, pos.z, SoundEvents.END_PORTAL_SPAWN, SoundSource.HOSTILE, 0.22F, 0.95F + owner.getRandom().nextFloat() * 0.1F); return portal; } @@ -88,12 +94,12 @@ public class NightmarePortalEntity extends Entity implements GeoEntity { @Override public void tick() { super.tick(); + this.ageTicks++; if (this.level().isClientSide) { return; } - this.ageTicks++; - if (this.ageTicks >= this.lifetimeTicks - 10) { + if (this.ageTicks >= this.lifetimeTicks - CLOSE_TICKS) { this.entityData.set(CLOSING, true); } if (this.ageTicks >= this.lifetimeTicks) { @@ -145,7 +151,14 @@ public class NightmarePortalEntity extends Entity implements GeoEntity { } private PlayState portalController(AnimationState state) { - return state.setAndContinue(this.isClosing() ? CLOSE_ANIM : OPEN_ANIM); + state.getController().setAnimationSpeed(this.isClosing() || this.ageTicks < OPEN_TICKS ? 4.0D : 1.0D); + if (this.isClosing()) { + return state.setAndContinue(CLOSE_ANIM); + } + if (this.ageTicks < OPEN_TICKS) { + return state.setAndContinue(OPEN_ANIM); + } + return state.setAndContinue(IDLE_ANIM); } @Override diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/PeachItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/PeachItem.java index f75e2631..7d562f59 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/PeachItem.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/PeachItem.java @@ -7,7 +7,7 @@ public class PeachItem extends Item { public PeachItem() { super(new Item.Properties().food(new FoodProperties.Builder() .nutrition(4) - .saturationModifier(2.4F) + .saturationModifier(1.4F) .build())); } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/SpiritAppleItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/SpiritAppleItem.java index 244ca13e..8f925edb 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/SpiritAppleItem.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/SpiritAppleItem.java @@ -4,6 +4,7 @@ import com.craisinlord.antarchy.content.AntarchyObjects; import net.minecraft.ChatFormatting; import net.minecraft.network.chat.Component; import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; @@ -24,6 +25,8 @@ public class SpiritAppleItem extends Item { ItemStack result = super.finishUsingItem(stack, level, livingEntity); if (!level.isClientSide()) { livingEntity.addEffect(new MobEffectInstance(AntarchyObjects.GLIMMERING_EFFECT.get(), GLIMMERING_DURATION_TICKS, 0, false, false, true)); + livingEntity.addEffect(new MobEffectInstance(MobEffects.SLOW_FALLING, GLIMMERING_DURATION_TICKS, 0, false, false, true)); + livingEntity.addEffect(new MobEffectInstance(MobEffects.JUMP, GLIMMERING_DURATION_TICKS, 0, false, false, true)); } return result; } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalShape.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalShape.java index e8723581..f7e96bdc 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalShape.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalShape.java @@ -21,14 +21,16 @@ public final class PermanentPortalShape { public static final int MAX_SIZE = 21; public static final int ACTIVE_SEARCH_RADIUS = 24; - private final PermanentPortalType type; + private final TagKey frameTag; + private final Block portalBlock; private final Direction.Axis axis; private final BlockPos bottomLeft; private final int width; private final int height; - private PermanentPortalShape(PermanentPortalType type, Direction.Axis axis, BlockPos bottomLeft, int width, int height) { - this.type = type; + private PermanentPortalShape(TagKey frameTag, Block portalBlock, Direction.Axis axis, BlockPos bottomLeft, int width, int height) { + this.frameTag = frameTag; + this.portalBlock = portalBlock; this.axis = axis; this.bottomLeft = bottomLeft; this.width = width; @@ -36,21 +38,26 @@ public final class PermanentPortalShape { } @Nullable - public static PermanentPortalShape findInactive(BlockGetter level, BlockPos interiorPos, PermanentPortalType type, Direction.Axis axis) { - return find(level, interiorPos, type, axis, state -> state.isAir()); + public static PermanentPortalShape findInactive(BlockGetter level, BlockPos interiorPos, TagKey frameTag, Block portalBlock, Direction.Axis axis) { + return find(level, interiorPos, frameTag, portalBlock, axis, state -> state.isAir()); } @Nullable - public static PermanentPortalShape findInactiveNear(BlockGetter level, BlockPos center, PermanentPortalType type) { + public static PermanentPortalShape findInactive(BlockGetter level, BlockPos interiorPos, PermanentPortalType type, Direction.Axis axis) { + return findInactive(level, interiorPos, type.frameTag(), type.portalBlock(), axis); + } + + @Nullable + public static PermanentPortalShape findInactiveNear(BlockGetter level, BlockPos center, TagKey frameTag, Block portalBlock) { for (int x = center.getX() - 2; x <= center.getX() + 2; x++) { for (int y = center.getY() - 2; y <= center.getY() + 2; y++) { for (int z = center.getZ() - 2; z <= center.getZ() + 2; z++) { BlockPos candidate = new BlockPos(x, y, z); - PermanentPortalShape xShape = findInactive(level, candidate, type, Direction.Axis.X); + PermanentPortalShape xShape = findInactive(level, candidate, frameTag, portalBlock, Direction.Axis.X); if (xShape != null) { return xShape; } - PermanentPortalShape zShape = findInactive(level, candidate, type, Direction.Axis.Z); + PermanentPortalShape zShape = findInactive(level, candidate, frameTag, portalBlock, Direction.Axis.Z); if (zShape != null) { return zShape; } @@ -60,10 +67,15 @@ public final class PermanentPortalShape { return null; } + @Nullable + public static PermanentPortalShape findInactiveNear(BlockGetter level, BlockPos center, PermanentPortalType type) { + return findInactiveNear(level, center, type.frameTag(), type.portalBlock()); + } + @Nullable public static PermanentPortalShape findActive(BlockGetter level, BlockPos interiorPos, PermanentPortalType type, Direction.Axis axis) { Block portalBlock = type.portalBlock(); - return find(level, interiorPos, type, axis, state -> state.is(portalBlock)); + return find(level, interiorPos, type.frameTag(), portalBlock, axis, state -> state.is(portalBlock)); } @Nullable @@ -90,7 +102,8 @@ public final class PermanentPortalShape { private static PermanentPortalShape find( BlockGetter level, BlockPos interiorPos, - PermanentPortalType type, + TagKey frameTag, + Block portalBlock, Direction.Axis axis, Predicate interiorPredicate ) { @@ -110,17 +123,17 @@ public final class PermanentPortalShape { cursor = cursor.relative(leftDirection); } - int width = measureWidth(level, cursor, widthDirection, type.frameTag(), interiorPredicate); + int width = measureWidth(level, cursor, widthDirection, frameTag, interiorPredicate); if (width < MIN_WIDTH) { return null; } - int height = measureHeight(level, cursor, widthDirection, width, type.frameTag(), interiorPredicate); + int height = measureHeight(level, cursor, widthDirection, width, frameTag, interiorPredicate); if (height < MIN_HEIGHT) { return null; } - return new PermanentPortalShape(type, axis, cursor.immutable(), width, height); + return new PermanentPortalShape(frameTag, portalBlock, axis, cursor.immutable(), width, height); } private static int measureWidth( @@ -197,7 +210,7 @@ public final class PermanentPortalShape { } public void fill(ServerLevel level) { - BlockState portalState = this.type.portalBlock().defaultBlockState().setValue(BlockStateProperties.HORIZONTAL_AXIS, this.axis); + BlockState portalState = this.portalBlock.defaultBlockState().setValue(BlockStateProperties.HORIZONTAL_AXIS, this.axis); this.forEachInterior(pos -> level.setBlock(pos, portalState, Block.UPDATE_ALL)); } @@ -226,7 +239,7 @@ public final class PermanentPortalShape { } } - return new PermanentPortalShape(type, axis, bottomLeft.immutable(), 2, 3); + return new PermanentPortalShape(type.frameTag(), type.portalBlock(), axis, bottomLeft.immutable(), 2, 3); } private static boolean canCreate(BlockGetter level, BlockPos bottomLeft, PermanentPortalType type, Direction.Axis axis) { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/recipe/CustomBrewingRecipes.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/recipe/CustomBrewingRecipes.java index 99a3f87d..2276f765 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/recipe/CustomBrewingRecipes.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/recipe/CustomBrewingRecipes.java @@ -27,6 +27,20 @@ public final class CustomBrewingRecipes { return !getOutput(input, ingredient).isEmpty(); } + public static boolean isCustomIngredient(ItemStack stack) { + return stack.is(cornItem()) + || stack.is(ROOTS) + || stack.is(AntarchyTags.Items.GLIMMER_AUGMENT_APPLE_COW) + || stack.is(AntarchyTags.Items.GLIMMER_AUGMENT_OURANWOOD_DEER) + || stack.is(AntarchyTags.Items.GLIMMER_AUGMENT_FROG) + || stack.is(AntarchyTags.Items.GLIMMER_AUGMENT_ANT) + || stack.is(AntarchyTags.Items.GLIMMER_AUGMENT_ELKA); + } + + public static boolean isCustomContainer(ItemStack stack) { + return stack.is(highFructoseCornSyrupItem()) || stack.is(AntarchyObjects.GLIMMER_BOTTLE.get()); + } + public static ItemStack getOutput(ItemStack input, ItemStack ingredient) { if (input.isEmpty() || ingredient.isEmpty()) { return ItemStack.EMPTY; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/weather/ThoraxisWeatherKind.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/weather/ThoraxisWeatherKind.java index 03d25ca1..073f5f59 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/weather/ThoraxisWeatherKind.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/weather/ThoraxisWeatherKind.java @@ -6,7 +6,6 @@ public enum ThoraxisWeatherKind { NONE("none"), INVERSION_STORM("inversion_storm"), BLOOD_RAIN("blood_rain"), - SHARKNADO("sharknado"), SANDSTORM("sandstorm"); private final String id; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/weather/ThoraxisWeatherManager.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/weather/ThoraxisWeatherManager.java index 460dbe06..96dd7a27 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/weather/ThoraxisWeatherManager.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/weather/ThoraxisWeatherManager.java @@ -5,14 +5,11 @@ import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; import com.craisinlord.antarchy.content.gravity.AntarchyGravityTransition; -import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity; -import com.craisinlord.antarchy.content.entity.cloud_shark.SharknadoManager; import net.minecraft.core.BlockPos; import net.minecraft.core.particles.BlockParticleOption; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; -import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvents; @@ -44,10 +41,6 @@ public final class ThoraxisWeatherManager { net.minecraft.core.registries.Registries.BIOME, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "lucid_pools") ); - private static final ResourceKey CLOUD_SEA = ResourceKey.create( - net.minecraft.core.registries.Registries.BIOME, - ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "cloud_sea") - ); private static final int WEATHER_RECHECK_MIN_TICKS = 400; private static final int WEATHER_RECHECK_MAX_TICKS = 900; private static final int STORM_MIN_TICKS = 600; @@ -141,7 +134,6 @@ public final class ThoraxisWeatherManager { switch (state.kind) { case INVERSION_STORM -> tickInversionStorm(level, state, now); case BLOOD_RAIN -> tickBloodRain(level, state, now); - case SHARKNADO -> tickSharknadoWeather(level, state, now); case SANDSTORM -> tickSandstorm(level, state, now); default -> { } @@ -233,55 +225,6 @@ public final class ThoraxisWeatherManager { ); } - private static void tickSharknadoWeather(ServerLevel level, WeatherState state, long now) { - if (now == state.startedAt) { - seedSharknado(level, state.anchor); - } - - if (now % WEATHER_PARTICLE_INTERVAL != 0L) { - return; - } - - level.sendParticles( - ParticleTypes.CLOUD, - state.anchor.getX() + 0.5D, - state.anchor.getY() + 8.0D, - state.anchor.getZ() + 0.5D, - 26, - 10.0D, - 8.0D, - 10.0D, - 0.12D - ); - } - - private static void seedSharknado(ServerLevel level, BlockPos anchor) { - SharknadoManager manager = SharknadoManager.get(level); - for (int i = 0; i < 4; i++) { - CloudSharkEntity shark = createCloudShark(level); - if (shark == null) { - continue; - } - - double x = anchor.getX() + level.getRandom().nextDouble() * 10.0D - 5.0D; - double y = anchor.getY() + 6.0D + level.getRandom().nextDouble() * 6.0D; - double z = anchor.getZ() + level.getRandom().nextDouble() * 10.0D - 5.0D; - shark.moveTo(x, y, z, level.getRandom().nextFloat() * 360.0F, 0.0F); - level.addFreshEntity(shark); - manager.tryFormOrJoin(shark, level); - } - } - - private static CloudSharkEntity createCloudShark(ServerLevel level) { - EntityType entityType = BuiltInRegistries.ENTITY_TYPE.getOptional(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "cloud_shark")) - .orElse(null); - if (entityType == null) { - return null; - } - - return entityType.create(level) instanceof CloudSharkEntity cloudShark ? cloudShark : null; - } - private static WeatherKindSelection chooseWeather(ServerLevel level, RandomSource random) { var players = level.players(); if (players.isEmpty()) { @@ -296,10 +239,6 @@ public final class ThoraxisWeatherManager { return new WeatherKindSelection(ThoraxisWeatherKind.SANDSTORM, anchor); } - if (biome.is(CLOUD_SEA)) { - return new WeatherKindSelection(ThoraxisWeatherKind.SHARKNADO, anchor); - } - if (biome.is(LUCID_POOLS)) { return random.nextFloat() < 0.35F ? new WeatherKindSelection(ThoraxisWeatherKind.BLOOD_RAIN, anchor) diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java index 814d925b..3f385678 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java @@ -57,6 +57,10 @@ public class ElythiaBiomeSource extends BiomeSource { Registries.BIOME, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "glimmering_pools") ); + private static final ResourceKey CLOUD_SEA = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "cloud_sea") + ); private static final int[] SURFACE_FALLBACK_BLOCK_YS = new int[]{192, 160, 128, 96, 64, 32, 0}; private static final class ColumnBiomeCache { @@ -77,7 +81,8 @@ public class ElythiaBiomeSource extends BiomeSource { Codec.INT.optionalFieldOf("moleworm_caves_max_y", 72).forGetter(ElythiaBiomeSource::molewormCavesMaxY), Codec.INT.optionalFieldOf("surface_biome_sample_y", 160).forGetter(ElythiaBiomeSource::surfaceBiomeSampleY), Codec.INT.optionalFieldOf("ocean_max_y", 85).forGetter(ElythiaBiomeSource::oceanMaxY), - Codec.INT.optionalFieldOf("sea_level", 78).forGetter(ElythiaBiomeSource::seaLevel) + Codec.INT.optionalFieldOf("sea_level", 78).forGetter(ElythiaBiomeSource::seaLevel), + Codec.INT.optionalFieldOf("cloud_sea_min_y", 360).forGetter(ElythiaBiomeSource::cloudSeaMinY) ).apply(instance, ElythiaBiomeSource::new)); private final Climate.ParameterList> parameters; @@ -86,28 +91,33 @@ public class ElythiaBiomeSource extends BiomeSource { private final int surfaceBiomeSampleY; private final int oceanMaxY; private final int seaLevel; + private final int cloudSeaMinY; private final int molewormCavesMaxQuartY; private final int surfaceBiomeSampleQuartY; private final int oceanMaxQuartY; private final int seaLevelQuartY; private final int undergroundGuardMaxQuartY; + private final int cloudSeaMinQuartY; private final Holder oceanHolder; private final Holder defaultLandHolder; private final Holder glimmeringPoolsHolder; private final Holder ouranwoodForestHolder; + private final Holder cloudSeaHolder; - public ElythiaBiomeSource(Climate.ParameterList> parameters, int molewormCavesMaxY, int surfaceBiomeSampleY, int oceanMaxY, int seaLevel) { + public ElythiaBiomeSource(Climate.ParameterList> parameters, int molewormCavesMaxY, int surfaceBiomeSampleY, int oceanMaxY, int seaLevel, int cloudSeaMinY) { this.parameters = parameters; this.delegate = MultiNoiseBiomeSource.createFromList(parameters); this.molewormCavesMaxY = molewormCavesMaxY; this.surfaceBiomeSampleY = surfaceBiomeSampleY; this.oceanMaxY = oceanMaxY; this.seaLevel = seaLevel; + this.cloudSeaMinY = cloudSeaMinY; this.molewormCavesMaxQuartY = QuartPos.fromBlock(molewormCavesMaxY); this.surfaceBiomeSampleQuartY = QuartPos.fromBlock(surfaceBiomeSampleY); this.oceanMaxQuartY = QuartPos.fromBlock(oceanMaxY); this.seaLevelQuartY = QuartPos.fromBlock(seaLevel); this.undergroundGuardMaxQuartY = QuartPos.fromBlock(molewormCavesMaxY + 40); + this.cloudSeaMinQuartY = QuartPos.fromBlock(cloudSeaMinY); this.oceanHolder = parameters.values().stream() .map(Pair::getSecond) .filter(h -> h.is(ELYTHIA_OCEAN)) @@ -130,6 +140,11 @@ public class ElythiaBiomeSource extends BiomeSource { && !h.is(GLIMMERING_POOLS)) .findFirst() .orElse(null); + this.cloudSeaHolder = parameters.values().stream() + .map(Pair::getSecond) + .filter(h -> h.is(CLOUD_SEA)) + .findFirst() + .orElse(null); } private Climate.ParameterList> parameters() { return this.parameters; } @@ -137,6 +152,7 @@ public class ElythiaBiomeSource extends BiomeSource { private int surfaceBiomeSampleY() { return this.surfaceBiomeSampleY; } private int oceanMaxY() { return this.oceanMaxY; } private int seaLevel() { return this.seaLevel; } + private int cloudSeaMinY() { return this.cloudSeaMinY; } @Override protected MapCodec codec() { @@ -148,11 +164,29 @@ public class ElythiaBiomeSource extends BiomeSource { return this.delegate.possibleBiomes().stream(); } private static final long OCEAN_CONTINENTALNESS_THRESHOLD = Climate.quantizeCoord(-0.87f); + private static final int CLOUD_SEA_CELL_SIZE = 96; + private static final long CLOUD_SEA_CHANCE_DENOMINATOR = 5L; // 1-in-5 columns == ~20% @Override public Holder getNoiseBiome(int x, int y, int z, Climate.Sampler sampler) { + // Only some sky columns are the cloud sea — everywhere else, altitude above the cloud + // floor just falls through to whatever biome would normally be there. Decided before + // touching the (expensive) delegate at all, both for correctness (multi-noise has no + // real notion of raw Y to gate a biome on) and as a speed win for the common case. + if (this.cloudSeaHolder != null && y >= this.cloudSeaMinQuartY && isCloudSeaColumn(x, z)) { + return this.cloudSeaHolder; + } + Holder biome = this.delegate.getNoiseBiome(x, y, z, sampler); + // Defensive: cloud_sea's multi-noise parameter point is reserved far off in "offset" + // so it shouldn't win nearest-neighbor on its own, but if it ever does for a query + // below the cloud floor, treat it like any other biome that has no business at that + // altitude and fall back to a real land biome instead of leaking clouds into terrain. + if (biome.is(CLOUD_SEA)) { + return resolveLandFallback(x, z, sampler); + } + if (biome.is(MOLEWORM_CAVES) && y > this.molewormCavesMaxQuartY) { return resolveSurfaceFallback(x, z, sampler, this.molewormSurfaceFallbackCache, MOLEWORM_CAVES, GLIMMERING_POOLS); } @@ -229,6 +263,13 @@ public class ElythiaBiomeSource extends BiomeSource { return gate <= 3L; } + private static boolean isCloudSeaColumn(int x, int z) { + long cellX = Math.floorDiv(x, CLOUD_SEA_CELL_SIZE); + long cellZ = Math.floorDiv(z, CLOUD_SEA_CELL_SIZE); + long gate = Math.floorMod(cellX * 668265263L + cellZ * 2246822519L, CLOUD_SEA_CHANCE_DENOMINATOR); + return gate == 0L; + } + private static boolean isSparseOuranwoodCandidate(Climate.TargetPoint target, int x, int z) { if (target.temperature() > Climate.quantizeCoord(0.24F)) { return false; @@ -312,7 +353,7 @@ public class ElythiaBiomeSource extends BiomeSource { private static boolean isOceanOrCave(Holder biome) { return isOceanBiome(biome) || biome.is(ELYTHIA_BEACH) || biome.is(MOLEWORM_CAVES) || biome.is(ELYTHIA_LUSH_CAVES) - || biome.is(GLIMMERING_POOLS); + || biome.is(GLIMMERING_POOLS) || biome.is(CLOUD_SEA); } @Override @@ -323,5 +364,6 @@ public class ElythiaBiomeSource extends BiomeSource { } debug.add("Elythia mole cave cap: y<=" + this.molewormCavesMaxY); debug.add("Elythia sea level: " + this.seaLevel); + debug.add("Elythia cloud sea: y>=" + this.cloudSeaMinY + " in ~1/" + CLOUD_SEA_CHANCE_DENOMINATOR + " columns"); } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/CloudSeaCalciteFeature.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/CloudSeaCalciteFeature.java deleted file mode 100644 index 15d07be3..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/CloudSeaCalciteFeature.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.craisinlord.antarchy.content.worldgen.thoraxis; - -import com.craisinlord.antarchy.content.AntarchyObjects; -import com.mojang.serialization.Codec; -import net.minecraft.core.BlockPos; -import net.minecraft.util.RandomSource; -import net.minecraft.world.level.WorldGenLevel; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.feature.Feature; -import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; -import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; - -public final class CloudSeaCalciteFeature extends Feature { - public CloudSeaCalciteFeature(Codec codec) { - super(codec); - } - - @Override - public boolean place(FeaturePlaceContext context) { - WorldGenLevel level = context.level(); - BlockPos origin = context.origin(); - RandomSource random = context.random(); - - int banks = 2 + random.nextInt(3); - boolean placedAny = false; - for (int i = 0; i < banks; i++) { - BlockPos center = origin.offset(random.nextInt(25) - 12, random.nextInt(17) - 8, random.nextInt(25) - 12); - int radiusX = 3 + random.nextInt(4); - int radiusY = 1 + random.nextInt(3); - int radiusZ = 3 + random.nextInt(4); - placedAny |= placeBank(level, center, radiusX, radiusY, radiusZ, random); - } - - return placedAny; - } - - private boolean placeBank(WorldGenLevel level, BlockPos center, int radiusX, int radiusY, int radiusZ, RandomSource random) { - boolean placedAny = false; - int xRange = Math.max(1, radiusX); - int yRange = Math.max(1, radiusY); - int zRange = Math.max(1, radiusZ); - BlockState cloud = AntarchyObjects.CLOUD_BLOCK.get().defaultBlockState(); - - for (int x = -xRange; x <= xRange; x++) { - for (int y = -yRange; y <= yRange; y++) { - for (int z = -zRange; z <= zRange; z++) { - double normalized = (x * x) / (double) (xRange * xRange) - + (y * y) / (double) (yRange * yRange) - + (z * z) / (double) (zRange * zRange); - if (normalized > 1.0D + random.nextDouble() * 0.18D) { - continue; - } - - boolean hollowCore = normalized < 0.58D; - if (hollowCore && random.nextFloat() < 0.72F) { - BlockPos target = center.offset(x, y, z); - BlockState current = level.getBlockState(target); - if (current.is(Blocks.BEDROCK)) { - continue; - } - if (current.isAir() || current.canBeReplaced() || !current.getFluidState().isEmpty()) { - level.setBlock(target, Blocks.AIR.defaultBlockState(), 2); - placedAny = true; - } - continue; - } - - if (Math.abs(y) == yRange && random.nextFloat() < 0.55F) { - continue; - } - - BlockPos target = center.offset(x, y, z); - BlockState current = level.getBlockState(target); - if (current.is(Blocks.BEDROCK) || (!current.isAir() && !current.canBeReplaced() && current.getFluidState().isEmpty())) { - continue; - } - - level.setBlock(target, cloud, 2); - placedAny = true; - } - } - } - - return placedAny; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisBiomeSource.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisBiomeSource.java index 29eb9a45..f3237566 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisBiomeSource.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisBiomeSource.java @@ -39,10 +39,6 @@ public final class ThoraxisBiomeSource extends BiomeSource { Registries.BIOME, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "lucid_pools") ); - private static final ResourceKey CLOUD_SEA = ResourceKey.create( - Registries.BIOME, - ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "cloud_sea") - ); public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( MultiNoiseBiomeSource.DIRECT_CODEC.forGetter(ThoraxisBiomeSource::parameters), @@ -64,10 +60,7 @@ public final class ThoraxisBiomeSource extends BiomeSource { private Holder dreamDunesBiome; private Holder umbralHillsBiome; private Holder lucidPoolsBiome; - private Holder cloudSeaBiome; - private static final ThreadLocal CLOUD_SEA_CACHE = - ThreadLocal.withInitial(() -> new Long2DoubleOpenHashMap(512)); private static final ThreadLocal REGION_CACHE = ThreadLocal.withInitial(() -> new Long2DoubleOpenHashMap(512)); private static final ThreadLocal VERTICAL_CACHE = @@ -96,7 +89,6 @@ public final class ThoraxisBiomeSource extends BiomeSource { this.dreamDunesBiome = this.findBiome(DREAM_DUNES); this.umbralHillsBiome = this.findBiome(UMBRAL_HILLS); this.lucidPoolsBiome = this.findBiome(LUCID_POOLS); - this.cloudSeaBiome = this.findBiome(CLOUD_SEA); this.biomesResolved = true; } } @@ -130,10 +122,6 @@ public final class ThoraxisBiomeSource extends BiomeSource { @Override public Holder getNoiseBiome(int x, int y, int z, Climate.Sampler sampler) { this.resolveBiomesIfNeeded(); - if (this.cloudSeaBiome != null && cachedIsCloudSeaZone(x, z)) { - return this.cloudSeaBiome; - } - if (y >= this.lucidPoolsMinQuartY && this.lucidPoolsBiome != null) { return this.lucidPoolsBiome; } @@ -160,7 +148,6 @@ public final class ThoraxisBiomeSource extends BiomeSource { this.delegate.addDebugInfo(debug, pos, sampler); debug.add("Thoraxis selector: mixed vertical/region noise"); debug.add("Thoraxis Lucid Pools: y>=" + this.lucidPoolsMinY); - debug.add("Thoraxis Cloud Sea: widened noise-selected"); } private Holder findBiome(ResourceKey key) { @@ -170,18 +157,6 @@ public final class ThoraxisBiomeSource extends BiomeSource { .orElse(null); } - private boolean cachedIsCloudSeaZone(int quartX, int quartZ) { - long key = net.minecraft.world.level.ChunkPos.asLong(quartX, quartZ); - Long2DoubleOpenHashMap cache = CLOUD_SEA_CACHE.get(); - if (cache.containsKey(key)) { - return cache.get(key) > 0.0D; - } - boolean result = isCloudSeaZone(quartX, quartZ); - if (cache.size() >= 512) cache.clear(); - cache.put(key, result ? 1.0D : -1.0D); - return result; - } - private double cachedRegionNoise(int quartX, int quartZ) { long key = net.minecraft.world.level.ChunkPos.asLong(quartX, quartZ); Long2DoubleOpenHashMap cache = REGION_CACHE.get(); @@ -206,13 +181,6 @@ public final class ThoraxisBiomeSource extends BiomeSource { return result; } - private static boolean isCloudSeaZone(int quartX, int quartZ) { - double primary = sampleNoise(quartX, quartZ, 56); - double secondary = sampleNoise(quartX + 137, quartZ - 211, 24); - double combined = primary * 0.72D + secondary * 0.28D; - return (combined >= 0.892D && combined <= 0.952D) || (combined >= 0.962D && combined <= 0.992D); - } - private static double sampleRegionNoise(int quartX, int quartZ) { double broad = sampleNoise(quartX, quartZ, REGION_NOISE_SCALE); double detail = sampleNoise(quartX + 311, quartZ - 197, REGION_DETAIL_SCALE); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/MantisClawWallClimbMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/MantisClawWallClimbMixin.java index 2424a6c2..79e9f6be 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/MantisClawWallClimbMixin.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/MantisClawWallClimbMixin.java @@ -4,6 +4,7 @@ import com.craisinlord.antarchy.content.item.MantisClawItem; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvents; import net.minecraft.world.InteractionHand; +import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.LivingEntity; @@ -22,11 +23,15 @@ public abstract class MantisClawWallClimbMixin extends LivingEntity { @Unique private static final int antarchy$MANTIS_CLAW_CLIMB_DURABILITY_INTERVAL = 20; @Unique + private static final int antarchy$MANTIS_CLAW_FALL_RESET_GRACE_TICKS = 10; + @Unique private boolean antarchy$mantisClinging; @Unique private int antarchy$mantisWallJumpCooldown; @Unique private int antarchy$mantisClingDurabilityTicks; + @Unique + private int antarchy$mantisFallResetTicks; protected MantisClawWallClimbMixin(EntityType entityType, Level level) { super(entityType, level); @@ -37,6 +42,10 @@ public abstract class MantisClawWallClimbMixin extends LivingEntity { if (this.antarchy$mantisWallJumpCooldown > 0) { this.antarchy$mantisWallJumpCooldown--; } + if (this.antarchy$mantisFallResetTicks > 0) { + this.antarchy$mantisFallResetTicks--; + this.fallDistance = 0.0F; + } if (!this.antarchy$canMantisCling()) { this.antarchy$mantisClinging = false; @@ -62,10 +71,21 @@ public abstract class MantisClawWallClimbMixin extends LivingEntity { this.setDeltaMovement(motion.x, clampedY, motion.z); this.hasImpulse = true; this.fallDistance = 0.0F; + this.antarchy$mantisFallResetTicks = antarchy$MANTIS_CLAW_FALL_RESET_GRACE_TICKS; this.antarchy$mantisClinging = true; this.antarchy$damageMantisClawsWhileClimbing(); } + @Inject(method = "causeFallDamage", at = @At("HEAD"), cancellable = true) + private void antarchy$preventFallDamageWhileMantisClimbing(float fallDistance, float multiplier, DamageSource source, org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable cir) { + if (!this.antarchy$shouldSuppressMantisFallDamage()) { + return; + } + + this.fallDistance = 0.0F; + cir.setReturnValue(false); + } + @Unique private boolean antarchy$canMantisCling() { Player player = (Player) (Object) this; @@ -121,4 +141,9 @@ public abstract class MantisClawWallClimbMixin extends LivingEntity { serverPlayer.containerMenu.broadcastChanges(); } } + + @Unique + private boolean antarchy$shouldSuppressMantisFallDamage() { + return this.antarchy$mantisClinging || this.antarchy$mantisFallResetTicks > 0 || this.antarchy$canMantisCling(); + } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PotionBrewingMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PotionBrewingMixin.java index f8e77b0a..5f60c5d8 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PotionBrewingMixin.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PotionBrewingMixin.java @@ -10,6 +10,13 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(PotionBrewing.class) public abstract class PotionBrewingMixin { + @Inject(method = "isIngredient", at = @At("HEAD"), cancellable = true) + private void antarchy$isCustomIngredient(ItemStack stack, CallbackInfoReturnable cir) { + if (CustomBrewingRecipes.isCustomIngredient(stack)) { + cir.setReturnValue(true); + } + } + @Inject(method = "hasMix", at = @At("HEAD"), cancellable = true) private void antarchy$hasCustomMix(ItemStack input, ItemStack ingredient, CallbackInfoReturnable cir) { if (CustomBrewingRecipes.hasMix(input, ingredient)) { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/DimensionMusicMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/DimensionMusicMixin.java new file mode 100644 index 00000000..ff12f1e1 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/DimensionMusicMixin.java @@ -0,0 +1,38 @@ +package com.craisinlord.antarchy.mixins.client; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.Music; +import net.minecraft.world.level.biome.Biome; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(Minecraft.class) +public abstract class DimensionMusicMixin { + private static final ResourceLocation CAVARYN_DIMENSION = + ResourceLocation.fromNamespaceAndPath("antarchy", "cavaryn"); + private static final ResourceLocation THORAXIS_DIMENSION = + ResourceLocation.fromNamespaceAndPath("antarchy", "thoraxis"); + + @Inject(method = "getSituationalMusic", at = @At("HEAD"), cancellable = true) + private void antarchy$useDimensionBiomeMusic(CallbackInfoReturnable cir) { + Minecraft minecraft = (Minecraft) (Object) this; + ClientLevel level = minecraft.level; + if (level == null) { + return; + } + + ResourceLocation dimensionId = level.dimension().location(); + if (!dimensionId.equals(CAVARYN_DIMENSION) && !dimensionId.equals(THORAXIS_DIMENSION)) { + return; + } + + BlockPos musicPos = minecraft.player != null ? minecraft.player.blockPosition() : BlockPos.containing(minecraft.gameRenderer.getMainCamera().getPosition()); + Biome biome = level.getBiome(musicPos).value(); + biome.getBackgroundMusic().ifPresent(cir::setReturnValue); + } +} diff --git a/common-1.21.1/src/main/resources/antarchy-common.mixins.json b/common-1.21.1/src/main/resources/antarchy-common.mixins.json index 5a9c099a..ce174abb 100644 --- a/common-1.21.1/src/main/resources/antarchy-common.mixins.json +++ b/common-1.21.1/src/main/resources/antarchy-common.mixins.json @@ -78,6 +78,7 @@ "client.AbstractMinecartRendererMixin", "client.EntityLightProbeMixin", "client.CustomBossBarMixin", + "client.DimensionMusicMixin", "client.CavarynSkyMixin", "client.CavarynHordeFogMixin", "client.CavarynHordeLightTextureMixin", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/animations/ant.animation.json b/common-1.21.1/src/main/resources/assets/antarchy/animations/ant.animation.json index 407e3b75..a266f40c 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/animations/ant.animation.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/animations/ant.animation.json @@ -3,1296 +3,25 @@ "animations": { "idle": { "loop": true, - "animation_length": 2, - "bones": { - "head": { - "rotation": { - "vector": ["-math.cos(q.anim_time*90*2-130)*2", 0, 0] - } - }, - "thorax": { - "rotation": { - "vector": ["-math.cos(q.anim_time*90*2-50)", 0, 0] - }, - "position": { - "vector": [0, "math.cos(q.anim_time*90*2)/4", 0] - } - }, - "abdomen": { - "rotation": { - "vector": ["-5+math.cos(q.anim_time*90*2-80)*2", 0, 0] - } - }, - "r_antenna": { - "rotation": { - "vector": ["5-math.cos(q.anim_time*90*2-60)*2", 0, "-5+math.cos(q.anim_time*90*2-100)*3"] - } - }, - "r_leg": { - "rotation": { - "vector": [0, 0, 32.5] - } - }, - "r_leg2": { - "rotation": { - "vector": [0, 0, -90] - } - }, - "r_leg3": { - "rotation": { - "vector": [0, -12.5, 32.5] - } - }, - "r_leg4": { - "rotation": { - "vector": [0, 0, -90] - } - }, - "r_leg5": { - "rotation": { - "vector": [0, 12.5, 32.5] - } - }, - "r_leg6": { - "rotation": { - "vector": [0, 0, -90] - } - }, - "l_leg": { - "rotation": { - "vector": [0, 0, -32.5] - } - }, - "l_leg2": { - "rotation": { - "vector": [0, 0, 90] - } - }, - "l_leg3": { - "rotation": { - "vector": [0, 12.5, -32.5] - } - }, - "l_leg4": { - "rotation": { - "vector": [0, 0, 90] - } - }, - "l_leg5": { - "rotation": { - "vector": [0, -12.5, -32.5] - } - }, - "l_leg6": { - "rotation": { - "vector": [0, 0, 90] - } - }, - "r_mandibule": { - "rotation": { - "vector": [0, "math.cos(q.anim_time*90*2*3)*3+10", 0] - } - }, - "l_mandibule": { - "rotation": { - "vector": [0, "-math.cos(q.anim_time*90*2*3)*3-10", 0] - } - }, - "r_antenna2": { - "rotation": { - "vector": ["-15-math.cos(q.anim_time*90*2-110)*3", 0, 0] - } - }, - "l_antenna2": { - "rotation": { - "vector": ["-15-math.cos(q.anim_time*90*2-110)*3", 0, 0] - } - }, - "l_antenna": { - "rotation": { - "vector": ["5-math.cos(q.anim_time*90*2-60)*2", 0, "5-math.cos(q.anim_time*90*2-100)*3"] - } - } - } - }, - "walk": { - "loop": true, - "animation_length": 0.5, - "bones": { - "head": { - "rotation": { - "vector": ["-math.cos(q.anim_time*90*4*4+80)", "math.cos(q.anim_time*90*4*2+50)*2", "math.cos(q.anim_time*90*4*2+80)*3"] - } - }, - "thorax": { - "rotation": { - "vector": ["math.cos(q.anim_time*90*4*4-50)", "math.cos(q.anim_time*90*4*2-50)*2", "-math.cos(q.anim_time*90*4*2+110)*2"] - }, - "position": { - "vector": [0, "math.cos(q.anim_time*90*4*4)/5", 0] - } - }, - "abdomen": { - "rotation": { - "vector": ["2.5-math.cos(q.anim_time*90*4*4+70)*3", "-math.cos(q.anim_time*90*4*2+40)*6", "math.cos(q.anim_time*90*4*2)*3"] - } - }, - "r_antenna": { - "rotation": { - "vector": ["5-math.cos(q.anim_time*90*4*4)*3", 0, "-7.5+math.cos(q.anim_time*90*4*4-30)*2"] - } - }, - "r_leg": { - "rotation": { - "0.0": { - "vector": [-5, -5, 17.5] - }, - "0.1667": { - "vector": [0, 15, 22.5] - }, - "0.25": { - "pre": { - "vector": [9.58, 6.67, 28.19] - }, - "post": { - "vector": [9.58, 6.67, 28.19] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [11.25, 0, 28.75] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "vector": [-7.5, -15, 15] - }, - "0.5": { - "vector": [-5, -5, 17.5] - } - } - }, - "r_leg2": { - "rotation": { - "0.0": { - "vector": [0, 0, -51.67] - }, - "0.1667": { - "vector": [0, 0, -65] - }, - "0.25": { - "pre": { - "vector": [0, 0, -78.33] - }, - "post": { - "vector": [0, 0, -78.33] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, 0, -46.25] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "vector": [0, 0, -45] - }, - "0.5": { - "vector": [0, 0, -51.67] - } - } - }, - "r_leg3": { - "rotation": { - "0.0": { - "vector": [-35, -35, 50] - }, - "0.125": { - "pre": { - "vector": [-25, -42.5, 52.5] - }, - "post": { - "vector": [-25, -42.5, 52.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "vector": [-25, -65, 25] - }, - "0.5": { - "vector": [-35, -35, 50] - } - } - }, - "r_leg4": { - "rotation": { - "0.0": { - "vector": [0, 0, -115] - }, - "0.0833": { - "pre": { - "vector": [0, 0, -110.83] - }, - "post": { - "vector": [0, 0, -110.83] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, -52.65] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "vector": [0, 0, -35] - }, - "0.5": { - "vector": [0, 0, -115] - } - } - }, - "r_leg5": { - "rotation": { - "0.0": { - "vector": [15, 65, 20] - }, - "0.125": { - "pre": { - "vector": [37.5, 46.25, 47.5] - }, - "post": { - "vector": [37.5, 46.25, 47.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "vector": [40, 42.5, 50] - }, - "0.375": { - "vector": [27.5, 58.75, 35] - }, - "0.5": { - "vector": [15, 65, 20] - } - } - }, - "r_leg6": { - "rotation": { - "0.0": { - "vector": [0, 0, -30] - }, - "0.0833": { - "pre": { - "vector": [0, 0, -39.17] - }, - "post": { - "vector": [0, 0, -39.17] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, -79.22] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "vector": [0, 0, -95] - }, - "0.5": { - "vector": [0, 0, -30] - } - } - }, - "l_leg": { - "rotation": { - "0.0": { - "post": { - "vector": [9.58, -6.67, -28.19] - }, - "lerp_mode": "catmullrom" - }, - "0.0417": { - "post": { - "vector": [11.25, 0, -28.75] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "vector": [-7.5, 15, -15] - }, - "0.4167": { - "vector": [0, -15, -22.5] - }, - "0.5": { - "pre": { - "vector": [9.58, -6.67, -28.19] - }, - "post": { - "vector": [9.58, -6.67, -28.19] - }, - "lerp_mode": "catmullrom" - } - } - }, - "l_leg2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 78.33] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [0, 0, 46.25] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "vector": [0, 0, 45] - }, - "0.4167": { - "vector": [0, 0, 65] - }, - "0.5": { - "pre": { - "vector": [0, 0, 78.33] - }, - "post": { - "vector": [0, 0, 78.33] - }, - "lerp_mode": "catmullrom" - } - } - }, - "l_leg3": { - "rotation": { - "0.0": { - "vector": [-25, 65, -25] - }, - "0.25": { - "vector": [-35, 35, -50] - }, - "0.375": { - "pre": { - "vector": [-25, 42.5, -52.5] - }, - "post": { - "vector": [-25, 42.5, -52.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "vector": [-25, 65, -25] - } - } - }, - "l_leg4": { - "rotation": { - "0.0": { - "vector": [0, 0, 35] - }, - "0.25": { - "vector": [0, 0, 115] - }, - "0.3333": { - "pre": { - "vector": [0, 0, 110.83] - }, - "post": { - "vector": [0, 0, 110.83] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0, 0, 52.65] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "vector": [0, 0, 35] - } - } - }, - "l_leg5": { - "rotation": { - "0.0": { - "vector": [40, -42.5, -50] - }, - "0.125": { - "vector": [27.5, -58.75, -35] - }, - "0.25": { - "vector": [15, -65, -20] - }, - "0.375": { - "pre": { - "vector": [37.5, -46.25, -47.5] - }, - "post": { - "vector": [37.5, -46.25, -47.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "vector": [40, -42.5, -50] - } - } - }, - "l_leg6": { - "rotation": { - "0.0": { - "vector": [0, 0, 95] - }, - "0.25": { - "vector": [0, 0, 30] - }, - "0.3333": { - "pre": { - "vector": [0, 0, 39.17] - }, - "post": { - "vector": [0, 0, 39.17] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0, 0, 79.22] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "vector": [0, 0, 95] - } - } - }, - "r_mandibule": { - "rotation": { - "vector": [0, "7.5-math.cos(q.anim_time*90*4*2-80)*5", 0] - } - }, - "l_mandibule": { - "rotation": { - "vector": [0, "-7.5+math.cos(q.anim_time*90*4*2-80)*5", 0] - } - }, - "r_antenna2": { - "rotation": { - "vector": ["-55-math.cos(q.anim_time*90*4*4-60)*5", 0, 0] - } - }, - "l_antenna2": { - "rotation": { - "vector": ["-55-math.cos(q.anim_time*90*4*4-60)*5", 0, 0] - } - }, - "l_antenna": { - "rotation": { - "vector": ["5-math.cos(q.anim_time*90*4*4)*3", 0, "7.5-math.cos(q.anim_time*90*4*4-30)*2"] - } - } - } - }, - "attack": { - "animation_length": 0.625, + "animation_length": 4, "bones": { "head": { "rotation": { "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0417": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "thorax": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0417": { - "post": { - "vector": [3.75, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "vector": [0, 0, 0] - }, - "0.125": { - "pre": { - "vector": [0, 0.5, 0] - }, - "post": { - "vector": [0, 0.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "abdomen": { - "rotation": { - "vector": [-5, 0, 0] - } - }, - "r_antenna": { - "rotation": { - "vector": [5, 0, -5] - } - }, - "r_leg": { - "rotation": { - "0.0": { - "vector": [0, 0, 32.5] - }, - "0.125": { - "pre": { - "vector": [0, 0, 47.5] - }, - "post": { - "vector": [0, 0, 47.5] - }, - "lerp_mode": "catmullrom" - }, - "0.4583": { - "post": { - "vector": [0, 0, 47.5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "vector": [0, 0, 32.5] - } - } - }, - "r_leg2": { - "rotation": { - "0.0": { - "vector": [0, 0, -90] - }, - "0.1667": { - "pre": { - "vector": [0, 0, -120] - }, - "post": { - "vector": [0, 0, -120] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0, 0, -120] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [0, 0, -88.78] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "vector": [0, 0, -90] - } - } - }, - "r_leg3": { - "rotation": { - "0.0": { - "vector": [0, -12.5, 32.5] - }, - "0.1667": { - "pre": { - "vector": [-25, -12.5, 62.5] - }, - "post": { - "vector": [-25, -12.5, 62.5] - }, - "lerp_mode": "catmullrom" - }, - "0.4583": { - "post": { - "vector": [-25, -12.5, 62.5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "vector": [0, -12.5, 32.5] - } - } - }, - "r_leg4": { - "rotation": { - "0.0": { - "vector": [0, 0, -90] - }, - "0.1667": { - "pre": { - "vector": [0, 0, -117.5] - }, - "post": { - "vector": [0, 0, -117.5] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0, 0, -117.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [0, 0, -87.84] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "vector": [0, 0, -90] - } - } - }, - "r_leg5": { - "rotation": { - "0.0": { - "vector": [0, 12.5, 32.5] - }, - "0.0833": { - "pre": { - "vector": [17.5, 25, 25] - }, - "post": { - "vector": [17.5, 25, 25] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [17.5, 35, 20] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [17.5, 35, 20] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "vector": [0, 12.5, 32.5] - } - } - }, - "r_leg6": { - "rotation": { - "0.0": { - "vector": [0, 0, -90] - }, - "0.0833": { - "pre": { - "vector": [0, 0, -67.5] - }, - "post": { - "vector": [0, 0, -67.5] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, -47.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, -47.5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "vector": [0, 0, -90] - } - } - }, - "l_leg": { - "rotation": { - "0.0": { - "vector": [0, 0, -32.5] - }, - "0.125": { - "pre": { - "vector": [0, 0, -47.5] - }, - "post": { - "vector": [0, 0, -47.5] - }, - "lerp_mode": "catmullrom" - }, - "0.4583": { - "post": { - "vector": [0, 0, -47.5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "vector": [0, 0, -32.5] - } - } - }, - "l_leg2": { - "rotation": { - "0.0": { - "vector": [0, 0, 90] - }, - "0.1667": { - "pre": { - "vector": [0, 0, 120] - }, - "post": { - "vector": [0, 0, 120] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0, 0, 120] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [0, 0, 88.78] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "vector": [0, 0, 90] - } - } - }, - "l_leg3": { - "rotation": { - "0.0": { - "vector": [0, 12.5, -32.5] - }, - "0.1667": { - "pre": { - "vector": [-25, 12.5, -62.5] - }, - "post": { - "vector": [-25, 12.5, -62.5] - }, - "lerp_mode": "catmullrom" - }, - "0.4583": { - "post": { - "vector": [-25, 12.5, -62.5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "vector": [0, 12.5, -32.5] - } - } - }, - "l_leg4": { - "rotation": { - "0.0": { - "vector": [0, 0, 90] - }, - "0.1667": { - "pre": { - "vector": [0, 0, 117.5] - }, - "post": { - "vector": [0, 0, 117.5] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0, 0, 117.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [0, 0, 87.84] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "vector": [0, 0, 90] - } - } - }, - "l_leg5": { - "rotation": { - "0.0": { - "vector": [0, -12.5, -32.5] - }, - "0.0833": { - "pre": { - "vector": [17.5, -25, -25] - }, - "post": { - "vector": [17.5, -25, -25] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [17.5, -35, -20] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [17.5, -35, -20] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "vector": [0, -12.5, -32.5] - } - } - }, - "l_leg6": { - "rotation": { - "0.0": { - "vector": [0, 0, 90] - }, - "0.0833": { - "pre": { - "vector": [0, 0, 67.5] - }, - "post": { - "vector": [0, 0, 67.5] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, 47.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 47.5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "vector": [0, 0, 90] - } - } - }, - "body": { - "position": { - "0.0": { - "vector": [0, 0, 0] - }, - "0.0833": { - "pre": { - "vector": [0, 0, -4] - }, - "post": { - "vector": [0, 0, -4] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, -5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, -5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "vector": [0, 0, 0] - } - } - }, - "r_mandibule": { - "rotation": { - "0.0": { - "vector": [0, 10, 0] - }, - "0.125": { - "pre": { - "vector": [0, 50, 0] - }, - "post": { - "vector": [0, 50, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [0, -5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, -5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 10, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "vector": [0, 10, 0] - } - } - }, - "l_mandibule": { - "rotation": { - "0.0": { - "vector": [0, -10, 0] - }, - "0.125": { - "pre": { - "vector": [0, -50, 0] - }, - "post": { - "vector": [0, -50, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [0, 5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, -10, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "vector": [0, -10, 0] - } - } - }, - "r_antenna2": { - "rotation": { - "0.0": { - "vector": [-15, 0, 0] - }, - "0.0833": { - "pre": { - "vector": [-45, 0, 0] - }, - "post": { - "vector": [-45, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [-15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "vector": [-15, 0, 0] - } - } - }, - "l_antenna2": { - "rotation": { - "0.0": { - "vector": [-15, 0, 0] - }, - "0.0833": { - "pre": { - "vector": [-45, 0, 0] - }, - "post": { - "vector": [-45, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [-15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "vector": [-15, 0, 0] - } - } - }, - "l_antenna": { - "rotation": { - "vector": [5, 0, 5] - } - } - } - }, - "dance": { - "loop": true, - "animation_length": 1.25, - "bones": { - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [-19.51503, 29.79277, 2.81051] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-19.51503, -29.79277, -2.81051] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-24.45193, -39.15023, 1.47929] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { "post": { "vector": [7.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.9167": { - "post": { - "vector": [-19.51503, 29.79277, 2.81051] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [-24.45193, 39.15023, -1.47929] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [-19.51503, 29.79277, 2.81051] - }, - "lerp_mode": "catmullrom" - } - } - }, - "thorax": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 7.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, -7.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0, -7.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { + "2.0": { "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.9167": { + "4.0": { "post": { - "vector": [0, 7.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [0, 7.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [0, 7.5, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.5, 0.25, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0.42, -0.25, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0.5, 0.25, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0.5, 0.25, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0.25, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-0.42, -0.25, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.9167": { - "post": { - "vector": [-0.5, 0.25, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [-0.5, 0.25, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [-0.5, 0.25, 0] + "vector": [7.5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -1301,44 +30,20 @@ "abdomen": { "rotation": { "0.0": { - "post": { - "vector": [10.86961, -34.65749, 5.22206] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [10.86961, 34.65749, -5.22206] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [15.36224, 54.16058, 1.10208] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { "post": { "vector": [-7.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.9167": { + "2.0": { "post": { - "vector": [10.86961, -34.65749, 5.22206] + "vector": [2.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.0833": { + "4.0": { "post": { - "vector": [15.36224, -54.16058, -1.10208] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [10.86961, -34.65749, 5.22206] + "vector": [-7.5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -1348,31 +53,19 @@ "rotation": { "0.0": { "post": { - "vector": [15, 0, 0] + "vector": [-25, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.375": { + "2.0": { "post": { - "vector": [0, 0, 0] + "vector": [-7.5, 17.5, 0] }, "lerp_mode": "catmullrom" }, - "0.625": { + "4.0": { "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [8.54, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [15, 0, 0] + "vector": [-25, 0, 0] }, "lerp_mode": "catmullrom" } @@ -1386,43 +79,7 @@ }, "lerp_mode": "catmullrom" }, - "0.125": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [0, 0, 55] - }, - "lerp_mode": "catmullrom" - }, - "0.4583": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [0, 0, 50] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { + "4.0": { "post": { "vector": [0, 0, 37.5] }, @@ -1438,13 +95,7 @@ }, "lerp_mode": "catmullrom" }, - "0.625": { - "post": { - "vector": [0, 0, -115] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { + "4.0": { "post": { "vector": [0, 0, -115] }, @@ -1455,40 +106,16 @@ "r_leg3": { "rotation": { "0.0": { - "post": { - "vector": [-15.02, 6.95, 32.96] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { "post": { "vector": [-15.84766, -19.58991, 40.25298] }, "lerp_mode": "catmullrom" }, - "0.4167": { - "post": { - "vector": [-19.65736, -15.7627, 52.74765] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { + "4.0": { "post": { "vector": [-15.84766, -19.58991, 40.25298] }, "lerp_mode": "catmullrom" - }, - "0.9167": { - "post": { - "vector": [-15.02145, 6.95469, 32.95502] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [-15.02, 6.95, 32.96] - }, - "lerp_mode": "catmullrom" } } }, @@ -1500,13 +127,7 @@ }, "lerp_mode": "catmullrom" }, - "0.625": { - "post": { - "vector": [0, 0, -115] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { + "4.0": { "post": { "vector": [0, 0, -115] }, @@ -1517,52 +138,16 @@ "r_leg5": { "rotation": { "0.0": { - "post": { - "vector": [14.15, 17.67, 39.71] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [37.69778, 21.2842, 64.84067] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { "post": { "vector": [14.15251, 17.67415, 39.71128] }, "lerp_mode": "catmullrom" }, - "0.625": { + "4.0": { "post": { "vector": [14.15251, 17.67415, 39.71128] }, "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [14.15251, 17.67415, 39.71128] - }, - "lerp_mode": "catmullrom" - }, - "0.9167": { - "post": { - "vector": [16.32495, 15.69986, 47.26579] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [14.15251, 17.67415, 39.71128] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [14.15, 17.67, 39.71] - }, - "lerp_mode": "catmullrom" } } }, @@ -1574,13 +159,7 @@ }, "lerp_mode": "catmullrom" }, - "0.625": { - "post": { - "vector": [0, 0, -115] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { + "4.0": { "post": { "vector": [0, 0, -115] }, @@ -1596,43 +175,7 @@ }, "lerp_mode": "catmullrom" }, - "0.125": { - "post": { - "vector": [0, 0, -50] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -55] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { + "4.0": { "post": { "vector": [0, 0, -37.5] }, @@ -1648,13 +191,7 @@ }, "lerp_mode": "catmullrom" }, - "0.625": { - "post": { - "vector": [0, 0, 115] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { + "4.0": { "post": { "vector": [0, 0, 115] }, @@ -1670,31 +207,7 @@ }, "lerp_mode": "catmullrom" }, - "0.25": { - "post": { - "vector": [-15.02145, -6.95469, -32.95502] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-15.84766, 19.58991, -40.25298] - }, - "lerp_mode": "catmullrom" - }, - "0.9167": { - "post": { - "vector": [-15.84766, 19.58991, -40.25298] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [-19.65736, 15.7627, -52.74765] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { + "4.0": { "post": { "vector": [-15.84766, 19.58991, -40.25298] }, @@ -1710,13 +223,7 @@ }, "lerp_mode": "catmullrom" }, - "0.625": { - "post": { - "vector": [0, 0, 115] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { + "4.0": { "post": { "vector": [0, 0, 115] }, @@ -1732,43 +239,7 @@ }, "lerp_mode": "catmullrom" }, - "0.125": { - "post": { - "vector": [14.15251, -17.67415, -39.71128] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [16.32495, -15.69986, -47.26579] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [14.15251, -17.67415, -39.71128] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [14.15251, -17.67415, -39.71128] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [19.25656, -11.86554, -59.51995] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [14.15251, -17.67415, -39.71128] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { + "4.0": { "post": { "vector": [14.15251, -17.67415, -39.71128] }, @@ -1784,13 +255,7 @@ }, "lerp_mode": "catmullrom" }, - "0.625": { - "post": { - "vector": [0, 0, 115] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { + "4.0": { "post": { "vector": [0, 0, 115] }, @@ -1798,147 +263,23 @@ } } }, - "body": { + "l_antenna": { "rotation": { "0.0": { "post": { - "vector": [0, 17.5, 0] + "vector": [-25, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.25": { + "2.0": { "post": { - "vector": [0, -17.5, 0] + "vector": [-7.5, -17.5, 0] }, "lerp_mode": "catmullrom" }, - "0.4167": { + "4.0": { "post": { - "vector": [0, -17.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.9167": { - "post": { - "vector": [0, 17.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [0, 17.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [0, 17.5, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "r_eye": { - "scale": { - "0.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [1, 0.3, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [1, 0.3, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.0417": { - "post": { - "vector": [1, 0.3, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - } - } - }, - "l_eye": { - "scale": { - "0.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [1, 0.3, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [1, 0.3, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.0417": { - "post": { - "vector": [1, 0.3, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [1, 1, 1] + "vector": [-25, 0, 0] }, "lerp_mode": "catmullrom" } @@ -1948,19 +289,19 @@ "rotation": { "0.0": { "post": { - "vector": [-0.06, -7.44, 0.98] + "vector": [-0.17995, -12.39135, 1.6575] }, "lerp_mode": "catmullrom" }, - "0.625": { + "2.0": { "post": { - "vector": [-0.06397, -7.43547, 0.98448] + "vector": [0.17875, 0.10358, 1.61888] }, "lerp_mode": "catmullrom" }, - "1.25": { + "4.0": { "post": { - "vector": [-0.06, -7.44, 0.98] + "vector": [-0.17995, -12.39135, 1.6575] }, "lerp_mode": "catmullrom" } @@ -1974,137 +315,23 @@ }, "lerp_mode": "catmullrom" }, - "0.625": { + "2.0": { "post": { - "vector": [-0.17995, 12.39135, -1.6575] + "vector": [0.17875, -0.10358, -1.61888] }, "lerp_mode": "catmullrom" }, - "1.25": { + "4.0": { "post": { "vector": [-0.06397, 7.43547, -0.98448] }, "lerp_mode": "catmullrom" } } - }, - "r_antenna2": { - "rotation": { - "0.0": { - "post": { - "vector": [-22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-75, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [57.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [-59.12, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.125": { - "post": { - "vector": [26.22, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [-22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "l_antenna2": { - "rotation": { - "0.0": { - "post": { - "vector": [-22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-73.86148, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-75, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [42.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [-76.62, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [-22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "l_antenna": { - "rotation": { - "0.0": { - "post": { - "vector": [15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [8.54, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [15, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } } } }, - "old_dance": { + "dance": { "loop": true, "animation_length": 1.5, "bones": { @@ -2189,13 +416,13 @@ }, "0.25": { "post": { - "vector": [19.73, 30.45, -2.99] + "vector": [9.72631, 0.45349, -2.99327] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [19.73, 30.45, -2.99] + "vector": [9.72631, 0.45349, -2.99327] }, "lerp_mode": "catmullrom" }, @@ -2207,13 +434,13 @@ }, "1.0": { "post": { - "vector": [19.73, -30.45, 2.99] + "vector": [12.5, -12.5, 0] }, "lerp_mode": "catmullrom" }, "1.25": { "post": { - "vector": [19.73, -30.45, 2.99] + "vector": [12.5, -12.5, 0] }, "lerp_mode": "catmullrom" }, @@ -2511,7 +738,7 @@ } } }, - "body": { + "ant": { "rotation": { "0.0": { "post": { @@ -2589,6 +816,28 @@ } } }, + "l_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, "r_mandibule": { "rotation": { "0.0": { @@ -2644,6 +893,414 @@ "lerp_mode": "catmullrom" } } + } + } + }, + "walk": { + "loop": true, + "animation_length": 0.5, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "thorax": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + } + } + }, + "abdomen": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-25.16955, 1.29256, -14.94548] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [31.33144, 34.12398, 47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [31.33144, 34.12398, 47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-14.15251, -17.67415, 62.21128] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [5.74672, 4.98753, 33.20458] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [31.33144, 34.12398, 47.33883] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-33.59794, -35.79744, 48.63781] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [12.49325, 15.74419, 39.23412] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-33.59794, -35.79744, 48.63781] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [-30.04912, -35.07869, 44.72041] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [29.82269, 35.55522, 45.05671] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-30.04912, -35.07869, 44.72041] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-14.15251, 17.67415, -62.21128] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [5.74672, -4.98753, -33.20458] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [31.33144, -34.12398, -47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [31.33144, -34.12398, -47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-14.15251, 17.67415, -62.21128] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [12.49325, -15.74419, -39.23412] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-33.59794, 35.79744, -48.63781] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.49325, -15.74419, -39.23412] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [29.82269, -35.55522, -45.05671] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-30.04912, 35.07869, -44.72041] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [29.82269, -35.55522, -45.05671] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "ant": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_eye": { + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.5": { + "vector": [1, 1, 1] + } + } + }, + "l_eye": { + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.5": { + "vector": [1, 1, 1] + } + } }, "l_antenna": { "rotation": { @@ -2653,19 +1310,817 @@ }, "lerp_mode": "catmullrom" }, + "0.25": { + "post": { + "vector": [-25.16955, -1.29256, 14.94548] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "attack": { + "loop": true, + "animation_length": 1, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "thorax": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "abdomen": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [19.92514, 0.26438, -1.96682] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [19.92514, 0.26438, -1.96682] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, "0.75": { "post": { "vector": [-25, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.5": { + "1.0": { "post": { "vector": [-25, 0, 0] }, "lerp_mode": "catmullrom" } } + }, + "r_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-14.15251, -17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-14.15251, -17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.84766, -19.58991, 40.25298] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-33.59794, -35.79744, 48.63781] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-33.59794, -35.79744, 48.63781] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.84766, -19.58991, 40.25298] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [14.15251, 17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [31.33144, 34.12398, 47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [31.33144, 34.12398, 47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [31.33144, 34.12398, 47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [31.33144, 34.12398, 47.33883] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [14.15251, 17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-14.15251, 17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-14.15251, 17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.84766, 19.58991, -40.25298] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-33.59794, 35.79744, -48.63781] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-33.59794, 35.79744, -48.63781] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.84766, 19.58991, -40.25298] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [14.15251, -17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [31.33144, -34.12398, -47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [31.33144, -34.12398, -47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [31.33144, -34.12398, -47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [31.33144, -34.12398, -47.33883] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [14.15251, -17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "ant": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -3] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -3] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_eye": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [1, 0.4, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1, 0.4, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_eye": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [1, 0.4, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1, 0.4, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-0.27472, 52.98677, 1.40178] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.27472, 52.98677, 1.40178] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-2.2516, -39.58992, 6.25038] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-2.2516, -39.58992, 6.25038] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-0.27472, -52.98677, -1.40178] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.27472, -52.98677, -1.40178] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-2.2516, 39.58992, -6.25038] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-2.2516, 39.58992, -6.25038] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + } + } } } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/animations/nightmare.animation.json b/common-1.21.1/src/main/resources/assets/antarchy/animations/nightmare.animation.json index e8e200bc..62ca5d85 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/animations/nightmare.animation.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/animations/nightmare.animation.json @@ -9115,110 +9115,110 @@ "vector": [0, 0, 0] }, "0.125": { - "vector": [0, 0, 0] + "vector": [2.5, 0, 0] }, "0.2917": { "pre": { - "vector": [17.5, 0, 0] + "vector": [10, 0, 0] }, "post": { - "vector": [17.5, 0, 0] + "vector": [10, 0, 0] }, "lerp_mode": "catmullrom" }, "0.4167": { "post": { - "vector": [22.5, 0, 0] + "vector": [12.5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { - "vector": [0, 0, 0] + "vector": [5, 0, 0] }, "0.625": { - "vector": [0, 0, 0] + "vector": [5, 0, 0] }, "0.7917": { "pre": { - "vector": [17.5, 0, 0] + "vector": [10, 0, 0] }, "post": { - "vector": [17.5, 0, 0] + "vector": [10, 0, 0] }, "lerp_mode": "catmullrom" }, "0.9167": { "post": { - "vector": [22.5, 0, 0] + "vector": [12.5, 0, 0] }, "lerp_mode": "catmullrom" }, "1.0": { - "vector": [0, 0, 0] + "vector": [5, 0, 0] }, "1.125": { - "vector": [0, 0, 0] + "vector": [2.5, 0, 0] }, "1.2917": { "pre": { - "vector": [17.5, 0, 0] + "vector": [10, 0, 0] }, "post": { - "vector": [17.5, 0, 0] + "vector": [10, 0, 0] }, "lerp_mode": "catmullrom" }, "1.4167": { "post": { - "vector": [30, 0, 0] + "vector": [12.5, 0, 0] }, "lerp_mode": "catmullrom" }, "1.6667": { "post": { - "vector": ["35-math.cos(q.anim_time*90*32-50)*5", 0, 0] + "vector": ["13-math.cos(query.anim_time*90*16-50)*1.5", 0, 0] }, "lerp_mode": "catmullrom" }, "1.875": { "post": { - "vector": ["35-math.cos(q.anim_time*90*32-50)*5", 0, 0] + "vector": ["13-math.cos(query.anim_time*90*16-50)*1.5", 0, 0] }, "lerp_mode": "catmullrom" }, "2.125": { "post": { - "vector": [30, 0, 0] + "vector": [12.5, 0, 0] }, "lerp_mode": "catmullrom" }, "2.5": { "post": { - "vector": [0, 0, 0] + "vector": [5, 0, 0] }, "lerp_mode": "catmullrom" }, "2.5833": { "post": { - "vector": [0, 0, 0] + "vector": [5, 0, 0] }, "lerp_mode": "catmullrom" }, "2.6667": { "post": { - "vector": [32.5, 0, 0] + "vector": [12.5, 0, 0] }, "lerp_mode": "catmullrom" }, "2.75": { "post": { - "vector": [37.5, 0, 0] + "vector": [15, 0, 0] }, "lerp_mode": "catmullrom" }, "3.125": { "post": { - "vector": [37.5, 0, 0] + "vector": [12.5, 0, 0] }, "lerp_mode": "catmullrom" }, @@ -9229,7 +9229,7 @@ "lerp_mode": "catmullrom" }, "3.8333": { - "vector": [0, 0, 0] + "vector": [2.5, 0, 0] } } }, @@ -11936,4 +11936,4 @@ } } } -} \ No newline at end of file +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/de_de.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/de_de.json index b4b0b248..e72f4b4c 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/de_de.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/de_de.json @@ -847,7 +847,6 @@ "biome.antarchy.umbral_hills": "Umbralhügel", "biome.antarchy.lucid_pools": "Luzide Teiche", "biome.antarchy.dream_dunes": "Traumdünen", - "biome.antarchy.cloud_sea": "Wolkenmeer", "block.antarchy.wild_corn": "Wild Mais", "trim_material.antarchy.blood_crystal": "Blutkristall", "trim_material.antarchy.nightmare_scale": "Albtraum-Schuppe", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/en_us.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/en_us.json index 4b6f6c5b..534b384a 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/en_us.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/en_us.json @@ -532,6 +532,7 @@ "item.antarchy.alpha_mantis_spawn_egg": "Alpha Mantis Spawn Egg", "biome.antarchy.moleworm_caves": "Moleworm Caves", "biome.antarchy.elythia_meadow": "Elythian Meadows", + "biome.antarchy.elythia_ocean": "Elythian Ocean", "biome.antarchy.butterfly_fields": "Butterfly Fields", "biome.antarchy.ouranwood_forest": "Ouranwood Forest", "biome.antarchy.glimmering_pools": "Glimmering Pools", @@ -583,7 +584,7 @@ "effect.antarchy.bloodglass_ward": "Bloodglass Ward", "effect.antarchy.bloodglass_ward.description": "Gives hearts that shatter, absorbing an entire hit of damage. They regenerate over time.", "effect.antarchy.glimmering": "Glimmering", - "effect.antarchy.glimmering.description": "Passes through entities and attacks unharmed, like a spirit.", + "effect.antarchy.glimmering.description": "Passes through entities and attacks unharmed, like a spirit. Grants a lighter step and a higher jump.", "death.attack.triffid_mauling": "%1$s was mauled to death by a plant", "death.attack.triffid_mauling.player": "%1$s was mauled to death by a plant", "death.attack.triffid_swallow": "%1$s was swallowed by a triffid", @@ -621,6 +622,10 @@ "advancements.antarchy.visit_cavaryn.description": "Enter the infested dimension of Cavaryn.", "advancements.antarchy.fallen_kingdom_castle.title": "I Used to Rule the World...", "advancements.antarchy.fallen_kingdom_castle.description": "Discover the Fallen Kingdom Castle.", + "advancements.antarchy.a_lovely_world.title": "A Lovely World", + "advancements.antarchy.a_lovely_world.description": "You found a strangely familiar house in Elythia.", + "advancements.antarchy.cops_n_robbers.title": "Cops N Robbers!", + "advancements.antarchy.cops_n_robbers.description": "This is just a nostalgic structure, no affiliation with Sky :)", "advancements.antarchy.fallen_king_crown.title": "Chunks would load when I gave the word...", "advancements.antarchy.fallen_king_crown.description": "Obtain the Fallen King\u0027s Crown.", "advancements.antarchy.the_lab.title": "Hey everyone, Dan here", @@ -1019,6 +1024,7 @@ "subtitles.antarchy.jerry_hurt": "Jerry hurts", "subtitles.antarchy.jerry_death": "Jerry dies", "subtitles.antarchy.jerry_attack": "Jerry attacks", + "subtitles.antarchy.ambient_elythia_ouranwood_forest": "Ouranwood Forest Rustles", "advancements.antarchy.bug_apetit.title": "Bug Apétit", "advancements.antarchy.bug_apetit.description": "Eat Cooked Bug Meat.", "advancements.antarchy.behavioral_correction.title": "Behavioral Correction", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/es_es.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/es_es.json index 263534e8..d2ce8428 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/es_es.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/es_es.json @@ -847,7 +847,6 @@ "biome.antarchy.umbral_hills": "Colinas umbrías", "biome.antarchy.lucid_pools": "Pozas lúcidas", "biome.antarchy.dream_dunes": "Dunas de ensueño", - "biome.antarchy.cloud_sea": "Mar de nubes", "block.antarchy.wild_corn": "Maíz silvestre", "trim_material.antarchy.blood_crystal": "Cristal de sangre", "trim_material.antarchy.nightmare_scale": "Escama de Pesadilla", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/fr_fr.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/fr_fr.json index 90486b95..2ce45048 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/fr_fr.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/fr_fr.json @@ -847,7 +847,6 @@ "biome.antarchy.umbral_hills": "Collines ombrales", "biome.antarchy.lucid_pools": "Bassins lucides", "biome.antarchy.dream_dunes": "Dunes oniriques", - "biome.antarchy.cloud_sea": "Mer de nuages", "block.antarchy.wild_corn": "Maïs sauvage", "trim_material.antarchy.blood_crystal": "Cristal de sang", "trim_material.antarchy.nightmare_scale": "Écaille de Cauchemar", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/it_it.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/it_it.json index 8cae2bf2..690d72b7 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/it_it.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/it_it.json @@ -847,7 +847,6 @@ "biome.antarchy.umbral_hills": "Colline ombrose", "biome.antarchy.lucid_pools": "Pozze di Lucid", "biome.antarchy.dream_dunes": "Dune dei sogni", - "biome.antarchy.cloud_sea": "Mare di nuvole", "block.antarchy.wild_corn": "Mais selvatico", "trim_material.antarchy.blood_crystal": "Cristallo di sangue", "trim_material.antarchy.nightmare_scale": "Scaglia dell’Incubo", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/ja_jp.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/ja_jp.json index a0888c20..0367c4c7 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/ja_jp.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/ja_jp.json @@ -847,7 +847,6 @@ "biome.antarchy.umbral_hills": "アンブラルの丘", "biome.antarchy.lucid_pools": "ルーシッドの池", "biome.antarchy.dream_dunes": "夢の砂丘", - "biome.antarchy.cloud_sea": "雲海", "block.antarchy.wild_corn": "野生のトウモロコシ", "trim_material.antarchy.blood_crystal": "血の結晶", "trim_material.antarchy.nightmare_scale": "ナイトメアの鱗", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/ko_kr.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/ko_kr.json index 712792fe..9b72989d 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/ko_kr.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/ko_kr.json @@ -847,7 +847,6 @@ "biome.antarchy.umbral_hills": "그늘진 언덕", "biome.antarchy.lucid_pools": "루시드 웅덩이", "biome.antarchy.dream_dunes": "꿈의 사구", - "biome.antarchy.cloud_sea": "구름 바다", "block.antarchy.wild_corn": "야생 옥수수", "trim_material.antarchy.blood_crystal": "혈수정", "trim_material.antarchy.nightmare_scale": "악몽 비늘", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/pt_br.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/pt_br.json index 1527e9eb..5cbb150e 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/pt_br.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/pt_br.json @@ -847,7 +847,6 @@ "biome.antarchy.umbral_hills": "Colinas Umbrais", "biome.antarchy.lucid_pools": "Poças Lúcidas", "biome.antarchy.dream_dunes": "Dunas dos Sonhos", - "biome.antarchy.cloud_sea": "Mar de Nuvens", "block.antarchy.wild_corn": "Milho silvestre", "trim_material.antarchy.blood_crystal": "Cristal de Sangue", "trim_material.antarchy.nightmare_scale": "Escama de Pesadelo", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/ru_ru.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/ru_ru.json index 9b32c051..06b5d4fe 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/ru_ru.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/ru_ru.json @@ -820,7 +820,6 @@ "biome.antarchy.umbral_hills": "Теневые холмы", "biome.antarchy.lucid_pools": "Пруды люцидов", "biome.antarchy.dream_dunes": "Дюны сновидений", - "biome.antarchy.cloud_sea": "Облачное море", "block.antarchy.wild_corn": "Дикая кукуруза", "trim_material.antarchy.blood_crystal": "Кровавый кристалл", "trim_material.antarchy.nightmare_scale": "Чешуя кошмара", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/zh_cn.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/zh_cn.json index 09d5e643..36d52d16 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/zh_cn.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/zh_cn.json @@ -847,7 +847,6 @@ "biome.antarchy.umbral_hills": "幽影丘陵", "biome.antarchy.lucid_pools": "清醒池", "biome.antarchy.dream_dunes": "梦境沙丘", - "biome.antarchy.cloud_sea": "云海", "block.antarchy.wild_corn": "野生玉米", "trim_material.antarchy.blood_crystal": "血晶", "trim_material.antarchy.nightmare_scale": "梦魇鳞片", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/zh_tw.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/zh_tw.json index 0d3e7a3e..e64db662 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/zh_tw.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/zh_tw.json @@ -847,7 +847,6 @@ "biome.antarchy.umbral_hills": "幽影丘陵", "biome.antarchy.lucid_pools": "清醒池", "biome.antarchy.dream_dunes": "夢境沙丘", - "biome.antarchy.cloud_sea": "雲海", "block.antarchy.wild_corn": "野生玉米", "trim_material.antarchy.blood_crystal": "血晶", "trim_material.antarchy.nightmare_scale": "夢魘鱗片", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/sounds.json b/common-1.21.1/src/main/resources/assets/antarchy/sounds.json index af447a9e..d78051e3 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/sounds.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/sounds.json @@ -928,6 +928,7 @@ "sounds": [ { "name": "antarchy:lucid_lullaby", + "type": "event", "stream": true } ] @@ -944,6 +945,7 @@ "sounds": [ { "name": "antarchy:venenatus", + "type": "event", "stream": true } ] @@ -960,6 +962,7 @@ "sounds": [ { "name": "antarchy:wistful_wanderings", + "type": "event", "stream": true } ] @@ -1878,6 +1881,35 @@ } ] }, + "ambient.elythia.ouranwood_forest": { + "subtitle": "subtitles.antarchy.ambient_elythia_ouranwood_forest", + "sounds": [ + { + "name": "antarchy:ambient/elythia/ouranwood_forest/ouranwoodforest1", + "stream": false + }, + { + "name": "antarchy:ambient/elythia/ouranwood_forest/ouranwoodforest2", + "stream": false + }, + { + "name": "antarchy:ambient/elythia/ouranwood_forest/ouranwoodforest3", + "stream": false + }, + { + "name": "antarchy:ambient/elythia/ouranwood_forest/ouranwoodforest4", + "stream": false + }, + { + "name": "antarchy:ambient/elythia/ouranwood_forest/ouranwoodforest5", + "stream": false + }, + { + "name": "antarchy:ambient/elythia/ouranwood_forest/ouranwoodforest6", + "stream": false + } + ] + }, "cavaryn_heartbeat": { "subtitle": "subtitles.antarchy.cavaryn_heartbeat", "sounds": [ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/sounds/music/game/elythia/wistful_wanderings.ogg b/common-1.21.1/src/main/resources/assets/antarchy/sounds/music/game/elythia/wistful_wanderings.ogg index abe69653..6ce14c9c 100644 Binary files a/common-1.21.1/src/main/resources/assets/antarchy/sounds/music/game/elythia/wistful_wanderings.ogg and b/common-1.21.1/src/main/resources/assets/antarchy/sounds/music/game/elythia/wistful_wanderings.ogg differ diff --git a/common-1.21.1/src/main/resources/data/antarchy/advancement/cops_n_robbers.json b/common-1.21.1/src/main/resources/data/antarchy/advancement/cops_n_robbers.json new file mode 100644 index 00000000..56822396 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/advancement/cops_n_robbers.json @@ -0,0 +1,42 @@ +{ + "parent": "minecraft:adventure/root", + "criteria": { + "discover_ruined_prison": { + "conditions": { + "player": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "location": { + "structures": "antarchy:ruined_prison" + } + } + } + ] + }, + "trigger": "minecraft:location" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.cops_n_robbers.description" + }, + "frame": "task", + "icon": { + "count": 1, + "id": "minecraft:iron_bars" + }, + "show_toast": true, + "title": { + "translate": "advancements.antarchy.cops_n_robbers.title" + } + }, + "requirements": [ + [ + "discover_ruined_prison" + ] + ], + "sends_telemetry_event": true +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/advancement/kill_molevore.json b/common-1.21.1/src/main/resources/data/antarchy/advancement/kill_molevore.json deleted file mode 100644 index f9610435..00000000 --- a/common-1.21.1/src/main/resources/data/antarchy/advancement/kill_molevore.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "parent": "minecraft:adventure/root", - "criteria": { - "kill_molevore": { - "conditions": { - "entity": { - "type": "antarchy:molevore" - } - }, - "trigger": "minecraft:player_killed_entity" - } - }, - "display": { - "announce_to_chat": true, - "description": { - "translate": "advancements.antarchy.kill_molevore.description" - }, - "frame": "task", - "icon": { - "count": 1, - "id": "antarchy:molevore_nose" - }, - "show_toast": true, - "title": { - "translate": "advancements.antarchy.kill_molevore.title" - } - }, - "requirements": [ - [ - "kill_molevore" - ] - ], - "sends_telemetry_event": true -} diff --git a/common-1.21.1/src/main/resources/data/antarchy/dimension/cavaryn.json b/common-1.21.1/src/main/resources/data/antarchy/dimension/cavaryn.json index 95fe35bc..9b70b00b 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/dimension/cavaryn.json +++ b/common-1.21.1/src/main/resources/data/antarchy/dimension/cavaryn.json @@ -14,7 +14,7 @@ ], "humidity": [ -1.0, - 0.55 + 0.1 ], "continentalness": [ -1.0, @@ -43,7 +43,7 @@ 1.0 ], "humidity": [ - 0.5, + 0.1, 1.0 ], "continentalness": [ @@ -55,8 +55,8 @@ 1.0 ], "weirdness": [ - -0.45, - 0.45 + -0.55, + 0.55 ], "depth": [ -2.0, @@ -73,8 +73,8 @@ 1.0 ], "humidity": [ - 0.15, - 0.85 + 0.1, + 1.0 ], "continentalness": [ -1.0, @@ -85,7 +85,37 @@ 1.0 ], "weirdness": [ - 0.45, + -0.85, + -0.45 + ], + "depth": [ + -2.0, + -0.1 + ], + "offset": 0.0 + }, + "biome": "antarchy:glowcap_caves" + }, + { + "parameters": { + "temperature": [ + -1.0, + 1.0 + ], + "humidity": [ + 0.1, + 1.0 + ], + "continentalness": [ + -1.0, + 1.0 + ], + "erosion": [ + -1.0, + 1.0 + ], + "weirdness": [ + 0.35, 1.0 ], "depth": [ @@ -103,7 +133,7 @@ 1.0 ], "humidity": [ - 0.15, + 0.1, 1.0 ], "continentalness": [ @@ -115,11 +145,41 @@ 1.0 ], "weirdness": [ - -0.25, - 0.65 + 0.65, + 1.0 ], "depth": [ - 0.35, + -2.0, + -0.1 + ], + "offset": 0.0 + }, + "biome": "antarchy:biowart_caves" + }, + { + "parameters": { + "temperature": [ + -1.0, + 1.0 + ], + "humidity": [ + -0.15, + 1.0 + ], + "continentalness": [ + -1.0, + 1.0 + ], + "erosion": [ + -1.0, + 1.0 + ], + "weirdness": [ + -0.6, + 0.9 + ], + "depth": [ + 0.15, 2.0 ], "offset": 0.0 @@ -134,7 +194,7 @@ ], "humidity": [ -1.0, - 1.0 + -0.15 ], "continentalness": [ -1.0, @@ -155,6 +215,66 @@ "offset": 0.0 }, "biome": "antarchy:brooding_tunnels" + }, + { + "parameters": { + "temperature": [ + -1.0, + 1.0 + ], + "humidity": [ + -0.15, + 1.0 + ], + "continentalness": [ + -1.0, + 1.0 + ], + "erosion": [ + -1.0, + 1.0 + ], + "weirdness": [ + -1.0, + -0.6 + ], + "depth": [ + -0.1, + 2.0 + ], + "offset": 0.0 + }, + "biome": "antarchy:brooding_tunnels" + }, + { + "parameters": { + "temperature": [ + -1.0, + 1.0 + ], + "humidity": [ + -0.15, + 1.0 + ], + "continentalness": [ + -1.0, + 1.0 + ], + "erosion": [ + -1.0, + 1.0 + ], + "weirdness": [ + 0.9, + 1.0 + ], + "depth": [ + -0.1, + 2.0 + ], + "offset": 0.0 + }, + "biome": "antarchy:brooding_tunnels" } ] } diff --git a/common-1.21.1/src/main/resources/data/antarchy/dimension/elythia.json b/common-1.21.1/src/main/resources/data/antarchy/dimension/elythia.json index 0013c281..0ee2aed4 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/dimension/elythia.json +++ b/common-1.21.1/src/main/resources/data/antarchy/dimension/elythia.json @@ -40,7 +40,7 @@ "temperature": 0.75, "humidity": 0.96, "continentalness": 0.64, - "erosion": 0.10, + "erosion": 0.1, "weirdness": 0.65, "depth": 0.3, "offset": 0.27 @@ -63,7 +63,7 @@ "parameters": { "temperature": 0.68, "humidity": 0.99, - "continentalness": 0.60, + "continentalness": 0.6, "erosion": 0.28, "weirdness": 0.42, "depth": 0.4, @@ -73,11 +73,11 @@ { "biome": "antarchy:elythia_meadow", "parameters": { - "temperature": 0.70, + "temperature": 0.7, "humidity": 0.94, "continentalness": 0.55, "erosion": 0.22, - "weirdness": -0.30, + "weirdness": -0.3, "depth": 0.3, "offset": 0.0 } @@ -161,7 +161,7 @@ "humidity": 0.93, "continentalness": 0.54, "erosion": 0.25, - "weirdness": -0.50, + "weirdness": -0.5, "depth": 0.45, "offset": 0.0 } @@ -172,8 +172,8 @@ "temperature": 0.67, "humidity": 0.93, "continentalness": 0.54, - "erosion": 0.20, - "weirdness": -0.40, + "erosion": 0.2, + "weirdness": -0.4, "depth": 0.45, "offset": 0.0 } @@ -229,7 +229,7 @@ { "biome": "antarchy:sparse_ouranwood_forest", "parameters": { - "temperature": 0.20, + "temperature": 0.2, "humidity": 0.62, "continentalness": 0.95, "erosion": -0.35, @@ -279,7 +279,7 @@ "parameters": { "temperature": 0.74, "humidity": 0.99, - "continentalness": 0.60, + "continentalness": 0.6, "erosion": 0.17, "weirdness": 0.28, "depth": 0.0, @@ -353,7 +353,7 @@ "humidity": 0.96, "continentalness": 0.62, "erosion": 0.13, - "weirdness": 0.20, + "weirdness": 0.2, "depth": 0.0, "offset": 0.0 } @@ -361,11 +361,11 @@ { "biome": "antarchy:butterfly_fields", "parameters": { - "temperature": 0.70, + "temperature": 0.7, "humidity": 0.97, "continentalness": 0.64, "erosion": 0.15, - "weirdness": 0.10, + "weirdness": 0.1, "depth": 0.0, "offset": 0.0 } @@ -389,7 +389,7 @@ "humidity": 0.96, "continentalness": 0.62, "erosion": 0.13, - "weirdness": 0.20, + "weirdness": 0.2, "depth": 0.85, "offset": 0.0 } @@ -398,9 +398,9 @@ "biome": "antarchy:elythia_ocean", "parameters": { "temperature": 0.65, - "humidity": 0.90, + "humidity": 0.9, "continentalness": -0.88, - "erosion": 0.30, + "erosion": 0.3, "weirdness": 0.0, "depth": 0.0, "offset": 0.0 @@ -409,11 +409,11 @@ { "biome": "antarchy:elythia_ocean", "parameters": { - "temperature": 0.60, + "temperature": 0.6, "humidity": 0.88, "continentalness": -0.92, "erosion": 0.25, - "weirdness": -0.40, + "weirdness": -0.4, "depth": 0.0, "offset": 0.0 } @@ -421,11 +421,11 @@ { "biome": "antarchy:elythia_ocean", "parameters": { - "temperature": 0.70, + "temperature": 0.7, "humidity": 0.92, "continentalness": -0.85, "erosion": 0.35, - "weirdness": 0.40, + "weirdness": 0.4, "depth": 0.0, "offset": 0.0 } @@ -434,9 +434,9 @@ "biome": "antarchy:elythia_ocean", "parameters": { "temperature": 0.65, - "humidity": 0.90, + "humidity": 0.9, "continentalness": -0.88, - "erosion": 0.30, + "erosion": 0.3, "weirdness": 0.0, "depth": 0.5, "offset": 0.0 @@ -445,11 +445,11 @@ { "biome": "antarchy:elythia_ocean", "parameters": { - "temperature": 0.60, + "temperature": 0.6, "humidity": 0.88, "continentalness": -0.92, "erosion": 0.25, - "weirdness": -0.40, + "weirdness": -0.4, "depth": 0.5, "offset": 0.0 } @@ -457,11 +457,11 @@ { "biome": "antarchy:elythia_coral_spikes", "parameters": { - "temperature": 0.80, + "temperature": 0.8, "humidity": 0.85, "continentalness": -0.88, - "erosion": 0.20, - "weirdness": 0.50, + "erosion": 0.2, + "weirdness": 0.5, "depth": 0.0, "offset": 0.0 } @@ -471,7 +471,7 @@ "parameters": { "temperature": 0.75, "humidity": 0.82, - "continentalness": -0.90, + "continentalness": -0.9, "erosion": 0.15, "weirdness": -0.55, "depth": 0.0, @@ -481,11 +481,11 @@ { "biome": "antarchy:elythia_coral_spikes", "parameters": { - "temperature": 0.80, + "temperature": 0.8, "humidity": 0.85, "continentalness": -0.88, - "erosion": 0.20, - "weirdness": 0.50, + "erosion": 0.2, + "weirdness": 0.5, "depth": 0.5, "offset": 0.0 } @@ -495,14 +495,45 @@ "parameters": { "temperature": 0.75, "humidity": 0.82, - "continentalness": -0.90, + "continentalness": -0.9, "erosion": 0.15, "weirdness": -0.55, "depth": 0.5, "offset": 0.0 } + }, + { + "biome": "antarchy:cloud_sea", + "parameters": { + "temperature": [ + -1.0, + 1.0 + ], + "humidity": [ + -1.0, + 1.0 + ], + "continentalness": [ + -1.0, + 1.0 + ], + "erosion": [ + -1.0, + 1.0 + ], + "weirdness": [ + -1.0, + 1.0 + ], + "depth": [ + 0.0, + 1.0 + ], + "offset": 0.999 + } } - ] + ], + "cloud_sea_min_y": 360 } } } diff --git a/common-1.21.1/src/main/resources/data/antarchy/dimension/thoraxis.json b/common-1.21.1/src/main/resources/data/antarchy/dimension/thoraxis.json index c28e2d87..03c8f802 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/dimension/thoraxis.json +++ b/common-1.21.1/src/main/resources/data/antarchy/dimension/thoraxis.json @@ -11,136 +11,244 @@ "biomes": [ { "parameters": { - "temperature": [-1.0, 1.0], - "humidity": [-1.0, 1.0], - "continentalness": [-1.0, 1.0], - "erosion": [-1.0, 1.0], - "weirdness": [-1.0, 1.0], - "depth": [0.0, 1.0], + "temperature": [ + -1.0, + 1.0 + ], + "humidity": [ + -1.0, + 1.0 + ], + "continentalness": [ + -1.0, + 1.0 + ], + "erosion": [ + -1.0, + 1.0 + ], + "weirdness": [ + -1.0, + 1.0 + ], + "depth": [ + 0.0, + 1.0 + ], "offset": 0.0 }, "biome": "antarchy:dream_dunes" }, { "parameters": { - "temperature": [-1.0, 1.0], - "humidity": [-1.0, 1.0], - "continentalness": [-1.0, 1.0], - "erosion": [-1.0, 1.0], - "weirdness": [-1.0, 1.0], - "depth": [0.0, 1.0], + "temperature": [ + -1.0, + 1.0 + ], + "humidity": [ + -1.0, + 1.0 + ], + "continentalness": [ + -1.0, + 1.0 + ], + "erosion": [ + -1.0, + 1.0 + ], + "weirdness": [ + -1.0, + 1.0 + ], + "depth": [ + 0.0, + 1.0 + ], "offset": 0.02 }, "biome": "antarchy:umbral_hills" }, { "parameters": { - "temperature": [-1.0, 1.0], - "humidity": [-1.0, 1.0], - "continentalness": [-1.0, 1.0], - "erosion": [-1.0, 1.0], - "weirdness": [-1.0, 1.0], - "depth": [0.0, 1.0], + "temperature": [ + -1.0, + 1.0 + ], + "humidity": [ + -1.0, + 1.0 + ], + "continentalness": [ + -1.0, + 1.0 + ], + "erosion": [ + -1.0, + 1.0 + ], + "weirdness": [ + -1.0, + 1.0 + ], + "depth": [ + 0.0, + 1.0 + ], "offset": 0.0 }, "biome": "antarchy:nightmare_wastes" }, { "parameters": { - "temperature": [-1.0, 1.0], - "humidity": [-1.0, 1.0], - "continentalness": [-1.0, 1.0], - "erosion": [-1.0, 1.0], - "weirdness": [-1.0, 1.0], - "depth": [0.0, 1.0], + "temperature": [ + -1.0, + 1.0 + ], + "humidity": [ + -1.0, + 1.0 + ], + "continentalness": [ + -1.0, + 1.0 + ], + "erosion": [ + -1.0, + 1.0 + ], + "weirdness": [ + -1.0, + 1.0 + ], + "depth": [ + 0.0, + 1.0 + ], "offset": 0.04 }, "biome": "antarchy:nightmare_wastes" }, { "parameters": { - "temperature": [-1.0, 1.0], - "humidity": [-1.0, 1.0], - "continentalness": [-1.0, 1.0], - "erosion": [-1.0, 1.0], - "weirdness": [-1.0, 1.0], - "depth": [0.0, 1.0], + "temperature": [ + -1.0, + 1.0 + ], + "humidity": [ + -1.0, + 1.0 + ], + "continentalness": [ + -1.0, + 1.0 + ], + "erosion": [ + -1.0, + 1.0 + ], + "weirdness": [ + -1.0, + 1.0 + ], + "depth": [ + 0.0, + 1.0 + ], "offset": 0.12 }, "biome": "antarchy:nightmare_wastes" }, { "parameters": { - "temperature": [-1.0, 1.0], - "humidity": [-1.0, 1.0], - "continentalness": [-1.0, 1.0], - "erosion": [-1.0, 1.0], - "weirdness": [-1.0, 1.0], - "depth": [0.0, 1.0], + "temperature": [ + -1.0, + 1.0 + ], + "humidity": [ + -1.0, + 1.0 + ], + "continentalness": [ + -1.0, + 1.0 + ], + "erosion": [ + -1.0, + 1.0 + ], + "weirdness": [ + -1.0, + 1.0 + ], + "depth": [ + 0.0, + 1.0 + ], "offset": 0.18 }, "biome": "antarchy:nightmare_wastes" }, { "parameters": { - "temperature": [-1.0, 1.0], - "humidity": [-1.0, 1.0], - "continentalness": [-1.0, 1.0], - "erosion": [-1.0, 1.0], - "weirdness": [-1.0, 1.0], - "depth": [0.0, 1.0], + "temperature": [ + -1.0, + 1.0 + ], + "humidity": [ + -1.0, + 1.0 + ], + "continentalness": [ + -1.0, + 1.0 + ], + "erosion": [ + -1.0, + 1.0 + ], + "weirdness": [ + -1.0, + 1.0 + ], + "depth": [ + 0.0, + 1.0 + ], "offset": 0.24 }, "biome": "antarchy:nightmare_wastes" }, { "parameters": { - "temperature": [-1.0, 1.0], - "humidity": [-1.0, 1.0], - "continentalness": [-1.0, 1.0], - "erosion": [-1.0, 1.0], - "weirdness": [-1.0, 1.0], - "depth": [0.0, 1.0], + "temperature": [ + -1.0, + 1.0 + ], + "humidity": [ + -1.0, + 1.0 + ], + "continentalness": [ + -1.0, + 1.0 + ], + "erosion": [ + -1.0, + 1.0 + ], + "weirdness": [ + -1.0, + 1.0 + ], + "depth": [ + 0.0, + 1.0 + ], "offset": 0.6 }, "biome": "antarchy:lucid_pools" - }, - { - "parameters": { - "temperature": [-1.0, 1.0], - "humidity": [-1.0, 1.0], - "continentalness": [-1.0, 1.0], - "erosion": [-1.0, 1.0], - "weirdness": [-1.0, 1.0], - "depth": [0.0, 1.0], - "offset": 0.965 - }, - "biome": "antarchy:cloud_sea" - }, - { - "parameters": { - "temperature": [-1.0, 1.0], - "humidity": [-1.0, 1.0], - "continentalness": [-1.0, 1.0], - "erosion": [-1.0, 1.0], - "weirdness": [-1.0, 1.0], - "depth": [0.0, 1.0], - "offset": 0.93 - }, - "biome": "antarchy:cloud_sea" - }, - { - "parameters": { - "temperature": [-1.0, 1.0], - "humidity": [-1.0, 1.0], - "continentalness": [-1.0, 1.0], - "erosion": [-1.0, 1.0], - "weirdness": [-1.0, 1.0], - "depth": [0.0, 1.0], - "offset": 0.985 - }, - "biome": "antarchy:cloud_sea" - } + } ] } } diff --git a/common-1.21.1/src/main/resources/data/antarchy/dimension_type/elythia.json b/common-1.21.1/src/main/resources/data/antarchy/dimension_type/elythia.json index fa2a6c47..5da9db22 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/dimension_type/elythia.json +++ b/common-1.21.1/src/main/resources/data/antarchy/dimension_type/elythia.json @@ -5,8 +5,8 @@ "bed_works": true, "respawn_anchor_works": false, "min_y": -64, - "height": 384, - "logical_height": 384, + "height": 512, + "logical_height": 512, "infiniburn": "#minecraft:infiniburn_overworld", "effects": "minecraft:overworld", "ambient_light": 0.0, diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/corn_crop.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/corn_crop.json index 90a0d86e..54de69a3 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/corn_crop.json +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/corn_crop.json @@ -3,19 +3,38 @@ "pools": [ { "rolls": 1.0, - "conditions": [ - { - "condition": "minecraft:block_state_property", - "block": "antarchy:corn_crop", - "properties": { - "half": "lower" - } - } - ], "entries": [ { - "type": "minecraft:item", - "name": "antarchy:corn" + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "name": "antarchy:corn", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "antarchy:corn_crop", + "properties": { + "half": "lower", + "age": "3" + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:corn_seeds", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "antarchy:corn_crop", + "properties": { + "half": "lower" + } + } + ] + } + ] } ] }, diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/ruined_prison/generic.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/ruined_prison/generic.json new file mode 100644 index 00000000..f7a5e755 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/ruined_prison/generic.json @@ -0,0 +1,240 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:bread", + "weight": 14, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2.0, + "max": 5.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:rotten_flesh", + "weight": 16, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2.0, + "max": 7.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:bone", + "weight": 14, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2.0, + "max": 6.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:chain", + "weight": 12, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 4.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:iron_ingot", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 4.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:arrow", + "weight": 12, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 8.0, + "max": 20.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:torch", + "weight": 12, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4.0, + "max": 12.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:string", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2.0, + "max": 6.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:coal", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2.0, + "max": 6.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:experience_bottle", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 3.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_components", + "components": { + "minecraft:potion_contents": { + "potion": "minecraft:healing" + } + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:emerald", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 3.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:duct_tape", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 3.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:uranium_nugget", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 3.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:titanium_nugget", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 3.0 + } + } + ] + } + ], + "rolls": { + "type": "minecraft:uniform", + "min": 4.0, + "max": 7.0 + } + } + ], + "random_sequence": "antarchy:chests/ruined_prison/generic" +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/ruined_prison/warden_cache.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/ruined_prison/warden_cache.json new file mode 100644 index 00000000..ed539a08 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/ruined_prison/warden_cache.json @@ -0,0 +1,282 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:iron_sword", + "weight": 14, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 10.0, + "max": 22.0 + }, + "options": "#minecraft:on_random_loot" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:crossbow", + "weight": 14, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 10.0, + "max": 22.0 + }, + "options": "#minecraft:on_random_loot" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:shield", + "weight": 10 + }, + { + "type": "minecraft:item", + "name": "minecraft:arrow", + "weight": 16, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 12.0, + "max": 28.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:spectral_arrow", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4.0, + "max": 12.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:chainmail_chestplate", + "weight": 8, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 8.0, + "max": 20.0 + }, + "options": "#minecraft:on_random_loot" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:chainmail_leggings", + "weight": 8, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 8.0, + "max": 20.0 + }, + "options": "#minecraft:on_random_loot" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:experience_bottle", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2.0, + "max": 5.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_components", + "components": { + "minecraft:potion_contents": { + "potion": "minecraft:strength" + } + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_components", + "components": { + "minecraft:potion_contents": { + "potion": "minecraft:healing" + } + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:book", + "weight": 6, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 16.0, + "max": 28.0 + }, + "options": "#minecraft:on_random_loot" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:golden_apple", + "weight": 6 + }, + { + "type": "minecraft:item", + "name": "minecraft:diamond", + "weight": 4, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 2.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:uranium_nugget", + "weight": 18, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2.0, + "max": 5.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:titanium_nugget", + "weight": 18, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2.0, + "max": 5.0 + } + } + ] + } + ], + "rolls": { + "type": "minecraft:uniform", + "min": 4.0, + "max": 7.0 + } + }, + { + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:diamond_sword", + "weight": 4, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20.0, + "max": 30.0 + }, + "options": "#minecraft:on_random_loot" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:crossbow", + "weight": 4, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20.0, + "max": 30.0 + }, + "options": "#minecraft:on_random_loot" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:book", + "weight": 6, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20.0, + "max": 30.0 + }, + "options": "#minecraft:on_random_loot" + } + ] + } + ], + "rolls": { + "type": "minecraft:uniform", + "min": 0.0, + "max": 1.0 + } + } + ], + "random_sequence": "antarchy:chests/ruined_prison/warden_cache" +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/stampys_house/bedroom.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/stampys_house/bedroom.json new file mode 100644 index 00000000..8fcaf3c1 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/stampys_house/bedroom.json @@ -0,0 +1,176 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:white_wool", + "weight": 14, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2.0, + "max": 6.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:orange_wool", + "weight": 14, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2.0, + "max": 6.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:candle", + "weight": 12, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 4.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:paper", + "weight": 12, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2.0, + "max": 7.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:feather", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2.0, + "max": 6.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:book", + "weight": 10, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 8.0, + "max": 20.0 + }, + "options": "#minecraft:on_random_loot" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:music_disc_cat", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "minecraft:bone", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2.0, + "max": 6.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:emerald", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 3.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:amethyst_shard", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2.0, + "max": 6.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:rainbow_sugar", + "weight": 10 + }, + { + "type": "minecraft:item", + "name": "antarchy:duct_tape", + "weight": 4, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 3.0 + } + } + ] + } + ], + "rolls": { + "type": "minecraft:uniform", + "min": 4.0, + "max": 7.0 + } + } + ], + "random_sequence": "antarchy:chests/stampys_house/bedroom" +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/stampys_house/kitchen.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/stampys_house/kitchen.json new file mode 100644 index 00000000..85d58abc --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/stampys_house/kitchen.json @@ -0,0 +1,165 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:peach", + "weight": 18, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3.0, + "max": 8.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:peach_pie", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 3.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:popcorn", + "weight": 12, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2.0, + "max": 6.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:cornbread", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2.0, + "max": 5.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:root_beer", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 3.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:rainbow_sugar", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 4.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:cookie", + "weight": 12, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3.0, + "max": 8.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:milk_bucket", + "weight": 6 + }, + { + "type": "minecraft:item", + "name": "minecraft:cake", + "weight": 3 + }, + { + "type": "minecraft:item", + "name": "minecraft:apple", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2.0, + "max": 5.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:bread", + "weight": 12, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2.0, + "max": 5.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:mud_pie", + "weight": 4 + } + ], + "rolls": { + "type": "minecraft:uniform", + "min": 4.0, + "max": 7.0 + } + } + ], + "random_sequence": "antarchy:chests/stampys_house/kitchen" +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/stampys_house/storage.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/stampys_house/storage.json new file mode 100644 index 00000000..c7093fe5 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/stampys_house/storage.json @@ -0,0 +1,176 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:peach_planks", + "weight": 16, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 6.0, + "max": 16.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:peach_slab", + "weight": 12, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4.0, + "max": 12.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:ladder", + "weight": 14, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4.0, + "max": 12.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:torch", + "weight": 14, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4.0, + "max": 12.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:redstone", + "weight": 12, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4.0, + "max": 12.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:lever", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 4.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:stick", + "weight": 14, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4.0, + "max": 12.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:string", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2.0, + "max": 8.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:fishing_rod", + "weight": 8 + }, + { + "type": "minecraft:item", + "name": "minecraft:bow", + "weight": 6, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 6.0, + "max": 18.0 + }, + "options": "#minecraft:on_random_loot" + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:duct_tape", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 4.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:golden_apple", + "weight": 3 + } + ], + "rolls": { + "type": "minecraft:uniform", + "min": 4.0, + "max": 8.0 + } + } + ], + "random_sequence": "antarchy:chests/stampys_house/storage" +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/spawners/ruined_prison/hard.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/spawners/ruined_prison/hard.json new file mode 100644 index 00000000..827dccb2 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/spawners/ruined_prison/hard.json @@ -0,0 +1,274 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:diamond_sword", + "weight": 10, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 24.0, + "max": 30.0 + }, + "options": "#minecraft:on_random_loot" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:crossbow", + "weight": 10, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 24.0, + "max": 30.0 + }, + "options": "#minecraft:on_random_loot" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:shield", + "weight": 8 + }, + { + "type": "minecraft:item", + "name": "minecraft:arrow", + "weight": 18, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 24.0, + "max": 48.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:spectral_arrow", + "weight": 12, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 12.0, + "max": 24.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:experience_bottle", + "weight": 12, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 5.0, + "max": 10.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_components", + "components": { + "minecraft:potion_contents": { + "potion": "minecraft:strength" + } + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_components", + "components": { + "minecraft:potion_contents": { + "potion": "minecraft:regeneration" + } + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:book", + "weight": 10, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 24.0, + "max": 30.0 + }, + "options": "#minecraft:on_random_loot" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:golden_apple", + "weight": 10 + }, + { + "type": "minecraft:item", + "name": "minecraft:diamond", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2.0, + "max": 4.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:uranium_nugget", + "weight": 40, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4.0, + "max": 8.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:titanium_nugget", + "weight": 40, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4.0, + "max": 8.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:uranium_ingot", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:titanium_ingot", + "weight": 2 + } + ], + "rolls": { + "type": "minecraft:uniform", + "min": 5.0, + "max": 8.0 + } + }, + { + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:crossbow", + "weight": 8, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 24.0, + "max": 30.0 + }, + "options": "#minecraft:on_random_loot" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:book", + "weight": 10, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 25.0, + "max": 30.0 + }, + "options": "#minecraft:on_random_loot" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:netherite_scrap", + "weight": 4, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 2.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:diamond", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 3.0 + } + } + ] + } + ], + "rolls": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 2.0 + } + } + ], + "random_sequence": "antarchy:spawners/ruined_prison/hard" +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/spawners/ruined_prison/medium.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/spawners/ruined_prison/medium.json new file mode 100644 index 00000000..8ce546a3 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/spawners/ruined_prison/medium.json @@ -0,0 +1,248 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:iron_sword", + "weight": 18, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 8.0, + "max": 20.0 + }, + "options": "#minecraft:on_random_loot" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:crossbow", + "weight": 16, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 10.0, + "max": 22.0 + }, + "options": "#minecraft:on_random_loot" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:shield", + "weight": 12 + }, + { + "type": "minecraft:item", + "name": "minecraft:arrow", + "weight": 20, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 16.0, + "max": 36.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:spectral_arrow", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 6.0, + "max": 14.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:experience_bottle", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3.0, + "max": 7.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_components", + "components": { + "minecraft:potion_contents": { + "potion": "minecraft:strength" + } + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_components", + "components": { + "minecraft:potion_contents": { + "potion": "minecraft:healing" + } + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:emerald", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2.0, + "max": 5.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:iron_ingot", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2.0, + "max": 6.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:chain", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2.0, + "max": 6.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:uranium_nugget", + "weight": 32, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2.0, + "max": 6.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:titanium_nugget", + "weight": 32, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2.0, + "max": 6.0 + } + } + ] + } + ], + "rolls": { + "type": "minecraft:uniform", + "min": 4.0, + "max": 7.0 + } + }, + { + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:diamond_sword", + "weight": 4, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20.0, + "max": 30.0 + }, + "options": "#minecraft:on_random_loot" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:book", + "weight": 6, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20.0, + "max": 30.0 + }, + "options": "#minecraft:on_random_loot" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:golden_apple", + "weight": 6 + } + ], + "rolls": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 1.0 + } + } + ], + "random_sequence": "antarchy:spawners/ruined_prison/medium" +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/spawners/stampys_house/hard.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/spawners/stampys_house/hard.json new file mode 100644 index 00000000..bc533a4b --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/spawners/stampys_house/hard.json @@ -0,0 +1,231 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:diamond", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 4.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:gold_ingot", + "weight": 14, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2.0, + "max": 6.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:emerald", + "weight": 12, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 4.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:copper_ingot", + "weight": 14, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2.0, + "max": 8.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:book", + "weight": 8, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 15.0, + "max": 30.0 + }, + "options": "#minecraft:on_random_loot" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:crossbow", + "weight": 10, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 15.0, + "max": 30.0 + }, + "options": "#minecraft:on_random_loot" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:arrow", + "weight": 14, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 12.0, + "max": 32.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:duct_tape", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 3.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:torch", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4.0, + "max": 12.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:bread", + "weight": 12, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2.0, + "max": 6.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:mud_pie", + "weight": 4 + } + ], + "rolls": { + "type": "minecraft:uniform", + "min": 4.0, + "max": 7.0 + } + }, + { + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:fallen_king_crown", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 1.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:uranium_nugget", + "weight": 9, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 2.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:titanium_nugget", + "weight": 9, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 2.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:golden_apple", + "weight": 9 + } + ], + "rolls": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 2.0 + } + } + ], + "random_sequence": "antarchy:spawners/stampys_house/trail_chamber/hard" +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/spawners/stampys_house/medium.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/spawners/stampys_house/medium.json new file mode 100644 index 00000000..f01c5d6e --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/spawners/stampys_house/medium.json @@ -0,0 +1,260 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:bread", + "weight": 18, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2.0, + "max": 6.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:iron_ingot", + "weight": 12, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 4.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:copper_ingot", + "weight": 14, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2.0, + "max": 8.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:gold_ingot", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 4.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:arrow", + "weight": 14, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 8.0, + "max": 24.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:torch", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4.0, + "max": 12.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:duct_tape", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 3.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_components", + "components": { + "minecraft:potion_contents": { + "potion": "antarchy:shrinking" + } + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_components", + "components": { + "minecraft:potion_contents": { + "potion": "antarchy:growing" + } + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:emerald", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 3.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:mud_pie", + "weight": 4 + } + ], + "rolls": { + "type": "minecraft:uniform", + "min": 3.0, + "max": 6.0 + } + }, + { + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:fallen_king_crown", + "weight": 4, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 1.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:uranium_nugget", + "weight": 7, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 2.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:titanium_nugget", + "weight": 7, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 2.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:golden_apple", + "weight": 7 + }, + { + "type": "minecraft:item", + "name": "minecraft:diamond", + "weight": 4, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 2.0 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:book", + "weight": 4, + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 10.0, + "max": 25.0 + }, + "options": "#minecraft:on_random_loot" + } + ] + } + ], + "rolls": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 2.0 + } + } + ], + "random_sequence": "antarchy:spawners/stampys_house/trail_chamber/medium" +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/recipe/loam.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/loam.json new file mode 100644 index 00000000..cfd69d99 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/loam.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "pattern": [ + "MD", + "DM" + ], + "key": { + "M": { + "item": "minecraft:mud" + }, + "D": { + "item": "antarchy:myrmite" + } + }, + "result": { + "count": 1, + "id": "antarchy:loam" + } +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/structure/ruined_prison/ruined_prison.nbt b/common-1.21.1/src/main/resources/data/antarchy/structure/ruined_prison/ruined_prison.nbt new file mode 100644 index 00000000..d647fd14 Binary files /dev/null and b/common-1.21.1/src/main/resources/data/antarchy/structure/ruined_prison/ruined_prison.nbt differ diff --git a/common-1.21.1/src/main/resources/data/antarchy/structure/sign/sign.nbt b/common-1.21.1/src/main/resources/data/antarchy/structure/sign/sign.nbt new file mode 100644 index 00000000..a61633bf Binary files /dev/null and b/common-1.21.1/src/main/resources/data/antarchy/structure/sign/sign.nbt differ diff --git a/common-1.21.1/src/main/resources/data/antarchy/structure/stampys_house/stampys_house.nbt b/common-1.21.1/src/main/resources/data/antarchy/structure/stampys_house/stampys_house.nbt new file mode 100644 index 00000000..090a5d0a Binary files /dev/null and b/common-1.21.1/src/main/resources/data/antarchy/structure/stampys_house/stampys_house.nbt differ diff --git a/common-1.21.1/src/main/resources/data/antarchy/structure/stampys_house/stampys_house_bottom1.nbt b/common-1.21.1/src/main/resources/data/antarchy/structure/stampys_house/stampys_house_bottom1.nbt new file mode 100644 index 00000000..e8c95082 Binary files /dev/null and b/common-1.21.1/src/main/resources/data/antarchy/structure/stampys_house/stampys_house_bottom1.nbt differ diff --git a/common-1.21.1/src/main/resources/data/antarchy/structure/stampys_house/stampys_house_bottom2.nbt b/common-1.21.1/src/main/resources/data/antarchy/structure/stampys_house/stampys_house_bottom2.nbt new file mode 100644 index 00000000..4b8a231c Binary files /dev/null and b/common-1.21.1/src/main/resources/data/antarchy/structure/stampys_house/stampys_house_bottom2.nbt differ diff --git a/common-1.21.1/src/main/resources/data/antarchy/tags/item/rainbow_ant_breeding_foods.json b/common-1.21.1/src/main/resources/data/antarchy/tags/item/rainbow_ant_breeding_foods.json index bc87462f..4277b9ed 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/tags/item/rainbow_ant_breeding_foods.json +++ b/common-1.21.1/src/main/resources/data/antarchy/tags/item/rainbow_ant_breeding_foods.json @@ -1,6 +1,6 @@ { "replace": false, "values": [ - "minecraft:sugar" + "antarchy:rainbow_sugar" ] } diff --git a/common-1.21.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/ruined_prison_biomes.json b/common-1.21.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/ruined_prison_biomes.json new file mode 100644 index 00000000..8d8c39a8 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/ruined_prison_biomes.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:elythia_meadow" + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/sign_biomes.json b/common-1.21.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/sign_biomes.json new file mode 100644 index 00000000..8d8c39a8 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/sign_biomes.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:elythia_meadow" + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/stampys_house_biomes.json b/common-1.21.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/stampys_house_biomes.json new file mode 100644 index 00000000..8d8c39a8 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/stampys_house_biomes.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:elythia_meadow" + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/biowart_caves.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/biowart_caves.json index 70d7e637..b8afe375 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/biowart_caves.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/biowart_caves.json @@ -24,8 +24,8 @@ }, "music": { "sound": "antarchy:music.game.cavaryn", - "min_delay": 12000, - "max_delay": 24000, + "min_delay": 600, + "max_delay": 1800, "replace_current_music": true } }, @@ -63,7 +63,7 @@ ], [] ], - "creature_spawn_probability": 0.08, + "creature_spawn_probability": 0.98, "spawners": { "monster": [ { @@ -76,15 +76,15 @@ "creature": [ { "type": "antarchy:rolly_polly", - "weight": 25, - "minCount": 1, - "maxCount": 3 + "weight": 320, + "minCount": 4, + "maxCount": 8 }, { "type": "antarchy:stink_bug", - "weight": 35, - "minCount": 2, - "maxCount": 4 + "weight": 420, + "minCount": 4, + "maxCount": 8 } ], "ambient": [], diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/brooding_tunnels.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/brooding_tunnels.json index 0c641197..231ae737 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/brooding_tunnels.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/brooding_tunnels.json @@ -23,8 +23,8 @@ }, "music": { "sound": "antarchy:music.game.cavaryn", - "min_delay": 12000, - "max_delay": 24000, + "min_delay": 600, + "max_delay": 1800, "replace_current_music": true } }, @@ -60,22 +60,22 @@ "antarchy:spit_bug_egg_patch" ] ], - "creature_spawn_probability": 0.12, + "creature_spawn_probability": 0.98, "spawners": { "monster": [ ], "creature": [ { "type": "antarchy:rolly_polly", - "weight": 25, - "minCount": 1, - "maxCount": 3 + "weight": 300, + "minCount": 4, + "maxCount": 8 }, { "type": "antarchy:stink_bug", - "weight": 35, - "minCount": 2, - "maxCount": 4 + "weight": 450, + "minCount": 4, + "maxCount": 8 }], "ambient": [ ], diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/butterfly_fields.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/butterfly_fields.json index a3e16359..612deba5 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/butterfly_fields.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/butterfly_fields.json @@ -18,13 +18,12 @@ }, "music": { "sound": "antarchy:music.game.elythia", - "min_delay": 12000, - "max_delay": 24000, + "min_delay": 600, + "max_delay": 1800, "replace_current_music": true } }, - "spawn_costs": { - }, + "spawn_costs": {}, "carvers": { "air": [], "liquid": [] @@ -70,10 +69,9 @@ ], [] ], - "creature_spawn_probability": 0.20, + "creature_spawn_probability": 0.2, "spawners": { - "monster": [ - ], + "monster": [], "creature": [ { "type": "antarchy:caterpillar", diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/cavaryn.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/cavaryn.json index fdd06ec7..3b178bb3 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/cavaryn.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/cavaryn.json @@ -23,8 +23,8 @@ }, "music": { "sound": "antarchy:music.game.cavaryn", - "min_delay": 12000, - "max_delay": 24000, + "min_delay": 600, + "max_delay": 1800, "replace_current_music": true } }, @@ -64,22 +64,22 @@ "antarchy:cavaryn_hanging_creeproots" ] ], - "creature_spawn_probability": 0.06, + "creature_spawn_probability": 0.98, "spawners": { "monster": [ ], "creature": [ { "type": "antarchy:rolly_polly", - "weight": 25, - "minCount": 1, - "maxCount": 3 + "weight": 320, + "minCount": 4, + "maxCount": 8 }, { "type": "antarchy:stink_bug", - "weight": 35, - "minCount": 2, - "maxCount": 4 + "weight": 420, + "minCount": 4, + "maxCount": 8 }], "ambient": [ ], diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/cavaryn_moleworm_caves.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/cavaryn_moleworm_caves.json index 30cbfb7e..869ded6c 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/cavaryn_moleworm_caves.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/cavaryn_moleworm_caves.json @@ -18,8 +18,8 @@ }, "music": { "sound": "antarchy:music.game.cavaryn", - "min_delay": 12000, - "max_delay": 24000, + "min_delay": 600, + "max_delay": 1800, "replace_current_music": true } }, @@ -59,7 +59,7 @@ ], [] ], - "creature_spawn_probability": 0.08, + "creature_spawn_probability": 0.9, "spawners": { "monster": [ { @@ -75,13 +75,26 @@ "maxCount": 4 } ], - "creature": [], + "creature": [ + { + "type": "antarchy:rolly_polly", + "weight": 220, + "minCount": 3, + "maxCount": 7 + }, + { + "type": "antarchy:stink_bug", + "weight": 300, + "minCount": 4, + "maxCount": 8 + } + ], "ambient": [ { "type": "minecraft:bat", - "weight": 12, - "minCount": 4, - "maxCount": 8 + "weight": 1, + "minCount": 1, + "maxCount": 2 } ], "axolotls": [], diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/cloud_sea.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/cloud_sea.json index 7a172be8..1a3a9124 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/cloud_sea.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/cloud_sea.json @@ -1,23 +1,32 @@ { "has_precipitation": false, - "temperature": 2.0, - "downfall": 0.0, + "temperature": 0.82, + "downfall": 1.0, "effects": { - "fog_color": 983040, - "water_color": 327680, - "water_fog_color": 0, - "sky_color": 524288, - "particle": { - "probability": 0.02, - "options": { - "type": "minecraft:cloud" - } + "fog_color": 8084735, + "water_color": 5021432, + "water_fog_color": 736368, + "sky_color": 8084735, + "foliage_color": 2867501, + "grass_color": 4304168, + "grass_color_modifier": "none", + "mood_sound": { + "sound": "minecraft:ambient.basalt_deltas.mood", + "tick_delay": 8000, + "block_search_extent": 8, + "offset": 2.0 + }, + "music": { + "sound": "antarchy:music.game.elythia", + "min_delay": 600, + "max_delay": 1800, + "replace_current_music": true } }, "spawn_costs": { "antarchy:cloud_shark": { - "energy_budget": 0.2, - "charge": 9 + "energy_budget": 0.15, + "charge": 22 } }, "carvers": { @@ -30,26 +39,27 @@ [], [], [ - "antarchy:cloud_sea_calcite_banks" + "antarchy:elythia_clouds" ], [], [], [], [], + [], [] ], "creature_spawn_probability": 0.03, "spawners": { + "creature": [], + "ambient": [], "monster": [ { "type": "antarchy:cloud_shark", - "weight": 40, - "minCount": 2, - "maxCount": 5 + "weight": 10, + "minCount": 1, + "maxCount": 2 } ], - "creature": [], - "ambient": [], "axolotls": [], "underground_water_creature": [], "water_creature": [], diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/dream_dunes.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/dream_dunes.json index c938a238..d21304a1 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/dream_dunes.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/dream_dunes.json @@ -26,8 +26,8 @@ }, "music": { "sound": "antarchy:music.game.thoraxis", - "min_delay": 12000, - "max_delay": 24000, + "min_delay": 600, + "max_delay": 1800, "replace_current_music": true } }, @@ -57,8 +57,7 @@ ], [ "antarchy:nyxite_spikes", - "antarchy:patch_ceiling_fire", - "antarchy:patch_ceiling_antigravel" + "antarchy:patch_ceiling_fire" ], [ "antarchy:cornea_stalk_patch", diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_beach.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_beach.json index a213bdd9..19c3b774 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_beach.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_beach.json @@ -18,8 +18,8 @@ }, "music": { "sound": "antarchy:music.game.elythia", - "min_delay": 12000, - "max_delay": 24000, + "min_delay": 600, + "max_delay": 1800, "replace_current_music": true } }, diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_coral_spikes.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_coral_spikes.json index c001dd55..7de82a4b 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_coral_spikes.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_coral_spikes.json @@ -18,8 +18,8 @@ }, "music": { "sound": "antarchy:music.game.elythia", - "min_delay": 12000, - "max_delay": 24000, + "min_delay": 600, + "max_delay": 1800, "replace_current_music": true } }, @@ -65,19 +65,39 @@ "creature_spawn_probability": 0.04, "spawners": { "monster": [ - { "type": "antarchy:missile_squid", "weight": 12, "minCount": 1, "maxCount": 3 } + { + "type": "antarchy:missile_squid", + "weight": 12, + "minCount": 1, + "maxCount": 3 + } ], "creature": [ - { "type": "minecraft:turtle", "weight": 5, "minCount": 1, "maxCount": 2 } + { + "type": "minecraft:turtle", + "weight": 5, + "minCount": 1, + "maxCount": 2 + } ], "ambient": [], "axolotls": [], "underground_water_creature": [], "water_creature": [ - { "type": "antarchy:octopus_bomb", "weight": 4, "minCount": 1, "maxCount": 2 } + { + "type": "antarchy:octopus_bomb", + "weight": 4, + "minCount": 1, + "maxCount": 2 + } ], "water_ambient": [ - { "type": "minecraft:tropical_fish", "weight": 20, "minCount": 4, "maxCount": 8 } + { + "type": "minecraft:tropical_fish", + "weight": 20, + "minCount": 4, + "maxCount": 8 + } ], "misc": [] } diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_lush_caves.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_lush_caves.json index 6323cc83..bb95383b 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_lush_caves.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_lush_caves.json @@ -24,8 +24,8 @@ }, "music": { "sound": "antarchy:music.game.elythia", - "min_delay": 12000, - "max_delay": 24000, + "min_delay": 600, + "max_delay": 1800, "replace_current_music": true } }, diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_meadow.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_meadow.json index afe0e436..34cd6c3e 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_meadow.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_meadow.json @@ -18,8 +18,8 @@ }, "music": { "sound": "antarchy:music.game.elythia", - "min_delay": 12000, - "max_delay": 24000, + "min_delay": 600, + "max_delay": 1800, "replace_current_music": true } }, @@ -156,8 +156,18 @@ } ], "water_ambient": [ - { "type": "antarchy:cheep", "weight": 10, "minCount": 3, "maxCount": 6 }, - { "type": "minecraft:tropical_fish", "weight": 20, "minCount": 4, "maxCount": 8 } + { + "type": "antarchy:cheep", + "weight": 10, + "minCount": 3, + "maxCount": 6 + }, + { + "type": "minecraft:tropical_fish", + "weight": 20, + "minCount": 4, + "maxCount": 8 + } ], "misc": [] } diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_ocean.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_ocean.json index 585bfd88..b06c747b 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_ocean.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_ocean.json @@ -18,8 +18,8 @@ }, "music": { "sound": "antarchy:music.game.elythia", - "min_delay": 12000, - "max_delay": 24000, + "min_delay": 600, + "max_delay": 1800, "replace_current_music": true } }, @@ -68,18 +68,38 @@ "creature_spawn_probability": 0.15, "spawners": { "monster": [ - { "type": "antarchy:missile_squid", "weight": 12, "minCount": 1, "maxCount": 3 } - ], - "creature": [ + { + "type": "antarchy:missile_squid", + "weight": 12, + "minCount": 1, + "maxCount": 3 + } ], + "creature": [], "ambient": [], "axolotls": [], "underground_water_creature": [], "water_creature": [ - { "type": "antarchy:octopus_bomb", "weight": 4, "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 }, - { "type": "minecraft:tropical_fish", "weight": 20, "minCount": 4, "maxCount": 8 } + { + "type": "antarchy:cheep", + "weight": 10, + "minCount": 3, + "maxCount": 6 + }, + { + "type": "minecraft:tropical_fish", + "weight": 20, + "minCount": 4, + "maxCount": 8 + } ], "misc": [] } diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_river.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_river.json index 23d3b265..7cc1b3e9 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_river.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_river.json @@ -18,8 +18,8 @@ }, "music": { "sound": "antarchy:music.game.elythia", - "min_delay": 12000, - "max_delay": 24000, + "min_delay": 600, + "max_delay": 1800, "replace_current_music": true } }, diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/fungal_ouranwood_forest.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/fungal_ouranwood_forest.json index 911b65dc..ea02d039 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/fungal_ouranwood_forest.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/fungal_ouranwood_forest.json @@ -16,6 +16,7 @@ "type": "minecraft:spore_blossom_air" } }, + "ambient_sound": "antarchy:ambient.elythia.ouranwood_forest", "mood_sound": { "sound": "minecraft:ambient.crimson_forest.mood", "tick_delay": 6000, @@ -24,8 +25,8 @@ }, "music": { "sound": "antarchy:music.game.elythia", - "min_delay": 12000, - "max_delay": 24000, + "min_delay": 600, + "max_delay": 1800, "replace_current_music": true } }, diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/glimmering_pools.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/glimmering_pools.json index b4fc2d1f..bbfdd395 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/glimmering_pools.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/glimmering_pools.json @@ -18,8 +18,8 @@ }, "music": { "sound": "antarchy:music.game.elythia", - "min_delay": 12000, - "max_delay": 24000, + "min_delay": 600, + "max_delay": 1800, "replace_current_music": true } }, @@ -83,8 +83,7 @@ "maxCount": 1 } ], - "ambient": [ - ], + "ambient": [], "axolotls": [], "underground_water_creature": [ { diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/glowcap_caves.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/glowcap_caves.json index 11f0638d..0d74084c 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/glowcap_caves.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/glowcap_caves.json @@ -24,8 +24,8 @@ }, "music": { "sound": "antarchy:music.game.cavaryn", - "min_delay": 12000, - "max_delay": 24000, + "min_delay": 600, + "max_delay": 1800, "replace_current_music": true } }, @@ -53,22 +53,22 @@ ], [] ], - "creature_spawn_probability": 0.09, + "creature_spawn_probability": 0.98, "spawners": { "monster": [ ], "creature": [ { "type": "antarchy:rolly_polly", - "weight": 25, - "minCount": 1, - "maxCount": 3 + "weight": 280, + "minCount": 4, + "maxCount": 8 }, { "type": "antarchy:stink_bug", - "weight": 40, - "minCount": 2, - "maxCount": 4 + "weight": 380, + "minCount": 4, + "maxCount": 8 }], "ambient": [ ], diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/lucid_pools.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/lucid_pools.json index bfa64674..c2a5d136 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/lucid_pools.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/lucid_pools.json @@ -26,8 +26,8 @@ }, "music": { "sound": "antarchy:music.game.thoraxis", - "min_delay": 12000, - "max_delay": 24000, + "min_delay": 600, + "max_delay": 1800, "replace_current_music": true } }, @@ -62,8 +62,7 @@ "antarchy:red_ant_nest_magma", "antarchy:nyxite_spikes", "antarchy:patch_fire_sparse", - "antarchy:patch_ceiling_fire", - "antarchy:patch_ceiling_antigravel" + "antarchy:patch_ceiling_fire" ], [], [ diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/moleworm_caves.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/moleworm_caves.json index c51f9103..dfa86033 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/moleworm_caves.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/moleworm_caves.json @@ -18,8 +18,8 @@ }, "music": { "sound": "antarchy:music.game.elythia", - "min_delay": 12000, - "max_delay": 24000, + "min_delay": 600, + "max_delay": 1800, "replace_current_music": true } }, diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/nightmare_wastes.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/nightmare_wastes.json index 60dac76d..972411e4 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/nightmare_wastes.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/nightmare_wastes.json @@ -26,8 +26,8 @@ }, "music": { "sound": "antarchy:music.game.thoraxis", - "min_delay": 12000, - "max_delay": 24000, + "min_delay": 600, + "max_delay": 1800, "replace_current_music": true } }, @@ -64,8 +64,7 @@ "antarchy:bed_bug_nest", "antarchy:nyxite_spikes", "antarchy:patch_fire_sparse", - "antarchy:patch_ceiling_fire", - "antarchy:patch_ceiling_antigravel" + "antarchy:patch_ceiling_fire" ], [ "antarchy:cornea_stalk_patch", diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/ouranwood_forest.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/ouranwood_forest.json index 06698280..f832e35f 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/ouranwood_forest.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/ouranwood_forest.json @@ -16,6 +16,7 @@ "type": "minecraft:spore_blossom_air" } }, + "ambient_sound": "antarchy:ambient.elythia.ouranwood_forest", "mood_sound": { "sound": "minecraft:ambient.crimson_forest.mood", "tick_delay": 6000, @@ -24,21 +25,21 @@ }, "music": { "sound": "antarchy:music.game.elythia", - "min_delay": 12000, - "max_delay": 24000, + "min_delay": 600, + "max_delay": 1800, "replace_current_music": true } }, "spawn_costs": { - "antarchy:basilisk": { - "energy_budget": 0.1, - "charge": 14.0 - }, - "antarchy:glimmer": { - "energy_budget": 0.1, - "charge": 9 - } + "antarchy:basilisk": { + "energy_budget": 0.1, + "charge": 14.0 }, + "antarchy:glimmer": { + "energy_budget": 0.1, + "charge": 9 + } + }, "carvers": { "air": [], "liquid": [] @@ -126,8 +127,7 @@ "maxCount": 1 } ], - "ambient": [ - ], + "ambient": [], "axolotls": [], "underground_water_creature": [], "water_creature": [ @@ -136,10 +136,22 @@ "weight": 2, "minCount": 1, "maxCount": 1 - }], + } + ], "water_ambient": [ - { "type": "antarchy:cheep", "weight": 10, "minCount": 3, "maxCount": 6 }, - { "type": "minecraft:tropical_fish", "weight": 20, "minCount": 4, "maxCount": 8 }], + { + "type": "antarchy:cheep", + "weight": 10, + "minCount": 3, + "maxCount": 6 + }, + { + "type": "minecraft:tropical_fish", + "weight": 20, + "minCount": 4, + "maxCount": 8 + } + ], "misc": [] } } diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/peach_forest.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/peach_forest.json index 232bbaad..c867af44 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/peach_forest.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/peach_forest.json @@ -18,8 +18,8 @@ }, "music": { "sound": "antarchy:music.game.elythia", - "min_delay": 12000, - "max_delay": 24000, + "min_delay": 600, + "max_delay": 1800, "replace_current_music": true } }, @@ -82,8 +82,7 @@ ], "creature_spawn_probability": 0.28, "spawners": { - "monster": [ - ], + "monster": [], "creature": [ { "type": "antarchy:elka", @@ -104,14 +103,11 @@ "maxCount": 1 } ], - "ambient": [ - ], + "ambient": [], "axolotls": [], "underground_water_creature": [], - "water_creature": [ - ], - "water_ambient": [ - ], + "water_creature": [], + "water_ambient": [], "misc": [] } } diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/rolly_caves.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/rolly_caves.json index 75f5ce81..2a532b40 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/rolly_caves.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/rolly_caves.json @@ -23,8 +23,8 @@ }, "music": { "sound": "antarchy:music.game.cavaryn", - "min_delay": 12000, - "max_delay": 24000, + "min_delay": 600, + "max_delay": 1800, "replace_current_music": true } }, diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/sparse_ouranwood_forest.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/sparse_ouranwood_forest.json index e839be16..8ef10cc0 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/sparse_ouranwood_forest.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/sparse_ouranwood_forest.json @@ -1,158 +1,125 @@ { - "has_precipitation": false, - "temperature": 0.78, - "downfall": 0.95, - "effects": { - "fog_color": 8084735, - "water_color": 5021432, - "water_fog_color": 2502722, - "sky_color": 8084735, - "foliage_color": 2867501, - "grass_color": 4304168, - "grass_color_modifier": "none", - "particle": { - "probability": 0.009, - "options": { - "type": "minecraft:spore_blossom_air" - } - }, - "mood_sound": { - "sound": "minecraft:ambient.crimson_forest.mood", - "tick_delay": 6000, - "block_search_extent": 8, - "offset": 2.0 - }, - "music": { - "sound": "antarchy:music.game.elythia", - "min_delay": 12000, - "max_delay": 24000, - "replace_current_music": true - } - }, - "spawn_costs": { - - "antarchy:glimmer": { - "energy_budget": 0.1, - "charge": 9 + "has_precipitation": false, + "temperature": 0.78, + "downfall": 0.95, + "effects": { + "fog_color": 8084735, + "water_color": 5021432, + "water_fog_color": 2502722, + "sky_color": 8084735, + "foliage_color": 2867501, + "grass_color": 4304168, + "grass_color_modifier": "none", + "particle": { + "probability": 0.009, + "options": { + "type": "minecraft:spore_blossom_air" } - - }, - "carvers": { - "air": [ - - ], - "liquid": [ - - ] - }, - "features": [ - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - "minecraft:ore_coal_upper", - "minecraft:ore_coal_lower", - "minecraft:ore_iron_upper", - "minecraft:ore_iron_middle", - "minecraft:ore_iron_small", - "minecraft:ore_gold", - "minecraft:ore_gold_lower", - "minecraft:ore_redstone", - "minecraft:ore_redstone_lower", - "minecraft:ore_diamond", - "minecraft:ore_diamond_medium", - "minecraft:ore_diamond_large", - "minecraft:ore_diamond_buried", - "minecraft:ore_lapis", - "minecraft:ore_lapis_buried", - "minecraft:ore_copper" - ], - [ - "antarchy:elythia_underground", - "minecraft:large_dripstone", - "minecraft:pointed_dripstone" - ], - [ - - ], - [ - "antarchy:ouranwood_trees_sparse", - "antarchy:elythia_forest_flora", - "antarchy:elythia_brown_ant_nests", - "antarchy:elythia_rainbow_ant_nests" - ], - [ - - ] - ], - "creature_spawn_probability": 0.07, - "spawners": { - "monster": [ - - ], - "creature": [ - { - "type": "antarchy:caterpillar", - "weight": 5, - "minCount": 1, - "maxCount": 2 - }, - { - "type": "antarchy:flying_squirrel", - "weight": 2, - "minCount": 1, - "maxCount": 2 - }, - { - "type": "antarchy:ouranwood_deer", - "weight": 4, - "minCount": 1, - "maxCount": 1 - }, - { - "type": "antarchy:glimmer", - "weight": 1, - "minCount": 1, - "maxCount": 1 - } - ], - "ambient": [ - { - "type": "antarchy:butterfly", - "weight": 7, - "minCount": 1, - "maxCount": 2 - } - ], - "axolotls": [ - - ], - "underground_water_creature": [ - - ], - "water_creature": [ - - ], - "water_ambient": [ - - ], - "misc": [ - - ] - } + }, + "ambient_sound": "antarchy:ambient.elythia.ouranwood_forest", + "mood_sound": { + "sound": "minecraft:ambient.crimson_forest.mood", + "tick_delay": 6000, + "block_search_extent": 8, + "offset": 2.0 + }, + "music": { + "sound": "antarchy:music.game.elythia", + "min_delay": 600, + "max_delay": 1800, + "replace_current_music": true + } + }, + "spawn_costs": { + "antarchy:glimmer": { + "energy_budget": 0.1, + "charge": 9 + } + }, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [], + [], + [], + [], + [], + [ + "minecraft:ore_coal_upper", + "minecraft:ore_coal_lower", + "minecraft:ore_iron_upper", + "minecraft:ore_iron_middle", + "minecraft:ore_iron_small", + "minecraft:ore_gold", + "minecraft:ore_gold_lower", + "minecraft:ore_redstone", + "minecraft:ore_redstone_lower", + "minecraft:ore_diamond", + "minecraft:ore_diamond_medium", + "minecraft:ore_diamond_large", + "minecraft:ore_diamond_buried", + "minecraft:ore_lapis", + "minecraft:ore_lapis_buried", + "minecraft:ore_copper" + ], + [ + "antarchy:elythia_underground", + "minecraft:large_dripstone", + "minecraft:pointed_dripstone" + ], + [], + [ + "antarchy:ouranwood_trees_sparse", + "antarchy:elythia_forest_flora", + "antarchy:elythia_brown_ant_nests", + "antarchy:elythia_rainbow_ant_nests" + ], + [] + ], + "creature_spawn_probability": 0.07, + "spawners": { + "monster": [], + "creature": [ + { + "type": "antarchy:caterpillar", + "weight": 5, + "minCount": 1, + "maxCount": 2 + }, + { + "type": "antarchy:flying_squirrel", + "weight": 2, + "minCount": 1, + "maxCount": 2 + }, + { + "type": "antarchy:ouranwood_deer", + "weight": 4, + "minCount": 1, + "maxCount": 1 + }, + { + "type": "antarchy:glimmer", + "weight": 1, + "minCount": 1, + "maxCount": 1 + } + ], + "ambient": [ + { + "type": "antarchy:butterfly", + "weight": 7, + "minCount": 1, + "maxCount": 2 + } + ], + "axolotls": [], + "underground_water_creature": [], + "water_creature": [], + "water_ambient": [], + "misc": [] + } } diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/umbral_hills.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/umbral_hills.json index 4a5be616..fd631872 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/umbral_hills.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/umbral_hills.json @@ -26,8 +26,8 @@ }, "music": { "sound": "antarchy:music.game.thoraxis", - "min_delay": 12000, - "max_delay": 24000, + "min_delay": 600, + "max_delay": 1800, "replace_current_music": true } }, @@ -58,8 +58,7 @@ "antarchy:bed_bug_surface_cluster", "antarchy:nyxite_spikes", "antarchy:patch_fire_sparse", - "antarchy:patch_ceiling_fire", - "antarchy:patch_ceiling_antigravel" + "antarchy:patch_ceiling_fire" ], [], [ diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/configured_feature/cloud_sea_calcite_banks.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/configured_feature/cloud_sea_calcite_banks.json deleted file mode 100644 index 53cbe8ce..00000000 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/configured_feature/cloud_sea_calcite_banks.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "antarchy:cloud_sea_calcite_banks", - "config": {} -} diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/noise_settings/elythia.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/noise_settings/elythia.json index 82987b8d..90c87438 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/noise_settings/elythia.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/noise_settings/elythia.json @@ -64,7 +64,7 @@ } }, "noise": { - "height": 384, + "height": 512, "min_y": -64, "size_horizontal": 1, "size_vertical": 2 @@ -218,7 +218,7 @@ "cell_height": 8, "density": "antarchy:elythia_surface", "lower_bound": -64, - "upper_bound": 320 + "upper_bound": 448 }, "ridges": "minecraft:overworld/ridges", "temperature": { diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/noise_settings/thoraxis.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/noise_settings/thoraxis.json index 117178af..d4f3902f 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/noise_settings/thoraxis.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/noise_settings/thoraxis.json @@ -233,6 +233,31 @@ } } }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "ceiling" + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "minecraft:gravel", + "min_threshold": -0.05, + "max_threshold": 0.05 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "antarchy:antigravel" + } + } + } + }, { "type": "minecraft:block", "result_state": { diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/cloud_sea_calcite_banks.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/cloud_sea_calcite_banks.json deleted file mode 100644 index a8dd39e3..00000000 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/cloud_sea_calcite_banks.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "feature": "antarchy:cloud_sea_calcite_banks", - "placement": [ - { - "type": "minecraft:rarity_filter", - "chance": 6 - }, - { - "type": "minecraft:count", - "count": 3 - }, - { - "type": "minecraft:in_square" - }, - { - "type": "minecraft:height_range", - "height": { - "type": "minecraft:uniform", - "max_inclusive": { - "below_top": 0 - }, - "min_inclusive": { - "above_bottom": 0 - } - } - }, - { - "type": "minecraft:biome" - } - ] -} diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/structure/ruined_prison.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/structure/ruined_prison.json new file mode 100644 index 00000000..07fdd9be --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/structure/ruined_prison.json @@ -0,0 +1,22 @@ +{ + "type": "integrated_api:generic_structure", + "start_pool": "antarchy:ruined_prison/ruined_prison", + "size": 12, + "terrain_height_radius_check": 4, + "allowed_terrain_height_range": 14, + "valid_biome_radius_check": 1, + "biomes": "#antarchy:has_structure/ruined_prison_biomes", + "step": "surface_structures", + "enhanced_terrain_adaptation": { + "type": "integrated_api:none" + }, + "project_start_to_heightmap": "WORLD_SURFACE_WG", + "start_height": { + "type": "minecraft:constant", + "value": { + "absolute": 0 + } + }, + "spawn_overrides": {}, + "liquid_settings": "ignore_waterlogging" +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/structure/sign.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/structure/sign.json new file mode 100644 index 00000000..f538f2d5 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/structure/sign.json @@ -0,0 +1,17 @@ +{ + "type": "integrated_api:generic_structure", + "start_pool": "antarchy:sign/sign", + "size": 3, + "terrain_height_radius_check": 1, + "allowed_terrain_height_range": 10, + "valid_biome_radius_check": 1, + "biomes": "#antarchy:has_structure/sign_biomes", + "step": "surface_structures", + "terrain_adaptation": "beard_thin", + "project_start_to_heightmap": "WORLD_SURFACE_WG", + "start_height": { + "absolute": 0 + }, + "spawn_overrides": {}, + "liquid_settings": "ignore_waterlogging" +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/structure/stampys_house.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/structure/stampys_house.json new file mode 100644 index 00000000..404f1589 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/structure/stampys_house.json @@ -0,0 +1,17 @@ +{ + "type": "integrated_api:generic_structure", + "start_pool": "antarchy:stampys_house/stampys_house", + "size": 3, + "terrain_height_radius_check": 2, + "allowed_terrain_height_range": 12, + "valid_biome_radius_check": 1, + "biomes": "#antarchy:has_structure/stampys_house_biomes", + "step": "surface_structures", + "terrain_adaptation": "beard_thin", + "project_start_to_heightmap": "WORLD_SURFACE_WG", + "start_height": { + "absolute": 0 + }, + "spawn_overrides": {}, + "liquid_settings": "ignore_waterlogging" +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/structure_set/elythia_rare.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/structure_set/elythia_rare.json index b37f29c0..4913e529 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/structure_set/elythia_rare.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/structure_set/elythia_rare.json @@ -8,19 +8,31 @@ "structure": "antarchy:fallen_kingdom_castle", "weight": 2 }, + { + "structure": "antarchy:ruined_prison", + "weight": 2 + }, + { + "structure": "antarchy:sign", + "weight": 2 + }, + { + "structure": "antarchy:stampys_house", + "weight": 2 + }, { "structure": "antarchy:ruined_arena", "weight": 3 }, { "structure": "antarchy:toreterror_arena", - "weight": 3 + "weight": 5 } ], "placement": { "salt": 659843583, - "spacing": 75, - "separation": 68, + "spacing": 60, + "separation": 50, "type": "integrated_api:advanced_random_spread" } -} \ No newline at end of file +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/template_pool/ruined_prison/ruined_prison.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/template_pool/ruined_prison/ruined_prison.json new file mode 100644 index 00000000..fcc71392 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/template_pool/ruined_prison/ruined_prison.json @@ -0,0 +1,22 @@ +{ + "name": "antarchy:ruined_prison/ruined_prison", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:ruined_prison/ruined_prison", + "processors": "antarchy:generic_processor", + "projection": "rigid", + "enhanced_terrain_adaptation": { + "type": "integrated_api:custom", + "carves": true, + "beards": true, + "kernel_size": 35, + "kernel_distance": 35 + }, + "element_type": "integrated_api:integrated_api_single_pool_element" + } + } + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/template_pool/sign/sign.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/template_pool/sign/sign.json new file mode 100644 index 00000000..73529f58 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/template_pool/sign/sign.json @@ -0,0 +1,15 @@ +{ + "name": "antarchy:sign/sign", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:sign/sign", + "processors": "antarchy:generic_processor", + "projection": "rigid", + "element_type": "integrated_api:integrated_api_single_pool_element" + } + } + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/template_pool/stampys_house/stampys_house.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/template_pool/stampys_house/stampys_house.json new file mode 100644 index 00000000..b14422e8 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/template_pool/stampys_house/stampys_house.json @@ -0,0 +1,15 @@ +{ + "name": "antarchy:stampys_house/stampys_house", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:stampys_house/stampys_house", + "processors": "antarchy:generic_processor", + "projection": "rigid", + "element_type": "integrated_api:integrated_api_single_pool_element" + } + } + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/template_pool/stampys_house/stampys_house_bottom1.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/template_pool/stampys_house/stampys_house_bottom1.json new file mode 100644 index 00000000..e7ab2152 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/template_pool/stampys_house/stampys_house_bottom1.json @@ -0,0 +1,15 @@ +{ + "name": "antarchy:stampys_house/stampys_house_bottom1", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:stampys_house/stampys_house_bottom1", + "processors": "antarchy:generic_processor", + "projection": "rigid", + "element_type": "integrated_api:integrated_api_single_pool_element" + } + } + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/template_pool/stampys_house/stampys_house_bottom2.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/template_pool/stampys_house/stampys_house_bottom2.json new file mode 100644 index 00000000..f8c2581a --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/template_pool/stampys_house/stampys_house_bottom2.json @@ -0,0 +1,15 @@ +{ + "name": "antarchy:stampys_house/stampys_house_bottom2", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:stampys_house/stampys_house_bottom2", + "processors": "antarchy:generic_processor", + "projection": "rigid", + "element_type": "integrated_api:integrated_api_single_pool_element" + } + } + ] +} diff --git a/common-1.21.1/src/main/resources/data/c/tags/item/tools/melee_weapon.json b/common-1.21.1/src/main/resources/data/c/tags/item/tools/melee_weapon.json index 17f3daa4..28f24b20 100644 --- a/common-1.21.1/src/main/resources/data/c/tags/item/tools/melee_weapon.json +++ b/common-1.21.1/src/main/resources/data/c/tags/item/tools/melee_weapon.json @@ -6,6 +6,7 @@ "antarchy:nightmare_sword", "antarchy:basilisk_dagger", "antarchy:scorpion_whip", - "antarchy:attitude_adjuster" + "antarchy:attitude_adjuster", + "antarchy:mantis_claw" ] } diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java index 5fd70830..28b9f1e1 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java @@ -289,6 +289,7 @@ public final class AntarchyFabricContent { AntarchyObjects.setKrakensGrasp(() -> AntarchyFabricItems.KRAKENS_GRASP.get()); AntarchyObjects.setOuranwoodDeer(AntarchyFabricEntities.OURANWOOD_DEER); AntarchyObjects.setGlimmer(AntarchyFabricEntities.GLIMMER); + AntarchyObjects.setRollyPolly(AntarchyFabricEntities.ROLLY_POLLY); AntarchyObjects.setSpiritApple(() -> AntarchyFabricItems.SPIRIT_APPLE.get()); AntarchyObjects.setGlimmeringEffect(() -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.GLIMMERING)); AntarchyObjects.setElka(AntarchyFabricEntities.ELKA); diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java index 46505c47..b7eb09c7 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java @@ -3,6 +3,7 @@ import com.craisinlord.antarchy.fabric.registry.AntarchyFabricBlocks; import com.craisinlord.antarchy.fabric.registry.AntarchyFabricItems; import com.craisinlord.antarchy.content.entity.ReverieEntity; +import com.craisinlord.antarchy.content.entity.ant.RainbowAntEntity; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.block.DuctTapeBlock; @@ -90,6 +91,9 @@ public final class AntarchyFabricEvents { BloodglassManager.handleDeath(sp); } PermanentPortalManager.handleSacrifice(entity); + if (entity instanceof RainbowAntEntity rainbowAnt) { + rainbowAnt.tryIgniteInfinityPortalOnDeath(); + } if (entity.getKillCredit() instanceof ServerPlayer killer) { CavarynHordeManager.recordMobKill(killer, entity); } @@ -141,6 +145,7 @@ public final class AntarchyFabricEvents { Set activeThisTick = new HashSet<>(); for (ServerLevel level : server.getAllLevels()) { CavarynHordeManager.tick(level); + com.craisinlord.antarchy.content.horde.CavarynCreatureSpawner.tick(level); tickInvertedPlayers(level, activeThisTick); tickDuctTapePlayers(level); tickIchorPlayers(level); diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/FabricInfinityCompat.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/FabricInfinityCompat.java index 8c038d39..c4b87547 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/FabricInfinityCompat.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/FabricInfinityCompat.java @@ -3,8 +3,11 @@ package com.craisinlord.antarchy.fabric; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.compat.infinity.InfinityCompatBridge; import net.lerariemann.infinity.util.InfinityMethods; +import net.lerariemann.infinity.util.teleport.PortalCreator; import net.lerariemann.infinity.util.teleport.WarpLogic; +import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.util.RandomSource; @@ -44,4 +47,14 @@ public final class FabricInfinityCompat implements InfinityCompatBridge { return false; } } + + @Override + public boolean createPhysicalPortal(ServerLevel level, BlockPos anyPortalBlockPos, ResourceLocation dimensionId) { + try { + return PortalCreator.modifyOnInitialCollision(dimensionId, level, anyPortalBlockPos); + } catch (Throwable throwable) { + Antarchy.LOGGER.error("[Antarchy] Failed to convert a portal frame into an Infinity portal to {}", dimensionId, throwable); + return false; + } + } } diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java index ea89be2f..90e54376 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java @@ -60,7 +60,7 @@ import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitinSpikeConfiguratio import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitinSpikeFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugNestFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugSurfaceClusterFeature; -import com.craisinlord.antarchy.content.worldgen.thoraxis.CloudSeaCalciteFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaCloudFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.LucidAntiwaterPoolFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBiomeSource; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneConfiguration; @@ -729,8 +729,8 @@ public final class AntarchyFabricMisc { () -> new ThoraxisBloodCrystalFeature(ThoraxisBloodCrystalConfiguration.CODEC)); - public static final DeferredHolder, CloudSeaCalciteFeature> CLOUD_SEA_CALCITE_BANKS = FEATURES.register("cloud_sea_calcite_banks", - () -> new CloudSeaCalciteFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, ElythiaCloudFeature> ELYTHIA_CLOUDS = FEATURES.register("elythia_clouds", + () -> new ElythiaCloudFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, BedBugNestFeature> BED_BUG_NEST = FEATURES.register("bed_bug_nest", diff --git a/fabric-1.20.1/src/main/resources/antarchy-fabric.mixins.json b/fabric-1.20.1/src/main/resources/antarchy-fabric.mixins.json index 790c3d5f..f84cc256 100644 --- a/fabric-1.20.1/src/main/resources/antarchy-fabric.mixins.json +++ b/fabric-1.20.1/src/main/resources/antarchy-fabric.mixins.json @@ -4,7 +4,8 @@ "refmap": "antarchy.mixins.refmap.json", "compatibilityLevel": "JAVA_17", "mixins": [ - "infinity.AmendmentRareOresMixin" + "infinity.AmendmentRareOresMixin", + "BrewingStandCustomIngredientMixin" ], "client": [ ], diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java index 97fae301..1f946af6 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java @@ -91,11 +91,10 @@ public final class AntarchyFabricContent { builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.CLOUD_SHARK_FIN.get()), net.minecraft.world.item.alchemy.Potions.SLOW_FALLING); builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.JUMPY_BUG_LEG.get()), Potions.LEAPING); builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.CORNEA_EAR.get()), net.minecraft.world.item.alchemy.Potions.NIGHT_VISION); - // These two use registerItemRecipe (not registerPotionRecipe) purely to mark corn/syrup - // as valid brewing-stand ingredients; the actual water-only output logic still comes - // from PotionBrewingMixin -> CustomBrewingRecipes so it stays consistent with NeoForge. - builder.registerItemRecipe(Items.POTION, Ingredient.of(AntarchyFabricItems.CORN.get()), AntarchyFabricItems.HIGH_FRUCTOSE_CORN_SYRUP.get()); - builder.registerItemRecipe(AntarchyFabricItems.HIGH_FRUCTOSE_CORN_SYRUP.get(), Ingredient.of(com.craisinlord.antarchy.content.recipe.CustomBrewingRecipes.rootsTag()), AntarchyFabricItems.ROOT_BEER.get()); + // Corn/syrup/root-beer are plain items, not Potion holders, so vanilla's Builder#expectPotion + // rejects them via registerItemRecipe/registerPotionRecipe. The actual output logic comes from + // PotionBrewingMixin -> CustomBrewingRecipes; brewing-stand slot validity for these custom items + // is handled by BrewingStandCustomIngredientMixin (Fabric doesn't expose Builder#addContainer). }); AntarchyFabricSounds.SOUND_EVENTS.register(); @@ -152,6 +151,7 @@ public final class AntarchyFabricContent { AntarchyFabricSounds.BRUTALFLY_IDLE, AntarchyFabricSounds.BRUTALFLY_DEATH, AntarchyFabricSounds.ELYTHIA_FIREFLY_AMBIENT, + AntarchyFabricSounds.ELYTHIA_OURANWOOD_FOREST_AMBIENT, AntarchyFabricSounds.MISSILE_SQUID_AMBIENT, AntarchyFabricSounds.MISSILE_SQUID_HURT, AntarchyFabricSounds.MISSILE_SQUID_DEATH, @@ -300,6 +300,7 @@ public final class AntarchyFabricContent { AntarchyObjects.setKrakenTentacle(() -> AntarchyFabricItems.KRAKEN_TENTACLE.get()); AntarchyObjects.setKrakensGrasp(() -> AntarchyFabricItems.KRAKENS_GRASP.get()); AntarchyObjects.setOuranwoodDeer(AntarchyFabricEntities.OURANWOOD_DEER); + AntarchyObjects.setRollyPolly(AntarchyFabricEntities.ROLLY_POLLY); AntarchyObjects.setGlimmer(AntarchyFabricEntities.GLIMMER); AntarchyObjects.setSpiritApple(() -> AntarchyFabricItems.SPIRIT_APPLE.get()); AntarchyObjects.setGlimmeringEffect(() -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.GLIMMERING)); diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java index f0ffa4fa..96450bd3 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java @@ -3,6 +3,7 @@ import com.craisinlord.antarchy.fabric.registry.AntarchyFabricBlocks; import com.craisinlord.antarchy.fabric.registry.AntarchyFabricItems; import com.craisinlord.antarchy.content.entity.ReverieEntity; +import com.craisinlord.antarchy.content.entity.ant.RainbowAntEntity; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.block.DuctTapeBlock; @@ -91,6 +92,9 @@ public final class AntarchyFabricEvents { BloodglassManager.handleDeath(sp); } PermanentPortalManager.handleSacrifice(entity); + if (entity instanceof RainbowAntEntity rainbowAnt) { + rainbowAnt.tryIgniteInfinityPortalOnDeath(); + } if (entity.getKillCredit() instanceof ServerPlayer killer) { CavarynHordeManager.recordMobKill(killer, entity); } @@ -142,6 +146,7 @@ public final class AntarchyFabricEvents { Set activeThisTick = new HashSet<>(); for (ServerLevel level : server.getAllLevels()) { CavarynHordeManager.tick(level); + com.craisinlord.antarchy.content.horde.CavarynCreatureSpawner.tick(level); tickInvertedPlayers(level, activeThisTick); tickDuctTapePlayers(level); tickIchorPlayers(level); diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/FabricInfinityCompat.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/FabricInfinityCompat.java index 8c038d39..c4b87547 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/FabricInfinityCompat.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/FabricInfinityCompat.java @@ -3,8 +3,11 @@ package com.craisinlord.antarchy.fabric; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.compat.infinity.InfinityCompatBridge; import net.lerariemann.infinity.util.InfinityMethods; +import net.lerariemann.infinity.util.teleport.PortalCreator; import net.lerariemann.infinity.util.teleport.WarpLogic; +import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.util.RandomSource; @@ -44,4 +47,14 @@ public final class FabricInfinityCompat implements InfinityCompatBridge { return false; } } + + @Override + public boolean createPhysicalPortal(ServerLevel level, BlockPos anyPortalBlockPos, ResourceLocation dimensionId) { + try { + return PortalCreator.modifyOnInitialCollision(dimensionId, level, anyPortalBlockPos); + } catch (Throwable throwable) { + Antarchy.LOGGER.error("[Antarchy] Failed to convert a portal frame into an Infinity portal to {}", dimensionId, throwable); + return false; + } + } } diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java index 0ac1d170..800a22c4 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java @@ -1017,7 +1017,7 @@ public final class AntarchyFabricItems { new Item.Properties() .rarity(Rarity.EPIC) .fireResistant() - .durability(ArmorItem.Type.HELMET.getDurability(41)) + .durability(ArmorItem.Type.HELMET.getDurability(62)) )); @@ -1028,7 +1028,7 @@ public final class AntarchyFabricItems { new Item.Properties() .rarity(Rarity.EPIC) .fireResistant() - .durability(ArmorItem.Type.CHESTPLATE.getDurability(41)) + .durability(ArmorItem.Type.CHESTPLATE.getDurability(62)) )); @@ -1039,7 +1039,7 @@ public final class AntarchyFabricItems { new Item.Properties() .rarity(Rarity.EPIC) .fireResistant() - .durability(ArmorItem.Type.LEGGINGS.getDurability(41)) + .durability(ArmorItem.Type.LEGGINGS.getDurability(62)) )); @@ -1050,7 +1050,7 @@ public final class AntarchyFabricItems { new Item.Properties() .rarity(Rarity.EPIC) .fireResistant() - .durability(ArmorItem.Type.BOOTS.getDurability(41)) + .durability(ArmorItem.Type.BOOTS.getDurability(62)) )); diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java index 546dbc1f..dc0fef3b 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java @@ -60,7 +60,7 @@ import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitinSpikeConfiguratio import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitinSpikeFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugNestFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugSurfaceClusterFeature; -import com.craisinlord.antarchy.content.worldgen.thoraxis.CloudSeaCalciteFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaCloudFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.LucidAntiwaterPoolFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBiomeSource; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneConfiguration; @@ -744,8 +744,8 @@ public final class AntarchyFabricMisc { () -> new ThoraxisBloodCrystalFeature(ThoraxisBloodCrystalConfiguration.CODEC)); - public static final DeferredHolder, CloudSeaCalciteFeature> CLOUD_SEA_CALCITE_BANKS = FEATURES.register("cloud_sea_calcite_banks", - () -> new CloudSeaCalciteFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, ElythiaCloudFeature> ELYTHIA_CLOUDS = FEATURES.register("elythia_clouds", + () -> new ElythiaCloudFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, BedBugNestFeature> BED_BUG_NEST = FEATURES.register("bed_bug_nest", diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSounds.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSounds.java index 87f991f2..1a57e5eb 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSounds.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSounds.java @@ -76,6 +76,9 @@ public final class AntarchyFabricSounds { public static final DeferredHolder ELYTHIA_FIREFLY_AMBIENT = registerSoundEvent("ambient.elythia.firefly"); + public static final DeferredHolder ELYTHIA_OURANWOOD_FOREST_AMBIENT = registerSoundEvent("ambient.elythia.ouranwood_forest"); + + public static final DeferredHolder MISSILE_SQUID_AMBIENT = registerSoundEvent("missile_squid_ambient"); diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSpawnPlacements.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSpawnPlacements.java index 2fee8c4a..ce1470cd 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSpawnPlacements.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSpawnPlacements.java @@ -60,7 +60,7 @@ public final class AntarchyFabricSpawnPlacements { SpawnPlacements.register(AntarchyFabricEntities.ALPHA_MANTIS.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, AlphaMantisEntity::checkAlphaMantisSpawnRules); SpawnPlacements.register(AntarchyFabricEntities.MOLEVORE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MolevoreEntity::canSpawn); SpawnPlacements.register(AntarchyFabricEntities.BED_BUG.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BedBugEntity::canSpawn); - SpawnPlacements.register(AntarchyFabricEntities.STINK_BUG.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, StinkBugEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.STINK_BUG.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, StinkBugEntity::canSpawn); SpawnPlacements.register(AntarchyFabricEntities.LUCID.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, LucidEntity::canSpawn); SpawnPlacements.register(AntarchyFabricEntities.SCORPION.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, ScorpionEntity::canSpawn); SpawnPlacements.register(AntarchyFabricEntities.BASILISK.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BasiliskEntity::canSpawn); @@ -70,7 +70,7 @@ public final class AntarchyFabricSpawnPlacements { SpawnPlacements.register(AntarchyFabricEntities.LURKING_TERROR.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, com.craisinlord.antarchy.content.entity.LurkingTerrorEntity::canSpawn); SpawnPlacements.register(AntarchyFabricEntities.JERRY.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, com.craisinlord.antarchy.content.entity.JerryEntity::canSpawn); SpawnPlacements.register(AntarchyFabricEntities.TERMITE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules); - SpawnPlacements.register(AntarchyFabricEntities.ROLLY_POLLY.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, com.craisinlord.antarchy.content.entity.RollyPollyEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.ROLLY_POLLY.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, com.craisinlord.antarchy.content.entity.RollyPollyEntity::canSpawn); } } diff --git a/fabric-1.21.1/src/main/resources/antarchy-fabric.mixins.json b/fabric-1.21.1/src/main/resources/antarchy-fabric.mixins.json index 1d545645..f2e2e95d 100644 --- a/fabric-1.21.1/src/main/resources/antarchy-fabric.mixins.json +++ b/fabric-1.21.1/src/main/resources/antarchy-fabric.mixins.json @@ -10,6 +10,7 @@ "WaterlikeFluidLivingEntityMixin", "WaterlikeFluidItemEntityMixin", "AntimetalInversionMixin", + "BrewingStandCustomIngredientMixin", "ElytraStartFlyingMixin", "ElytraFallFlyingMixin", "BloodglassEquipMixin", diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyForge.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyForge.java index e2a4db61..132f3347 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyForge.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyForge.java @@ -358,6 +358,7 @@ public class AntarchyForge { AntarchyObjects.setKrakensGrasp(() -> AntarchyForgeItems.KRAKENS_GRASP.get()); AntarchyObjects.setOuranwoodDeer(AntarchyForgeEntites.OURANWOOD_DEER); AntarchyObjects.setGlimmer(AntarchyForgeEntites.GLIMMER); + AntarchyObjects.setRollyPolly(AntarchyForgeEntites.ROLLY_POLLY); AntarchyObjects.setSpiritApple(() -> AntarchyForgeItems.SPIRIT_APPLE.get()); AntarchyObjects.setGlimmeringEffect(() -> AntarchyForgeMisc.mobEffectHolder(AntarchyForgeMisc.GLIMMERING)); AntarchyObjects.setElka(AntarchyForgeEntites.ELKA); diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/ForgeInfinityCompat.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/ForgeInfinityCompat.java index 75336579..aedfdf99 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/ForgeInfinityCompat.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/ForgeInfinityCompat.java @@ -4,8 +4,11 @@ import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.compat.infinity.InfinityCompatBridge; import net.lerariemann.infinity.InfinityMod; import net.lerariemann.infinity.util.InfinityMethods; +import net.lerariemann.infinity.util.teleport.PortalCreator; import net.lerariemann.infinity.util.teleport.WarpLogic; +import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.util.RandomSource; @@ -75,4 +78,14 @@ public final class ForgeInfinityCompat implements InfinityCompatBridge { return false; } } + + @Override + public boolean createPhysicalPortal(ServerLevel level, BlockPos anyPortalBlockPos, ResourceLocation dimensionId) { + try { + return PortalCreator.modifyOnInitialCollision(dimensionId, level, anyPortalBlockPos); + } catch (Throwable throwable) { + Antarchy.LOGGER.error("[Antarchy] Failed to convert a portal frame into an Infinity portal to {}", dimensionId, throwable); + return false; + } + } } diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeEvents.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeEvents.java index ab37c038..787ff24d 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeEvents.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeEvents.java @@ -14,6 +14,7 @@ import com.craisinlord.antarchy.content.dispenser.AntimetalMinecartDispenseBehav import com.craisinlord.antarchy.content.fluid.AntarchyFluidChecks; import com.craisinlord.antarchy.content.bloodglass.BloodglassAccess; import com.craisinlord.antarchy.content.entity.*; +import com.craisinlord.antarchy.content.entity.ant.RainbowAntEntity; import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; @@ -203,6 +204,7 @@ public final class AntarchyForgeEvents { if (event.phase != TickEvent.Phase.END) return; for (ServerLevel level : event.getServer().getAllLevels()) { CavarynHordeManager.tick(level); + com.craisinlord.antarchy.content.horde.CavarynCreatureSpawner.tick(level); } } @@ -213,6 +215,9 @@ public final class AntarchyForgeEvents { public static void onPermanentPortalSacrifice(LivingDeathEvent event) { PermanentPortalManager.handleSacrifice(event.getEntity()); + if (event.getEntity() instanceof RainbowAntEntity rainbowAnt) { + rainbowAnt.tryIgniteInfinityPortalOnDeath(); + } } public static void onLivingBreathe(LivingBreatheEvent event) { diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeMisc.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeMisc.java index ca557e16..9140b545 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeMisc.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeMisc.java @@ -306,8 +306,8 @@ public final class AntarchyForgeMisc { () -> new PotentNyxiteFeature(NoneFeatureConfiguration.CODEC)); public static final RegistryObject THORAXIS_BLOOD_CRYSTAL_SPIRES = FEATURES.register("thoraxis_blood_crystal_spires", () -> new ThoraxisBloodCrystalFeature(ThoraxisBloodCrystalConfiguration.CODEC)); - public static final RegistryObject CLOUD_SEA_CALCITE_BANKS = FEATURES.register("cloud_sea_calcite_banks", - () -> new CloudSeaCalciteFeature(NoneFeatureConfiguration.CODEC)); + public static final RegistryObject ELYTHIA_CLOUDS = FEATURES.register("elythia_clouds", + () -> new ElythiaCloudFeature(NoneFeatureConfiguration.CODEC)); public static final RegistryObject BED_BUG_NEST = FEATURES.register("bed_bug_nest", () -> new BedBugNestFeature(NoneFeatureConfiguration.CODEC)); public static final RegistryObject BED_BUG_SURFACE_CLUSTER = FEATURES.register("bed_bug_surface_cluster", diff --git a/gradle.properties b/gradle.properties index eeeeff6b..ef6d69c0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ org.gradle.configureondemand=true minecraft_version_1_21_1=1.21.1 modid=antarchy mod_id=antarchy -mod_version=1.0.4 +mod_version=1.1.0 maven_group=com.craisinlord mixin_version=0.15.4+mixin.0.8.7 diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java index 2101eba4..067be629 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java @@ -145,6 +145,7 @@ public final class AntarchyConfigModuleNeoforge { AntarchySettings.setTriffidHealth(AntarchyMobsConfig.triffidHealth()); AntarchySettings.setTriffidAttackDamage(AntarchyMobsConfig.triffidAttackDamage()); AntarchySettings.setTriffidGrabDamage(AntarchyMobsConfig.triffidGrabDamage()); + AntarchySettings.setTriffidSweepHitCooldownTicks(AntarchyMobsConfig.triffidSweepHitCooldownTicks()); AntarchySettings.setCaterpillarPupationTimeSeconds(AntarchyMobsConfig.caterpillarPupationTimeSeconds()); diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMobsConfig.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMobsConfig.java index 9f92e0da..039a0a21 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMobsConfig.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMobsConfig.java @@ -133,6 +133,7 @@ public final class AntarchyMobsConfig { private static final ModConfigSpec.DoubleValue TRIFFID_HEALTH; private static final ModConfigSpec.DoubleValue TRIFFID_ATTACK_DAMAGE; private static final ModConfigSpec.DoubleValue TRIFFID_GRAB_DAMAGE; + private static final ModConfigSpec.IntValue TRIFFID_SWEEP_HIT_COOLDOWN_TICKS; // Caterpillar @@ -491,6 +492,9 @@ public final class AntarchyMobsConfig { TRIFFID_HEALTH = b.comment("Base max health.") .defineInRange("health", 80.0D, 1.0D, 32768.0D); TRIFFID_ATTACK_DAMAGE = b.comment("Damage dealt by the sweep attack.") .defineInRange("attackDamage", 10.0D, 0.0D, 1024.0D); TRIFFID_GRAB_DAMAGE = b.comment("Damage dealt by the grab attack.") .defineInRange("grabDamage", 15.0D, 0.0D, 1024.0D); + TRIFFID_SWEEP_HIT_COOLDOWN_TICKS = b + .comment("Ticks a given entity is immune to repeat sweep-attack damage attempts after being hit once, so shields/armor absorbing a hit can't be shredded by every tick of the sweep's active window.") + .defineInRange("sweepHitCooldownTicks", 10, 0, 200); b.pop(); @@ -758,6 +762,7 @@ public final class AntarchyMobsConfig { static double triffidHealth() { return TRIFFID_HEALTH.get(); } static double triffidAttackDamage() { return TRIFFID_ATTACK_DAMAGE.get(); } static double triffidGrabDamage() { return TRIFFID_GRAB_DAMAGE.get(); } + static int triffidSweepHitCooldownTicks() { return TRIFFID_SWEEP_HIT_COOLDOWN_TICKS.get(); } static double caterpillarPupationTimeSeconds() { return CATERPILLAR_PUPATION_TIME_SECONDS.get(); } static double antDanceRadius() { return ANT_DANCE_RADIUS.get(); } diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java index 980bf73e..d00d6de3 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java @@ -54,6 +54,7 @@ public class AntarchyNeoforge { AntarchyNeoforgeSounds.BRUTALFLY_IDLE, AntarchyNeoforgeSounds.BRUTALFLY_DEATH, AntarchyNeoforgeSounds.ELYTHIA_FIREFLY_AMBIENT, + AntarchyNeoforgeSounds.ELYTHIA_OURANWOOD_FOREST_AMBIENT, AntarchyNeoforgeSounds.MISSILE_SQUID_AMBIENT, AntarchyNeoforgeSounds.MISSILE_SQUID_HURT, AntarchyNeoforgeSounds.MISSILE_SQUID_DEATH, @@ -369,6 +370,7 @@ public class AntarchyNeoforge { AntarchyObjects.setKrakenTentacle(() -> AntarchyNeoforgeItems.KRAKEN_TENTACLE.get()); AntarchyObjects.setKrakensGrasp(() -> AntarchyNeoforgeItems.KRAKENS_GRASP.get()); AntarchyObjects.setOuranwoodDeer(AntarchyNeoforgeEntites.OURANWOOD_DEER); + AntarchyObjects.setRollyPolly(AntarchyNeoforgeEntites.ROLLY_POLLY); AntarchyObjects.setGlimmer(AntarchyNeoforgeEntites.GLIMMER); AntarchyObjects.setSpiritApple(() -> AntarchyNeoforgeItems.SPIRIT_APPLE.get()); AntarchyObjects.setGlimmeringEffect(() -> AntarchyNeoforgeMisc.GLIMMERING); diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/NeoForgeInfinityCompat.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/NeoForgeInfinityCompat.java index 5da2d1bb..166f9b99 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/NeoForgeInfinityCompat.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/NeoForgeInfinityCompat.java @@ -4,8 +4,11 @@ import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.compat.infinity.InfinityCompatBridge; import net.lerariemann.infinity.InfinityMod; import net.lerariemann.infinity.util.InfinityMethods; +import net.lerariemann.infinity.util.teleport.PortalCreator; import net.lerariemann.infinity.util.teleport.WarpLogic; +import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.util.RandomSource; @@ -75,4 +78,14 @@ public final class NeoForgeInfinityCompat implements InfinityCompatBridge { return false; } } + + @Override + public boolean createPhysicalPortal(ServerLevel level, BlockPos anyPortalBlockPos, ResourceLocation dimensionId) { + try { + return PortalCreator.modifyOnInitialCollision(dimensionId, level, anyPortalBlockPos); + } catch (Throwable throwable) { + Antarchy.LOGGER.error("[Antarchy] Failed to convert a portal frame into an Infinity portal to {}", dimensionId, throwable); + return false; + } + } } diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java index 8b32c559..9d666cd2 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java @@ -14,6 +14,7 @@ import com.craisinlord.antarchy.content.dispenser.AntimetalMinecartDispenseBehav import com.craisinlord.antarchy.content.fluid.AntarchyFluidChecks; import com.craisinlord.antarchy.content.bloodglass.BloodglassAccess; import com.craisinlord.antarchy.content.entity.*; +import com.craisinlord.antarchy.content.entity.ant.RainbowAntEntity; import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; @@ -208,6 +209,7 @@ public final class AntarchyNeoForgeEvents { static void tickCavarynHordes(ServerTickEvent.Post event) { for (ServerLevel level : event.getServer().getAllLevels()) { CavarynHordeManager.tick(level); + com.craisinlord.antarchy.content.horde.CavarynCreatureSpawner.tick(level); } } @@ -218,6 +220,9 @@ public final class AntarchyNeoForgeEvents { public static void onPermanentPortalSacrifice(LivingDeathEvent event) { PermanentPortalManager.handleSacrifice(event.getEntity()); + if (event.getEntity() instanceof RainbowAntEntity rainbowAnt) { + rainbowAnt.tryIgniteInfinityPortalOnDeath(); + } } public static void onLivingBreathe(LivingBreatheEvent event) { diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java index cae42298..6b7fc1ee 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java @@ -663,16 +663,16 @@ public final class AntarchyNeoforgeItems { )); public static final DeferredItem ULTIMATE_HELMET = ITEMS.register("ultimate_helmet", () -> new UltimateArmorItem(ULTIMATE_ARMOR_MATERIAL, ArmorItem.Type.HELMET, - new Item.Properties().rarity(Rarity.EPIC).fireResistant().durability(ArmorItem.Type.HELMET.getDurability(41)))); + new Item.Properties().rarity(Rarity.EPIC).fireResistant().durability(ArmorItem.Type.HELMET.getDurability(62)))); public static final DeferredItem ULTIMATE_CHESTPLATE = ITEMS.register("ultimate_chestplate", () -> new UltimateArmorItem(ULTIMATE_ARMOR_MATERIAL, ArmorItem.Type.CHESTPLATE, - new Item.Properties().rarity(Rarity.EPIC).fireResistant().durability(ArmorItem.Type.CHESTPLATE.getDurability(41)))); + new Item.Properties().rarity(Rarity.EPIC).fireResistant().durability(ArmorItem.Type.CHESTPLATE.getDurability(62)))); public static final DeferredItem ULTIMATE_LEGGINGS = ITEMS.register("ultimate_leggings", () -> new UltimateArmorItem(ULTIMATE_ARMOR_MATERIAL, ArmorItem.Type.LEGGINGS, - new Item.Properties().rarity(Rarity.EPIC).fireResistant().durability(ArmorItem.Type.LEGGINGS.getDurability(41)))); + new Item.Properties().rarity(Rarity.EPIC).fireResistant().durability(ArmorItem.Type.LEGGINGS.getDurability(62)))); public static final DeferredItem ULTIMATE_BOOTS = ITEMS.register("ultimate_boots", () -> new UltimateArmorItem(ULTIMATE_ARMOR_MATERIAL, ArmorItem.Type.BOOTS, - new Item.Properties().rarity(Rarity.EPIC).fireResistant().durability(ArmorItem.Type.BOOTS.getDurability(41)))); + new Item.Properties().rarity(Rarity.EPIC).fireResistant().durability(ArmorItem.Type.BOOTS.getDurability(62)))); public static final DeferredItem ULTIMATE_SWORD = ITEMS.register("ultimate_sword", () -> new UltimateSwordItem(ULTIMATE_TIER, new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant(), diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java index f8df592e..19972347 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java @@ -336,8 +336,8 @@ public final class AntarchyNeoforgeMisc { () -> new PotentNyxiteFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, ThoraxisBloodCrystalFeature> THORAXIS_BLOOD_CRYSTAL_SPIRES = FEATURES.register("thoraxis_blood_crystal_spires", () -> new ThoraxisBloodCrystalFeature(ThoraxisBloodCrystalConfiguration.CODEC)); - public static final DeferredHolder, CloudSeaCalciteFeature> CLOUD_SEA_CALCITE_BANKS = FEATURES.register("cloud_sea_calcite_banks", - () -> new CloudSeaCalciteFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, ElythiaCloudFeature> ELYTHIA_CLOUDS = FEATURES.register("elythia_clouds", + () -> new ElythiaCloudFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, BedBugNestFeature> BED_BUG_NEST = FEATURES.register("bed_bug_nest", () -> new BedBugNestFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, BedBugSurfaceClusterFeature> BED_BUG_SURFACE_CLUSTER = FEATURES.register("bed_bug_surface_cluster", diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSounds.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSounds.java index ffe73340..c20200a6 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSounds.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSounds.java @@ -33,6 +33,7 @@ public final class AntarchyNeoforgeSounds { public static final DeferredHolder BRUTALFLY_IDLE = registerSoundEvent("brutalfly_idle"); public static final DeferredHolder BRUTALFLY_DEATH = registerSoundEvent("brutalfly_death"); public static final DeferredHolder ELYTHIA_FIREFLY_AMBIENT = registerSoundEvent("ambient.elythia.firefly"); + public static final DeferredHolder ELYTHIA_OURANWOOD_FOREST_AMBIENT = registerSoundEvent("ambient.elythia.ouranwood_forest"); public static final DeferredHolder MISSILE_SQUID_AMBIENT = registerSoundEvent("missile_squid_ambient"); public static final DeferredHolder MISSILE_SQUID_HURT = registerSoundEvent("missile_squid_hurt"); public static final DeferredHolder MISSILE_SQUID_DEATH = registerSoundEvent("missile_squid_death"); diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java index 6f569e52..59085573 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java @@ -45,7 +45,7 @@ public class AntarchyNeoforgeSpawnPlacements { 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); + event.register(AntarchyNeoforgeEntites.STINK_BUG.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, StinkBugEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.LUCID.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, LucidEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.SCORPION.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, ScorpionEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.BASILISK.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BasiliskEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); @@ -54,7 +54,7 @@ public class AntarchyNeoforgeSpawnPlacements { event.register(AntarchyNeoforgeEntites.LURKING_TERROR.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, LurkingTerrorEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.JERRY.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, JerryEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.TERMITE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules, RegisterSpawnPlacementsEvent.Operation.OR); - event.register(AntarchyNeoforgeEntites.ROLLY_POLLY.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, com.craisinlord.antarchy.content.entity.RollyPollyEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); + event.register(AntarchyNeoforgeEntites.ROLLY_POLLY.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, com.craisinlord.antarchy.content.entity.RollyPollyEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.CHEEP.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, AbstractFish::checkSurfaceWaterAnimalSpawnRules, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.DORRIE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.OURANWOOD_DEER.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules, RegisterSpawnPlacementsEvent.Operation.OR);