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 a354e105..61cf6fbf 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 @@ -10,9 +10,13 @@ public final class AntarchySettings { private static int easterBunnyNaturalSpawnChancePercent = 1; private static boolean rainbowAntsLeadToInfinityDimensions = true; private static boolean brownAntRequiresReagent = false; + private static boolean brownAntRightClickDimension = true; private static boolean redAntRequiresReagent = false; + private static boolean redAntRightClickDimension = true; private static boolean rainbowAntRequiresReagent = true; + private static boolean rainbowAntRightClickDimension = true; private static boolean termiteRequiresReagent = false; + private static boolean termiteRightClickDimension = true; private static boolean antsStealFromChests = true; private static boolean duplicatorTreeEnabled = true; private static boolean glowVinesUnderLeaves = true; @@ -461,6 +465,22 @@ public final class AntarchySettings { return rainbowAntsLeadToInfinityDimensions; } + public static boolean brownAntRightClickDimension() { + return brownAntRightClickDimension; + } + + public static boolean redAntRightClickDimension() { + return redAntRightClickDimension; + } + + public static boolean rainbowAntRightClickDimension() { + return rainbowAntRightClickDimension; + } + + public static boolean termiteRightClickDimension() { + return termiteRightClickDimension; + } + public static boolean brownAntRequiresReagent() { return brownAntRequiresReagent; } @@ -984,6 +1004,22 @@ public final class AntarchySettings { rainbowAntsLeadToInfinityDimensions = value; } + public static void setBrownAntRightClickDimension(boolean value) { + brownAntRightClickDimension = value; + } + + public static void setRedAntRightClickDimension(boolean value) { + redAntRightClickDimension = value; + } + + public static void setRainbowAntRightClickDimension(boolean value) { + rainbowAntRightClickDimension = value; + } + + public static void setTermiteRightClickDimension(boolean value) { + termiteRightClickDimension = value; + } + public static void setPermanentPortalsEnabled(boolean value) { permanentPortalsEnabled = value; } 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 52b70cda..dfdd8fab 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 @@ -27,6 +27,8 @@ import com.craisinlord.antarchy.content.entity.MolewormEntity; import com.craisinlord.antarchy.content.entity.MantisEntity; import com.craisinlord.antarchy.content.entity.ReverieEntity; import com.craisinlord.antarchy.content.entity.ScorpionEntity; +import com.craisinlord.antarchy.content.entity.nightmare.NightmareBiteEntity; +import com.craisinlord.antarchy.content.entity.nightmare.NightmarePortalEntity; import com.craisinlord.antarchy.content.block.entity.AntNestBlockEntity; import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; import com.craisinlord.antarchy.content.block.entity.SeashellBlockEntity; @@ -66,6 +68,10 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier> OCTOPUS_BOMB = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") + public static Supplier> NIGHTMARE_PORTAL = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> NIGHTMARE_BITE = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") public static Supplier> MOLEWORM = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") public static Supplier> MANTIS = (Supplier>) UNBOUND; @@ -201,9 +207,9 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier NYXITE_SPIKE = (Supplier) UNBOUND; @SuppressWarnings("unchecked") - public static Supplier CHITEN_BLOCK = (Supplier) UNBOUND; + public static Supplier CHITIN_BLOCK = (Supplier) UNBOUND; @SuppressWarnings("unchecked") - public static Supplier CHITEN_SPIKE = (Supplier) UNBOUND; + public static Supplier CHITIN_SPIKE = (Supplier) UNBOUND; @SuppressWarnings("unchecked") public static Supplier POTENT_NYXITE = (Supplier) UNBOUND; @SuppressWarnings("unchecked") @@ -251,6 +257,8 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier> STINKY_EFFECT = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") + public static Supplier> GLIMMERING_EFFECT = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") public static Supplier LUMEN = (Supplier) UNBOUND; @SuppressWarnings("unchecked") public static Supplier FLOWING_LUMEN = (Supplier) UNBOUND; @@ -301,6 +309,8 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier CRITTER_CAGE_BLOCK = (Supplier) UNBOUND; @SuppressWarnings("unchecked") + public static Supplier LUCID_ANCHOR = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") public static Supplier> ANT_NEST_BLOCK_ENTITY = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") public static Supplier> DREAM_CAMPFIRE_BLOCK_ENTITY = (Supplier>) UNBOUND; @@ -314,6 +324,9 @@ public final class AntarchyObjects { public static Supplier> CRITTER_CAGE_BLOCK_ENTITY = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") + public static Supplier> LUCID_ANCHOR_BLOCK_ENTITY = + (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") public static Supplier STINKY_GAS = (Supplier) UNBOUND; @SuppressWarnings("unchecked") public static Supplier STINKY_FLY = (Supplier) UNBOUND; @@ -393,8 +406,8 @@ public final class AntarchyObjects { Supplier triffidGooBlock, Supplier paleNyxite, Supplier nyxiteSpike, - Supplier chitenBlock, - Supplier chitenSpike, + Supplier chitinBlock, + Supplier chitinSpike, Supplier potentNyxite, Supplier antimetal, Supplier polishedAntimetal, @@ -494,8 +507,8 @@ public final class AntarchyObjects { TRIFFID_GOO_BLOCK = triffidGooBlock; PALE_NYXITE = paleNyxite; NYXITE_SPIKE = nyxiteSpike; - CHITEN_BLOCK = chitenBlock; - CHITEN_SPIKE = chitenSpike; + CHITIN_BLOCK = chitinBlock; + CHITIN_SPIKE = chitinSpike; POTENT_NYXITE = potentNyxite; ANTIMETAL = antimetal; POLISHED_ANTIMETAL = polishedAntimetal; @@ -556,6 +569,14 @@ public final class AntarchyObjects { TENTACLE = supplier; } + public static void setNightmarePortal(Supplier> supplier) { + NIGHTMARE_PORTAL = supplier; + } + + public static void setNightmareBite(Supplier> supplier) { + NIGHTMARE_BITE = supplier; + } + public static void setLotus(Supplier supplier) { LOTUS = supplier; } @@ -608,6 +629,10 @@ public final class AntarchyObjects { SPIRIT_APPLE = supplier; } + public static void setGlimmeringEffect(Supplier> supplier) { + GLIMMERING_EFFECT = supplier; + } + public static void setElka(Supplier> supplier) { ELKA = supplier; } @@ -632,6 +657,10 @@ public final class AntarchyObjects { CRITTER_CAGE_BLOCK = supplier; } + public static void setLucidAnchor(Supplier supplier) { + LUCID_ANCHOR = supplier; + } + public static void setStarCoralBlock(Supplier supplier) { STAR_CORAL_BLOCK = supplier; } @@ -688,6 +717,10 @@ public final class AntarchyObjects { CRITTER_CAGE_BLOCK_ENTITY = supplier; } + public static void setLucidAnchorBlockEntity(Supplier> supplier) { + LUCID_ANCHOR_BLOCK_ENTITY = supplier; + } + public static void setCritterCageProjectile(Supplier> supplier) { CRITTER_CAGE_PROJECTILE = supplier; } 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 7030f07c..bc03c33b 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 @@ -42,6 +42,9 @@ public final class AntarchyTags { 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")); public static final TagKey BLUESTONE_CONNECTABLE = TagKey.create(Registries.BLOCK, id("bluestone_connectable")); + public static final TagKey ANTIMETAL_INVERSION_BLOCKS = TagKey.create(Registries.BLOCK, id("antimetal_inversion_blocks")); + public static final TagKey TIGER_EYE_CAMOUFLAGE_BLACKLIST = TagKey.create(Registries.BLOCK, id("tiger_eye_camouflage_blacklist")); + public static final TagKey LUCID_ANCHOR_BASE_BLOCKS = TagKey.create(Registries.BLOCK, id("lucid_anchor_base_blocks")); private Blocks() { } @@ -71,6 +74,8 @@ public final class AntarchyTags { public static final TagKey> STINKY_REPELLED_HOSTILES = TagKey.create(Registries.ENTITY_TYPE, id("stinky_repelled_hostiles")); public static final TagKey> SCORPION_WHIP_IMMUNE = TagKey.create(Registries.ENTITY_TYPE, id("scorpion_whip_immune")); public static final TagKey> SCORPION_WHIP_BLACKLIST = TagKey.create(Registries.ENTITY_TYPE, id("scorpion_whip_blacklist")); + public static final TagKey> TIGER_EYE_DETECTION_IMMUNE = TagKey.create(Registries.ENTITY_TYPE, id("tiger_eye_detection_immune")); + public static final TagKey> LUCID_ANCHOR_IMMUNE = TagKey.create(Registries.ENTITY_TYPE, id("lucid_anchor_immune")); private Entities() { } @@ -110,6 +115,7 @@ public final class AntarchyTags { public static final TagKey GLIMMER_AUGMENT_ANT = TagKey.create(Registries.ITEM, id("glimmer_augment_ant")); public static final TagKey GLIMMER_AUGMENT_ELKA = TagKey.create(Registries.ITEM, id("glimmer_augment_elka")); public static final TagKey HFCS_CANNOT_AMERICANIZE = TagKey.create(Registries.ITEM, id("hfcs_cannot_americanize")); + public static final TagKey TIGER_EYE_ARMOR = TagKey.create(Registries.ITEM, id("tigers_eye_armor")); private Items() { } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/ChitenSpikeBlock.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/ChitinSpikeBlock.java similarity index 88% rename from common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/ChitenSpikeBlock.java rename to common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/ChitinSpikeBlock.java index faf02e93..192b0e96 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/ChitenSpikeBlock.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/ChitinSpikeBlock.java @@ -16,11 +16,11 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.DripstoneThickness; import net.minecraft.world.level.material.Fluids; -public class ChitenSpikeBlock extends PointedDripstoneBlock { +public class ChitinSpikeBlock extends PointedDripstoneBlock { @SuppressWarnings("rawtypes") - public static final MapCodec CODEC = (MapCodec) Block.simpleCodec(ChitenSpikeBlock::new); + public static final MapCodec CODEC = (MapCodec) Block.simpleCodec(ChitinSpikeBlock::new); - public ChitenSpikeBlock(BlockBehaviour.Properties properties) { + public ChitinSpikeBlock(BlockBehaviour.Properties properties) { super(properties); } @@ -99,14 +99,14 @@ public class ChitenSpikeBlock extends PointedDripstoneBlock { if (state.getValue(TIP_DIRECTION) == Direction.DOWN) { BlockPos.MutableBlockPos root = pos.mutable(); - while (isChitenSpikeWithDirection(level.getBlockState(root.above()), Direction.DOWN)) { + while (isChitinSpikeWithDirection(level.getBlockState(root.above()), Direction.DOWN)) { root.move(Direction.UP); } BlockPos.MutableBlockPos cursor = root.mutable(); - while (isChitenSpikeWithDirection(level.getBlockState(cursor), Direction.DOWN)) { + while (isChitinSpikeWithDirection(level.getBlockState(cursor), Direction.DOWN)) { BlockState fallingState = level.getBlockState(cursor); - if (isChitenSpikeWithDirection(fallingState, Direction.DOWN)) { + if (isChitinSpikeWithDirection(fallingState, Direction.DOWN)) { net.minecraft.world.entity.item.FallingBlockEntity.fall(level, cursor, fallingState); } cursor.move(Direction.DOWN); @@ -115,7 +115,7 @@ public class ChitenSpikeBlock extends PointedDripstoneBlock { } BlockPos.MutableBlockPos cursor = pos.mutable(); - while (isChitenSpikeWithDirection(level.getBlockState(cursor), Direction.UP)) { + while (isChitinSpikeWithDirection(level.getBlockState(cursor), Direction.UP)) { BlockState spikeState = level.getBlockState(cursor); dropResources(spikeState, level, cursor); level.removeBlock(cursor, false); @@ -135,20 +135,20 @@ public class ChitenSpikeBlock extends PointedDripstoneBlock { private static DripstoneThickness calculateDripstoneThickness(LevelReader level, BlockPos pos, Direction direction, boolean mergeTips) { Direction opposite = direction.getOpposite(); BlockState forwardState = level.getBlockState(pos.relative(direction)); - if (isChitenSpikeWithDirection(forwardState, opposite)) { + if (isChitinSpikeWithDirection(forwardState, opposite)) { return !mergeTips && forwardState.getValue(THICKNESS) != DripstoneThickness.TIP_MERGE ? DripstoneThickness.TIP : DripstoneThickness.TIP_MERGE; } - if (!isChitenSpikeWithDirection(forwardState, direction)) { + if (!isChitinSpikeWithDirection(forwardState, direction)) { return DripstoneThickness.TIP; } DripstoneThickness forwardThickness = forwardState.getValue(THICKNESS); if (forwardThickness != DripstoneThickness.TIP && forwardThickness != DripstoneThickness.TIP_MERGE) { BlockState backState = level.getBlockState(pos.relative(opposite)); - return !isChitenSpikeWithDirection(backState, direction) ? DripstoneThickness.BASE : DripstoneThickness.MIDDLE; + return !isChitinSpikeWithDirection(backState, direction) ? DripstoneThickness.BASE : DripstoneThickness.MIDDLE; } return DripstoneThickness.FRUSTUM; @@ -157,10 +157,10 @@ public class ChitenSpikeBlock extends PointedDripstoneBlock { private static boolean isValidPointedDripstonePlacement(LevelReader level, BlockPos pos, Direction direction) { BlockPos supportPos = pos.relative(direction.getOpposite()); BlockState supportState = level.getBlockState(supportPos); - return supportState.isFaceSturdy(level, supportPos, direction) || isChitenSpikeWithDirection(supportState, direction); + return supportState.isFaceSturdy(level, supportPos, direction) || isChitinSpikeWithDirection(supportState, direction); } - private static boolean isChitenSpikeWithDirection(BlockState state, Direction direction) { - return state.is(AntarchyObjects.CHITEN_SPIKE.get()) && state.getValue(TIP_DIRECTION) == direction; + private static boolean isChitinSpikeWithDirection(BlockState state, Direction direction) { + return state.is(AntarchyObjects.CHITIN_SPIKE.get()) && state.getValue(TIP_DIRECTION) == direction; } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/DreamFireBlock.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/DreamFireBlock.java index 3d10b068..eebb9677 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/DreamFireBlock.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/DreamFireBlock.java @@ -5,6 +5,8 @@ import com.craisinlord.antarchy.mixins.AccessorFireBlock; import com.mojang.serialization.MapCodec; import it.unimi.dsi.fastutil.objects.Object2IntMap; import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.FireBlock; import net.minecraft.world.level.block.state.BlockBehaviour; @@ -25,6 +27,21 @@ public class DreamFireBlock extends FireBlock { return CODEC; } + @Override + protected void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (level.getBlockState(pos.below()).is(AntarchyTags.Blocks.DREAM_FIRE_BASE_BLOCKS)) { + if (!this.canSurvive(state, level, pos)) { + level.removeBlock(pos, false); + return; + } + + level.scheduleTick(pos, this, 30 + random.nextInt(10)); + return; + } + + super.tick(state, level, pos, random); + } + @Override protected boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { return level.getBlockState(pos.below()).is(AntarchyTags.Blocks.DREAM_FIRE_BASE_BLOCKS) diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/LucidAnchorBlock.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/LucidAnchorBlock.java new file mode 100644 index 00000000..6f0a63bb --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/LucidAnchorBlock.java @@ -0,0 +1,77 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.block.entity.LucidAnchorBlockEntity; +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BaseEntityBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; + +public class LucidAnchorBlock extends BaseEntityBlock { + public static final MapCodec CODEC = Block.simpleCodec(LucidAnchorBlock::new); + public static final BooleanProperty ACTIVE = BlockStateProperties.LIT; + + public LucidAnchorBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(ACTIVE, false)); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(ACTIVE); + } + + @Override + protected RenderShape getRenderShape(BlockState state) { + return RenderShape.MODEL; + } + + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new LucidAnchorBlockEntity(pos, state); + } + + @Override + public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType blockEntityType) { + return level.isClientSide + ? null + : createTickerHelper(blockEntityType, AntarchyObjects.LUCID_ANCHOR_BLOCK_ENTITY.get(), (tickLevel, tickPos, tickState, blockEntity) -> { + if (tickLevel instanceof net.minecraft.server.level.ServerLevel serverLevel) { + LucidAnchorBlockEntity.serverTick(serverLevel, tickPos, tickState, blockEntity); + } + }); + } + + @Override + protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { + super.onPlace(state, level, pos, oldState, movedByPiston); + markStructureDirty(level, pos); + } + + @Override + protected void neighborChanged(BlockState state, Level level, BlockPos pos, Block block, BlockPos neighborPos, boolean movedByPiston) { + super.neighborChanged(state, level, pos, block, neighborPos, movedByPiston); + markStructureDirty(level, pos); + } + + private static void markStructureDirty(Level level, BlockPos pos) { + if (level.getBlockEntity(pos) instanceof LucidAnchorBlockEntity lucidAnchor) { + lucidAnchor.markStructureDirty(); + } + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/LucidAnchorBlockEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/LucidAnchorBlockEntity.java new file mode 100644 index 00000000..0b2bc23b --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/LucidAnchorBlockEntity.java @@ -0,0 +1,344 @@ +package com.craisinlord.antarchy.content.block.entity; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.content.block.LucidAnchorBlock; +import java.util.ArrayList; +import java.util.List; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Holder; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.component.DataComponents; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.IntArrayTag; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.EntitySelector; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BeaconBeamBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.AABB; + +public class LucidAnchorBlockEntity extends BlockEntity { + private static final int EFFECT_INTERVAL_TICKS = 20; + private static final int VALIDATION_INTERVAL_TICKS = 60; + private static final int EFFECT_DURATION_TICKS = 60; + private static final int EFFECT_REFRESH_THRESHOLD_TICKS = 30; + private static final int DEFAULT_BEAM_COLOR = 0xFFFF1A1A; + + private int pyramidLevel; + private boolean active; + private boolean beamPathClear; + private int beamLength; + private boolean structureDirty = true; + private long lastValidationTick = Long.MIN_VALUE; + private List beamSections = List.of(); + + public LucidAnchorBlockEntity(BlockPos pos, BlockState blockState) { + super(AntarchyObjects.LUCID_ANCHOR_BLOCK_ENTITY.get(), pos, blockState); + } + + public static void serverTick(ServerLevel level, BlockPos pos, BlockState state, LucidAnchorBlockEntity blockEntity) { + blockEntity.serverTick(level, pos, state); + } + + public void markStructureDirty() { + this.structureDirty = true; + this.setChanged(); + } + + public boolean isActive() { + return this.active; + } + + public int getPyramidLevel() { + return this.pyramidLevel; + } + + public int getBeamLength() { + return this.beamLength; + } + + public List getBeamSections() { + return this.beamSections; + } + + private void serverTick(ServerLevel level, BlockPos pos, BlockState state) { + long gameTime = level.getGameTime(); + if (this.structureDirty || gameTime - this.lastValidationTick >= VALIDATION_INTERVAL_TICKS) { + this.revalidate(level, pos, state); + this.structureDirty = false; + this.lastValidationTick = gameTime; + } + + if (this.active && gameTime % EFFECT_INTERVAL_TICKS == 0L) { + this.applyInvertedField(level, pos); + } + } + + private void revalidate(ServerLevel level, BlockPos pos, BlockState state) { + int newPyramidLevel = calculatePyramidLevel(level, pos); + BeamValidation beamValidation = validateBeamPath(level, pos); + boolean newActive = newPyramidLevel > 0 && beamValidation.clear(); + boolean stateChanged = this.pyramidLevel != newPyramidLevel + || this.beamPathClear != beamValidation.clear() + || this.active != newActive + || this.beamLength != beamValidation.length() + || !this.beamSections.equals(beamValidation.sections()); + + boolean activeChanged = this.active != newActive; + this.pyramidLevel = newPyramidLevel; + this.beamPathClear = beamValidation.clear(); + this.beamLength = beamValidation.length(); + this.beamSections = beamValidation.sections(); + this.active = newActive; + + if (state.getBlock() instanceof LucidAnchorBlock && state.getValue(LucidAnchorBlock.ACTIVE) != newActive) { + level.setBlock(pos, state.setValue(LucidAnchorBlock.ACTIVE, newActive), Block.UPDATE_CLIENTS); + state = level.getBlockState(pos); + } + + if (activeChanged) { + level.playSound(null, pos, newActive ? SoundEvents.BEACON_ACTIVATE : SoundEvents.BEACON_DEACTIVATE, SoundSource.BLOCKS, 1.0F, 1.0F); + } + + if (stateChanged) { + this.syncVisualState(state); + } + } + + private void applyInvertedField(ServerLevel level, BlockPos pos) { + if (this.pyramidLevel <= 0) { + return; + } + + int radius = 10 + this.pyramidLevel * 10; + AABB area = new AABB( + pos.getX() - radius, + level.getMinBuildHeight(), + pos.getZ() - radius, + pos.getX() + radius + 1.0D, + pos.getY() + 1.0D, + pos.getZ() + radius + 1.0D + ); + Holder invertedEffect = AntarchyObjects.INVERTED_EFFECT.get(); + for (LivingEntity entity : level.getEntitiesOfClass(LivingEntity.class, area, entity -> EntitySelector.NO_SPECTATORS.test(entity) && entity.isAlive())) { + if (entity.getType().is(AntarchyTags.Entities.LUCID_ANCHOR_IMMUNE) || entity.getType().is(AntarchyTags.Entities.INVERTED_IMMUNE)) { + continue; + } + + MobEffectInstance current = entity.getEffect(invertedEffect); + if (current != null && current.getDuration() > EFFECT_REFRESH_THRESHOLD_TICKS && current.getAmplifier() == 0) { + continue; + } + + entity.addEffect(new MobEffectInstance(invertedEffect, EFFECT_DURATION_TICKS, 0, true, true, true)); + } + } + + private void syncVisualState(BlockState state) { + this.setChanged(); + if (this.level != null) { + this.level.sendBlockUpdated(this.worldPosition, state, state, Block.UPDATE_CLIENTS); + } + } + + @Override + protected void saveAdditional(CompoundTag tag, HolderLookup.Provider registries) { + super.saveAdditional(tag, registries); + tag.putInt("PyramidLevel", this.pyramidLevel); + tag.putBoolean("Active", this.active); + tag.putBoolean("BeamPathClear", this.beamPathClear); + tag.putInt("BeamLength", this.beamLength); + tag.putBoolean("StructureDirty", this.structureDirty); + int[] colors = new int[this.beamSections.size()]; + int[] lengths = new int[this.beamSections.size()]; + for (int i = 0; i < this.beamSections.size(); i++) { + BeamSection section = this.beamSections.get(i); + colors[i] = section.color(); + lengths[i] = section.length(); + } + tag.put("BeamColors", new IntArrayTag(colors)); + tag.put("BeamLengths", new IntArrayTag(lengths)); + } + + @Override + protected void loadAdditional(CompoundTag tag, HolderLookup.Provider registries) { + super.loadAdditional(tag, registries); + this.pyramidLevel = tag.getInt("PyramidLevel"); + this.active = tag.getBoolean("Active"); + this.beamPathClear = tag.getBoolean("BeamPathClear"); + this.beamLength = tag.getInt("BeamLength"); + this.structureDirty = true; + int[] colors = tag.getIntArray("BeamColors"); + int[] lengths = tag.getIntArray("BeamLengths"); + List sections = new ArrayList<>(); + for (int i = 0; i < Math.min(colors.length, lengths.length); i++) { + if (lengths[i] > 0) { + sections.add(new BeamSection(colors[i], lengths[i])); + } + } + this.beamSections = sections.isEmpty() ? List.of() : List.copyOf(sections); + } + + @Override + public CompoundTag getUpdateTag(HolderLookup.Provider registries) { + return this.saveCustomOnly(registries); + } + + @Override + public Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + public static int calculatePyramidLevel(Level level, BlockPos anchorPos) { + int completedLayers = 0; + BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); + for (int layer = 1; layer <= 4; layer++) { + int y = anchorPos.getY() + layer; + if (y > level.getMaxBuildHeight()) { + break; + } + + boolean complete = true; + for (int x = anchorPos.getX() - layer; x <= anchorPos.getX() + layer && complete; x++) { + for (int z = anchorPos.getZ() - layer; z <= anchorPos.getZ() + layer; z++) { + cursor.set(x, y, z); + if (!level.getBlockState(cursor).is(AntarchyTags.Blocks.LUCID_ANCHOR_BASE_BLOCKS)) { + complete = false; + break; + } + } + } + + if (!complete) { + break; + } + completedLayers = layer; + } + return completedLayers; + } + + private static BeamValidation validateBeamPath(Level level, BlockPos anchorPos) { + int minBuildHeight = level.getMinBuildHeight(); + int floorTolerance = minBuildHeight + 5; + if (anchorPos.getY() <= minBuildHeight) { + return BeamValidation.inactive(); + } + + BlockPos.MutableBlockPos cursor = anchorPos.below().mutable(); + List sections = new ArrayList<>(); + int currentColor = DEFAULT_BEAM_COLOR; + int currentLength = 0; + int totalLength = 0; + boolean clear = false; + + for (int y = anchorPos.getY() - 1; y >= minBuildHeight; y--) { + cursor.set(anchorPos.getX(), y, anchorPos.getZ()); + BlockState state = level.getBlockState(cursor); + + if (state.is(Blocks.BEDROCK)) { + if (y <= floorTolerance) { + currentLength++; + totalLength++; + clear = true; + } + break; + } + + if (!isBeamPassable(level, cursor, state)) { + if (y <= floorTolerance) { + currentLength++; + totalLength++; + clear = true; + break; + } + return BeamValidation.inactive(); + } + + int encounteredColor = colorForBeamState(state, currentColor); + if (encounteredColor != currentColor && currentLength > 0) { + sections.add(new BeamSection(currentColor, currentLength)); + currentColor = encounteredColor; + currentLength = 0; + } else { + currentColor = encounteredColor; + } + + currentLength++; + totalLength++; + if (y <= floorTolerance && state.isAir()) { + clear = true; + } + if (y == minBuildHeight) { + clear = true; + } + } + + if (!clear || totalLength <= 0) { + return BeamValidation.inactive(); + } + + if (currentLength > 0) { + sections.add(new BeamSection(currentColor, currentLength)); + } + + return new BeamValidation(true, totalLength, List.copyOf(sections)); + } + + private static boolean isBeamPassable(Level level, BlockPos pos, BlockState state) { + if (state.isAir()) { + return true; + } + if (!level.getFluidState(pos).isEmpty()) { + return true; + } + if (state.getBlock() instanceof BeaconBeamBlock) { + return true; + } + return state.getLightBlock(level, pos) < 15; + } + + private static int colorForBeamState(BlockState state, int fallbackColor) { + if (!(state.getBlock() instanceof BeaconBeamBlock beamBlock)) { + return fallbackColor; + } + + int diffuse = beamBlock.getColor().getTextureDiffuseColor(); + int red = (diffuse >> 16) & 0xFF; + int green = (diffuse >> 8) & 0xFF; + int blue = diffuse & 0xFF; + if (fallbackColor == DEFAULT_BEAM_COLOR) { + return 0xFF000000 | diffuse; + } + + int fallbackRed = (fallbackColor >> 16) & 0xFF; + int fallbackGreen = (fallbackColor >> 8) & 0xFF; + int fallbackBlue = fallbackColor & 0xFF; + return 0xFF000000 + | (((fallbackRed + red) / 2) << 16) + | (((fallbackGreen + green) / 2) << 8) + | ((fallbackBlue + blue) / 2); + } + + public record BeamSection(int color, int length) { + } + + private record BeamValidation(boolean clear, int length, List sections) { + private static BeamValidation inactive() { + return new BeamValidation(false, 0, List.of()); + } + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/TigerEyeCamouflageClientState.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/TigerEyeCamouflageClientState.java new file mode 100644 index 00000000..92957109 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/TigerEyeCamouflageClientState.java @@ -0,0 +1,29 @@ +package com.craisinlord.antarchy.content.client; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +public final class TigerEyeCamouflageClientState { + public record CamouflageState(boolean active, int blockStateId) {} + + private static final Map STATES = new ConcurrentHashMap<>(); + + private TigerEyeCamouflageClientState() { + } + + public static void update(int entityId, boolean active, int blockStateId) { + if (!active) { + STATES.remove(entityId); + return; + } + STATES.put(entityId, new CamouflageState(true, blockStateId)); + } + + public static CamouflageState get(int entityId) { + return STATES.get(entityId); + } + + public static void clear() { + STATES.clear(); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/TigerEyeClientHooks.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/TigerEyeClientHooks.java new file mode 100644 index 00000000..f35ba9cf --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/TigerEyeClientHooks.java @@ -0,0 +1,19 @@ +package com.craisinlord.antarchy.content.client; + +import java.util.function.Supplier; +import net.minecraft.network.chat.Component; + +public final class TigerEyeClientHooks { + private static Supplier camouflageKeyText = () -> Component.translatable("key.antarchy.tigers_eye_camouflage"); + + private TigerEyeClientHooks() { + } + + public static void setCamouflageKeyTextSupplier(Supplier supplier) { + camouflageKeyText = supplier; + } + + public static Component camouflageKeyText() { + return camouflageKeyText.get(); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/hud/CustomBossBarRenderer.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/hud/CustomBossBarRenderer.java index aebcd057..acfa82f9 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/hud/CustomBossBarRenderer.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/hud/CustomBossBarRenderer.java @@ -7,10 +7,12 @@ import com.craisinlord.antarchy.content.entity.HerculesBeetleEntity; import com.craisinlord.antarchy.content.entity.ToreterrorEntity; import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; +import java.util.HashMap; import java.util.Map; import java.util.UUID; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.BossEvent; import net.minecraft.world.entity.Entity; @@ -19,6 +21,7 @@ public final class CustomBossBarRenderer { private static final int BAR_WIDTH = 182; private static final int BAR_HEIGHT = 5; private static final int GLOBAL_Y_OFFSET = 15; + private static final Map TEXTURES_BY_BOSS_ID = new HashMap<>(); private static final Map, Textures> BY_ENTITY_CLASS = Map.of( KrakenEntity.class, textures("blue", "kraken", 204, 56, 4), @@ -28,6 +31,14 @@ public final class CustomBossBarRenderer { HerculesBeetleEntity.class, textures("beetle", "hercules_beetle", 194, 33, 1), EmperorScorpionEntity.class, textures("purple", "scorpion", 218, 34, -2) ); + private static final Map BY_LOCALIZED_NAME_AND_COLOR = Map.of( + key(Component.translatable("entity.antarchy.kraken").getString(), BossEvent.BossBarColor.BLUE), BY_ENTITY_CLASS.get(KrakenEntity.class), + key(Component.translatable("entity.antarchy.toreterror").getString(), BossEvent.BossBarColor.GREEN), BY_ENTITY_CLASS.get(ToreterrorEntity.class), + key(Component.translatable("entity.antarchy.alpha_mantis").getString(), BossEvent.BossBarColor.GREEN), BY_ENTITY_CLASS.get(AlphaMantisEntity.class), + key(Component.translatable("entity.antarchy.brutalfly").getString(), BossEvent.BossBarColor.YELLOW), BY_ENTITY_CLASS.get(BrutalflyEntity.class), + key(Component.translatable("entity.antarchy.hercules_beetle").getString(), BossEvent.BossBarColor.RED), BY_ENTITY_CLASS.get(HerculesBeetleEntity.class), + key(Component.translatable("entity.antarchy.emperor_scorpion").getString(), BossEvent.BossBarColor.PURPLE), BY_ENTITY_CLASS.get(EmperorScorpionEntity.class) + ); private CustomBossBarRenderer() { } @@ -60,11 +71,25 @@ public final class CustomBossBarRenderer { } private static Textures lookup(BossEvent bossEvent) { - Entity entity = findEntity(bossEvent.getId()); - if (entity == null) { - return null; + Textures cached = TEXTURES_BY_BOSS_ID.get(bossEvent.getId()); + if (cached != null) { + return cached; } - return BY_ENTITY_CLASS.get(entity.getClass()); + + Entity entity = findEntity(bossEvent.getId()); + if (entity != null) { + Textures textures = BY_ENTITY_CLASS.get(entity.getClass()); + if (textures != null) { + TEXTURES_BY_BOSS_ID.put(bossEvent.getId(), textures); + return textures; + } + } + + Textures fallback = BY_LOCALIZED_NAME_AND_COLOR.get(key(bossEvent.getName().getString(), bossEvent.getColor())); + if (fallback != null) { + TEXTURES_BY_BOSS_ID.put(bossEvent.getId(), fallback); + } + return fallback; } private static Entity findEntity(UUID id) { @@ -91,6 +116,10 @@ public final class CustomBossBarRenderer { ); } + private static String key(String name, BossEvent.BossBarColor color) { + return color.name() + "|" + name; + } + private record Textures(ResourceLocation background, ResourceLocation progress, ResourceLocation overlay, int overlayWidth, int overlayHeight, int barYOffset) { } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/NightmareBiteModel.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/NightmareBiteModel.java new file mode 100644 index 00000000..9dbc7f1d --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/NightmareBiteModel.java @@ -0,0 +1,26 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.nightmare.NightmareBiteEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class NightmareBiteModel extends GeoModel { + private static final ResourceLocation PHASE_ONE_TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/vfx/nightmare_bite.png"); + private static final ResourceLocation PHASE_TWO_TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/vfx/nightmare_bite_phase_2.png"); + + @Override + public ResourceLocation getModelResource(NightmareBiteEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/nightmare_bite.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(NightmareBiteEntity animatable) { + return animatable.isPhaseTwo() ? PHASE_TWO_TEXTURE : PHASE_ONE_TEXTURE; + } + + @Override + public ResourceLocation getAnimationResource(NightmareBiteEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/nightmare_bite.animation.json"); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/NightmareModel.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/NightmareModel.java index 0b88a76c..cc86beee 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/NightmareModel.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/NightmareModel.java @@ -6,8 +6,10 @@ import net.minecraft.resources.ResourceLocation; import software.bernie.geckolib.model.GeoModel; public class NightmareModel extends GeoModel { - public static final ResourceLocation EMISSIVE_TEXTURE = - ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/nightmare_emissive.png"); + private static final ResourceLocation PHASE_ONE_TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/nightmare/nightmare.png"); + private static final ResourceLocation PHASE_TWO_TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/nightmare/nightmare_phase_2.png"); + private static final ResourceLocation PHASE_ONE_EMISSIVE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/nightmare/nightmare_emissive.png"); + private static final ResourceLocation PHASE_TWO_EMISSIVE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/nightmare/nightmare_phase_2_emissive.png"); @Override public ResourceLocation getModelResource(NightmareEntity animatable) { @@ -16,11 +18,19 @@ public class NightmareModel extends GeoModel { @Override public ResourceLocation getTextureResource(NightmareEntity animatable) { - return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/nightmare.png"); + return textureFor(animatable); } @Override public ResourceLocation getAnimationResource(NightmareEntity animatable) { return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/nightmare.animation.json"); } + + public static ResourceLocation textureFor(NightmareEntity animatable) { + return animatable.hasPhaseTwoTexture() ? PHASE_TWO_TEXTURE : PHASE_ONE_TEXTURE; + } + + public static ResourceLocation emissiveTextureFor(NightmareEntity animatable) { + return animatable.hasPhaseTwoTexture() ? PHASE_TWO_EMISSIVE : PHASE_ONE_EMISSIVE; + } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/NightmarePortalModel.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/NightmarePortalModel.java new file mode 100644 index 00000000..8f384cc7 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/NightmarePortalModel.java @@ -0,0 +1,25 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.nightmare.NightmarePortalEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class NightmarePortalModel extends GeoModel { + public static final ResourceLocation TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/vfx/nightmare_portal.png"); + + @Override + public ResourceLocation getModelResource(NightmarePortalEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/nightmare_portal.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(NightmarePortalEntity animatable) { + return TEXTURE; + } + + @Override + public ResourceLocation getAnimationResource(NightmarePortalEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/nightmare_portal.animation.json"); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/LucidAnchorBlockEntityRenderer.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/LucidAnchorBlockEntityRenderer.java new file mode 100644 index 00000000..c2de0cce --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/LucidAnchorBlockEntityRenderer.java @@ -0,0 +1,127 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.block.entity.LucidAnchorBlockEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.math.Axis; +import net.minecraft.client.renderer.LightTexture; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.resources.ResourceLocation; +import org.joml.Matrix3f; +import org.joml.Matrix4f; + +public class LucidAnchorBlockEntityRenderer implements BlockEntityRenderer { + private static final ResourceLocation BEAM_TEXTURE = ResourceLocation.withDefaultNamespace("textures/entity/beacon_beam.png"); + private static final float INNER_RADIUS = 0.14F; + private static final float OUTER_RADIUS = 0.28F; + private static final float START_OFFSET = -0.02F; + + public LucidAnchorBlockEntityRenderer(BlockEntityRendererProvider.Context context) { + } + + @Override + public void render(LucidAnchorBlockEntity blockEntity, float partialTick, PoseStack poseStack, MultiBufferSource buffer, int packedLight, int packedOverlay) { + if (!blockEntity.isActive() || blockEntity.getBeamLength() <= 0 || blockEntity.getBeamSections().isEmpty() || blockEntity.getLevel() == null) { + return; + } + + long gameTime = blockEntity.getLevel().getGameTime(); + float scroll = (gameTime + partialTick) * 0.02F; + float startY = START_OFFSET; + float endY = START_OFFSET - blockEntity.getBeamLength(); + + poseStack.pushPose(); + poseStack.translate(0.5D, 0.0D, 0.5D); + + float currentTop = startY; + for (LucidAnchorBlockEntity.BeamSection section : blockEntity.getBeamSections()) { + float sectionBottom = currentTop - section.length(); + renderBeamPrism(poseStack, buffer.getBuffer(RenderType.entityTranslucent(BEAM_TEXTURE)), currentTop, sectionBottom, INNER_RADIUS, section.color(), 1.0F, scroll); + renderBeamPrism(poseStack, buffer.getBuffer(RenderType.entityTranslucent(BEAM_TEXTURE)), currentTop, sectionBottom, OUTER_RADIUS, darken(section.color()), 0.45F, -scroll); + currentTop = sectionBottom; + } + + if (currentTop > endY) { + renderBeamPrism(poseStack, buffer.getBuffer(RenderType.entityTranslucent(BEAM_TEXTURE)), currentTop, endY, INNER_RADIUS, 0xFFFF1A1A, 1.0F, scroll); + renderBeamPrism(poseStack, buffer.getBuffer(RenderType.entityTranslucent(BEAM_TEXTURE)), currentTop, endY, OUTER_RADIUS, 0xFF7A0000, 0.45F, -scroll); + } + + poseStack.popPose(); + } + + @Override + public int getViewDistance() { + return 256; + } + + private static void renderBeamPrism(PoseStack poseStack, VertexConsumer consumer, float topY, float bottomY, float radius, int color, float alphaScale, float scroll) { + PoseStack.Pose pose = poseStack.last(); + Matrix4f matrix = pose.pose(); + Matrix3f normal = pose.normal(); + float red = ((color >> 16) & 0xFF) / 255.0F; + float green = ((color >> 8) & 0xFF) / 255.0F; + float blue = (color & 0xFF) / 255.0F; + float alpha = ((color >>> 24) & 0xFF) / 255.0F * alphaScale; + float vTop = scroll + topY * 0.25F; + float vBottom = scroll + bottomY * 0.25F; + + addFace(consumer, matrix, normal, -radius, topY, -radius, radius, topY, -radius, radius, bottomY, -radius, -radius, bottomY, -radius, red, green, blue, alpha, vTop, vBottom); + addFace(consumer, matrix, normal, radius, topY, radius, -radius, topY, radius, -radius, bottomY, radius, radius, bottomY, radius, red, green, blue, alpha, vTop, vBottom); + addFace(consumer, matrix, normal, -radius, topY, radius, -radius, topY, -radius, -radius, bottomY, -radius, -radius, bottomY, radius, red, green, blue, alpha, vTop, vBottom); + addFace(consumer, matrix, normal, radius, topY, -radius, radius, topY, radius, radius, bottomY, radius, radius, bottomY, -radius, red, green, blue, alpha, vTop, vBottom); + } + + private static void addFace( + VertexConsumer consumer, + Matrix4f matrix, + Matrix3f normal, + float x0, + float y0, + float z0, + float x1, + float y1, + float z1, + float x2, + float y2, + float z2, + float x3, + float y3, + float z3, + float red, + float green, + float blue, + float alpha, + float vTop, + float vBottom + ) { + addVertex(consumer, matrix, normal, x0, y0, z0, red, green, blue, alpha, 0.0F, vTop); + addVertex(consumer, matrix, normal, x1, y1, z1, red, green, blue, alpha, 1.0F, vTop); + addVertex(consumer, matrix, normal, x2, y2, z2, red, green, blue, alpha, 1.0F, vBottom); + addVertex(consumer, matrix, normal, x3, y3, z3, red, green, blue, alpha, 0.0F, vBottom); + + addVertex(consumer, matrix, normal, x3, y3, z3, red, green, blue, alpha, 0.0F, vBottom); + addVertex(consumer, matrix, normal, x2, y2, z2, red, green, blue, alpha, 1.0F, vBottom); + addVertex(consumer, matrix, normal, x1, y1, z1, red, green, blue, alpha, 1.0F, vTop); + addVertex(consumer, matrix, normal, x0, y0, z0, red, green, blue, alpha, 0.0F, vTop); + } + + private static void addVertex(VertexConsumer consumer, Matrix4f matrix, Matrix3f normal, float x, float y, float z, float red, float green, float blue, float alpha, float u, float v) { + consumer.addVertex(matrix, x, y, z) + .setColor(red, green, blue, alpha) + .setUv(u, v) + .setOverlay(OverlayTexture.NO_OVERLAY) + .setLight(LightTexture.FULL_BRIGHT) + .setNormal(0.0F, 1.0F, 0.0F); + } + + private static int darken(int color) { + int red = (int) (((color >> 16) & 0xFF) * 0.45F); + int green = (int) (((color >> 8) & 0xFF) * 0.2F); + int blue = (int) ((color & 0xFF) * 0.2F); + return (color & 0xFF000000) | (red << 16) | (green << 8) | blue; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/NightmareBiteRenderer.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/NightmareBiteRenderer.java new file mode 100644 index 00000000..f6cc1076 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/NightmareBiteRenderer.java @@ -0,0 +1,13 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.NightmareBiteModel; +import com.craisinlord.antarchy.content.entity.nightmare.NightmareBiteEntity; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class NightmareBiteRenderer extends GeoEntityRenderer { + public NightmareBiteRenderer(EntityRendererProvider.Context context) { + super(context, new NightmareBiteModel()); + this.shadowRadius = 0.0F; + } +} 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 new file mode 100644 index 00000000..10aa7709 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/NightmarePortalRenderer.java @@ -0,0 +1,37 @@ +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 { + public NightmarePortalRenderer(EntityRendererProvider.Context context) { + super(context, new NightmarePortalModel()); + this.shadowRadius = 0.0F; + } + + @Override + public void render(NightmarePortalEntity entity, float entityYaw, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight) { + BakedGeoModel model = this.getGeoModel().getBakedModel(this.getGeoModel().getModelResource(entity)); + RenderType renderType = RenderType.eyes(NightmarePortalModel.TEXTURE); + VertexConsumer buffer = bufferSource.getBuffer(renderType); + poseStack.pushPose(); + poseStack.scale(1.0F, 1.0F, 1.0F); + this.reRender(model, poseStack, bufferSource, entity, renderType, buffer, partialTick, 0xF000F0, OverlayTexture.NO_OVERLAY, 0xFFFFFFFF); + poseStack.popPose(); + } + + @Override + public @Nullable RenderType getRenderType(NightmarePortalEntity animatable, ResourceLocation texture, @Nullable MultiBufferSource bufferSource, float partialTick) { + return RenderType.eyes(NightmarePortalModel.TEXTURE); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/NightmareRenderer.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/NightmareRenderer.java index 87bfce1e..782d0836 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/NightmareRenderer.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/NightmareRenderer.java @@ -35,7 +35,7 @@ public class NightmareRenderer extends GeoEntityRenderer { public void render(PoseStack poseStack, NightmareEntity animatable, BakedGeoModel bakedModel, @Nullable RenderType renderType, MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) { - RenderType emissiveType = RenderType.eyes(NightmareModel.EMISSIVE_TEXTURE); + RenderType emissiveType = RenderType.eyes(NightmareModel.emissiveTextureFor(animatable)); VertexConsumer emissiveBuffer = bufferSource.getBuffer(emissiveType); this.getRenderer().reRender( bakedModel, diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TigerEyeCamouflagePlayerLayer.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TigerEyeCamouflagePlayerLayer.java new file mode 100644 index 00000000..841a056c --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TigerEyeCamouflagePlayerLayer.java @@ -0,0 +1,57 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.client.TigerEyeCamouflageClientState; +import com.craisinlord.antarchy.content.item.TigerEyeArmorUtil; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.model.PlayerModel; +import net.minecraft.client.player.AbstractClientPlayer; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.LivingEntityRenderer; +import net.minecraft.client.renderer.entity.RenderLayerParent; +import net.minecraft.client.renderer.entity.layers.RenderLayer; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.Block; + +public final class TigerEyeCamouflagePlayerLayer extends RenderLayer> { + public TigerEyeCamouflagePlayerLayer(RenderLayerParent> renderer) { + super(renderer); + } + + @Override + public void render(PoseStack poseStack, MultiBufferSource buffer, int packedLight, AbstractClientPlayer player, + float limbSwing, float limbSwingAmount, float partialTick, float ageInTicks, float netHeadYaw, + float headPitch) { + if (player.isSpectator() || player.isInvisible() || player.hasEffect(AntarchyObjects.PARALYZED_EFFECT.get())) { + return; + } + if (!TigerEyeArmorUtil.hasFullSet(player)) { + return; + } + + TigerEyeCamouflageClientState.CamouflageState state = TigerEyeCamouflageClientState.get(player.getId()); + if (state == null || !state.active()) { + return; + } + + var blockState = Block.stateById(state.blockStateId()); + if (!TigerEyeArmorUtil.isValidCamouflageBlock(blockState)) { + return; + } + + poseStack.pushPose(); + poseStack.scale(1.1F, 1.1F, 1.1F); + var resolved = TigerEyeCamouflageTextureResolver.resolve(blockState, BlockPos.containing(player.position())); + VertexConsumer vertexConsumer = buffer.getBuffer(RenderType.entityCutoutNoCull(resolved.texture())); + this.getParentModel().renderToBuffer( + poseStack, + vertexConsumer, + packedLight, + LivingEntityRenderer.getOverlayCoords(player, 0.0F), + resolved.argbTint() + ); + poseStack.popPose(); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TigerEyeCamouflageTextureResolver.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TigerEyeCamouflageTextureResolver.java new file mode 100644 index 00000000..d79ed581 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TigerEyeCamouflageTextureResolver.java @@ -0,0 +1,146 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.mojang.blaze3d.platform.NativeImage; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import net.minecraft.client.Minecraft; +import net.minecraft.client.color.block.BlockColors; +import net.minecraft.client.renderer.block.BlockRenderDispatcher; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.texture.DynamicTexture; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; + +public final class TigerEyeCamouflageTextureResolver { + public record ResolvedTexture(ResourceLocation texture, int argbTint) {} + + // PlayerModel's skin layout is always laid out on a 64x64 canvas, regardless of the + // block texture's actual size, so the generated overlay texture must match that grid + // for every body part to sample the block texture at the same pixel density. + private static final int SKIN_SIZE = 64; + private static final Map CACHE = new ConcurrentHashMap<>(); + private static final ResourceLocation FALLBACK_TEXTURE = ResourceLocation.withDefaultNamespace("textures/block/stone.png"); + private static final long QUAD_SEED = 0x54EADL; + + private TigerEyeCamouflageTextureResolver() { + } + + public static ResolvedTexture resolve(BlockState state, BlockPos pos) { + int stateId = Block.getId(state); + ResolvedTexture cached = CACHE.get(stateId); + if (cached != null) { + return cached; + } + + ResolvedTexture resolved = resolveUncached(state, pos); + CACHE.put(stateId, resolved); + return resolved; + } + + public static void clearCache() { + Minecraft minecraft = Minecraft.getInstance(); + for (ResolvedTexture resolved : CACHE.values()) { + if (!resolved.texture().equals(FALLBACK_TEXTURE)) { + minecraft.getTextureManager().release(resolved.texture()); + } + } + CACHE.clear(); + } + + private static ResolvedTexture resolveUncached(BlockState state, BlockPos pos) { + Minecraft minecraft = Minecraft.getInstance(); + BlockRenderDispatcher dispatcher = minecraft.getBlockRenderer(); + var model = dispatcher.getBlockModel(state); + List upwardQuads = model.getQuads(state, Direction.UP, RandomSource.create(QUAD_SEED)); + TextureAtlasSprite sprite = firstSprite(upwardQuads); + int tintIndex = -1; + if (sprite == null) { + sprite = model.getParticleIcon(); + } else if (!upwardQuads.isEmpty()) { + tintIndex = upwardQuads.getFirst().getTintIndex(); + } + + if (sprite == null) { + return new ResolvedTexture(FALLBACK_TEXTURE, 0xFFFFFFFF); + } + + int tint = 0xFFFFFFFF; + if (tintIndex >= 0) { + BlockColors colors = minecraft.getBlockColors(); + int color = colors.getColor(state, minecraft.level, pos, tintIndex); + if (color != -1) { + tint = 0xFF000000 | color; + } + } + + ResourceLocation tiled = buildTiledSkin(minecraft, sprite.contents().name()); + return new ResolvedTexture(tiled, tint); + } + + private static ResourceLocation buildTiledSkin(Minecraft minecraft, ResourceLocation spriteId) { + ResourceLocation source = ResourceLocation.fromNamespaceAndPath( + spriteId.getNamespace(), + "textures/" + spriteId.getPath() + ".png" + ); + ResourceLocation target = ResourceLocation.fromNamespaceAndPath( + spriteId.getNamespace(), + "dynamic/tiger_eye_camouflage/" + spriteId.getPath() + ); + + try (InputStream stream = openStream(minecraft, source)) { + if (stream == null) { + return FALLBACK_TEXTURE; + } + + try (NativeImage sourceImage = NativeImage.read(stream)) { + int tileWidth = sourceImage.getWidth(); + // Animated block textures stack frames vertically below a square first frame. + int tileHeight = tileWidth <= sourceImage.getHeight() ? tileWidth : sourceImage.getHeight(); + + NativeImage canvas = new NativeImage(SKIN_SIZE, SKIN_SIZE, false); + for (int y = 0; y < SKIN_SIZE; y++) { + for (int x = 0; x < SKIN_SIZE; x++) { + canvas.setPixelRGBA(x, y, sourceImage.getPixelRGBA(x % tileWidth, y % tileHeight)); + } + } + + minecraft.getTextureManager().register(target, new DynamicTexture(canvas)); + return target; + } + } catch (IOException e) { + return FALLBACK_TEXTURE; + } + } + + private static InputStream openStream(Minecraft minecraft, ResourceLocation location) { + return minecraft.getResourceManager().getResource(location) + .map(resource -> { + try { + return resource.open(); + } catch (IOException e) { + return null; + } + }) + .orElse(null); + } + + private static TextureAtlasSprite firstSprite(List quads) { + if (quads == null || quads.isEmpty()) { + return null; + } + for (BakedQuad quad : quads) { + if (quad != null && quad.getSprite() != null) { + return quad.getSprite(); + } + } + return null; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/creative/CreativeTabContents.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/creative/CreativeTabContents.java index 3d7d8131..c57389e5 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/creative/CreativeTabContents.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/creative/CreativeTabContents.java @@ -1,6 +1,5 @@ package com.craisinlord.antarchy.content.creative; -import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant; import com.craisinlord.antarchy.content.item.GlimmerBottleItem; import com.craisinlord.antarchy.content.item.ultimate.UltimateGearHelper; @@ -21,6 +20,8 @@ import net.minecraft.world.item.alchemy.PotionContents; import net.minecraft.world.level.ItemLike; public final class CreativeTabContents { + private static final String MODID = "antarchy"; + private CreativeTabContents() {} private record CatalogEntry(String path, String neoTabPath, String insertAfterPath) {} @@ -89,6 +90,7 @@ public final class CreativeTabContents { entry("mossy_shellstone_brick_slab", "building_blocks"), entry("mossy_shellstone_brick_wall", "building_blocks"), entry("cracked_shellstone_bricks", "building_blocks"), + entry("shellstone_pillar", "building_blocks"), entry("blush_moss_block", "building_blocks"), entry("blush_moss_carpet", "building_blocks"), entry("lumen_froglight", "natural_blocks"), @@ -108,16 +110,22 @@ public final class CreativeTabContents { entry("nyxite_brick_slab", "building_blocks"), entry("nyxite_brick_wall", "building_blocks"), entry("chiseled_nyxite", "building_blocks"), + entry("nyxite_pillar", "building_blocks"), entry("pale_nyxite", "building_blocks"), entry("nyxite_spike", "building_blocks"), entry("potent_nyxite", "building_blocks"), entry("antimetal", "building_blocks"), + entry("antimetal_stairs", "building_blocks"), + entry("antimetal_slab", "building_blocks"), entry("polished_antimetal", "building_blocks"), + entry("polished_antimetal_stairs", "building_blocks"), + entry("polished_antimetal_slab", "building_blocks"), entry("antimetal_scaffolding", "building_blocks"), entry("antimetal_rail", "redstone_blocks"), entry("antimetal_powered_rail", "redstone_blocks"), entry("antimetal_detector_rail", "redstone_blocks"), entry("antimetal_activator_rail", "redstone_blocks"), + entry("upper", "redstone_blocks"), entry("umbral_moss_block", "building_blocks"), entry("umbral_moss_carpet", "building_blocks"), entry("dream_torch", "building_blocks"), @@ -134,6 +142,7 @@ public final class CreativeTabContents { entry("smooth_dream_sandstone_stairs", "building_blocks"), entry("smooth_dream_sandstone_slab", "building_blocks"), entry("cut_dream_sandstone_slab", "building_blocks"), + entry("antigravel", "natural_blocks"), entry("budding_blood_crystal", "building_blocks"), entry("blood_crystal_block", "building_blocks"), entry("blood_crystal_cluster", "building_blocks"), @@ -145,6 +154,7 @@ public final class CreativeTabContents { entry("biomite_turf", "building_blocks"), entry("biowart", "building_blocks"), entry("biowart_tendrils", "building_blocks"), + entry("loam", "natural_blocks"), entry("broodstone", "building_blocks"), entry("polished_broodstone", "building_blocks"), entry("chiseled_broodstone", "building_blocks"), @@ -158,12 +168,13 @@ public final class CreativeTabContents { entry("broodstone_brick_stairs", "building_blocks"), entry("broodstone_brick_slab", "building_blocks"), entry("broodstone_brick_wall", "building_blocks"), + entry("broodstone_pillar", "building_blocks"), entry("myrmite_coal_ore", "building_blocks"), entry("broodstone_uranium_ore", "building_blocks"), entry("broodstone_titanium_ore", "building_blocks"), entry("bile_vein", "building_blocks"), - entry("chiten_block", "building_blocks"), - entry("chiten_spike", "building_blocks"), + entry("chitin_block", "building_blocks"), + entry("chitin_spike", "building_blocks"), entry("amber_moss_block", "building_blocks"), entry("amber_moss_carpet", "building_blocks"), entry("uranium_block", "building_blocks"), @@ -180,6 +191,7 @@ public final class CreativeTabContents { entry("bluestone_repeater", "redstone_blocks"), entry("bluestone_comparator", "redstone_blocks"), entry("bluestone_torch", "redstone_blocks"), + entry("bluestone_lamp", "redstone_blocks"), entry("titanium_block", "building_blocks"), entry("raw_titanium_block", "building_blocks"), entry("cut_titanium", "building_blocks"), @@ -205,6 +217,7 @@ public final class CreativeTabContents { entry("seashell", "natural_blocks"), entry("hushweed", "natural_blocks"), entry("amber_lichen", "natural_blocks"), + entry("mucus", "natural_blocks"), entry("creepvine", "natural_blocks"), entry("hanging_creeproots", "natural_blocks"), entry("molting_vines", "natural_blocks"), @@ -243,6 +256,7 @@ public final class CreativeTabContents { entry("antiwater_bucket", "tools_and_utilities"), entry("lumen_bucket", "tools_and_utilities"), entry("cloud_bucket", "tools_and_utilities"), + entry("lucid_anchor", "tools_and_utilities"), entry("reverie_bottle", "tools_and_utilities"), entry("glimmer_bottle", "tools_and_utilities"), entry("critter_cage", "tools_and_utilities"), @@ -283,6 +297,10 @@ public final class CreativeTabContents { entry("blood_crystal_chestplate", "combat"), entry("blood_crystal_leggings", "combat"), entry("blood_crystal_boots", "combat"), + entry("tigers_eye_helmet", "combat"), + entry("tigers_eye_chestplate", "combat"), + entry("tigers_eye_leggings", "combat"), + entry("tigers_eye_boots", "combat"), entry("moggles", "combat"), entry("scorpion_whip", "combat"), entry("fallen_king_crown", "combat"), @@ -306,15 +324,15 @@ public final class CreativeTabContents { entry("mud_pie", "ingredients"), entry("lucid_eye", "ingredients"), entry("blood_crystal_shard", "ingredients"), + entry("tigers_eye", "ingredients"), entry("blood_crystal_apple", "ingredients"), entry("spirit_apple", "ingredients"), entry("mantis_claw", "combat"), entry("hercules_horn", "ingredients"), entry("king_scale", "ingredients"), entry("queen_scale", "ingredients"), - entry("chiten", "ingredients"), + entry("chitin", "ingredients"), entry("jerry_nucleus", "ingredients"), - entry("carapace", "ingredients"), entry("stink_bug", "ingredients"), entry("brutalfly_wing", "ingredients"), entry("primordial_scute", "ingredients"), @@ -323,6 +341,7 @@ public final class CreativeTabContents { entry("emperor_scorpion_stinger", "ingredients"), entry("kraken_tooth", "ingredients"), entry("kraken_tentacle", "ingredients"), + entry("kraken_kalamari", "ingredients"), entry("jumpy_bug_leg", "ingredients"), entry("cornea_ear", "ingredients"), entry("corn", "ingredients"), @@ -493,7 +512,7 @@ public final class CreativeTabContents { } private static Item item(String path) { - return BuiltInRegistries.ITEM.get(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path)); + return BuiltInRegistries.ITEM.get(ResourceLocation.fromNamespaceAndPath(MODID, path)); } private static Item vanillaItem(String path) { @@ -501,7 +520,7 @@ public final class CreativeTabContents { } private static Holder potion(String path) { - Potion potion = BuiltInRegistries.POTION.get(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path)); + Potion potion = BuiltInRegistries.POTION.get(ResourceLocation.fromNamespaceAndPath(MODID, path)); return potion == null ? null : BuiltInRegistries.POTION.wrapAsHolder(potion); } } 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 11d95b98..57c4c461 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 @@ -103,6 +103,26 @@ public class AlphaMantisEntity extends MantisEntity { return 1.05D; } + @Override + protected double configuredMaxHealth() { + return AntarchySettings.alphaMantisHealth(); + } + + @Override + protected double configuredAttackDamage() { + return AntarchySettings.alphaMantisAttackDamage(); + } + + @Override + protected double configuredMovementSpeed() { + return AntarchySettings.alphaMantisMovementSpeed(); + } + + @Override + protected double configuredFlyingSpeed() { + return AntarchySettings.alphaMantisFlyingSpeed(); + } + @Override public void tick() { super.tick(); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/BedBugEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/BedBugEntity.java index adcd7c92..5d76b4d4 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/BedBugEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/BedBugEntity.java @@ -251,6 +251,7 @@ public class BedBugEntity extends Animal implements GeoEntity { public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData spawnGroupData) { BedBugSpawnData bedBugSpawnData = spawnGroupData instanceof BedBugSpawnData data ? data : new BedBugSpawnData(); super.finalizeSpawn(level, difficulty, spawnReason, null); + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.bedBugHealth()); if (bedBugSpawnData.eggNestPos == null && (spawnReason == MobSpawnType.NATURAL || spawnReason == MobSpawnType.CHUNK_GENERATION) && this.random.nextFloat() < 0.55F) { bedBugSpawnData.eggNestPos = this.createNaturalEggNest(level); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ButterflyEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ButterflyEntity.java index a058d6ef..49289bfd 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ButterflyEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ButterflyEntity.java @@ -234,6 +234,7 @@ public class ButterflyEntity extends Animal implements FlyingAnimal, GeoEntity { @Override public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnType, @Nullable SpawnGroupData spawnGroupData) { this.assignRandomTextureVariant(); + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.butterflyHealth()); return super.finalizeSpawn(level, difficulty, spawnType, spawnGroupData); } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CaterpillarEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CaterpillarEntity.java index 7744f504..4c21b485 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CaterpillarEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CaterpillarEntity.java @@ -128,6 +128,12 @@ public class CaterpillarEntity extends Animal implements GeoEntity { .add(Attributes.FOLLOW_RANGE, 14.0D); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, net.minecraft.world.entity.MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.caterpillarHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + @Override protected PathNavigation createNavigation(Level level) { GroundPathNavigation navigation = new GroundPathNavigation(this, level) { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CheepEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CheepEntity.java index ca8ae3b5..5274e4e7 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CheepEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CheepEntity.java @@ -48,6 +48,12 @@ public class CheepEntity extends AbstractFish implements GeoEntity { .add(Attributes.MOVEMENT_SPEED, 0.5D); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, net.minecraft.world.entity.MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.cheepHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + @Override public ItemStack getBucketItemStack() { return new ItemStack(Items.WATER_BUCKET); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ConfiguredMobSpawnUtil.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ConfiguredMobSpawnUtil.java new file mode 100644 index 00000000..dbe21edf --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ConfiguredMobSpawnUtil.java @@ -0,0 +1,18 @@ +package com.craisinlord.antarchy.content.entity; + +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.ai.attributes.AttributeInstance; +import net.minecraft.world.entity.ai.attributes.Attributes; + +public final class ConfiguredMobSpawnUtil { + private ConfiguredMobSpawnUtil() { + } + + public static void applyConfiguredHealth(Mob mob, double maxHealth) { + AttributeInstance maxHealthAttribute = mob.getAttribute(Attributes.MAX_HEALTH); + if (maxHealthAttribute != null) { + maxHealthAttribute.setBaseValue(maxHealth); + } + mob.setHealth((float) maxHealth); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CreepingHorrorEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CreepingHorrorEntity.java index 108a9ac7..e68b30ef 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CreepingHorrorEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CreepingHorrorEntity.java @@ -74,6 +74,12 @@ public class CreepingHorrorEntity extends Monster implements GeoEntity { .add(Attributes.FOLLOW_RANGE, 16.0D); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, net.minecraft.world.entity.MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.creepingHorrorHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER || spawnReason == MobSpawnType.COMMAND) { return true; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/DorrieEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/DorrieEntity.java index 1cd81017..1dd63741 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/DorrieEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/DorrieEntity.java @@ -160,6 +160,12 @@ public class DorrieEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 4.0D); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, net.minecraft.world.entity.MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.dorrieHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + public boolean hasSaddle() { return this.entityData.get(HAS_SADDLE); } 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 69a702fa..4b9a3e9a 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 @@ -15,6 +15,7 @@ import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; 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.RandomSource; @@ -37,7 +38,6 @@ 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; -import net.minecraft.server.level.ServerLevel; import net.minecraft.world.DifficultyInstance; import net.minecraft.world.entity.monster.Monster; import net.minecraft.world.entity.player.Player; @@ -55,6 +55,9 @@ import software.bernie.geckolib.animation.RawAnimation; import software.bernie.geckolib.util.GeckoLibUtil; import java.util.EnumSet; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; public class EmperorScorpionEntity extends Monster implements GeoEntity { private static final byte CLAW_ATTACK_EVENT = 4; @@ -85,6 +88,21 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { 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; + private static final double FORCED_RETURN_RADIUS = 144.0D; + private static final int RESET_DELAY_TICKS = 240; + private static final double HOME_RETURN_SPEED = 1.0D; + private static final double NEARBY_SCORPION_CHECK_RADIUS = 32.0D; private static final ResourceKey THORAXIS_KEY = ResourceKey.create(Registries.DIMENSION, @@ -113,12 +131,17 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { private int hardenDurationTicks; 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; + private AttackType previousAttack = AttackType.NONE; + @Nullable private BlockPos encounterHome; @Nullable private LivingEntity attackTarget; + private final Set summonedScorpionIds = new HashSet<>(); public EmperorScorpionEntity(EntityType entityType, Level level) { super(entityType, level); @@ -137,6 +160,13 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { .add(Attributes.FOLLOW_RANGE, AntarchySettings.emperorScorpionFollowRange()); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, + MobSpawnType spawnReason, @Nullable net.minecraft.world.entity.SpawnGroupData spawnData) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.emperorScorpionHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); @@ -204,7 +234,11 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { @Override public void tick() { super.tick(); + if (!this.level().isClientSide) { + this.tickEncounterState(); + } this.bossEvent.setProgress(this.getHealth() / this.getMaxHealth()); + this.bossEvent.setVisible(this.shouldShowBossBar()); if (this.clawCooldownTicks > 0) { this.clawCooldownTicks--; @@ -271,8 +305,10 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { } this.attackTarget = target; this.currentAttack = attackType; + 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(); @@ -291,7 +327,12 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { return; } - this.getLookControl().setLookAt(this.attackTarget, 30.0F, 30.0F); + 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)) { @@ -305,8 +346,28 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { } private boolean canHitAttackTarget(LivingEntity target, AttackType attackType) { - double range = attackType == AttackType.STING ? STING_RANGE : CLAW_RANGE; - return this.distanceToSqr(target) <= range * range && this.hasLineOfSight(target); + 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; } private void resetAttackState() { @@ -316,6 +377,13 @@ 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 void tickHardenState() { if (this.getHardenPhase() == HardenPhase.NONE) { if (this.hardenCooldownTicks <= 0 && this.getTarget() != null && this.getTarget().isAlive()) { @@ -330,9 +398,13 @@ 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.countNearbyScorpionMinions() < AntarchySettings.emperorScorpionMaxNearbyScorpions()) { + && this.countOwnedNearbyScorpionMinions() < AntarchySettings.emperorScorpionMaxNearbyScorpions()) { this.summonScorpionMinion(); this.hardenSummonedScorpions++; if (this.hardenSummonedScorpions >= AntarchySettings.emperorScorpionMaxSummonedScorpions()) { @@ -369,7 +441,7 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { this.setDeltaMovement(0.0D, motion.y, 0.0D); if (--this.hardenStateTicks <= 0) { this.setHardenPhase(HardenPhase.NONE); - this.hardenCooldownTicks = Math.max(1, AntarchySettings.emperorScorpionSummonIntervalTicks()); + this.hardenCooldownTicks = Math.max(1, AntarchySettings.emperorScorpionHardenCooldownTicks()); } } } @@ -384,6 +456,7 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { this.hardenHealTicks = 0; this.hardenSummonedScorpions = 0; this.resetAttackState(); + this.previousAttack = AttackType.NONE; this.getNavigation().stop(); } @@ -408,13 +481,12 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { this.setAggressive(false); } - private static final double NEARBY_SCORPION_CHECK_RADIUS = 24.0D; - - private int countNearbyScorpionMinions() { + private int countOwnedNearbyScorpionMinions() { + UUID ownerId = this.getUUID(); return this.level().getEntitiesOfClass( ScorpionEntity.class, this.getBoundingBox().inflate(NEARBY_SCORPION_CHECK_RADIUS), - Entity::isAlive + scorpion -> scorpion.isAlive() && scorpion.isSummonedFor(ownerId) ).size(); } @@ -428,16 +500,19 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { return; } + Vec3 anchor = this.getTarget() != null ? this.getTarget().position() : this.position(); Vec3 ring = Vec3.directionFromRotation(0.0F, this.random.nextFloat() * 360.0F) .scale(2.75D + this.random.nextDouble() * 1.75D); - BlockPos spawnPos = BlockPos.containing(this.getX() + ring.x, this.getY(), this.getZ() + ring.z); + BlockPos spawnPos = BlockPos.containing(anchor.x + ring.x, this.getY(), anchor.z + ring.z); scorpion.moveTo(spawnPos.getX() + 0.5D, spawnPos.getY(), spawnPos.getZ() + 0.5D, this.random.nextFloat() * 360.0F, 0.0F); scorpion.finalizeSpawn(serverLevel, serverLevel.getCurrentDifficultyAt(spawnPos), MobSpawnType.MOB_SUMMONED, null); scorpion.setPersistenceRequired(); + scorpion.setSummonOwner(this.getUUID()); if (this.getTarget() instanceof LivingEntity target) { scorpion.setTarget(target); } serverLevel.addFreshEntity(scorpion); + this.summonedScorpionIds.add(scorpion.getUUID()); } private void commitLunge(LivingEntity target, double horizontalSpeed, double verticalSpeed) { @@ -447,6 +522,7 @@ 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; } @@ -509,6 +585,14 @@ 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; @@ -600,6 +684,11 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { tag.putInt("HardenDurationTicks", this.hardenDurationTicks); tag.putInt("HardenHealTicks", this.hardenHealTicks); tag.putInt("HardenSummonedScorpions", this.hardenSummonedScorpions); + if (this.encounterHome != null) { + tag.putInt("EncounterHomeX", this.encounterHome.getX()); + tag.putInt("EncounterHomeY", this.encounterHome.getY()); + tag.putInt("EncounterHomeZ", this.encounterHome.getZ()); + } } @Override @@ -631,6 +720,16 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { if (tag.contains("HardenSummonedScorpions")) { this.hardenSummonedScorpions = tag.getInt("HardenSummonedScorpions"); } + if (tag.contains("EncounterHomeX") && tag.contains("EncounterHomeY") && tag.contains("EncounterHomeZ")) { + 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); + } + this.disengageTicks = 0; + this.summonedScorpionIds.clear(); } @Override @@ -653,6 +752,9 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { @Override public void remove(RemovalReason reason) { + if (!this.level().isClientSide) { + this.discardOwnedScorpions(); + } super.remove(reason); this.bossEvent.removeAllPlayers(); } @@ -661,6 +763,148 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { return this.attackAnimTicks > 0; } + private void tickEncounterState() { + if (this.encounterHome == null) { + this.encounterHome = this.blockPosition(); + } + + LivingEntity target = this.getTarget(); + if (!this.isValidEncounterTarget(target)) { + if (target != null) { + this.setTarget(null); + } + target = null; + } + + if (target != null) { + this.disengageTicks = 0; + if (this.isOutsideLeashRadius()) { + this.resetEncounter(true); + } + return; + } + + if (this.isAttackLocked() || this.isHardenSequenceActive()) { + return; + } + + if (this.hasOwnedScorpionsNearby()) { + this.disengageTicks = 0; + return; + } + + if (!this.isAtEncounterHome()) { + this.disengageTicks++; + if (this.disengageTicks >= RESET_DELAY_TICKS) { + this.resetEncounter(true); + } else { + this.navigateHome(); + } + return; + } + + this.disengageTicks = 0; + } + + private boolean isValidEncounterTarget(@Nullable LivingEntity target) { + if (target == null || !target.isAlive() || !target.level().equals(this.level())) { + return false; + } + if (target instanceof Player player && (player.isCreative() || player.isSpectator())) { + return false; + } + if (this.encounterHome == null) { + return true; + } + return target.distanceToSqr(Vec3.atCenterOf(this.encounterHome)) <= ENCOUNTER_LEASH_RADIUS * ENCOUNTER_LEASH_RADIUS; + } + + private boolean shouldShowBossBar() { + return this.getTarget() != null + || this.isAttackLocked() + || this.isHardenSequenceActive() + || this.hasOwnedScorpionsNearby() + || !this.isAtEncounterHome(); + } + + private boolean isAtEncounterHome() { + if (this.encounterHome == null) { + return true; + } + return this.distanceToSqr(Vec3.atCenterOf(this.encounterHome)) <= HOME_REACHED_RADIUS; + } + + private boolean isOutsideLeashRadius() { + if (this.encounterHome == null) { + return false; + } + return this.distanceToSqr(Vec3.atCenterOf(this.encounterHome)) > ENCOUNTER_LEASH_RADIUS * ENCOUNTER_LEASH_RADIUS; + } + + private boolean hasOwnedScorpionsNearby() { + return this.countOwnedNearbyScorpionMinions() > 0; + } + + private void navigateHome() { + if (this.encounterHome == null) { + return; + } + Vec3 homeCenter = Vec3.atCenterOf(this.encounterHome); + if (this.distanceToSqr(homeCenter) > FORCED_RETURN_RADIUS * FORCED_RETURN_RADIUS) { + this.moveTo(homeCenter.x, this.encounterHome.getY(), homeCenter.z, this.getYRot(), this.getXRot()); + this.setDeltaMovement(Vec3.ZERO); + this.hasImpulse = true; + return; + } + this.getNavigation().moveTo(homeCenter.x, this.encounterHome.getY(), homeCenter.z, HOME_RETURN_SPEED); + } + + private void resetEncounter(boolean restoreHealth) { + this.resetAttackState(); + this.getNavigation().stop(); + this.setTarget(null); + this.setAggressive(false); + this.setHardenPhase(HardenPhase.NONE); + this.hardenCastTicks = 0; + this.hardenCastSpawnTicks = 0; + this.hardenStateTicks = 0; + this.hardenDurationTicks = 0; + this.hardenHealTicks = 0; + this.hardenSummonedScorpions = 0; + this.hardenCooldownTicks = Math.max(1, AntarchySettings.emperorScorpionHardenCooldownTicks()); + this.disengageTicks = 0; + this.previousAttack = AttackType.NONE; + if (restoreHealth) { + this.setHealth(this.getMaxHealth()); + } + this.discardOwnedScorpions(); + if (this.encounterHome != null) { + Vec3 homeCenter = Vec3.atCenterOf(this.encounterHome); + this.moveTo(homeCenter.x, this.encounterHome.getY(), homeCenter.z, this.getYRot(), this.getXRot()); + this.setDeltaMovement(Vec3.ZERO); + } + } + + private void discardOwnedScorpions() { + if (!(this.level() instanceof ServerLevel serverLevel)) { + this.summonedScorpionIds.clear(); + return; + } + UUID ownerId = this.getUUID(); + for (UUID scorpionId : Set.copyOf(this.summonedScorpionIds)) { + Entity entity = serverLevel.getEntity(scorpionId); + if (entity instanceof ScorpionEntity scorpion && scorpion.isAlive() && scorpion.isSummonedFor(ownerId)) { + scorpion.remove(RemovalReason.DISCARDED); + } + } + this.level().getEntitiesOfClass( + ScorpionEntity.class, + this.getBoundingBox().inflate(NEARBY_SCORPION_CHECK_RADIUS * 2.0D), + scorpion -> scorpion.isAlive() && scorpion.isSummonedFor(ownerId) + ).forEach(scorpion -> scorpion.remove(RemovalReason.DISCARDED)); + this.summonedScorpionIds.clear(); + } + public boolean isHardenSequenceActive() { return this.getHardenPhase() != HardenPhase.NONE; } @@ -761,23 +1005,31 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { @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; } private AttackType selectAttack(LivingEntity target) { - boolean inClawRange = this.clawCooldownTicks <= 0 && this.distanceToSqr(target) <= CLAW_RANGE * CLAW_RANGE; - boolean inStingRange = this.stingCooldownTicks <= 0 && this.distanceToSqr(target) <= STING_RANGE * STING_RANGE; + 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); - if (canSting && (!canClaw || this.random.nextFloat() < 0.3F)) { + 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) { return AttackType.STING; } if (canClaw) { return AttackType.CLAW; } - if (canSting) { - return AttackType.STING; - } return AttackType.NONE; } @@ -801,6 +1053,14 @@ 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 a67d5f87..f265b488 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 @@ -202,6 +202,13 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl .add(Attributes.ARMOR, 12.0D); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, + MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.herculesBeetleHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER || spawnReason == MobSpawnType.COMMAND) { return true; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java index f01d8b87..b84d1d78 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java @@ -62,6 +62,13 @@ public class LurkingTerrorEntity extends Monster implements GeoEntity { .add(Attributes.FLYING_SPEED, 0.55D); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, + MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.lurkingTerrorHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER || spawnReason == MobSpawnType.COMMAND) { return true; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MantisEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MantisEntity.java index f81d7eaa..ab612f35 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MantisEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MantisEntity.java @@ -15,6 +15,7 @@ import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.MobSpawnType; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.AttributeInstance; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.goal.FloatGoal; import net.minecraft.world.entity.ai.goal.MeleeAttackGoal; @@ -24,6 +25,7 @@ import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; import net.minecraft.world.entity.ai.navigation.GroundPathNavigation; import net.minecraft.world.entity.ai.navigation.PathNavigation; import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.entity.SpawnGroupData; import net.minecraft.world.level.block.LeavesBlock; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; @@ -68,6 +70,7 @@ public class MantisEntity extends Monster implements GeoEntity { protected int flyBurstTicks; protected int flyCooldownTicks; private int debugLogTicks = 0; + private int configSyncTicks; public MantisEntity(EntityType entityType, Level level) { super(entityType, level); @@ -89,6 +92,13 @@ public class MantisEntity extends Monster implements GeoEntity { .add(Attributes.ARMOR, 4.0D); } + @Override + public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData spawnData) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, this.configuredMaxHealth()); + this.syncConfiguredAttributes(false); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER @@ -200,6 +210,11 @@ public class MantisEntity extends Monster implements GeoEntity { public void tick() { super.tick(); if (!this.level().isClientSide) { + if (this.configSyncTicks-- <= 0) { + this.configSyncTicks = 20; + this.syncConfiguredAttributes(true); + } + if (this.attackAnimationTicks > 0) { this.attackAnimationTicks--; } @@ -278,6 +293,22 @@ public class MantisEntity extends Monster implements GeoEntity { return COMBAT_SPEED; } + protected double configuredMaxHealth() { + return AntarchySettings.mantisHealth(); + } + + protected double configuredAttackDamage() { + return AntarchySettings.mantisAttackDamage(); + } + + protected double configuredMovementSpeed() { + return AntarchySettings.mantisMovementSpeed(); + } + + protected double configuredFlyingSpeed() { + return AntarchySettings.mantisFlyingSpeed(); + } + protected void onActiveTarget(LivingEntity target) { } @@ -349,6 +380,36 @@ public class MantisEntity extends Monster implements GeoEntity { return this.flyBurstTicks > 0; } + private void syncConfiguredAttributes(boolean rescaleCurrentHealth) { + syncAttribute(this.getAttribute(Attributes.MAX_HEALTH), this.configuredMaxHealth(), rescaleCurrentHealth); + syncAttribute(this.getAttribute(Attributes.ATTACK_DAMAGE), this.configuredAttackDamage(), false); + syncAttribute(this.getAttribute(Attributes.MOVEMENT_SPEED), this.configuredMovementSpeed(), false); + syncAttribute(this.getAttribute(Attributes.FLYING_SPEED), this.configuredFlyingSpeed(), false); + } + + private void syncAttribute(@Nullable AttributeInstance attributeInstance, double desiredValue, boolean rescaleCurrentHealth) { + if (attributeInstance == null) { + return; + } + + double previousValue = attributeInstance.getBaseValue(); + if (Math.abs(previousValue - desiredValue) < 1.0E-6D) { + return; + } + + attributeInstance.setBaseValue(desiredValue); + if (!rescaleCurrentHealth) { + this.setHealth((float) this.getMaxHealth()); + return; + } + + float currentHealth = this.getHealth(); + float syncedHealth = previousValue > 0.0D + ? (float) net.minecraft.util.Mth.clamp((currentHealth / (float) previousValue) * desiredValue, 0.0D, desiredValue) + : (float) desiredValue; + this.setHealth(syncedHealth); + } + private void tickDebugLog() { if (++this.debugLogTicks < 100) { return; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MissileSquidEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MissileSquidEntity.java index 19a5bb69..c28db991 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MissileSquidEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MissileSquidEntity.java @@ -109,6 +109,13 @@ public class MissileSquidEntity extends Monster implements GeoEntity { .add(Attributes.KNOCKBACK_RESISTANCE, AntarchySettings.missileSquidKnockbackResistance()); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, + MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.missileSquidHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { return level.getDifficulty() != Difficulty.PEACEFUL && pos.getY() <= level.getSeaLevel() - 10 diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MolevoreEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MolevoreEntity.java index 90b61a27..8cdf892d 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MolevoreEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MolevoreEntity.java @@ -59,6 +59,10 @@ public class MolevoreEntity extends Monster implements GeoEntity { Registries.BIOME, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "moleworm_caves") ); + private static final ResourceKey CAVARYN_MOLEWORM_CAVES = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "cavaryn_moleworm_caves") + ); private static final EntityDataAccessor ACTION_STATE = SynchedEntityData.defineId(MolevoreEntity.class, EntityDataSerializers.INT); private static final int ACTION_NONE = 0; @@ -122,7 +126,7 @@ public class MolevoreEntity extends Monster implements GeoEntity { } private static boolean hasSpawnPocket(LevelAccessor level, BlockPos pos) { - if (!level.getBiome(pos).is(MOLEWORM_CAVES)) { + if (!level.getBiome(pos).is(MOLEWORM_CAVES) && !level.getBiome(pos).is(CAVARYN_MOLEWORM_CAVES)) { return false; } @@ -180,6 +184,7 @@ public class MolevoreEntity extends Monster implements GeoEntity { @Nullable public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData spawnGroupData) { SpawnGroupData finalized = super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData); + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.molevoreHealth()); if (spawnReason != MobSpawnType.SPAWN_EGG) { this.startDigUp(); } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MolewormEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MolewormEntity.java index 8fd69153..c6239ed8 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MolewormEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MolewormEntity.java @@ -80,6 +80,13 @@ public class MolewormEntity extends Monster implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, AntarchySettings.molewormAttackDamage()); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, + MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.molewormHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + @SuppressWarnings("unchecked") public static boolean canSpawn(EntityType entityType, LevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { return Silverfish.checkSilverfishSpawnRules((EntityType) (EntityType) entityType, level, spawnReason, pos, random); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/OuranwoodDeerEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/OuranwoodDeerEntity.java index b8cae22a..b2876469 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/OuranwoodDeerEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/OuranwoodDeerEntity.java @@ -160,6 +160,7 @@ public class OuranwoodDeerEntity extends Animal implements GeoEntity { public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData spawnGroupData) { DeerSpawnData deerSpawnData = spawnGroupData instanceof DeerSpawnData data ? data : new DeerSpawnData(); SpawnGroupData result = super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData); + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.ouranwoodDeerHealth()); if (spawnReason == MobSpawnType.NATURAL || spawnReason == MobSpawnType.CHUNK_GENERATION || spawnReason == MobSpawnType.SPAWN_EGG) { this.setVariant(Variant.values()[this.random.nextInt(Variant.values().length)]); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ReverieEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ReverieEntity.java index 23fefb81..6ce154af 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ReverieEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ReverieEntity.java @@ -204,6 +204,13 @@ public class ReverieEntity extends PathfinderMob implements FlyingAnimal, GeoEnt .add(Attributes.FOLLOW_RANGE, 32.0D); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, + MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.reverieHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER || spawnReason == MobSpawnType.COMMAND) { return true; 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 bef51ef8..8b1143cf 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 @@ -120,6 +120,13 @@ public class RollyPollyEntity extends TamableAnimal implements GeoEntity { .add(Attributes.FOLLOW_RANGE, 16.0D); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, + net.minecraft.world.entity.MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.rollyPollyHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ScorpionEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ScorpionEntity.java index 595e138b..ebf282cb 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ScorpionEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ScorpionEntity.java @@ -44,11 +44,14 @@ import software.bernie.geckolib.animation.RawAnimation; import software.bernie.geckolib.util.GeckoLibUtil; import org.jetbrains.annotations.Nullable; +import java.util.UUID; + public class ScorpionEntity extends Monster implements GeoEntity { private static final byte ATTACK_ANIM_EVENT = 4; private static final EntityDataAccessor TEXTURE_VARIANT = SynchedEntityData.defineId(ScorpionEntity.class, EntityDataSerializers.INT); private static final String TEXTURE_VARIANT_KEY = "TextureVariant"; + private static final String SUMMON_OWNER_KEY = "SummonOwner"; public static final int BLUE_VARIANT = 0; public static final int GREEN_VARIANT = 1; @@ -67,6 +70,7 @@ public class ScorpionEntity extends Monster implements GeoEntity { private int attackCooldownTicks = 0; private boolean attackDamageApplied = false; @Nullable private LivingEntity attackTarget; + @Nullable private UUID summonOwner; public ScorpionEntity(EntityType entityType, Level level) { super(entityType, level); @@ -115,6 +119,7 @@ public class ScorpionEntity extends Monster implements GeoEntity { @Override public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnType, @Nullable SpawnGroupData spawnGroupData) { this.assignRandomTextureVariant(); + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.scorpionHealth()); return super.finalizeSpawn(level, difficulty, spawnType, spawnGroupData); } @@ -237,6 +242,9 @@ public class ScorpionEntity extends Monster implements GeoEntity { public void addAdditionalSaveData(CompoundTag tag) { super.addAdditionalSaveData(tag); tag.putInt(TEXTURE_VARIANT_KEY, this.getTextureVariant()); + if (this.summonOwner != null) { + tag.putUUID(SUMMON_OWNER_KEY, this.summonOwner); + } } @Override @@ -247,6 +255,7 @@ public class ScorpionEntity extends Monster implements GeoEntity { } else { this.assignRandomTextureVariant(); } + this.summonOwner = tag.hasUUID(SUMMON_OWNER_KEY) ? tag.getUUID(SUMMON_OWNER_KEY) : null; } @Override @@ -277,6 +286,19 @@ public class ScorpionEntity extends Monster implements GeoEntity { this.entityData.set(TEXTURE_VARIANT, variant == GREEN_VARIANT ? GREEN_VARIANT : BLUE_VARIANT); } + public void setSummonOwner(@Nullable UUID summonOwner) { + this.summonOwner = summonOwner; + } + + @Nullable + public UUID getSummonOwner() { + return this.summonOwner; + } + + public boolean isSummonedFor(UUID ownerId) { + return ownerId.equals(this.summonOwner); + } + private void assignRandomTextureVariant() { this.setTextureVariant(this.random.nextBoolean() ? BLUE_VARIANT : GREEN_VARIANT); } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java index 815b1d84..e5414f58 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java @@ -153,6 +153,13 @@ public class ToreterrorEntity extends Monster implements GeoEntity { .add(Attributes.ARMOR_TOUGHNESS, 4.0D); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, + MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.toreterrorHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, net.minecraft.util.RandomSource random) { boolean sturdy = level.getBlockState(pos.below()).isFaceSturdy(level, pos.below(), Direction.UP); return level.getDifficulty() != Difficulty.PEACEFUL && sturdy; 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 6d2454d8..3916b514 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 @@ -101,6 +101,13 @@ public class TriffidEntity extends Monster implements GeoEntity { .add(Attributes.MOVEMENT_SPEED, 0.0D); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, + MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.triffidHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + public static boolean canSpawn(EntityType entityType, LevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { if (pos.getY() < level.getMinBuildHeight() || pos.getY() + 7 >= level.getMaxBuildHeight()) { return false; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/UpwardFallingBlockEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/UpwardFallingBlockEntity.java index b7280115..4d1c6e42 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/UpwardFallingBlockEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/UpwardFallingBlockEntity.java @@ -2,7 +2,6 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.content.block.AntimetalScaffoldingBlock; import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtUtils; import net.minecraft.network.syncher.EntityDataAccessor; @@ -14,6 +13,7 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.PointedDripstoneBlock; import net.minecraft.world.level.block.state.BlockState; @@ -32,6 +32,7 @@ public class UpwardFallingBlockEntity extends Entity { private static final int MAX_TICKS = 200; public int time = 0; + private boolean breaksOnLeaves = true; public UpwardFallingBlockEntity(EntityType type, Level level) { super(type, level); @@ -48,6 +49,10 @@ public class UpwardFallingBlockEntity extends Entity { } public static void fallUp(Level level, BlockPos pos, BlockState state) { + fallUp(level, pos, state, true); + } + + public static void fallUp(Level level, BlockPos pos, BlockState state, boolean breaksOnLeaves) { if (level.isClientSide) return; // Prevent stacking multiple entities from the same block position if (!level.getEntitiesOfClass(UpwardFallingBlockEntity.class, new AABB(pos)).isEmpty()) return; @@ -55,6 +60,7 @@ public class UpwardFallingBlockEntity extends Entity { level.removeBlock(pos, false); UpwardFallingBlockEntity entity = new UpwardFallingBlockEntity(TYPE.get(), level); entity.entityData.set(DATA_BLOCK_STATE, state); + entity.breaksOnLeaves = breaksOnLeaves; entity.setPos(pos.getX() + 0.5, pos.getY(), pos.getZ() + 0.5); level.addFreshEntity(entity); } @@ -90,21 +96,35 @@ public class UpwardFallingBlockEntity extends Entity { BlockPos headPos = BlockPos.containing(getX(), getY() + getBbHeight(), getZ()); BlockState above = level().getBlockState(headPos); - // Leaves block the entity but can't hold scaffolding — drop as item - if (above.is(BlockTags.LEAVES)) { + // Leaves block the entity but can't hold scaffolding — drop as item, unless this + // instance is allowed to land on leaves like a normal falling block would + if (above.is(BlockTags.LEAVES) && this.breaksOnLeaves) { dropAndRemove(blockState); return; } - boolean hitCeiling = above.isFaceSturdy(level(), headPos, Direction.DOWN); + boolean hitCeiling = !above.isAir() && !above.getCollisionShape(level(), headPos).isEmpty(); boolean hitScaffolding = above.getBlock() instanceof AntimetalScaffoldingBlock; if (hitCeiling || hitScaffolding) { - dropAndRemove(blockState); + placeAtLanding(blockState, headPos.below()); return; } } + private void placeAtLanding(BlockState state, BlockPos landingPos) { + if (!level().isClientSide) { + BlockState existing = level().getBlockState(landingPos); + if (existing.canBeReplaced()) { + level().setBlock(landingPos, state, Block.UPDATE_ALL); + } else { + dropAndRemove(state); + return; + } + } + discard(); + } + private void damageEntitiesAlongPath(BlockState state) { float damage = getImpactDamage(state); if (damage <= 0.0F) { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/AntTeleportHelper.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/AntTeleportHelper.java index 524779ca..a4ecee6c 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/AntTeleportHelper.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/AntTeleportHelper.java @@ -125,6 +125,10 @@ public final class AntTeleportHelper { return InteractionResult.PASS; } + if (!isRightClickDimensionEnabled(entityTypeId)) { + return InteractionResult.PASS; + } + if (entityTypeId.equals(ResourceLocation.fromNamespaceAndPath("antarchy", "brown_ant"))) { return teleportToOrFromConfiguredDimension(player, AntarchySettings.brownAntDestinationDimension()); } @@ -156,6 +160,10 @@ public final class AntTeleportHelper { } static InteractionResult handleInteraction(BaseAntEntity ant, Player player, ItemStack itemStack) { + if (!isRightClickDimensionEnabled(ant)) { + return InteractionResult.PASS; + } + if (ant.requiresActivationReagent() && !ant.isTeleportActivatedState()) { if (!(player instanceof ServerPlayer serverPlayer)) { return InteractionResult.SUCCESS; @@ -184,6 +192,32 @@ public final class AntTeleportHelper { return teleportToOrFromConfiguredDimension(serverPlayer, ant.destinationDimension()); } + static boolean isRightClickDimensionEnabled(BaseAntEntity ant) { + return ant instanceof BrownAntEntity + ? AntarchySettings.brownAntRightClickDimension() + : ant instanceof RedAntEntity + ? AntarchySettings.redAntRightClickDimension() + : ant instanceof RainbowAntEntity + ? AntarchySettings.rainbowAntRightClickDimension() + : ant instanceof TermiteEntity && AntarchySettings.termiteRightClickDimension(); + } + + static boolean isRightClickDimensionEnabled(ResourceLocation entityTypeId) { + if (entityTypeId.equals(ResourceLocation.fromNamespaceAndPath("antarchy", "brown_ant"))) { + return AntarchySettings.brownAntRightClickDimension(); + } + if (entityTypeId.equals(ResourceLocation.fromNamespaceAndPath("antarchy", "red_ant"))) { + return AntarchySettings.redAntRightClickDimension(); + } + if (entityTypeId.equals(ResourceLocation.fromNamespaceAndPath("antarchy", "rainbow_ant"))) { + return AntarchySettings.rainbowAntRightClickDimension(); + } + if (entityTypeId.equals(ResourceLocation.fromNamespaceAndPath("antarchy", "termite"))) { + return AntarchySettings.termiteRightClickDimension(); + } + return true; + } + private static InteractionResult activateTeleport(BaseAntEntity ant, ServerPlayer player, ItemStack stack) { ant.setTeleportActivatedState(true); if (!player.getAbilities().instabuild) { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/BaseAntEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/BaseAntEntity.java index 65151fb6..d60bf92b 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/BaseAntEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/BaseAntEntity.java @@ -158,6 +158,13 @@ public abstract class BaseAntEntity extends Animal implements GeoEntity { super(entityType, level); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, + net.minecraft.world.entity.MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData) { + com.craisinlord.antarchy.content.entity.ConfiguredMobSpawnUtil.applyConfiguredHealth(this, this.configuredMaxHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); 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 5d6d37b9..430f9aec 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 @@ -77,6 +77,11 @@ public class RainbowAntEntity extends BaseAntEntity implements GeoEntity { @Override public InteractionResult mobInteract(Player player, InteractionHand hand) { + if (!AntTeleportHelper.isRightClickDimensionEnabled(this)) { + ItemStack heldItem = player.getItemInHand(hand); + return this.isFood(heldItem) ? super.mobInteract(player, hand) : InteractionResult.PASS; + } + if (!AntarchySettings.rainbowAntsLeadToInfinityDimensions() || !InfinityCompat.get().isAvailable()) { return super.mobInteract(player, hand); } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/basilisk/BasiliskEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/basilisk/BasiliskEntity.java index 61abd463..fddfa012 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/basilisk/BasiliskEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/basilisk/BasiliskEntity.java @@ -7,6 +7,7 @@ import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvent; import net.minecraft.util.Mth; @@ -63,6 +64,8 @@ public class BasiliskEntity extends Monster implements GeoEntity { SynchedEntityData.defineId(BasiliskEntity.class, EntityDataSerializers.INT); private static final byte ATTACK_ENTITY_EVENT = 4; private static final int DEATH_TICKS = 25; + private static final String TAG_HISS_COOLDOWN = "BasiliskHissCooldown"; + private static final String TAG_PREY_PETRIFY_COOLDOWN = "BasiliskPreyPetrifyCooldown"; private static final int ANIM_IDLE = 0; private static final int ANIM_WALK = 1; @@ -74,13 +77,15 @@ public class BasiliskEntity extends Monster implements GeoEntity { private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenPlay("attack"); private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlay("death"); - private static final float TURN_RATE_DEG_PER_TICK = 10.0F; + private static final float MIN_TURN_RATE_DEG_PER_TICK = 5.5F; + private static final float MAX_TURN_RATE_DEG_PER_TICK = 13.5F; private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); private int attackAnimTicks = 0; private boolean attackDamagePending = false; private int attackCooldown = 0; + private float committedAttackYaw = Float.NaN; private int hissCooldown = AntarchySettings.basiliskHissCooldownTicks(); private int hissChargeTimer = 0; @@ -110,6 +115,12 @@ public class BasiliskEntity extends Monster implements GeoEntity { .add(Attributes.FOLLOW_RANGE, AntarchySettings.basiliskFollowRange()); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, net.minecraft.world.entity.MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData) { + com.craisinlord.antarchy.content.entity.ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.basiliskHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { if (spawnReason == MobSpawnType.SPAWN_EGG @@ -160,9 +171,12 @@ public class BasiliskEntity extends Monster implements GeoEntity { private void performAoeAttack() { if (this.level().isClientSide) return; - // Start the animation; damage fires later in tick() when attackAnimTicks reaches the damage threshold + this.committedAttackYaw = this.resolveCommittedAttackYaw(); this.attackAnimTicks = AntarchySettings.basiliskAttackAnimTicks(); this.attackDamagePending = true; + this.stopActiveMovement(); + this.lockBodyYaw(this.committedAttackYaw); + this.setAnimationState(ANIM_ATTACK); this.level().broadcastEntityEvent(this, ATTACK_ENTITY_EVENT); } @@ -173,33 +187,42 @@ public class BasiliskEntity extends Monster implements GeoEntity { this.attackDamagePending = false; - Vec3 forward = Vec3.directionFromRotation(0, this.yBodyRot); + float attackYaw = Float.isNaN(this.committedAttackYaw) ? this.yBodyRot : this.committedAttackYaw; + Vec3 forward = Vec3.directionFromRotation(0, attackYaw); Vec3 right = new Vec3(-forward.z, 0, forward.x); - Vec3 origin = this.position(); - double attackReach = AntarchySettings.basiliskAttackReach(); + Vec3 attackOrigin = this.position(); + double attackReach = AntarchySettings.basiliskAttackReach() + 4.0D; + double verticalMin = attackOrigin.y - 0.9D; + double verticalMax = attackOrigin.y + 2.6D; List candidates = this.level().getEntitiesOfClass( LivingEntity.class, - this.getBoundingBox().inflate(Math.max(8.0D, attackReach + 3.5D)), + new AABB(attackOrigin, attackOrigin).inflate(attackReach + 1.5D, 3.0D, attackReach + 1.5D), e -> e != this && e.isAlive() ); - boolean hitAnything = false; for (LivingEntity entity : candidates) { - Vec3 toEntity = entity.position().subtract(origin); + if (!this.canAttack(entity) || this.isAlliedTo(entity) || !this.hasLineOfSight(entity)) { + continue; + } + + AABB entityBox = entity.getBoundingBox(); + if (entityBox.maxY < verticalMin || entityBox.minY > verticalMax) { + continue; + } + + Vec3 toEntity = entityBox.getCenter().subtract(attackOrigin); double fwdDist = toEntity.dot(forward); double sideDist = toEntity.dot(right); - double upDist = toEntity.y; - if (fwdDist >= 2.0 && fwdDist <= 7.0 && Math.abs(sideDist) <= 2.25 && upDist >= -1.0 && upDist <= 3.0) { - if (entity.hurt(AntarchyDamageSources.basiliskBite(serverLevel, this), - (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE))) { - hitAnything = true; - } + double sideAllowance = 1.35D + entity.getBbWidth() * 0.5D + Math.max(0.0D, fwdDist * 0.2D); + if (fwdDist < 1.0D || fwdDist > attackReach || Math.abs(sideDist) > sideAllowance) { + continue; } - } - if (hitAnything) { - this.playSound(AntarchySoundEvents.BASILISK_BITE.get(), 1.1F, 0.95F + this.random.nextFloat() * 0.08F); + entity.hurt( + AntarchyDamageSources.basiliskBite(serverLevel, this), + (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE) + ); } } @@ -210,6 +233,12 @@ public class BasiliskEntity extends Monster implements GeoEntity { if (this.attackAnimTicks > 0) { this.attackAnimTicks--; } + if (this.level() instanceof ServerLevel && this.attackAnimTicks > 0 && !Float.isNaN(this.committedAttackYaw)) { + this.lockBodyYaw(this.committedAttackYaw); + } + if (this.attackAnimTicks <= 0) { + this.committedAttackYaw = Float.NaN; + } if (this.isDeadOrDying()) { this.updateAnimationState(); @@ -228,6 +257,10 @@ public class BasiliskEntity extends Monster implements GeoEntity { } private void tickPlayerPetrification() { + if (this.isCommittedAttackActive()) { + return; + } + if (this.hissChargeTimer > 0) { Player target = this.getPendingPlayerTarget(); if (!this.canMaintainGazeOn(target)) { @@ -236,7 +269,7 @@ public class BasiliskEntity extends Monster implements GeoEntity { return; } - this.getNavigation().stop(); + this.stopActiveMovement(); this.getLookControl().setLookAt(target, 30.0F, 30.0F); this.hissChargeTimer--; if (this.hissChargeTimer == 0) { @@ -274,7 +307,7 @@ public class BasiliskEntity extends Monster implements GeoEntity { this.pendingTargetId = target.getUUID(); this.hissChargeTimer = AntarchySettings.basiliskHissChargeTicks(); this.hissCooldown = AntarchySettings.basiliskHissCooldownTicks(); - this.getNavigation().stop(); + this.stopActiveMovement(); this.getLookControl().setLookAt(target, 30.0F, 30.0F); } @@ -284,7 +317,7 @@ public class BasiliskEntity extends Monster implements GeoEntity { return; } - if (this.getTarget() != null || this.hissChargeTimer > 0) { + if (this.getTarget() != null || this.hissChargeTimer > 0 || this.isCommittedAttackActive()) { return; } @@ -447,17 +480,34 @@ public class BasiliskEntity extends Monster implements GeoEntity { public void die(DamageSource damageSource) { if (!this.level().isClientSide) { this.setAnimationState(ANIM_DEATH); - this.attackAnimTicks = 0; - this.attackDamagePending = false; - this.attackCooldown = 0; - this.hissChargeTimer = 0; - this.pendingTargetId = null; - this.getNavigation().stop(); + this.resetTransientCombatState(); + this.hissCooldown = AntarchySettings.basiliskHissCooldownTicks(); + this.preyPetrifyCooldown = AntarchySettings.basiliskPreyPetrifyCooldownTicks(); this.setDeltaMovement(Vec3.ZERO); } super.die(damageSource); } + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putInt(TAG_HISS_COOLDOWN, this.hissCooldown); + tag.putInt(TAG_PREY_PETRIFY_COOLDOWN, this.preyPetrifyCooldown); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.hissCooldown = tag.contains(TAG_HISS_COOLDOWN) + ? Math.max(0, tag.getInt(TAG_HISS_COOLDOWN)) + : AntarchySettings.basiliskHissCooldownTicks(); + this.preyPetrifyCooldown = tag.contains(TAG_PREY_PETRIFY_COOLDOWN) + ? Math.max(0, tag.getInt(TAG_PREY_PETRIFY_COOLDOWN)) + : AntarchySettings.basiliskPreyPetrifyCooldownTicks(); + this.resetTransientCombatState(); + this.setAnimationState(ANIM_IDLE); + } + @Override protected void tickDeath() { this.deathTime++; @@ -555,7 +605,54 @@ public class BasiliskEntity extends Monster implements GeoEntity { return 0.7F; } - /** Limits body rotation to TURN_RATE_DEG_PER_TICK so the long snake turns gradually. */ + private boolean isCommittedAttackActive() { + return this.attackAnimTicks > 0; + } + + private boolean isBusyWithAction() { + return this.hissChargeTimer > 0 || this.isCommittedAttackActive(); + } + + private float resolveCommittedAttackYaw() { + LivingEntity target = this.getTarget(); + if (target != null) { + Vec3 toTarget = target.position().subtract(this.position()); + if (toTarget.horizontalDistanceSqr() > 1.0E-6D) { + return (float)(Mth.atan2(toTarget.z, toTarget.x) * (180.0D / Math.PI)) - 90.0F; + } + } + return this.yBodyRot; + } + + private void lockBodyYaw(float yaw) { + this.setYRot(yaw); + this.yRotO = yaw; + this.yBodyRot = yaw; + this.yBodyRotO = yaw; + this.yHeadRot = yaw; + this.yHeadRotO = yaw; + } + + private void stopActiveMovement() { + this.getNavigation().stop(); + if (this.getMoveControl() instanceof BasiliskMoveControl moveControl) { + moveControl.halt(); + } + this.setSpeed(0.0F); + this.setZza(0.0F); + } + + private void resetTransientCombatState() { + this.attackAnimTicks = 0; + this.attackDamagePending = false; + this.attackCooldown = 0; + this.committedAttackYaw = Float.NaN; + this.hissChargeTimer = 0; + this.pendingTargetId = null; + this.stopActiveMovement(); + } + + /** Scales turn rate by intended movement speed so the long body pivots tighter when slow and wider when fast. */ private static final class BasiliskMoveControl extends MoveControl { private BasiliskMoveControl(Mob mob) { super(mob); @@ -568,6 +665,10 @@ public class BasiliskEntity extends Monster implements GeoEntity { @Override public void tick() { + if (((BasiliskEntity) this.mob).isBusyWithAction()) { + this.mob.setZza(0.0F); + return; + } if (this.operation == MoveControl.Operation.MOVE_TO) { this.operation = MoveControl.Operation.WAIT; double dx = this.wantedX - this.mob.getX(); @@ -577,12 +678,20 @@ public class BasiliskEntity extends Monster implements GeoEntity { this.mob.setZza(0.0F); return; } + float turnRate = this.getDynamicTurnRate(); float targetYaw = (float)(Mth.atan2(dz, dx) * (180.0 / Math.PI)) - 90.0F; - this.mob.setYRot(this.rotlerp(this.mob.getYRot(), targetYaw, TURN_RATE_DEG_PER_TICK)); + this.mob.setYRot(this.rotlerp(this.mob.getYRot(), targetYaw, turnRate)); this.mob.setSpeed((float)(this.speedModifier * this.mob.getAttributeValue(Attributes.MOVEMENT_SPEED))); this.mob.setZza(1.0F); } } + + private float getDynamicTurnRate() { + double baseSpeed = Math.max(0.01D, this.mob.getAttributeValue(Attributes.MOVEMENT_SPEED)); + double intendedSpeed = Math.max(0.0D, this.speedModifier * baseSpeed); + double normalizedSpeed = Mth.clamp(intendedSpeed / (baseSpeed * 1.2D), 0.0D, 1.0D); + return Mth.lerp((float) normalizedSpeed, MAX_TURN_RATE_DEG_PER_TICK, MIN_TURN_RATE_DEG_PER_TICK); + } } private final class PersistentNearestAttackableTargetGoal extends NearestAttackableTargetGoal { @@ -599,6 +708,11 @@ public class BasiliskEntity extends Monster implements GeoEntity { @Override public void tick() { + if (BasiliskEntity.this.hissChargeTimer > 0 || BasiliskEntity.this.attackAnimTicks > 0) { + this.stopMovement(); + return; + } + LivingEntity target = BasiliskEntity.this.getTarget(); if (target != null) { BasiliskEntity.this.getLookControl().setLookAt(target, 30.0F, 30.0F); @@ -607,11 +721,6 @@ public class BasiliskEntity extends Monster implements GeoEntity { // super handles path recalc and cooldown timer super.tick(); - if (BasiliskEntity.this.hissChargeTimer > 0 || BasiliskEntity.this.attackAnimTicks > 0) { - this.stopMovement(); - return; - } - if (target != null && BasiliskEntity.this.isWithinMeleeAttackRange(target)) { this.stopMovement(); this.checkAndPerformAttack(target); @@ -619,14 +728,14 @@ public class BasiliskEntity extends Monster implements GeoEntity { } private void stopMovement() { - BasiliskEntity.this.getNavigation().stop(); - ((BasiliskMoveControl) BasiliskEntity.this.getMoveControl()).halt(); - BasiliskEntity.this.setSpeed(0.0F); - BasiliskEntity.this.setZza(0.0F); + BasiliskEntity.this.stopActiveMovement(); } @Override public boolean canUse() { + if (BasiliskEntity.this.isBusyWithAction()) { + return false; + } LivingEntity target = BasiliskEntity.this.getTarget(); if (target == null || !target.isAlive()) return false; if (target instanceof Player p && (p.isCreative() || p.isSpectator())) return false; @@ -636,7 +745,7 @@ public class BasiliskEntity extends Monster implements GeoEntity { @Override public void start() { LivingEntity target = BasiliskEntity.this.getTarget(); - if (target != null) { + if (target != null && !BasiliskEntity.this.isBusyWithAction()) { BasiliskEntity.this.getNavigation().moveTo(target, 1.2D); } BasiliskEntity.this.setAggressive(true); @@ -644,7 +753,14 @@ public class BasiliskEntity extends Monster implements GeoEntity { @Override public boolean canContinueToUse() { - return BasiliskEntity.this.attackAnimTicks > 0 || super.canContinueToUse(); + return BasiliskEntity.this.isBusyWithAction() || super.canContinueToUse(); + } + + @Override + public void stop() { + super.stop(); + BasiliskEntity.this.setAggressive(false); + this.stopMovement(); } @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 4c9c26d0..71b5983f 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 @@ -111,6 +111,12 @@ public class CloudSharkEntity extends Monster implements GeoEntity { .add(Attributes.KNOCKBACK_RESISTANCE, AntarchySettings.cloudSharkKnockbackResistance()); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, net.minecraft.world.entity.MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData) { + com.craisinlord.antarchy.content.entity.ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.cloudSharkHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { return level.getDifficulty() != Difficulty.PEACEFUL 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 259bdbb7..cd253311 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,6 +6,7 @@ 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; @@ -54,12 +55,14 @@ 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") @@ -81,6 +84,8 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { SynchedEntityData.defineId(FlyingSquirrelEntity.class, EntityDataSerializers.OPTIONAL_UUID); private static final String PICKUP_ANIM_TICKS_KEY = "PickupAnimTicks"; + private static final String QUIRK_TICKS_KEY = "QuirkTicks"; + private static final String QUIRK_VARIANT_KEY = "QuirkVariant"; private static final String TEXTURE_VARIANT_KEY = "TextureVariant"; private static final String GLIDE_DIR_X_KEY = "GlideDirX"; private static final String GLIDE_DIR_Y_KEY = "GlideDirY"; @@ -129,6 +134,9 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { private static final RawAnimation CLIMB_ANIM = RawAnimation.begin().thenLoop("climbing"); private static final RawAnimation GLIDE_ANIM = RawAnimation.begin().thenLoop("gliding"); private static final RawAnimation PICKUP_ANIM = RawAnimation.begin().thenPlay("item_pickup"); + private static final String QUIRK_CONTROLLER = "quirk_controller"; + private static final String QUIRK_1_TRIGGER = "quirk1"; + private static final String QUIRK_2_TRIGGER = "quirk2"; private static final RawAnimation QUIRK_1_ANIM = RawAnimation.begin().thenPlay("quirk1"); private static final RawAnimation QUIRK_2_ANIM = RawAnimation.begin().thenPlay("quirk2"); @@ -178,11 +186,13 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { private ItemEntity cachedNutItem; @Nullable private BlockPos cachedHarvestableAcorn; - private int quirkCooldownTicks = MIN_QUIRK_COOLDOWN_TICKS; + private int quirkCooldownTicks; + private int lastTriggeredQuirkVariant = QUIRK_NONE; public FlyingSquirrelEntity(EntityType entityType, Level level) { super(entityType, level); this.setPathfindingMalus(PathType.LEAVES, -2.0F); + this.quirkCooldownTicks = this.nextQuirkCooldown(); } @Override @@ -253,9 +263,16 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { controllers.add(new AnimationController<>(this, "main_controller", 5, this::mainAnimController)); + controllers.add(new AnimationController<>(this, QUIRK_CONTROLLER, 0, state -> PlayState.STOP) + .triggerableAnim(QUIRK_1_TRIGGER, QUIRK_1_ANIM) + .triggerableAnim(QUIRK_2_TRIGGER, QUIRK_2_ANIM)); } private PlayState mainAnimController(AnimationState state) { + if (this.hasActiveQuirkAnimation()) { + return PlayState.STOP; + } + if (this.isPickingUpNut()) { return state.setAndContinue(PICKUP_ANIM); } @@ -273,11 +290,6 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { return state.setAndContinue(CLIMB_ANIM); } - if (this.getQuirkTicks() > 0) { - state.getController().setAnimationSpeed(1.0D); - return state.setAndContinue(this.getQuirkVariant() == QUIRK_2 ? QUIRK_2_ANIM : QUIRK_1_ANIM); - } - Vec3 motion = this.getDeltaMovement(); double horizontalSpeed = motion.horizontalDistanceSqr(); if (!this.isGliding() && !this.isClimbingTrunk() && motion.horizontalDistanceSqr() > 1.0E-4D) { @@ -303,6 +315,8 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { public void addAdditionalSaveData(CompoundTag tag) { super.addAdditionalSaveData(tag); tag.putInt(PICKUP_ANIM_TICKS_KEY, this.pickupAnimTicks); + tag.putInt(QUIRK_TICKS_KEY, this.getQuirkTicks()); + tag.putInt(QUIRK_VARIANT_KEY, this.getQuirkVariant()); tag.putInt(TEXTURE_VARIANT_KEY, this.getTextureVariant()); if (this.glideDirection != null) { tag.putDouble(GLIDE_DIR_X_KEY, this.glideDirection.x); @@ -316,6 +330,8 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { super.readAdditionalSaveData(tag); this.pickupAnimTicks = Math.max(0, tag.getInt(PICKUP_ANIM_TICKS_KEY)); this.setPickingUpNut(this.pickupAnimTicks > 0); + this.setQuirkTicks(Math.max(0, tag.getInt(QUIRK_TICKS_KEY))); + this.setQuirkVariant(tag.contains(QUIRK_VARIANT_KEY) ? tag.getInt(QUIRK_VARIANT_KEY) : QUIRK_NONE); if (tag.contains(TEXTURE_VARIANT_KEY)) { this.setTextureVariant(tag.getInt(TEXTURE_VARIANT_KEY)); } else { @@ -388,6 +404,7 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { if (!this.level().isClientSide) { this.tickPickupAnimation(); this.tickQuirkAnimation(); + this.syncQuirkAnimationTrigger(); if (this.isClimbingToShoulder()) { Player shoulderPlayer = this.shoulderPlayerId != null @@ -467,6 +484,9 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { this.tickIdleStallLogging(horizontalSpeed); } + if (this.level().isClientSide) { + this.syncQuirkAnimationTrigger(); + } if (this.isOnShoulder() && this.level().isClientSide) { Player shoulderPlayer = this.getShoulderPlayer(); if (shoulderPlayer != null) { @@ -647,6 +667,7 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { @Nullable public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData spawnGroupData) { SpawnGroupData finalized = super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData); + com.craisinlord.antarchy.content.entity.ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.flyingSquirrelHealth()); this.assignRandomTextureVariant(); this.stopGliding("spawn_initialized"); this.wanderCooldown = 40 + this.random.nextInt(60); @@ -791,14 +812,38 @@ 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); } + private void syncQuirkAnimationTrigger() { + 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; + } + if (quirkVariant == QUIRK_NONE) { + this.lastTriggeredQuirkVariant = QUIRK_NONE; + } + } + + private boolean hasActiveQuirkAnimation() { + return this.getQuirkVariant() != QUIRK_NONE && this.getQuirkTicks() > 0; + } + private int nextQuirkCooldown() { return MIN_QUIRK_COOLDOWN_TICKS + this.random.nextInt(MAX_QUIRK_COOLDOWN_TICKS - MIN_QUIRK_COOLDOWN_TICKS + 1); } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerEntity.java index c772ec0b..e9911fa6 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerEntity.java @@ -4,6 +4,7 @@ import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.advancement.AntarchyAdvancements; import com.craisinlord.antarchy.content.client.particle.GlimmerParticles; +import com.craisinlord.antarchy.content.entity.ConfiguredMobSpawnUtil; import com.craisinlord.antarchy.Antarchy; import net.minecraft.network.chat.Component; import net.minecraft.nbt.CompoundTag; @@ -133,6 +134,7 @@ public class GlimmerEntity extends TamableAnimal implements GeoEntity { public static AttributeSupplier.Builder createAttributes() { return TamableAnimal.createMobAttributes() .add(Attributes.MAX_HEALTH, AntarchySettings.glimmerHealth()) + .add(Attributes.ATTACK_DAMAGE, 1.0D) .add(Attributes.MOVEMENT_SPEED, 0.3D) .add(Attributes.FOLLOW_RANGE, 24.0D); } @@ -443,7 +445,8 @@ public class GlimmerEntity extends TamableAnimal implements GeoEntity { return InteractionResult.CONSUME; } - ItemStack filled = com.craisinlord.antarchy.content.item.GlimmerBottleItem.create(this.getVariant(), this.entityData.get(ABILITY_COOLDOWN)); + ItemStack filled = com.craisinlord.antarchy.content.item.GlimmerBottleItem.create( + this.getVariant(), this.entityData.get(ABILITY_COOLDOWN), this.entityData.get(SHEAR_COOLDOWN)); ItemStack result = net.minecraft.world.item.ItemUtils.createFilledResult(stack, player, filled); player.setItemInHand(hand, result); this.playSound(net.minecraft.sounds.SoundEvents.BOTTLE_FILL, 1.0F, 1.0F); @@ -460,6 +463,7 @@ public class GlimmerEntity extends TamableAnimal implements GeoEntity { @Nullable public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData spawnGroupData) { SpawnGroupData result = super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData); + com.craisinlord.antarchy.content.entity.ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.glimmerHealth()); if (!this.variantLocked) { this.setVariant(selectNaturalVariant(level, this.blockPosition())); this.variantLocked = true; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/TentacleEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/TentacleEntity.java index 15e842c3..0f301535 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/TentacleEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/TentacleEntity.java @@ -31,6 +31,7 @@ import java.util.UUID; public class TentacleEntity extends Mob implements GeoEntity { private static final RawAnimation GRASP_ANIM = RawAnimation.begin().thenLoop("animation"); + private static final float SPAWN_SOUND_VOLUME = 0.35F; private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); private int lifetimeTicks; @@ -82,7 +83,7 @@ public class TentacleEntity extends Mob implements GeoEntity { tentacle.ownerId = owner.getUUID(); } level.addFreshEntity(tentacle); - level.playSound(null, pos.x, pos.y, pos.z, AntarchySoundEvents.KRAKEN_ATTACK.get(), SoundSource.HOSTILE, 1.0F, 1.0F); + level.playSound(null, pos.x, pos.y, pos.z, AntarchySoundEvents.KRAKEN_ATTACK.get(), SoundSource.HOSTILE, SPAWN_SOUND_VOLUME, 1.0F); } @Override diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/lucid/LucidEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/lucid/LucidEntity.java index d5ad5e71..d57c1e9a 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/lucid/LucidEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/lucid/LucidEntity.java @@ -104,6 +104,13 @@ public class LucidEntity extends Monster implements GeoEntity { .add(Attributes.KNOCKBACK_RESISTANCE, AntarchySettings.lucidKnockbackResistance()); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, + MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData) { + com.craisinlord.antarchy.content.entity.ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.lucidHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { return level.getDifficulty() != Difficulty.PEACEFUL @@ -552,4 +559,3 @@ public class LucidEntity extends Monster implements GeoEntity { - 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 new file mode 100644 index 00000000..eb12455d --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareBiteEntity.java @@ -0,0 +1,123 @@ +package com.craisinlord.antarchy.content.entity.nightmare; + +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.world.damagesource.DamageSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; +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 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 final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private int ageTicks; + + public NightmareBiteEntity(EntityType entityType, Level level) { + super(entityType, level); + this.setInvulnerable(true); + this.noPhysics = true; + this.noCulling = true; + } + + public static NightmareBiteEntity spawnAt(ServerLevel level, Vec3 pos, float yaw, boolean phaseTwo) { + NightmareBiteEntity bite = new NightmareBiteEntity(AntarchyObjects.NIGHTMARE_BITE.get(), level); + bite.moveTo(pos.x, pos.y, pos.z, yaw, 0.0F); + bite.setPhaseTwo(phaseTwo); + level.addFreshEntity(bite); + return bite; + } + + @Override + protected void defineSynchedData(SynchedEntityData.Builder builder) { + builder.define(PHASE_TWO, false); + } + + @Override + public boolean isInvulnerableTo(DamageSource damageSource) { + return true; + } + + @Override + public boolean fireImmune() { + return true; + } + + @Override + public void lavaHurt() { + } + + @Override + public boolean isPushable() { + return false; + } + + @Override + public boolean canBeCollidedWith() { + return false; + } + + @Override + public boolean isPickable() { + return false; + } + + public boolean isPhaseTwo() { + return this.entityData.get(PHASE_TWO); + } + + private void setPhaseTwo(boolean phaseTwo) { + this.getEntityData().set(PHASE_TWO, phaseTwo); + } + + @Override + public void tick() { + super.tick(); + if (this.level().isClientSide) { + return; + } + if (++this.ageTicks >= 12) { + this.discard(); + } + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + tag.putBoolean("PhaseTwo", this.isPhaseTwo()); + tag.putInt("AgeTicks", this.ageTicks); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + this.setPhaseTwo(tag.getBoolean("PhaseTwo")); + this.ageTicks = tag.getInt("AgeTicks"); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "bite_controller", 0, this::biteController)); + } + + private PlayState biteController(AnimationState state) { + return state.setAndContinue(BITE_ANIM); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } +} 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 bc44bf3b..284bf514 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,7 @@ 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; @@ -22,6 +22,7 @@ import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityDimensions; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.Mob; @@ -53,14 +54,19 @@ 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.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); + private static final EntityDataAccessor PHASE_TWO = SynchedEntityData.defineId(NightmareEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor PHASE_TWO_TEXTURE = SynchedEntityData.defineId(NightmareEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor PHASE_TRANSITIONING = SynchedEntityData.defineId(NightmareEntity.class, EntityDataSerializers.BOOLEAN); private static final String ATTACK_COOLDOWN_KEY = "AttackCooldown"; private static final String ATTACK_ANIMATION_TICKS_KEY = "AttackAnimationTicks"; @@ -70,13 +76,33 @@ public class NightmareEntity extends Monster implements GeoEntity { private static final String INTRO_ROAR_USED_KEY = "IntroRoarUsed"; private static final String TARGETLESS_TICKS_KEY = "TargetlessTicks"; private static final String ANIMATION_STATE_KEY = "AnimationState"; + private static final String ACTIVE_SPECIAL_ANIMATION_KEY = "ActiveSpecialAnimation"; + private static final String PHASE_TWO_KEY = "PhaseTwo"; + 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 PORTAL_COOLDOWN_KEY = "PortalCooldown"; + private static final String PORTAL_ATTACK_TICKS_KEY = "PortalAttackTicks"; + private static final String PORTAL_ATTACK_HIT_KEY = "PortalAttackHitApplied"; + private static final String PORTAL_TRAVEL_TICKS_KEY = "PortalTravelTicks"; + private static final String PORTAL_ENTRY_ID_KEY = "PortalEntryId"; + private static final String PORTAL_EXIT_ID_KEY = "PortalExitId"; + private static final String PORTAL_EXIT_X_KEY = "PortalExitX"; + private static final String PORTAL_EXIT_Y_KEY = "PortalExitY"; + private static final String PORTAL_EXIT_Z_KEY = "PortalExitZ"; private static final int ANIM_IDLE = 0; private static final int ANIM_WALK = 1; private static final int ANIM_FLY = 2; - private static final int ANIM_ATTACK = 3; - private static final int ANIM_FLY_ATTACK = 4; - private static final int ANIM_ROAR = 5; + private static final int SPECIAL_NONE = 0; + private static final int SPECIAL_ATTACK = 1; + private static final int SPECIAL_ATTACK_P2 = 2; + private static final int SPECIAL_FLY_ATTACK = 3; + private static final int SPECIAL_FLY_ATTACK_P2 = 4; + private static final int SPECIAL_ROAR = 5; + private static final int SPECIAL_ROAR_P2 = 6; + private static final int SPECIAL_PHASE_TWO = 7; + private static final int SPECIAL_PORTAL = 8; private static final int ATTACK_TOTAL_TICKS = 20; private static final int ATTACK_DAMAGE_TICK = 10; private static final int INTRO_ROAR_TICKS = 30; @@ -88,6 +114,13 @@ public class NightmareEntity extends Monster implements GeoEntity { private static final int WEAKNESS_TICKS = 100; private static final int BLOCK_BREAK_TICKS = 10; 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 double PATROL_SPEED = 0.34D; private static final double COMBAT_FLIGHT_SPEED = 0.725D; @@ -95,16 +128,47 @@ public class NightmareEntity extends Monster implements GeoEntity { private static final double ATTACK_START_RANGE_SQR = 42.25D; private static final double ATTACK_REACH_RADIUS = 2.65D; private static final double ATTACK_COMMIT_HORIZONTAL_RANGE = 4.2D; - private static final double FLIGHT_ENGAGE_RANGE_SQR = 100.0D; - private static final double FLIGHT_DISENGAGE_RANGE_SQR = 36.0D; + 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; + private static final double FLIGHT_DISENGAGE_RANGE_SQR = 20.25D; + 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_MIN_RANGE_SQR = 49.0D; + private static final double PORTAL_EXIT_OFFSET = 2.35D; + private static final double PORTAL_TRANSPORT_RADIUS = 1.25D; + 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_TOO_CLOSE_RANGE_SQR = 9.0D; + private static final double ANIMATION_MOVEMENT_THRESHOLD_SQR = 0.01D; private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); private static final RawAnimation FLY_ANIM = RawAnimation.begin().thenLoop("fly"); - private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenPlay("attack").thenLoop("idle"); - private static final RawAnimation FLY_ATTACK_ANIM = RawAnimation.begin().thenPlay("attack2").thenLoop("fly"); - private static final RawAnimation ROAR_ANIM = RawAnimation.begin().thenPlay("roar").thenLoop("idle"); + private static final RawAnimation PHASE_TWO_IDLE_ANIM = RawAnimation.begin().thenLoop("idle_P2"); + private static final RawAnimation PHASE_TWO_WALK_ANIM = RawAnimation.begin().thenLoop("walk_P2"); + private static final RawAnimation PHASE_TWO_FLY_ANIM = RawAnimation.begin().thenLoop("fly_P2"); + private static final String LOCOMOTION_CONTROLLER = "main_controller"; + private static final String SPECIAL_CONTROLLER = "special_controller"; + private static final String SPECIAL_ATTACK_TRIGGER = "attack"; + private static final String SPECIAL_ATTACK_P2_TRIGGER = "attack_P2"; + private static final String SPECIAL_FLY_ATTACK_TRIGGER = "attack2"; + private static final String SPECIAL_FLY_ATTACK_P2_TRIGGER = "attack2_P2"; + private static final String SPECIAL_ROAR_TRIGGER = "roar"; + private static final String SPECIAL_ROAR_P2_TRIGGER = "roar_P2"; + private static final String SPECIAL_PHASE_TWO_TRIGGER = "phase2"; + private static final String SPECIAL_PORTAL_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_ATTACK_ANIM = RawAnimation.begin().thenPlayAndHold("portal_out"); + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); private int attackCooldown; @@ -117,9 +181,20 @@ public class NightmareEntity extends Monster implements GeoEntity { private int groundMoveTicks; private int wingFlapCooldown; private int blockBreakCooldown; + private int phaseTransitionTicks; + private int portalCooldown; + private int portalAttackTicks; + private int portalTravelTicks; private boolean attackHitApplied; private boolean introRoarUsed; private boolean flyingToTarget; + private boolean portalAttackHitApplied; + private int lastTriggeredSpecialAnimation = SPECIAL_NONE; + private Vec3 portalExitPos; + @Nullable + private NightmarePortalEntity entryPortal; + @Nullable + private NightmarePortalEntity exitPortal; public NightmareEntity(EntityType entityType, Level level) { super(entityType, level); @@ -138,6 +213,13 @@ public class NightmareEntity extends Monster implements GeoEntity { .add(Attributes.ARMOR, 8.0D); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, + MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData) { + com.craisinlord.antarchy.content.entity.ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.nightmareHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { boolean sturdy = level.getBlockState(pos.below()).isFaceSturdy(level, pos.below(), Direction.UP); boolean posEmpty = level.isEmptyBlock(pos); @@ -149,17 +231,23 @@ public class NightmareEntity extends Monster implements GeoEntity { protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); builder.define(ANIMATION_STATE, ANIM_IDLE); + builder.define(ACTIVE_SPECIAL_ANIMATION, SPECIAL_NONE); builder.define(ROARING, false); + builder.define(PHASE_TWO, false); + builder.define(PHASE_TWO_TEXTURE, false); + builder.define(PHASE_TRANSITIONING, false); } @Override protected void registerGoals() { - this.goalSelector.addGoal(1, new NightmareRoarGoal()); - this.goalSelector.addGoal(2, new NightmareFlyToTargetGoal()); - this.goalSelector.addGoal(3, new NightmareMeleeGoal()); - this.goalSelector.addGoal(5, new LookAtPlayerGoal(this, Player.class, 16.0F)); - this.goalSelector.addGoal(6, new RandomLookAroundGoal(this)); - this.goalSelector.addGoal(7, new NightmareWanderGoal()); + this.goalSelector.addGoal(1, new NightmarePhaseTransitionGoal()); + this.goalSelector.addGoal(2, new NightmarePortalGoal()); + this.goalSelector.addGoal(3, new NightmareRoarGoal()); + this.goalSelector.addGoal(4, new NightmareFlyToTargetGoal()); + this.goalSelector.addGoal(5, new NightmareMeleeGoal()); + this.goalSelector.addGoal(7, new LookAtPlayerGoal(this, Player.class, 16.0F)); + this.goalSelector.addGoal(8, new RandomLookAroundGoal(this)); + this.goalSelector.addGoal(9, new NightmareWanderGoal()); this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, this::canTargetEntity)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Mob.class, 10, true, false, this::canTargetEntity)); @@ -167,22 +255,29 @@ public class NightmareEntity extends Monster implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "main_controller", 0, this::mainAnimController)); + controllers.add(new AnimationController<>(this, LOCOMOTION_CONTROLLER, 0, this::mainAnimController)); + controllers.add(new AnimationController<>(this, SPECIAL_CONTROLLER, 0, state -> PlayState.STOP) + .triggerableAnim(SPECIAL_ATTACK_TRIGGER, ATTACK_ANIM) + .triggerableAnim(SPECIAL_ATTACK_P2_TRIGGER, ATTACK_P2_ANIM) + .triggerableAnim(SPECIAL_FLY_ATTACK_TRIGGER, FLY_ATTACK_ANIM) + .triggerableAnim(SPECIAL_FLY_ATTACK_P2_TRIGGER, FLY_ATTACK_P2_ANIM) + .triggerableAnim(SPECIAL_ROAR_TRIGGER, ROAR_ANIM) + .triggerableAnim(SPECIAL_ROAR_P2_TRIGGER, ROAR_P2_ANIM) + .triggerableAnim(SPECIAL_PHASE_TWO_TRIGGER, PHASE_TWO_TRANSITION_ANIM) + .triggerableAnim(SPECIAL_PORTAL_TRIGGER, PORTAL_ATTACK_ANIM)); } private PlayState mainAnimController(AnimationState state) { + if (this.hasActiveSpecialAnimation()) { + return PlayState.STOP; + } int animState = this.getAnimationState(); - state.getController().setAnimationSpeed(switch (animState) { - case ANIM_FLY -> 0.45D; - default -> 1.0D; - }); + state.getController().setAnimationSpeed(animState == ANIM_FLY ? 0.45D : 1.0D); + boolean phaseTwo = this.isPhaseTwo(); return switch (animState) { - case ANIM_WALK -> state.setAndContinue(WALK_ANIM); - case ANIM_FLY -> state.setAndContinue(FLY_ANIM); - case ANIM_ATTACK -> state.setAndContinue(ATTACK_ANIM); - case ANIM_FLY_ATTACK -> state.setAndContinue(FLY_ATTACK_ANIM); - case ANIM_ROAR -> state.setAndContinue(ROAR_ANIM); - default -> state.setAndContinue(IDLE_ANIM); + case ANIM_WALK -> state.setAndContinue(phaseTwo ? PHASE_TWO_WALK_ANIM : WALK_ANIM); + case ANIM_FLY -> state.setAndContinue(phaseTwo ? PHASE_TWO_FLY_ANIM : FLY_ANIM); + default -> state.setAndContinue(phaseTwo ? PHASE_TWO_IDLE_ANIM : IDLE_ANIM); }; } @@ -205,6 +300,7 @@ public class NightmareEntity extends Monster implements GeoEntity { super.tick(); if (this.level().isClientSide) { + this.syncSpecialAnimationTrigger(); this.tickClientParticles(); this.updateFlightRotation(); if (this.isRoaring()) { @@ -218,18 +314,20 @@ public class NightmareEntity extends Monster implements GeoEntity { return; } - this.setNoGravity(this.flyingToTarget && !this.isTooCloseToCeiling()); + this.setNoGravity((this.flyingToTarget || this.portalAttackTicks > 0 || this.portalTravelTicks > 0) && !this.isTooCloseToCeiling()); int prevAirborneTicks = this.airborneTicks; this.airborneTicks = this.onGround() ? 0 : this.airborneTicks + 1; if (this.onGround() && prevAirborneTicks > 5) { - this.landingCooldown = 100; + this.landingCooldown = 32; } if (this.attackCooldown > 0) this.attackCooldown--; if (this.roarCooldown > 0) this.roarCooldown--; if (this.blockBreakCooldown > 0) this.blockBreakCooldown--; if (this.landingCooldown > 0) this.landingCooldown--; + if (this.portalCooldown > 0) this.portalCooldown--; + if (this.portalTravelTicks > 0) this.portalTravelTicks--; LivingEntity target = this.getTarget(); if (!this.canTargetEntity(target)) { @@ -248,15 +346,21 @@ public class NightmareEntity extends Monster implements GeoEntity { } if (this.isDeadOrDying()) { + this.clearNightmarePortals(); this.updateFlightRotation(); return; } - if (this.attackAnimationTicks > 0) { + if (this.isPhaseTransitioning()) { + this.tickPhaseTransition(target); + } else if (this.portalAttackTicks > 0) { + this.tickPortalAttack(target); + } else if (this.attackAnimationTicks > 0) { this.tickAttack(target); } this.updateAnimationState(); + this.syncSpecialAnimationTrigger(); this.updateFlightRotation(); } @@ -271,6 +375,27 @@ public class NightmareEntity extends Monster implements GeoEntity { super.travel(travelVector); } + @Override + public boolean hurt(DamageSource source, float amount) { + if (this.isPhaseTransitioning() || this.portalTravelTicks > 0 || this.portalAttackTicks > 0) { + return false; + } + if (!this.isPhaseTwo() && amount > 0.0F) { + float threshold = (float) (this.getMaxHealth() * PHASE_TWO_HEALTH_FRACTION); + if (this.getHealth() > threshold && this.getHealth() - amount <= threshold) { + float clampedAmount = this.getHealth() - threshold; + boolean hurt = clampedAmount > 0.0F && super.hurt(source, clampedAmount); + if (hurt || clampedAmount <= 0.0F) { + this.setHealth(threshold); + this.startPhaseTransition(); + return true; + } + return false; + } + } + return super.hurt(source, amount); + } + @Override public boolean doHurtTarget(Entity target) { if (!(target instanceof LivingEntity livingTarget)) return false; @@ -358,6 +483,26 @@ public class NightmareEntity extends Monster implements GeoEntity { tag.putInt("AirborneTicks", this.airborneTicks); tag.putBoolean("Roaring", this.isRoaring()); tag.putInt(ANIMATION_STATE_KEY, this.getAnimationState()); + tag.putInt(ACTIVE_SPECIAL_ANIMATION_KEY, this.getActiveSpecialAnimation()); + tag.putBoolean(PHASE_TWO_KEY, this.isPhaseTwo()); + tag.putBoolean(PHASE_TWO_TEXTURE_KEY, this.hasPhaseTwoTexture()); + tag.putBoolean(PHASE_TRANSITIONING_KEY, this.isPhaseTransitioning()); + tag.putInt(PHASE_TRANSITION_TICKS_KEY, this.phaseTransitionTicks); + tag.putInt(PORTAL_COOLDOWN_KEY, this.portalCooldown); + tag.putInt(PORTAL_ATTACK_TICKS_KEY, this.portalAttackTicks); + tag.putBoolean(PORTAL_ATTACK_HIT_KEY, this.portalAttackHitApplied); + tag.putInt(PORTAL_TRAVEL_TICKS_KEY, this.portalTravelTicks); + if (this.portalExitPos != null) { + tag.putDouble(PORTAL_EXIT_X_KEY, this.portalExitPos.x); + tag.putDouble(PORTAL_EXIT_Y_KEY, this.portalExitPos.y); + tag.putDouble(PORTAL_EXIT_Z_KEY, this.portalExitPos.z); + } + if (this.entryPortal != null) { + tag.putUUID(PORTAL_ENTRY_ID_KEY, this.entryPortal.getUUID()); + } + if (this.exitPortal != null) { + tag.putUUID(PORTAL_EXIT_ID_KEY, this.exitPortal.getUUID()); + } } @Override @@ -371,8 +516,22 @@ public class NightmareEntity extends Monster implements GeoEntity { this.introRoarUsed = tag.getBoolean(INTRO_ROAR_USED_KEY); this.targetlessTicks = tag.getInt(TARGETLESS_TICKS_KEY); this.airborneTicks = tag.getInt("AirborneTicks"); + this.portalCooldown = tag.getInt(PORTAL_COOLDOWN_KEY); + this.portalAttackTicks = tag.getInt(PORTAL_ATTACK_TICKS_KEY); + this.portalAttackHitApplied = tag.getBoolean(PORTAL_ATTACK_HIT_KEY); + this.portalTravelTicks = tag.getInt(PORTAL_TRAVEL_TICKS_KEY); this.entityData.set(ROARING, tag.getBoolean("Roaring")); this.entityData.set(ANIMATION_STATE, tag.contains(ANIMATION_STATE_KEY) ? tag.getInt(ANIMATION_STATE_KEY) : ANIM_IDLE); + this.entityData.set(ACTIVE_SPECIAL_ANIMATION, tag.contains(ACTIVE_SPECIAL_ANIMATION_KEY) ? tag.getInt(ACTIVE_SPECIAL_ANIMATION_KEY) : SPECIAL_NONE); + this.setPhaseTwo(tag.getBoolean(PHASE_TWO_KEY)); + 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); + 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 { + this.portalExitPos = null; + } } @Override @@ -381,9 +540,14 @@ public class NightmareEntity extends Monster implements GeoEntity { this.attackAnimationTicks = 0; this.attackCooldown = 0; this.roarTicks = 0; + this.portalAttackTicks = 0; + this.portalTravelTicks = 0; + this.phaseTransitionTicks = 0; + this.clearActiveSpecialAnimation(); this.setRoaring(false); this.setDeltaMovement(Vec3.ZERO); this.getNavigation().stop(); + this.clearNightmarePortals(); } super.die(damageSource); } @@ -405,6 +569,22 @@ public class NightmareEntity extends Monster implements GeoEntity { return this.entityData.get(ANIMATION_STATE); } + public int getActiveSpecialAnimation() { + return this.entityData.get(ACTIVE_SPECIAL_ANIMATION); + } + + public boolean isPhaseTwo() { + return this.entityData.get(PHASE_TWO); + } + + public boolean hasPhaseTwoTexture() { + return this.entityData.get(PHASE_TWO_TEXTURE); + } + + public boolean isPhaseTransitioning() { + return this.entityData.get(PHASE_TRANSITIONING); + } + private void setRoaring(boolean roaring) { this.entityData.set(ROARING, roaring); } @@ -415,13 +595,29 @@ public class NightmareEntity extends Monster implements GeoEntity { } } + private void setActiveSpecialAnimation(int specialAnimation) { + if (this.entityData.get(ACTIVE_SPECIAL_ANIMATION) != specialAnimation) { + this.entityData.set(ACTIVE_SPECIAL_ANIMATION, specialAnimation); + } + } + + private void setPhaseTwo(boolean phaseTwo) { + this.entityData.set(PHASE_TWO, phaseTwo); + } + + private void setPhaseTwoTexture(boolean phaseTwoTexture) { + this.entityData.set(PHASE_TWO_TEXTURE, phaseTwoTexture); + } + + private void setPhaseTransitioning(boolean phaseTransitioning) { + this.entityData.set(PHASE_TRANSITIONING, phaseTransitioning); + } + private boolean shouldStartRoar(LivingEntity target) { if (!this.onGround() || this.roarCooldown > 0 || !this.hasLineOfSight(target)) return false; double distanceSqr = this.distanceToSqr(target); if (distanceSqr > ROAR_RETRY_DISTANCE_SQR || !this.isInFront(target.position(), -0.1D)) return false; - boolean pressureWindow = distanceSqr > ATTACK_START_RANGE_SQR; - boolean wounded = this.getHealth() <= this.getMaxHealth() * 0.5F; - return pressureWindow || wounded; + return distanceSqr > ATTACK_START_RANGE_SQR || this.isPhaseTwo(); } private void startRoar() { @@ -431,6 +627,7 @@ public class NightmareEntity extends Monster implements GeoEntity { this.attackAnimationTicks = 0; this.attackHitApplied = false; this.setRoaring(true); + this.selectSpecialAnimation(this.isPhaseTwo() ? SPECIAL_ROAR_P2 : SPECIAL_ROAR); this.getNavigation().stop(); this.setDeltaMovement(this.getDeltaMovement().scale(0.18D)); this.playSound(AntarchySoundEvents.NIGHTMARE_ROAR.get(), 2.2F, 0.7F + this.random.nextFloat() * 0.06F); @@ -451,6 +648,7 @@ public class NightmareEntity extends Monster implements GeoEntity { if (--this.roarTicks <= 0) { this.roarTicks = 0; this.setRoaring(false); + this.clearActiveSpecialAnimation(); this.attackCooldown = Math.max(this.attackCooldown, 18); } } @@ -459,6 +657,7 @@ public class NightmareEntity extends Monster implements GeoEntity { this.attackAnimationTicks = ATTACK_TOTAL_TICKS; this.attackHitApplied = false; this.attackCooldown = ATTACK_TOTAL_TICKS + 12; + this.selectSpecialAnimation(this.selectAttackSpecialAnimation()); this.getNavigation().stop(); Vec3 lunge = target.getEyePosition().subtract(this.getEyePosition()); if (lunge.lengthSqr() > 1.0E-4D) { @@ -479,13 +678,122 @@ public class NightmareEntity extends Monster implements GeoEntity { if (!this.attackHitApplied && elapsed >= ATTACK_DAMAGE_TICK) { this.attackHitApplied = true; this.playNightmareBiteSound(); + this.spawnBiteEffect(); this.performAttackHit(); } if (--this.attackAnimationTicks <= 0) { this.attackAnimationTicks = 0; + this.clearActiveSpecialAnimation(); } } + private void startPhaseTransition() { + this.setPhaseTwo(true); + this.setPhaseTwoTexture(false); + this.setPhaseTransitioning(true); + this.selectSpecialAnimation(SPECIAL_PHASE_TWO); + this.phaseTransitionTicks = PHASE_TWO_TRANSITION_TICKS; + this.attackAnimationTicks = 0; + this.portalAttackTicks = 0; + this.portalTravelTicks = 0; + this.attackHitApplied = false; + this.portalAttackHitApplied = false; + this.portalExitPos = null; + this.clearNightmarePortals(); + this.getNavigation().stop(); + this.setRoaring(false); + this.setDeltaMovement(Vec3.ZERO); + this.roarCooldown = Math.max(this.roarCooldown, 80); + this.portalCooldown = Math.max(this.portalCooldown, 140); + } + + private void tickPhaseTransition(@Nullable LivingEntity target) { + this.getNavigation().stop(); + this.setDeltaMovement(this.getDeltaMovement().scale(0.45D)); + this.getMoveControl().setWantedPosition(this.getX(), this.getY(), this.getZ(), 0.0D); + if (target != null) { + this.getLookControl().setLookAt(target, 35.0F, 20.0F); + } + if (this.phaseTransitionTicks % 8 == 0 && this.level() instanceof ServerLevel serverLevel) { + serverLevel.sendParticles(ParticleTypes.SOUL_FIRE_FLAME, this.getX(), this.getY() + 1.9D, this.getZ(), 12, 1.0D, 0.7D, 1.0D, 0.01D); + serverLevel.sendParticles(ParticleTypes.SMOKE, this.getX(), this.getY() + 1.9D, this.getZ(), 10, 0.8D, 0.5D, 0.8D, 0.02D); + } + if (!this.hasPhaseTwoTexture() && PHASE_TWO_TRANSITION_TICKS - this.phaseTransitionTicks >= PHASE_TWO_TEXTURE_SWAP_TICKS) { + this.setPhaseTwoTexture(true); + } + if (--this.phaseTransitionTicks <= 0) { + this.phaseTransitionTicks = 0; + this.setPhaseTwoTexture(true); + this.setPhaseTransitioning(false); + this.clearActiveSpecialAnimation(); + this.attackCooldown = Math.max(this.attackCooldown, 18); + } + } + + private boolean canStartPortalAttack(LivingEntity target) { + if (!this.isPhaseTwo() || this.isPhaseTransitioning() || this.portalCooldown > 0 || this.attackAnimationTicks > 0 || this.roarTicks > 0) return false; + if (!this.hasLineOfSight(target) || this.distanceToSqr(target) > PORTAL_RANGE * PORTAL_RANGE) return false; + if (this.horizontalDistanceToSqr(target) < PORTAL_MIN_RANGE_SQR) return false; + return this.portalAttackTicks <= 0 && this.findPortalExitPos(target) != null; + } + + private void startPortalAttack(LivingEntity target) { + Vec3 exitPos = this.findPortalExitPos(target); + if (exitPos == null || !(this.level() instanceof ServerLevel serverLevel)) return; + this.clearNightmarePortals(); + this.portalExitPos = exitPos; + this.portalAttackTicks = PORTAL_TOTAL_TICKS; + this.portalTravelTicks = 0; + this.portalAttackHitApplied = false; + this.attackAnimationTicks = 0; + this.attackHitApplied = false; + this.attackCooldown = 24; + this.portalCooldown = 180 + this.random.nextInt(100); + this.selectSpecialAnimation(SPECIAL_PORTAL); + this.getNavigation().stop(); + this.entryPortal = NightmarePortalEntity.spawnAt(serverLevel, this.position().add(this.getViewVector(1.0F).multiply(1.6D, 0.0D, 1.6D)), this, this.position(), PORTAL_LIFETIME_TICKS); + this.exitPortal = NightmarePortalEntity.spawnAt(serverLevel, exitPos, this, this.position(), PORTAL_LIFETIME_TICKS); + if (this.entryPortal != null && this.exitPortal != null) { + this.entryPortal.linkTo(this.exitPortal); + this.exitPortal.linkTo(this.entryPortal); + } + } + + private void tickPortalAttack(@Nullable LivingEntity target) { + this.getNavigation().stop(); + this.setDeltaMovement(this.getDeltaMovement().scale(0.55D)); + if (target != null) { + this.getLookControl().setLookAt(target, 35.0F, 20.0F); + } + int elapsed = PORTAL_TOTAL_TICKS - this.portalAttackTicks; + if (elapsed == PORTAL_TELEPORT_TICK && this.portalExitPos != null) { + this.executePortalTeleport(target); + } + if (!this.portalAttackHitApplied && elapsed >= PORTAL_DAMAGE_TICK) { + this.portalAttackHitApplied = true; + this.spawnBiteEffect(); + this.performPortalExitHit(); + } + if (--this.portalAttackTicks <= 0) { + this.portalAttackTicks = 0; + this.portalExitPos = null; + this.clearNightmarePortals(); + this.clearActiveSpecialAnimation(); + } + } + + private void executePortalTeleport(@Nullable LivingEntity target) { + if (this.portalExitPos == null) return; + this.portalTravelTicks = PORTAL_TRAVEL_INVULNERABLE_TICKS; + this.setPortalCooldown(); + this.teleportTo(this.portalExitPos.x, this.portalExitPos.y, this.portalExitPos.z); + if (target != null) { + this.faceTowardTarget(target, 180.0F); + } + this.setDeltaMovement(Vec3.ZERO); + this.hasImpulse = true; + } + private void performAttackHit() { AABB hitBox = this.getBoundingBox() .inflate(ATTACK_REACH_RADIUS, 1.5D, ATTACK_REACH_RADIUS) @@ -505,6 +813,38 @@ public class NightmareEntity extends Monster implements GeoEntity { } } + 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); + float damage = (float) (this.getAttributeValue(Attributes.ATTACK_DAMAGE) * 1.15F); + List victims = this.level().getEntitiesOfClass(LivingEntity.class, hitBox, this::canTargetEntity); + for (LivingEntity victim : victims) { + if (victim.hurt(this.nightmareDamageSource(), damage)) { + this.spawnBiteEffectAt(victim); + this.applyNightmareStrikeEffects(victim); + this.knockAway(victim, 1.35D, 0.35D); + } + } + if (this.level() instanceof ServerLevel serverLevel) { + serverLevel.sendParticles(ParticleTypes.SOUL_FIRE_FLAME, this.portalExitPos.x, this.portalExitPos.y + 1.0D, this.portalExitPos.z, 18, 0.9D, 0.45D, 0.9D, 0.02D); + serverLevel.sendParticles(ParticleTypes.SMOKE, this.portalExitPos.x, this.portalExitPos.y + 1.0D, this.portalExitPos.z, 14, 0.8D, 0.3D, 0.8D, 0.03D); + } + } + + private void spawnBiteEffect() { + if (!(this.level() instanceof ServerLevel serverLevel)) return; + Vec3 forward = this.getViewVector(1.0F).normalize(); + Vec3 spawnPos = this.getEyePosition().add(forward.scale(this.getBbWidth() * 0.65D)).add(0.0D, -0.45D, 0.0D); + NightmareBiteEntity.spawnAt(serverLevel, spawnPos, this.getYRot(), this.isPhaseTwo()); + } + + private void spawnBiteEffectAt(LivingEntity target) { + if (!(this.level() instanceof ServerLevel serverLevel)) return; + float yaw = target.getYRot() + 180.0F; + Vec3 spawnPos = target.getEyePosition().add(0.0D, -0.35D, 0.0D); + NightmareBiteEntity.spawnAt(serverLevel, spawnPos, yaw, this.isPhaseTwo()); + } + private void playNightmareBiteSound() { this.playSound(AntarchySoundEvents.NIGHTMARE_BITE.get(), 1.3F, 0.72F + this.random.nextFloat() * 0.08F); } @@ -564,19 +904,48 @@ public class NightmareEntity extends Monster implements GeoEntity { return entity instanceof Mob && entity.isAttackable(); } - private boolean shouldUseFlight() { - if (this.landingCooldown > 0) return false; - LivingEntity target = this.getTarget(); - return target != null - && this.distanceToSqr(target) > FLIGHT_ENGAGE_RANGE_SQR - && !this.isTooCloseToCeiling(); - } - private boolean canStartAttackOn(LivingEntity target) { 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()); - return hdSqr <= ATTACK_COMMIT_HORIZONTAL_RANGE * ATTACK_COMMIT_HORIZONTAL_RANGE && verticalDistance <= 4.0D; + return hdSqr <= ATTACK_COMMIT_HORIZONTAL_RANGE_SQR && verticalDistance <= 4.0D; + } + + private boolean shouldUseFlightPressure(LivingEntity target) { + if (target == null || this.isTooCloseToCeiling()) { + return false; + } + double distanceSqr = this.distanceToSqr(target); + double verticalDistance = Math.abs(target.getEyeY() - this.getEyeY()); + if (this.flyingToTarget) { + return distanceSqr > ATTACK_COMMIT_HORIZONTAL_RANGE_SQR || verticalDistance > 1.25D; + } + if (distanceSqr >= FLIGHT_ENGAGE_RANGE_SQR) { + return true; + } + return this.isPhaseTwo() && (distanceSqr >= FLIGHT_DISENGAGE_RANGE_SQR || verticalDistance > 1.5D); + } + + private Vec3 getFlightApproachPosition(LivingEntity target) { + Vec3 toTarget = target.position().subtract(this.position()).multiply(1.0D, 0.0D, 1.0D); + if (toTarget.lengthSqr() < 1.0E-4D) { + toTarget = target.getLookAngle().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 strafe = this.tickCount % 32 < 16 ? FLYING_APPROACH_STRAFE_OFFSET : -FLYING_APPROACH_STRAFE_OFFSET; + double height = this.isPhaseTwo() ? FLYING_APPROACH_HEIGHT_PHASE_TWO : FLYING_APPROACH_HEIGHT; + Vec3 anchor = target.position().subtract(forward.scale(1.4D)).add(right.scale(strafe)); + if (this.horizontalDistanceToSqr(target) <= FLYING_APPROACH_TOO_CLOSE_RANGE_SQR) { + anchor = target.position().subtract(forward.scale(2.4D)); + } + return new Vec3(anchor.x, target.getEyeY() + height, anchor.z); } private double horizontalDistanceToSqr(LivingEntity target) { @@ -608,7 +977,6 @@ public class NightmareEntity extends Monster implements GeoEntity { } } - private boolean isTooCloseToCeiling() { BlockPos current = BlockPos.containing(this.getX(), this.getY(), this.getZ()); for (int i = 1; i <= FLIGHT_CEILING_CLEARANCE_BLOCKS; i++) { @@ -617,8 +985,58 @@ public class NightmareEntity extends Monster implements GeoEntity { return false; } + @Nullable + private Vec3 findPortalExitPos(LivingEntity target) { + 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); + 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)) + }; + for (Vec3 candidate : candidates) { + Vec3 adjusted = this.findValidPortalPosition(candidate); + if (adjusted != null && adjusted.distanceToSqr(this.position()) <= PORTAL_RANGE * PORTAL_RANGE) { + return adjusted; + } + } + return null; + } + + @Nullable + private Vec3 findValidPortalPosition(Vec3 base) { + EntityDimensions dimensions = this.getType().getDimensions(); + for (int yOffset = 1; yOffset >= -1; yOffset--) { + Vec3 candidate = new Vec3(base.x, base.y + yOffset, base.z); + AABB box = dimensions.makeBoundingBox(candidate); + if (this.level().noCollision(this, box)) { + return candidate; + } + } + return null; + } + + private void clearNightmarePortals() { + if (this.entryPortal != null && this.entryPortal.isAlive()) { + this.entryPortal.discard(); + } + if (this.exitPortal != null && this.exitPortal.isAlive()) { + this.exitPortal.discard(); + } + this.entryPortal = null; + this.exitPortal = null; + } + private void tickClientParticles() { - if ((this.isRoaring() || this.attackAnimationTicks > 0) && this.tickCount % 3 == 0) { + if ((this.isRoaring() || this.attackAnimationTicks > 0 || this.portalAttackTicks > 0 || this.isPhaseTransitioning()) && this.tickCount % 3 == 0) { this.level().addParticle( ParticleTypes.SOUL_FIRE_FLAME, this.getX() + (this.random.nextDouble() - 0.5D) * this.getBbWidth(), @@ -652,14 +1070,7 @@ public class NightmareEntity extends Monster implements GeoEntity { this.wingFlapCooldown = 0; return; } - if (this.isRoaring()) { - this.setAnimationState(ANIM_ROAR); - this.groundMoveTicks = 0; - this.wingFlapCooldown = 0; - return; - } - if (this.attackAnimationTicks > 0) { - this.setAnimationState(this.isNoGravity() || this.airborneTicks >= MIN_AIRBORNE_TICKS_FOR_FLY_ANIM ? ANIM_FLY_ATTACK : ANIM_ATTACK); + if (this.hasActiveSpecialAnimation()) { this.groundMoveTicks = 0; this.tickWingFlapSound(); return; @@ -676,7 +1087,8 @@ public class NightmareEntity extends Monster implements GeoEntity { this.tickWingFlapSound(); return; } - if (this.walkDist - this.walkDistO > 0.005F) { + Vec3 horizontalVelocity = this.getDeltaMovement().multiply(1.0D, 0.0D, 1.0D); + if (horizontalVelocity.lengthSqr() > ANIMATION_MOVEMENT_THRESHOLD_SQR) { this.groundMoveTicks = 6; } if (this.groundMoveTicks > 0) { @@ -705,6 +1117,112 @@ public class NightmareEntity extends Monster implements GeoEntity { this.wingFlapCooldown = 5 + this.random.nextInt(4); } + private boolean hasActiveSpecialAnimation() { + return this.getActiveSpecialAnimation() != SPECIAL_NONE; + } + + private int selectAttackSpecialAnimation() { + boolean flyingAttack = this.isNoGravity() || this.airborneTicks >= MIN_AIRBORNE_TICKS_FOR_FLY_ANIM || this.flyingToTarget; + if (flyingAttack) { + return this.isPhaseTwo() ? SPECIAL_FLY_ATTACK_P2 : SPECIAL_FLY_ATTACK; + } + return this.isPhaseTwo() ? SPECIAL_ATTACK_P2 : SPECIAL_ATTACK; + } + + 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); + } + + private void syncSpecialAnimationTrigger() { + int activeSpecialAnimation = this.getActiveSpecialAnimation(); + 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; + return; + } + if (activeSpecialAnimation == SPECIAL_NONE) { + this.lastTriggeredSpecialAnimation = SPECIAL_NONE; + } + } + + @Nullable + private String specialAnimationTrigger(int specialAnimation) { + return switch (specialAnimation) { + case SPECIAL_ATTACK -> SPECIAL_ATTACK_TRIGGER; + case SPECIAL_ATTACK_P2 -> SPECIAL_ATTACK_P2_TRIGGER; + case SPECIAL_FLY_ATTACK -> SPECIAL_FLY_ATTACK_TRIGGER; + case SPECIAL_FLY_ATTACK_P2 -> SPECIAL_FLY_ATTACK_P2_TRIGGER; + case SPECIAL_ROAR -> SPECIAL_ROAR_TRIGGER; + case SPECIAL_ROAR_P2 -> SPECIAL_ROAR_P2_TRIGGER; + case SPECIAL_PHASE_TWO -> SPECIAL_PHASE_TWO_TRIGGER; + case SPECIAL_PORTAL -> SPECIAL_PORTAL_TRIGGER; + default -> null; + }; + } + + 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)); + } + + @Override + public boolean canUse() { + return NightmareEntity.this.isPhaseTransitioning(); + } + + @Override + public boolean canContinueToUse() { + return NightmareEntity.this.isPhaseTransitioning(); + } + } + + private final class NightmarePortalGoal extends Goal { + NightmarePortalGoal() { + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); + } + + @Override + public boolean canUse() { + LivingEntity target = NightmareEntity.this.getTarget(); + return target != null && NightmareEntity.this.canStartPortalAttack(target); + } + + @Override + public boolean canContinueToUse() { + return NightmareEntity.this.portalAttackTicks > 0; + } + + @Override + public void start() { + LivingEntity target = NightmareEntity.this.getTarget(); + if (target != null) { + NightmareEntity.this.startPortalAttack(target); + } + } + } + private final class NightmareRoarGoal extends Goal { NightmareRoarGoal() { this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); @@ -713,7 +1231,7 @@ public class NightmareEntity extends Monster implements GeoEntity { @Override public boolean canUse() { LivingEntity target = NightmareEntity.this.getTarget(); - return target instanceof Player && NightmareEntity.this.shouldStartRoar(target); + return target instanceof Player && NightmareEntity.this.shouldStartRoar(target) && !NightmareEntity.this.isPhaseTransitioning() && NightmareEntity.this.portalAttackTicks <= 0; } @Override @@ -748,14 +1266,17 @@ public class NightmareEntity extends Monster implements GeoEntity { LivingEntity target = NightmareEntity.this.getTarget(); return target != null && NightmareEntity.this.landingCooldown <= 0 - && NightmareEntity.this.distanceToSqr(target) > FLIGHT_ENGAGE_RANGE_SQR - && !NightmareEntity.this.isTooCloseToCeiling(); + && NightmareEntity.this.shouldUseFlightPressure(target) + && !NightmareEntity.this.isPhaseTransitioning() + && NightmareEntity.this.portalAttackTicks <= 0; } @Override public boolean canContinueToUse() { LivingEntity target = NightmareEntity.this.getTarget(); - return target != null && NightmareEntity.this.distanceToSqr(target) > FLIGHT_DISENGAGE_RANGE_SQR; + return target != null + && NightmareEntity.this.shouldUseFlightPressure(target) + && NightmareEntity.this.portalAttackTicks <= 0; } @Override @@ -766,7 +1287,7 @@ public class NightmareEntity extends Monster implements GeoEntity { @Override public void stop() { NightmareEntity.this.flyingToTarget = false; - NightmareEntity.this.landingCooldown = 80; + NightmareEntity.this.landingCooldown = 18; NightmareEntity.this.getNavigation().stop(); } @@ -779,13 +1300,17 @@ public class NightmareEntity extends Monster implements GeoEntity { NightmareEntity.this.getNavigation().stop(); return; } + if (NightmareEntity.this.onGround() && NightmareEntity.this.distanceToSqr(target) >= FLIGHT_DISENGAGE_RANGE_SQR) { + NightmareEntity.this.setDeltaMovement(NightmareEntity.this.getDeltaMovement().add(0.0D, 0.38D, 0.0D)); + NightmareEntity.this.hasImpulse = true; + } if (NightmareEntity.this.attackCooldown <= 0 && NightmareEntity.this.canStartAttackOn(target)) { NightmareEntity.this.startAttack(target); return; } - NightmareEntity.this.getMoveControl().setWantedPosition( - target.getX(), target.getEyeY() + 0.5D, target.getZ(), COMBAT_FLIGHT_SPEED - ); + Vec3 approachPos = NightmareEntity.this.getFlightApproachPosition(target); + NightmareEntity.this.faceTowardTarget(target, 10.0F); + NightmareEntity.this.getMoveControl().setWantedPosition(approachPos.x, approachPos.y, approachPos.z, COMBAT_FLIGHT_SPEED); } } @@ -794,6 +1319,26 @@ public class NightmareEntity extends Monster implements GeoEntity { super(NightmareEntity.this, GROUND_APPROACH_SPEED, true); } + @Override + public boolean canUse() { + LivingEntity target = NightmareEntity.this.getTarget(); + return !NightmareEntity.this.isPhaseTransitioning() + && NightmareEntity.this.portalAttackTicks <= 0 + && target != null + && !NightmareEntity.this.shouldUseFlightPressure(target) + && super.canUse(); + } + + @Override + public boolean canContinueToUse() { + LivingEntity target = NightmareEntity.this.getTarget(); + return !NightmareEntity.this.isPhaseTransitioning() + && NightmareEntity.this.portalAttackTicks <= 0 + && target != null + && !NightmareEntity.this.shouldUseFlightPressure(target) + && super.canContinueToUse(); + } + @Override public void tick() { LivingEntity target = NightmareEntity.this.getTarget(); @@ -809,6 +1354,9 @@ public class NightmareEntity extends Monster implements GeoEntity { @Override protected void checkAndPerformAttack(LivingEntity target) { + if (NightmareEntity.this.shouldUseFlightPressure(target) && NightmareEntity.this.distanceToSqr(target) >= FLIGHT_ATTACK_RANGE_SQR) { + return; + } if (NightmareEntity.this.attackCooldown <= 0 && NightmareEntity.this.canStartAttackOn(target)) { NightmareEntity.this.startAttack(target); } @@ -816,7 +1364,9 @@ public class NightmareEntity extends Monster implements GeoEntity { } private final class NightmareWanderGoal extends Goal { - private double x, y, z; + private double x; + private double y; + private double z; private int wanderTicks; NightmareWanderGoal() { @@ -825,7 +1375,7 @@ public class NightmareEntity extends Monster implements GeoEntity { @Override public boolean canUse() { - if (NightmareEntity.this.getTarget() != null || NightmareEntity.this.isDeadOrDying()) return false; + if (NightmareEntity.this.getTarget() != null || NightmareEntity.this.isDeadOrDying() || NightmareEntity.this.isPhaseTransitioning() || NightmareEntity.this.portalAttackTicks > 0) return false; if (NightmareEntity.this.random.nextInt(40) != 0) return false; double angle = NightmareEntity.this.random.nextDouble() * Math.PI * 2; double dist = 4 + NightmareEntity.this.random.nextDouble() * 10; 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 new file mode 100644 index 00000000..87516662 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmarePortalEntity.java @@ -0,0 +1,186 @@ +package com.craisinlord.antarchy.content.entity.nightmare; + +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.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.level.Level; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +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; + +import java.util.List; +import java.util.UUID; + +public class NightmarePortalEntity extends Entity implements GeoEntity { + 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 CLOSE_ANIM = RawAnimation.begin().thenPlay("close"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private int lifetimeTicks; + private int ageTicks; + private UUID ownerId; + private UUID linkedPortalId; + private Vec3 fallbackDestination = Vec3.ZERO; + + public NightmarePortalEntity(EntityType entityType, Level level) { + super(entityType, level); + this.setInvulnerable(true); + this.noPhysics = true; + this.noCulling = true; + } + + public static NightmarePortalEntity spawnAt(ServerLevel level, Vec3 pos, NightmareEntity owner, Vec3 fallbackDestination, int lifetimeTicks) { + NightmarePortalEntity portal = new NightmarePortalEntity(AntarchyObjects.NIGHTMARE_PORTAL.get(), level); + portal.moveTo(pos.x, pos.y, pos.z, owner.getYRot(), 0.0F); + portal.ownerId = owner.getUUID(); + portal.fallbackDestination = fallbackDestination; + portal.lifetimeTicks = lifetimeTicks; + level.addFreshEntity(portal); + return portal; + } + + @Override + protected void defineSynchedData(SynchedEntityData.Builder builder) { + builder.define(CLOSING, false); + } + + @Override + public boolean isInvulnerableTo(DamageSource damageSource) { + return true; + } + + @Override + public boolean fireImmune() { + return true; + } + + @Override + public void lavaHurt() { + } + + @Override + public boolean isPushable() { + return false; + } + + @Override + public boolean canBeCollidedWith() { + return false; + } + + @Override + public boolean isPickable() { + return false; + } + + @Override + public void tick() { + super.tick(); + if (this.level().isClientSide) { + return; + } + + this.ageTicks++; + if (this.ageTicks >= this.lifetimeTicks - 10) { + this.entityData.set(CLOSING, true); + } + if (this.ageTicks >= this.lifetimeTicks) { + this.discard(); + return; + } + this.transportEntities(); + } + + private void transportEntities() { + NightmarePortalEntity other = this.getLinkedPortal(); + Vec3 destination = other != null ? other.position() : this.fallbackDestination; + AABB area = this.getBoundingBox().inflate(1.05D, 0.75D, 1.05D); + List entities = this.level().getEntitiesOfClass(LivingEntity.class, area, entity -> entity.isAlive() && !entity.isSpectator()); + for (LivingEntity entity : entities) { + if (entity.getUUID().equals(this.ownerId)) { + continue; + } + if (entity.isOnPortalCooldown()) { + continue; + } + entity.teleportTo(destination.x, destination.y, destination.z); + entity.setPortalCooldown(); + entity.setDeltaMovement(entity.getDeltaMovement().multiply(1.0D, 0.0D, 1.0D)); + entity.hurtMarked = true; + } + } + + public void linkTo(NightmarePortalEntity other) { + this.linkedPortalId = other.getUUID(); + this.fallbackDestination = other.position(); + } + + private NightmarePortalEntity getLinkedPortal() { + if (!(this.level() instanceof ServerLevel serverLevel) || this.linkedPortalId == null) { + return null; + } + Entity entity = serverLevel.getEntity(this.linkedPortalId); + return entity instanceof NightmarePortalEntity portal ? portal : null; + } + + public boolean isClosing() { + return this.getEntityData().get(CLOSING); + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + tag.putInt("LifetimeTicks", this.lifetimeTicks); + tag.putInt("AgeTicks", this.ageTicks); + if (this.ownerId != null) { + tag.putUUID("OwnerId", this.ownerId); + } + if (this.linkedPortalId != null) { + tag.putUUID("LinkedPortalId", this.linkedPortalId); + } + tag.putDouble("FallbackX", this.fallbackDestination.x); + tag.putDouble("FallbackY", this.fallbackDestination.y); + tag.putDouble("FallbackZ", this.fallbackDestination.z); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + this.lifetimeTicks = tag.getInt("LifetimeTicks"); + this.ageTicks = tag.getInt("AgeTicks"); + if (tag.hasUUID("OwnerId")) { + this.ownerId = tag.getUUID("OwnerId"); + } + if (tag.hasUUID("LinkedPortalId")) { + this.linkedPortalId = tag.getUUID("LinkedPortalId"); + } + this.fallbackDestination = new Vec3(tag.getDouble("FallbackX"), tag.getDouble("FallbackY"), tag.getDouble("FallbackZ")); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "portal_controller", 0, this::portalController)); + } + + private PlayState portalController(AnimationState state) { + return state.setAndContinue(this.isClosing() ? CLOSE_ANIM : OPEN_ANIM); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/horde/CavarynHordeManager.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/horde/CavarynHordeManager.java index ac7ed897..d8347559 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/horde/CavarynHordeManager.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/horde/CavarynHordeManager.java @@ -55,6 +55,10 @@ public final class CavarynHordeManager { Registries.BIOME, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "biowart_caves") ); + private static final ResourceKey CAVARYN_MOLEWORM_CAVES = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "cavaryn_moleworm_caves") + ); private static final ResourceLocation DORMANT_HORDE = hordeId("dormant"); private static final ResourceLocation AWAKENING_HORDE = hordeId("awakening"); private static final ResourceLocation WAVE_ONE_HORDE = hordeId("wave_1"); @@ -542,6 +546,9 @@ public final class CavarynHordeManager { if (level.getBiome(pos).is(BIOWART_CAVES)) { return ResourceLocation.fromNamespaceAndPath(horde.getNamespace(), "biowart_caves/" + horde.getPath()); } + if (level.getBiome(pos).is(CAVARYN_MOLEWORM_CAVES)) { + return ResourceLocation.fromNamespaceAndPath(horde.getNamespace(), "cavaryn_moleworm_caves/" + horde.getPath()); + } return horde; } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/GlimmerBottleItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/GlimmerBottleItem.java index 018f5845..645e5cbf 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/GlimmerBottleItem.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/GlimmerBottleItem.java @@ -26,20 +26,32 @@ import org.jetbrains.annotations.Nullable; public class GlimmerBottleItem extends Item { private static final String ABILITY_COOLDOWN_TAG = "AbilityCooldown"; + private static final String SHEAR_COOLDOWN_TAG = "ShearCooldown"; public GlimmerBottleItem() { super(new Item.Properties().stacksTo(1)); } public static ItemStack create(GlimmerVariant variant) { - return create(variant, 0); + return create(variant, 0, 0); } public static ItemStack create(GlimmerVariant variant, int abilityCooldown) { + return create(variant, abilityCooldown, 0); + } + + public static ItemStack create(GlimmerVariant variant, int abilityCooldown, int shearCooldown) { ItemStack stack = new ItemStack(AntarchyObjects.GLIMMER_BOTTLE.get()); stack.set(AntarchyObjects.GLIMMER_VARIANT_COMPONENT.get(), variant); - if (abilityCooldown > 0) { - CustomData.update(DataComponents.CUSTOM_DATA, stack, tag -> tag.putInt(ABILITY_COOLDOWN_TAG, abilityCooldown)); + if (abilityCooldown > 0 || shearCooldown > 0) { + CustomData.update(DataComponents.CUSTOM_DATA, stack, tag -> { + if (abilityCooldown > 0) { + tag.putInt(ABILITY_COOLDOWN_TAG, abilityCooldown); + } + if (shearCooldown > 0) { + tag.putInt(SHEAR_COOLDOWN_TAG, shearCooldown); + } + }); } return stack; } @@ -53,6 +65,10 @@ public class GlimmerBottleItem extends Item { return stack.getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY).copyTag().getInt(ABILITY_COOLDOWN_TAG); } + public static int getStoredShearCooldown(ItemStack stack) { + return stack.getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY).copyTag().getInt(SHEAR_COOLDOWN_TAG); + } + @Override public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { ItemStack stack = player.getItemInHand(hand); @@ -75,6 +91,7 @@ public class GlimmerBottleItem extends Item { glimmer.tame(player); glimmer.setOrderedToSit(false); glimmer.setAbilityCooldown(getStoredAbilityCooldown(stack)); + glimmer.startShearCooldown(getStoredShearCooldown(stack)); level.addFreshEntity(glimmer); GlimmerCompanionSavedData.replaceCompanion(((ServerLevel) level).getServer(), player.getUUID(), glimmer.getUUID()); GlimmerParticles.tickBurst(glimmer); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/InnateEnchantmentHelper.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/InnateEnchantmentHelper.java new file mode 100644 index 00000000..223c3dcb --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/InnateEnchantmentHelper.java @@ -0,0 +1,77 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.item.ultimate.UltimateArmorItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateBowItem; +import it.unimi.dsi.fastutil.objects.Object2IntMap; +import net.minecraft.core.Holder; +import net.minecraft.tags.EnchantmentTags; +import net.minecraft.util.Mth; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.enchantment.Enchantment; +import net.minecraft.world.item.enchantment.EnchantmentHelper; +import net.minecraft.world.item.enchantment.Enchantments; +import net.minecraft.world.item.enchantment.ItemEnchantments; + +public final class InnateEnchantmentHelper { + private InnateEnchantmentHelper() { + } + + public static boolean hasInnateNonCurseEnchantments(ItemStack stack) { + for (Object2IntMap.Entry> entry : EnchantmentHelper.getEnchantmentsForCrafting(stack).entrySet()) { + Holder enchantment = entry.getKey(); + if (!enchantment.is(EnchantmentTags.CURSE) && isInnateEnchantment(stack, enchantment, entry.getIntValue())) { + return true; + } + } + return false; + } + + public static boolean hasRemovableNonCurseEnchantments(ItemStack stack) { + for (Object2IntMap.Entry> entry : EnchantmentHelper.getEnchantmentsForCrafting(stack).entrySet()) { + Holder enchantment = entry.getKey(); + if (!enchantment.is(EnchantmentTags.CURSE) && !isInnateEnchantment(stack, enchantment, entry.getIntValue())) { + return true; + } + } + return false; + } + + public static ItemStack stripOnlyRemovableNonCurseEnchantments(ItemStack stack) { + EnchantmentHelper.updateEnchantments(stack, mutable -> + mutable.removeIf(enchantment -> + !enchantment.is(EnchantmentTags.CURSE) + && !isInnateEnchantment(stack, enchantment, mutable.getLevel(enchantment)))); + return stack; + } + + private static boolean isInnateEnchantment(ItemStack stack, Holder enchantment, int level) { + if (level <= 0) { + return false; + } + + if (stack.getItem() instanceof UltimateArmorItem) { + return AntarchySettings.ultimateArmorComesEnchanted() + && level == 5 + && (enchantment.is(Enchantments.PROTECTION) + || enchantment.is(Enchantments.FIRE_PROTECTION) + || enchantment.is(Enchantments.PROJECTILE_PROTECTION) + || enchantment.is(Enchantments.BLAST_PROTECTION)); + } + + if (stack.getItem() instanceof UltimateBowItem) { + return AntarchySettings.ultimateBowComesEnchantedWithFlame() + && level == 1 + && enchantment.is(Enchantments.FLAME); + } + + if (stack.getItem() instanceof KrakensGraspItem) { + int desiredLevel = Mth.clamp(AntarchySettings.krakensGraspInnateLoyaltyLevel(), 1, 3); + return AntarchySettings.krakensGraspInnateLoyalty() + && level == desiredLevel + && enchantment.is(Enchantments.LOYALTY); + } + + return false; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/LucidAnchorBlockItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/LucidAnchorBlockItem.java new file mode 100644 index 00000000..138c8b0c --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/LucidAnchorBlockItem.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.content.item; + +import java.util.List; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.block.Block; + +public class LucidAnchorBlockItem extends BlockItem { + public LucidAnchorBlockItem(Block block, Properties properties) { + super(block, properties); + } + + @Override + public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("tooltip.antarchy.lucid_anchor.pyramid").withStyle(ChatFormatting.DARK_RED)); + tooltipComponents.add(Component.translatable("tooltip.antarchy.lucid_anchor.path").withStyle(ChatFormatting.GRAY)); + super.appendHoverText(stack, context, tooltipComponents, tooltipFlag); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/NightmareArmorItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/NightmareArmorItem.java index e3c07ef3..94aad831 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/NightmareArmorItem.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/NightmareArmorItem.java @@ -19,10 +19,11 @@ import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.item.component.ItemAttributeModifiers; public class NightmareArmorItem extends ArmorItem { + private static final int BASE_DURABILITY_MULTIPLIER = 33; private final Type armorType; public NightmareArmorItem(Holder material, Type type, Properties properties) { - super(material, type, properties); + super(material, type, properties.stacksTo(1).durability(resolveDurability(type))); this.armorType = type; } @@ -119,4 +120,13 @@ public class NightmareArmorItem extends ArmorItem { tooltipComponents.add(Component.translatable("tooltip.antarchy.nightmare_armor_set_bonus").withStyle(ChatFormatting.DARK_RED)); super.appendHoverText(stack, context, tooltipComponents, tooltipFlag); } + + private static int resolveDurability(Type armorType) { + return switch (armorType) { + case HELMET -> Type.HELMET.getDurability(BASE_DURABILITY_MULTIPLIER); + case CHESTPLATE, BODY -> Type.CHESTPLATE.getDurability(BASE_DURABILITY_MULTIPLIER); + case LEGGINGS -> Type.LEGGINGS.getDurability(BASE_DURABILITY_MULTIPLIER); + case BOOTS -> Type.BOOTS.getDurability(BASE_DURABILITY_MULTIPLIER); + }; + } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/PrimordialArmorItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/PrimordialArmorItem.java index c9d14b47..289316a7 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/PrimordialArmorItem.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/PrimordialArmorItem.java @@ -24,6 +24,7 @@ import net.minecraft.world.item.component.ItemAttributeModifiers; import net.minecraft.world.level.Level; public class PrimordialArmorItem extends ArmorItem { + private static final int BASE_DURABILITY_MULTIPLIER = 33; private final Type armorType; public PrimordialArmorItem(Holder material, Type type, Properties properties) { @@ -144,10 +145,10 @@ public class PrimordialArmorItem extends ArmorItem { private static int resolveDurability(Type armorType) { return switch (armorType) { - case HELMET -> Type.HELMET.getDurability(37); - case CHESTPLATE, BODY -> Type.CHESTPLATE.getDurability(37); - case LEGGINGS -> Type.LEGGINGS.getDurability(37); - case BOOTS -> Type.BOOTS.getDurability(37); + case HELMET -> Type.HELMET.getDurability(BASE_DURABILITY_MULTIPLIER); + case CHESTPLATE, BODY -> Type.CHESTPLATE.getDurability(BASE_DURABILITY_MULTIPLIER); + case LEGGINGS -> Type.LEGGINGS.getDurability(BASE_DURABILITY_MULTIPLIER); + case BOOTS -> Type.BOOTS.getDurability(BASE_DURABILITY_MULTIPLIER); }; } } 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 3e0e3a22..244ca13e 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 @@ -1,21 +1,37 @@ package com.craisinlord.antarchy.content.item; +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.entity.LivingEntity; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; import java.util.List; public class SpiritAppleItem extends Item { + public static final int GLIMMERING_DURATION_TICKS = 20 * 8; + public SpiritAppleItem(Properties properties) { super(properties); } + @Override + public ItemStack finishUsingItem(ItemStack stack, Level level, LivingEntity livingEntity) { + 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)); + } + return result; + } + @Override public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltipComponents, TooltipFlag tooltipFlag) { tooltipComponents.add(Component.translatable("tooltip.antarchy.spirit_apple").withStyle(ChatFormatting.GRAY)); + tooltipComponents.add(Component.translatable("tooltip.antarchy.spirit_apple.eaten").withStyle(ChatFormatting.GRAY)); super.appendHoverText(stack, context, tooltipComponents, tooltipFlag); } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/TigerEyeArmorItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/TigerEyeArmorItem.java new file mode 100644 index 00000000..347164a2 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/TigerEyeArmorItem.java @@ -0,0 +1,38 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.client.TigerEyeClientHooks; +import java.util.List; +import net.minecraft.ChatFormatting; +import net.minecraft.core.Holder; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; + +public final class TigerEyeArmorItem extends ArmorItem { + private static final int BASE_DURABILITY_MULTIPLIER = 33; + + public TigerEyeArmorItem(Holder material, Type type, Properties properties) { + super(material, type, properties.stacksTo(1).durability(resolveDurability(type))); + } + + @Override + public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("item.antarchy.tigers_eye_armor.passive").withStyle(ChatFormatting.GOLD)); + tooltipComponents.add(Component.translatable("item.antarchy.tigers_eye_armor.full_set").withStyle(ChatFormatting.YELLOW)); + tooltipComponents.add(Component.translatable("item.antarchy.tigers_eye_armor.activate", TigerEyeClientHooks.camouflageKeyText()).withStyle(ChatFormatting.GRAY)); + tooltipComponents.add(Component.translatable("item.antarchy.tigers_eye_armor.active_bonus").withStyle(ChatFormatting.DARK_AQUA)); + super.appendHoverText(stack, context, tooltipComponents, tooltipFlag); + } + + private static int resolveDurability(Type armorType) { + return switch (armorType) { + case HELMET -> Type.HELMET.getDurability(BASE_DURABILITY_MULTIPLIER); + case CHESTPLATE, BODY -> Type.CHESTPLATE.getDurability(BASE_DURABILITY_MULTIPLIER); + case LEGGINGS -> Type.LEGGINGS.getDurability(BASE_DURABILITY_MULTIPLIER); + case BOOTS -> Type.BOOTS.getDurability(BASE_DURABILITY_MULTIPLIER); + }; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/TigerEyeArmorUtil.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/TigerEyeArmorUtil.java new file mode 100644 index 00000000..789d5d67 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/TigerEyeArmorUtil.java @@ -0,0 +1,126 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageAccess; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.EmptyBlockGetter; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.phys.Vec3; + +public final class TigerEyeArmorUtil { + public static final double DETECTION_REDUCTION_PER_PIECE = 0.10D; + public static final double MAX_PASSIVE_REDUCTION = 0.40D; + public static final double WALKING_MULTIPLIER = 0.50D; + public static final double SPRINTING_MULTIPLIER = 0.25D; + public static final double ACTIVE_CAMOUFLAGE_MULTIPLIER = 2.0D; + public static final double MAX_ACTIVE_REDUCTION = 0.80D; + private static final double STATIONARY_HORIZONTAL_SPEED_SQR = 0.0009D; + + private TigerEyeArmorUtil() { + } + + public static int countEquippedPieces(Player player) { + int count = 0; + for (EquipmentSlot slot : new EquipmentSlot[]{EquipmentSlot.HEAD, EquipmentSlot.CHEST, EquipmentSlot.LEGS, EquipmentSlot.FEET}) { + if (player.getItemBySlot(slot).is(AntarchyTags.Items.TIGER_EYE_ARMOR)) { + count++; + } + } + return count; + } + + public static boolean hasFullSet(Player player) { + return player.getItemBySlot(EquipmentSlot.HEAD).is(AntarchyTags.Items.TIGER_EYE_ARMOR) + && player.getItemBySlot(EquipmentSlot.CHEST).is(AntarchyTags.Items.TIGER_EYE_ARMOR) + && player.getItemBySlot(EquipmentSlot.LEGS).is(AntarchyTags.Items.TIGER_EYE_ARMOR) + && player.getItemBySlot(EquipmentSlot.FEET).is(AntarchyTags.Items.TIGER_EYE_ARMOR); + } + + public static double getPassiveMaximumReduction(Player player) { + return Math.min(MAX_PASSIVE_REDUCTION, countEquippedPieces(player) * DETECTION_REDUCTION_PER_PIECE); + } + + public static double getMovementMultiplier(Player player) { + if (player.isCrouching()) { + return 1.0D; + } + + Vec3 delta = player.getDeltaMovement(); + double horizontalSpeedSqr = delta.x * delta.x + delta.z * delta.z; + if (horizontalSpeedSqr < STATIONARY_HORIZONTAL_SPEED_SQR) { + return 1.0D; + } + + if (player.isSprinting()) { + return SPRINTING_MULTIPLIER; + } + + return WALKING_MULTIPLIER; + } + + public static double getDetectionReduction(Player player) { + double reduction = getPassiveMaximumReduction(player) * getMovementMultiplier(player); + if (isAdaptiveCamouflageActive(player)) { + reduction = Math.min(MAX_ACTIVE_REDUCTION, reduction * ACTIVE_CAMOUFLAGE_MULTIPLIER); + } + return reduction; + } + + public static boolean mayActivateAdaptiveCamouflage(Player player) { + return hasFullSet(player) && !player.isSpectator() && player.isAlive(); + } + + public static boolean isAdaptiveCamouflageActive(Player player) { + return player instanceof TigerEyeCamouflageAccess access && access.antarchy$isTigerEyeCamouflageActive(); + } + + public static boolean isValidCamouflageBlock(BlockState state) { + if (state.isAir() || state.is(AntarchyTags.Blocks.TIGER_EYE_CAMOUFLAGE_BLACKLIST)) { + return false; + } + if (state.getRenderShape() == RenderShape.INVISIBLE) { + return false; + } + if (state.is(Blocks.BARRIER) || state.is(Blocks.STRUCTURE_VOID) || state.is(Blocks.LIGHT)) { + return false; + } + if (state.is(Blocks.NETHER_PORTAL) || state.is(Blocks.END_PORTAL) || state.is(Blocks.END_GATEWAY)) { + return false; + } + if (!Block.isShapeFullBlock(state.getShape(EmptyBlockGetter.INSTANCE, BlockPos.ZERO))) { + return false; + } + + FluidState fluidState = state.getFluidState(); + return fluidState == null || fluidState.isEmpty(); + } + + public static boolean shouldReduceDetection(Mob observer, Player player) { + if (countEquippedPieces(player) <= 0) { + return false; + } + if (observer.getType().is(AntarchyTags.Entities.TIGER_EYE_DETECTION_IMMUNE)) { + return false; + } + if (observer.getTarget() == player || observer.getLastHurtByMob() == player) { + return false; + } + if (observer instanceof net.minecraft.world.entity.NeutralMob neutralMob && neutralMob.isAngryAt(player)) { + return false; + } + return observer.canAttack(player); + } + + public static BlockPos getCamouflageSamplePos(Player player) { + double centerX = (player.getBoundingBox().minX + player.getBoundingBox().maxX) * 0.5D; + double centerZ = (player.getBoundingBox().minZ + player.getBoundingBox().maxZ) * 0.5D; + return BlockPos.containing(centerX, player.getBoundingBox().minY - 0.05D, centerZ); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/TigerEyeCamouflageStatePayload.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/TigerEyeCamouflageStatePayload.java new file mode 100644 index 00000000..bd4ba024 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/TigerEyeCamouflageStatePayload.java @@ -0,0 +1,24 @@ +package com.craisinlord.antarchy.content.network; + +import com.craisinlord.antarchy.Antarchy; +import io.netty.buffer.ByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public record TigerEyeCamouflageStatePayload(int entityId, boolean active, int blockStateId) implements CustomPacketPayload { + public static final Type TYPE = + new Type<>(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "tiger_eye_camouflage_state")); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.VAR_INT, TigerEyeCamouflageStatePayload::entityId, + ByteBufCodecs.BOOL, TigerEyeCamouflageStatePayload::active, + ByteBufCodecs.VAR_INT, TigerEyeCamouflageStatePayload::blockStateId, + TigerEyeCamouflageStatePayload::new + ); + + @Override + public Type type() { + return TYPE; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/ToggleTigerEyeCamouflagePayload.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/ToggleTigerEyeCamouflagePayload.java new file mode 100644 index 00000000..01b34258 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/ToggleTigerEyeCamouflagePayload.java @@ -0,0 +1,18 @@ +package com.craisinlord.antarchy.content.network; + +import com.craisinlord.antarchy.Antarchy; +import io.netty.buffer.ByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public record ToggleTigerEyeCamouflagePayload() implements CustomPacketPayload { + public static final Type TYPE = + new Type<>(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "toggle_tiger_eye_camouflage")); + public static final StreamCodec STREAM_CODEC = StreamCodec.unit(new ToggleTigerEyeCamouflagePayload()); + + @Override + public Type type() { + return TYPE; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/tigereye/TigerEyeCamouflageAccess.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/tigereye/TigerEyeCamouflageAccess.java new file mode 100644 index 00000000..c1b014b9 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/tigereye/TigerEyeCamouflageAccess.java @@ -0,0 +1,11 @@ +package com.craisinlord.antarchy.content.tigereye; + +public interface TigerEyeCamouflageAccess { + boolean antarchy$isTigerEyeCamouflageActive(); + + void antarchy$setTigerEyeCamouflageActive(boolean active); + + int antarchy$getTigerEyeCamouflageBlockStateId(); + + void antarchy$setTigerEyeCamouflageBlockStateId(int blockStateId); +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/tigereye/TigerEyeCamouflageController.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/tigereye/TigerEyeCamouflageController.java new file mode 100644 index 00000000..e20bdfdc --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/tigereye/TigerEyeCamouflageController.java @@ -0,0 +1,102 @@ +package com.craisinlord.antarchy.content.tigereye; + +import com.craisinlord.antarchy.content.item.TigerEyeArmorUtil; +import net.minecraft.core.BlockPos; +import net.minecraft.core.particles.BlockParticleOption; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; + +public final class TigerEyeCamouflageController { + public enum ToggleResult { + ACTIVATED, + DEACTIVATED, + FULL_SET_REQUIRED, + INVALID_BLOCK, + NO_CHANGE + } + + private TigerEyeCamouflageController() { + } + + public static ToggleResult toggle(ServerPlayer player) { + if (!(player instanceof TigerEyeCamouflageAccess access)) { + return ToggleResult.NO_CHANGE; + } + + if (access.antarchy$isTigerEyeCamouflageActive()) { + deactivate(player, true); + return ToggleResult.DEACTIVATED; + } + + if (!TigerEyeArmorUtil.mayActivateAdaptiveCamouflage(player)) { + return ToggleResult.FULL_SET_REQUIRED; + } + + BlockPos samplePos = TigerEyeArmorUtil.getCamouflageSamplePos(player); + BlockState state = player.level().getBlockState(samplePos); + if (!TigerEyeArmorUtil.isValidCamouflageBlock(state)) { + return ToggleResult.INVALID_BLOCK; + } + + access.antarchy$setTigerEyeCamouflageBlockStateId(Block.getId(state)); + access.antarchy$setTigerEyeCamouflageActive(true); + spawnEffects(player, state, true); + return ToggleResult.ACTIVATED; + } + + public static boolean validateOrDeactivate(ServerPlayer player) { + if (!(player instanceof TigerEyeCamouflageAccess access) || !access.antarchy$isTigerEyeCamouflageActive()) { + return false; + } + if (TigerEyeArmorUtil.hasFullSet(player)) { + return false; + } + deactivate(player, true); + return true; + } + + public static void deactivate(ServerPlayer player, boolean spawnEffects) { + if (!(player instanceof TigerEyeCamouflageAccess access)) { + return; + } + boolean wasActive = access.antarchy$isTigerEyeCamouflageActive(); + int blockStateId = access.antarchy$getTigerEyeCamouflageBlockStateId(); + access.antarchy$setTigerEyeCamouflageActive(false); + access.antarchy$setTigerEyeCamouflageBlockStateId(0); + if (spawnEffects && wasActive) { + spawnEffects(player, Block.stateById(blockStateId), false); + } + } + + private static void spawnEffects(ServerPlayer player, BlockState state, boolean activate) { + if (!(player.level() instanceof ServerLevel serverLevel)) { + return; + } + int count = activate ? 18 : 8; + serverLevel.sendParticles( + new BlockParticleOption(ParticleTypes.BLOCK, state), + player.getX(), + player.getY() + 1.0D, + player.getZ(), + count, + 0.35D, + 0.6D, + 0.35D, + 0.03D + ); + serverLevel.playSound( + null, + player.blockPosition(), + activate ? SoundEvents.AMETHYST_BLOCK_CHIME : SoundEvents.AMETHYST_BLOCK_HIT, + SoundSource.PLAYERS, + 0.8F, + activate ? 0.9F : 0.7F + ); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/tigereye/TigerEyeCamouflageSync.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/tigereye/TigerEyeCamouflageSync.java new file mode 100644 index 00000000..2d20353b --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/tigereye/TigerEyeCamouflageSync.java @@ -0,0 +1,41 @@ +package com.craisinlord.antarchy.content.tigereye; + +import com.craisinlord.antarchy.content.network.TigerEyeCamouflageStatePayload; +import java.util.function.BiConsumer; +import java.util.function.Consumer; +import net.minecraft.server.level.ServerPlayer; + +public final class TigerEyeCamouflageSync { + private static BiConsumer sendToPlayer = (player, payload) -> {}; + private static Consumer syncSelfAndTracking = player -> {}; + + private TigerEyeCamouflageSync() { + } + + public static void setSendToPlayer(BiConsumer sender) { + sendToPlayer = sender; + } + + public static void setSyncSelfAndTracking(Consumer syncer) { + syncSelfAndTracking = syncer; + } + + public static void sync(ServerPlayer player) { + syncSelfAndTracking.accept(player); + } + + public static void syncTo(ServerPlayer viewer, ServerPlayer target) { + sendToPlayer.accept(viewer, payload(target)); + } + + public static TigerEyeCamouflageStatePayload payload(ServerPlayer player) { + if (player instanceof TigerEyeCamouflageAccess access) { + return new TigerEyeCamouflageStatePayload( + player.getId(), + access.antarchy$isTigerEyeCamouflageActive(), + access.antarchy$getTigerEyeCamouflageBlockStateId() + ); + } + return new TigerEyeCamouflageStatePayload(player.getId(), false, 0); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitenSpikeConfiguration.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitinSpikeConfiguration.java similarity index 67% rename from common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitenSpikeConfiguration.java rename to common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitinSpikeConfiguration.java index 2160f745..4e66124d 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitenSpikeConfiguration.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitinSpikeConfiguration.java @@ -4,7 +4,7 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration; -public record ChitenSpikeConfiguration( +public record ChitinSpikeConfiguration( int floorToCeilingSearchRange, int radius, int maxColumnHeight, @@ -19,19 +19,19 @@ public record ChitenSpikeConfiguration( int largeVariantExtraHeightDeviation, float largeVariantSurfaceSpikeMultiplier ) implements FeatureConfiguration { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( - Codec.intRange(1, 128).fieldOf("floor_to_ceiling_search_range").forGetter(ChitenSpikeConfiguration::floorToCeilingSearchRange), - Codec.intRange(1, 32).fieldOf("radius").forGetter(ChitenSpikeConfiguration::radius), - Codec.intRange(1, 32).fieldOf("max_column_height").forGetter(ChitenSpikeConfiguration::maxColumnHeight), - Codec.intRange(1, 16).fieldOf("height_deviation").forGetter(ChitenSpikeConfiguration::heightDeviation), - Codec.floatRange(0.0F, 1.0F).fieldOf("chance_of_column_at_max_distance_from_center").forGetter(ChitenSpikeConfiguration::chanceOfColumnAtMaxDistanceFromCenter), - Codec.intRange(1, 64).fieldOf("max_distance_from_center_affecting_chance_of_column").forGetter(ChitenSpikeConfiguration::maxDistanceFromCenterAffectingChanceOfColumn), - Codec.intRange(1, 64).fieldOf("max_distance_from_center_affecting_height_bias").forGetter(ChitenSpikeConfiguration::maxDistanceFromCenterAffectingHeightBias), - Codec.intRange(0, 32).fieldOf("max_height_difference").forGetter(ChitenSpikeConfiguration::maxHeightDifference), - Codec.floatRange(0.0F, 1.0F).optionalFieldOf("large_variant_chance", 0.0F).forGetter(ChitenSpikeConfiguration::largeVariantChance), - Codec.intRange(0, 24).optionalFieldOf("large_variant_extra_radius", 0).forGetter(ChitenSpikeConfiguration::largeVariantExtraRadius), - Codec.intRange(0, 32).optionalFieldOf("large_variant_extra_height", 0).forGetter(ChitenSpikeConfiguration::largeVariantExtraHeight), - Codec.intRange(0, 16).optionalFieldOf("large_variant_extra_height_deviation", 0).forGetter(ChitenSpikeConfiguration::largeVariantExtraHeightDeviation), - Codec.floatRange(1.0F, 8.0F).optionalFieldOf("large_variant_surface_spike_multiplier", 1.0F).forGetter(ChitenSpikeConfiguration::largeVariantSurfaceSpikeMultiplier) - ).apply(instance, ChitenSpikeConfiguration::new)); + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + Codec.intRange(1, 128).fieldOf("floor_to_ceiling_search_range").forGetter(ChitinSpikeConfiguration::floorToCeilingSearchRange), + Codec.intRange(1, 32).fieldOf("radius").forGetter(ChitinSpikeConfiguration::radius), + Codec.intRange(1, 32).fieldOf("max_column_height").forGetter(ChitinSpikeConfiguration::maxColumnHeight), + Codec.intRange(1, 16).fieldOf("height_deviation").forGetter(ChitinSpikeConfiguration::heightDeviation), + Codec.floatRange(0.0F, 1.0F).fieldOf("chance_of_column_at_max_distance_from_center").forGetter(ChitinSpikeConfiguration::chanceOfColumnAtMaxDistanceFromCenter), + Codec.intRange(1, 64).fieldOf("max_distance_from_center_affecting_chance_of_column").forGetter(ChitinSpikeConfiguration::maxDistanceFromCenterAffectingChanceOfColumn), + Codec.intRange(1, 64).fieldOf("max_distance_from_center_affecting_height_bias").forGetter(ChitinSpikeConfiguration::maxDistanceFromCenterAffectingHeightBias), + Codec.intRange(0, 32).fieldOf("max_height_difference").forGetter(ChitinSpikeConfiguration::maxHeightDifference), + Codec.floatRange(0.0F, 1.0F).optionalFieldOf("large_variant_chance", 0.0F).forGetter(ChitinSpikeConfiguration::largeVariantChance), + Codec.intRange(0, 24).optionalFieldOf("large_variant_extra_radius", 0).forGetter(ChitinSpikeConfiguration::largeVariantExtraRadius), + Codec.intRange(0, 32).optionalFieldOf("large_variant_extra_height", 0).forGetter(ChitinSpikeConfiguration::largeVariantExtraHeight), + Codec.intRange(0, 16).optionalFieldOf("large_variant_extra_height_deviation", 0).forGetter(ChitinSpikeConfiguration::largeVariantExtraHeightDeviation), + Codec.floatRange(1.0F, 8.0F).optionalFieldOf("large_variant_surface_spike_multiplier", 1.0F).forGetter(ChitinSpikeConfiguration::largeVariantSurfaceSpikeMultiplier) + ).apply(instance, ChitinSpikeConfiguration::new)); } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitenSpikeFeature.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitinSpikeFeature.java similarity index 92% rename from common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitenSpikeFeature.java rename to common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitinSpikeFeature.java index cd73c28b..78398af6 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitenSpikeFeature.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitinSpikeFeature.java @@ -18,19 +18,19 @@ import net.minecraft.world.level.levelgen.Column; import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; -public final class ChitenSpikeFeature extends Feature { +public final class ChitinSpikeFeature extends Feature { private record ResolvedVariant(int radius, int maxColumnHeight, int heightDeviation, int surfaceSpikeAttempts) { } - public ChitenSpikeFeature(Codec codec) { + public ChitinSpikeFeature(Codec codec) { super(codec); } @Override - public boolean place(FeaturePlaceContext context) { + public boolean place(FeaturePlaceContext context) { WorldGenLevel level = context.level(); BlockPos origin = context.origin(); - ChitenSpikeConfiguration config = context.config(); + ChitinSpikeConfiguration config = context.config(); RandomSource random = context.random(); if (!level.getBlockState(origin).isAir()) { @@ -59,7 +59,7 @@ public final class ChitenSpikeFeature extends Feature return placedAny; } - private ResolvedVariant resolveVariant(ChitenSpikeConfiguration config, RandomSource random) { + private ResolvedVariant resolveVariant(ChitinSpikeConfiguration config, RandomSource random) { if (config.largeVariantChance() > 0.0F && random.nextFloat() < config.largeVariantChance()) { int radius = config.radius() + config.largeVariantExtraRadius(); int maxColumnHeight = config.maxColumnHeight() + config.largeVariantExtraHeight(); @@ -81,7 +81,7 @@ public final class ChitenSpikeFeature extends Feature int dx, int dz, double chance, - ChitenSpikeConfiguration config, + ChitinSpikeConfiguration config, ResolvedVariant variant, List placedBlocks ) { @@ -114,10 +114,10 @@ public final class ChitenSpikeFeature extends Feature boolean placedAny = false; if (ceiling.isPresent() && downLength > 0) { - placedAny |= this.growChitenColumn(level, pos.atY(ceiling.getAsInt() - 1), Direction.DOWN, downLength, placedBlocks); + placedAny |= this.growChitinColumn(level, pos.atY(ceiling.getAsInt() - 1), Direction.DOWN, downLength, placedBlocks); } if (floor.isPresent() && upLength > 0) { - placedAny |= this.growChitenColumn(level, pos.atY(floor.getAsInt() + 1), Direction.UP, upLength, placedBlocks); + placedAny |= this.growChitinColumn(level, pos.atY(floor.getAsInt() + 1), Direction.UP, upLength, placedBlocks); } return placedAny; } @@ -129,7 +129,7 @@ public final class ChitenSpikeFeature extends Feature return variant.maxColumnHeight(); } - private boolean growChitenColumn(WorldGenLevel level, BlockPos rootStart, Direction direction, int length, List placedBlocks) { + private boolean growChitinColumn(WorldGenLevel level, BlockPos rootStart, Direction direction, int length, List placedBlocks) { boolean placedAny = false; for (int offset = 0; offset < length; offset++) { BlockPos spikePos = rootStart.relative(direction, offset); @@ -142,8 +142,8 @@ public final class ChitenSpikeFeature extends Feature break; } - BlockState chitenState = AntarchyObjects.CHITEN_BLOCK.get().defaultBlockState(); - level.setBlock(spikePos, chitenState, 3); + BlockState chitinState = AntarchyObjects.CHITIN_BLOCK.get().defaultBlockState(); + level.setBlock(spikePos, chitinState, 3); placedBlocks.add(spikePos.immutable()); placedAny = true; } @@ -154,7 +154,7 @@ public final class ChitenSpikeFeature extends Feature WorldGenLevel level, RandomSource random, List placedBlocks, - ChitenSpikeConfiguration config, + ChitinSpikeConfiguration config, ResolvedVariant variant ) { boolean placedAny = false; @@ -186,7 +186,7 @@ public final class ChitenSpikeFeature extends Feature break; } - BlockState spikeState = AntarchyObjects.CHITEN_SPIKE.get().defaultBlockState() + BlockState spikeState = AntarchyObjects.CHITIN_SPIKE.get().defaultBlockState() .setValue(PointedDripstoneBlock.TIP_DIRECTION, direction) .setValue(PointedDripstoneBlock.THICKNESS, getThicknessForRootOffset(offset, length)) .setValue(PointedDripstoneBlock.WATERLOGGED, false); @@ -238,7 +238,7 @@ public final class ChitenSpikeFeature extends Feature return Mth.clamp(sampled, 1, maxHeight); } - private double getChanceOfColumn(int radius, int dx, int dz, ChitenSpikeConfiguration config) { + private double getChanceOfColumn(int radius, int dx, int dz, ChitinSpikeConfiguration config) { int remainingX = radius - Math.abs(dx); int remainingZ = radius - Math.abs(dz); int edgeDistance = Math.min(remainingX, remainingZ); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/GrindstoneMenuMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/GrindstoneMenuMixin.java new file mode 100644 index 00000000..104f118d --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/GrindstoneMenuMixin.java @@ -0,0 +1,35 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.item.InnateEnchantmentHelper; +import net.minecraft.world.inventory.GrindstoneMenu; +import net.minecraft.world.item.ItemStack; +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(GrindstoneMenu.class) +public abstract class GrindstoneMenuMixin { + @Inject(method = "removeNonCursesFrom", at = @At("HEAD"), cancellable = true) + private void antarchy$preserveInnateEnchantments(ItemStack stack, CallbackInfoReturnable cir) { + if (InnateEnchantmentHelper.hasInnateNonCurseEnchantments(stack)) { + cir.setReturnValue(InnateEnchantmentHelper.stripOnlyRemovableNonCurseEnchantments(stack)); + } + } + + @Inject(method = "computeResult", at = @At("RETURN"), cancellable = true) + private void antarchy$blockInnateOnlyNoOp(ItemStack firstInput, ItemStack secondInput, CallbackInfoReturnable cir) { + if (!firstInput.isEmpty() && secondInput.isEmpty() + && InnateEnchantmentHelper.hasInnateNonCurseEnchantments(firstInput) + && !InnateEnchantmentHelper.hasRemovableNonCurseEnchantments(firstInput)) { + cir.setReturnValue(ItemStack.EMPTY); + return; + } + + if (firstInput.isEmpty() && !secondInput.isEmpty() + && InnateEnchantmentHelper.hasInnateNonCurseEnchantments(secondInput) + && !InnateEnchantmentHelper.hasRemovableNonCurseEnchantments(secondInput)) { + cir.setReturnValue(ItemStack.EMPTY); + } + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/TigerEyeCamouflageMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/TigerEyeCamouflageMixin.java new file mode 100644 index 00000000..6d444490 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/TigerEyeCamouflageMixin.java @@ -0,0 +1,32 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageAccess; +import net.minecraft.world.entity.player.Player; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; + +@Mixin(Player.class) +public abstract class TigerEyeCamouflageMixin implements TigerEyeCamouflageAccess { + @Unique private boolean antarchy$tigerEyeCamouflageActive; + @Unique private int antarchy$tigerEyeCamouflageBlockStateId; + + @Override + public boolean antarchy$isTigerEyeCamouflageActive() { + return antarchy$tigerEyeCamouflageActive; + } + + @Override + public void antarchy$setTigerEyeCamouflageActive(boolean active) { + antarchy$tigerEyeCamouflageActive = active; + } + + @Override + public int antarchy$getTigerEyeCamouflageBlockStateId() { + return antarchy$tigerEyeCamouflageBlockStateId; + } + + @Override + public void antarchy$setTigerEyeCamouflageBlockStateId(int blockStateId) { + antarchy$tigerEyeCamouflageBlockStateId = blockStateId; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/TigerEyeVisibilityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/TigerEyeVisibilityMixin.java new file mode 100644 index 00000000..3a4e5494 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/TigerEyeVisibilityMixin.java @@ -0,0 +1,28 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.item.TigerEyeArmorUtil; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.player.Player; +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(LivingEntity.class) +public abstract class TigerEyeVisibilityMixin { + @Inject(method = "getVisibilityPercent", at = @At("RETURN"), cancellable = true) + private void antarchy$applyTigerEyeStealth(Entity observer, CallbackInfoReturnable cir) { + if (!((Object) this instanceof Player player)) { + return; + } + if (!(observer instanceof Mob mob)) { + return; + } + if (!TigerEyeArmorUtil.shouldReduceDetection(mob, player)) { + return; + } + cir.setReturnValue(cir.getReturnValueD() * (1.0D - TigerEyeArmorUtil.getDetectionReduction(player))); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMoveMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMoveMixin.java index a8c7401b..e187d93b 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMoveMixin.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMoveMixin.java @@ -4,12 +4,17 @@ import com.craisinlord.antarchy.content.fluid.AntarchyFluidChecks; import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; +import java.util.ArrayList; +import java.util.List; +import java.util.TreeSet; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.MoverType; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; +import net.minecraft.world.phys.shapes.VoxelShape; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.spongepowered.asm.mixin.Mixin; @@ -19,6 +24,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyArg; import org.spongepowered.asm.mixin.injection.ModifyVariable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(Entity.class) /* @@ -150,6 +156,71 @@ public abstract class EntityMoveMixin { } } + @Inject(method = "collide", at = @At("HEAD"), cancellable = true) + private void antarchy$invertedStepUp(Vec3 movement, CallbackInfoReturnable cir) { + Entity entity = (Entity) (Object) this; + if (!AntarchyGravityApi.isGravityInverted(entity)) { + return; + } + + AABB aabb = entity.getBoundingBox(); + List entityShapes = entity.level().getEntityCollisions(entity, aabb.expandTowards(movement)); + Vec3 collided = movement.lengthSqr() == 0.0 ? movement : Entity.collideBoundingBox(entity, movement, aabb, entity.level(), entityShapes); + + boolean movedX = movement.x != collided.x; + boolean movedY = movement.y != collided.y; + boolean movedZ = movement.z != collided.z; + boolean pressingIntoCeiling = movedY && movement.y > 0.0D; + float maxUpStep = entity.maxUpStep(); + + if (!(maxUpStep > 0.0F) || !(pressingIntoCeiling || entity.onGround()) || !(movedX || movedZ)) { + cir.setReturnValue(collided); + return; + } + + AABB steppedBox = pressingIntoCeiling ? aabb.move(0.0, collided.y, 0.0) : aabb; + AABB searchBox = steppedBox.expandTowards(movement.x, -(double) maxUpStep, movement.z); + if (!pressingIntoCeiling) { + searchBox = searchBox.expandTowards(0.0, 1.0E-5D, 0.0); + } + + List stepShapes = new ArrayList<>(entityShapes); + entity.level().getBlockCollisions(entity, searchBox).forEach(stepShapes::add); + + float currentStepY = (float) collided.y; + float[] candidateHeights = antarchy$collectCandidateStepDownHeights(steppedBox, stepShapes, maxUpStep, currentStepY); + for (float candidate : candidateHeights) { + Vec3 stepped = Entity.collideBoundingBox(entity, new Vec3(movement.x, -(double) candidate, movement.z), steppedBox, entity.level(), stepShapes); + if (stepped.horizontalDistanceSqr() > collided.horizontalDistanceSqr()) { + double offset = steppedBox.maxY - aabb.maxY; + cir.setReturnValue(stepped.add(0.0, offset, 0.0)); + return; + } + } + + cir.setReturnValue(collided); + } + + @Unique + private static float[] antarchy$collectCandidateStepDownHeights(AABB box, List shapes, float maxStep, float currentY) { + TreeSet heights = new TreeSet<>(); + for (VoxelShape shape : shapes) { + for (double coord : shape.getCoords(Direction.Axis.Y)) { + float height = (float) (box.maxY - coord); + if (height >= 0.0F && height != currentY && height <= maxStep) { + heights.add(height); + } + } + } + + float[] result = new float[heights.size()]; + int i = 0; + for (float height : heights) { + result[i++] = height; + } + return result; + } + @Unique private boolean antarchy$intersectsAntiwater(Entity entity, AABB box) { BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); 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 afb5109c..5a9c099a 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 @@ -21,8 +21,12 @@ "FlintAndSteelPortalIgnitionMixin", "FrogSpawnVariantMixin", "FrogVariantBootstrapMixin", + "GlimmeringDamageImmunityMixin", + "GlimmeringPushableMixin", + "GlimmeringPushEntitiesMixin", "GlowSquidLumenSpawnMixin", "GlowVinesUnderLeavesMixin", + "GrindstoneMenuMixin", "MantisClawWallClimbMixin", "MilkBucketSizeResetMixin", "MinecartItemMixin", @@ -38,6 +42,8 @@ "SpongeAntiwaterMixin", "SquidzookaEnchantMixin", "SquidzookaMultishotMixin", + "TigerEyeCamouflageMixin", + "TigerEyeVisibilityMixin", "gravity.AbstractArrowGravityMixin", "gravity.BucketItemGravityMixin", "gravity.ChunkMapAccessor", @@ -85,8 +91,11 @@ "client.MountedVehicleCameraMixin", "client.ParalyzedMouseTurnMixin", "client.ScreenEffectRendererFireVisualMixin", + "client.GlimmeringTranslucencyMixin", "client.SplashManagerMixin", "client.ThoraxisFogMixin", + "client.TigerEyeArmorHideMixin", + "client.TigerEyeNameTagHideMixin", "client.WolfRendererGrimMixin", "gravity.client.CameraGravityMixin", "gravity.client.ClientPacketListenerGravityMixin", 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 a266f40c..407e3b75 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,47 +3,1342 @@ "animations": { "idle": { "loop": true, - "animation_length": 4, + "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, "bones": { "head": { "rotation": { "0.0": { "post": { - "vector": [7.5, 0, 0] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "2.0": { + "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" }, - "4.0": { + "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": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "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] + }, + "lerp_mode": "catmullrom" } } }, "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" }, - "2.0": { + "0.9167": { "post": { - "vector": [2.5, 0, 0] + "vector": [10.86961, -34.65749, 5.22206] }, "lerp_mode": "catmullrom" }, - "4.0": { + "1.0833": { "post": { - "vector": [-7.5, 0, 0] + "vector": [15.36224, -54.16058, -1.10208] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [10.86961, -34.65749, 5.22206] }, "lerp_mode": "catmullrom" } @@ -53,19 +1348,31 @@ "rotation": { "0.0": { "post": { - "vector": [-25, 0, 0] + "vector": [15, 0, 0] }, "lerp_mode": "catmullrom" }, - "2.0": { + "0.375": { "post": { - "vector": [-7.5, 17.5, 0] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "4.0": { + "0.625": { "post": { - "vector": [-25, 0, 0] + "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] }, "lerp_mode": "catmullrom" } @@ -79,7 +1386,43 @@ }, "lerp_mode": "catmullrom" }, - "4.0": { + "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": { "post": { "vector": [0, 0, 37.5] }, @@ -95,7 +1438,13 @@ }, "lerp_mode": "catmullrom" }, - "4.0": { + "0.625": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { "post": { "vector": [0, 0, -115] }, @@ -106,16 +1455,40 @@ "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" }, - "4.0": { + "0.4167": { + "post": { + "vector": [-19.65736, -15.7627, 52.74765] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { "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" } } }, @@ -127,7 +1500,13 @@ }, "lerp_mode": "catmullrom" }, - "4.0": { + "0.625": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { "post": { "vector": [0, 0, -115] }, @@ -138,16 +1517,52 @@ "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" }, - "4.0": { + "0.625": { "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" } } }, @@ -159,7 +1574,13 @@ }, "lerp_mode": "catmullrom" }, - "4.0": { + "0.625": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { "post": { "vector": [0, 0, -115] }, @@ -175,7 +1596,43 @@ }, "lerp_mode": "catmullrom" }, - "4.0": { + "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": { "post": { "vector": [0, 0, -37.5] }, @@ -191,7 +1648,13 @@ }, "lerp_mode": "catmullrom" }, - "4.0": { + "0.625": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { "post": { "vector": [0, 0, 115] }, @@ -207,7 +1670,31 @@ }, "lerp_mode": "catmullrom" }, - "4.0": { + "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": { "post": { "vector": [-15.84766, 19.58991, -40.25298] }, @@ -223,7 +1710,13 @@ }, "lerp_mode": "catmullrom" }, - "4.0": { + "0.625": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { "post": { "vector": [0, 0, 115] }, @@ -239,7 +1732,43 @@ }, "lerp_mode": "catmullrom" }, - "4.0": { + "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": { "post": { "vector": [14.15251, -17.67415, -39.71128] }, @@ -255,7 +1784,13 @@ }, "lerp_mode": "catmullrom" }, - "4.0": { + "0.625": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { "post": { "vector": [0, 0, 115] }, @@ -263,23 +1798,147 @@ } } }, - "l_antenna": { + "body": { "rotation": { "0.0": { "post": { - "vector": [-25, 0, 0] + "vector": [0, 17.5, 0] }, "lerp_mode": "catmullrom" }, - "2.0": { + "0.25": { "post": { - "vector": [-7.5, -17.5, 0] + "vector": [0, -17.5, 0] }, "lerp_mode": "catmullrom" }, - "4.0": { + "0.4167": { "post": { - "vector": [-25, 0, 0] + "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] }, "lerp_mode": "catmullrom" } @@ -289,19 +1948,19 @@ "rotation": { "0.0": { "post": { - "vector": [-0.17995, -12.39135, 1.6575] + "vector": [-0.06, -7.44, 0.98] }, "lerp_mode": "catmullrom" }, - "2.0": { + "0.625": { "post": { - "vector": [0.17875, 0.10358, 1.61888] + "vector": [-0.06397, -7.43547, 0.98448] }, "lerp_mode": "catmullrom" }, - "4.0": { + "1.25": { "post": { - "vector": [-0.17995, -12.39135, 1.6575] + "vector": [-0.06, -7.44, 0.98] }, "lerp_mode": "catmullrom" } @@ -315,23 +1974,137 @@ }, "lerp_mode": "catmullrom" }, - "2.0": { + "0.625": { "post": { - "vector": [0.17875, -0.10358, -1.61888] + "vector": [-0.17995, 12.39135, -1.6575] }, "lerp_mode": "catmullrom" }, - "4.0": { + "1.25": { "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" + } + } } } }, - "dance": { + "old_dance": { "loop": true, "animation_length": 1.5, "bones": { @@ -416,13 +2189,13 @@ }, "0.25": { "post": { - "vector": [9.72631, 0.45349, -2.99327] + "vector": [19.73, 30.45, -2.99] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [9.72631, 0.45349, -2.99327] + "vector": [19.73, 30.45, -2.99] }, "lerp_mode": "catmullrom" }, @@ -434,13 +2207,13 @@ }, "1.0": { "post": { - "vector": [12.5, -12.5, 0] + "vector": [19.73, -30.45, 2.99] }, "lerp_mode": "catmullrom" }, "1.25": { "post": { - "vector": [12.5, -12.5, 0] + "vector": [19.73, -30.45, 2.99] }, "lerp_mode": "catmullrom" }, @@ -738,7 +2511,7 @@ } } }, - "ant": { + "body": { "rotation": { "0.0": { "post": { @@ -816,28 +2589,6 @@ } } }, - "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": { @@ -893,414 +2644,6 @@ "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": { @@ -1310,817 +2653,19 @@ }, "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.0": { + "1.5": { "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/flying_squirrel.animation.json b/common-1.21.1/src/main/resources/assets/antarchy/animations/flying_squirrel.animation.json index f6192a76..5d929a89 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/animations/flying_squirrel.animation.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/animations/flying_squirrel.animation.json @@ -7,407 +7,77 @@ "bones": { "left_leg": { "rotation": { - "vector": ["5+math.cos(q.anim_time*90*2)*2", 0, -2.5] + "vector": ["5+math.cos(query.anim_time*90*2)*2", 0, -2.5] }, "position": { - "vector": [0, "0.15+math.cos(q.anim_time*90*2)/14", "-math.cos(q.anim_time*90*2)/5"] + "vector": [0, "0.15+math.cos(query.anim_time*90*2)/14", "-math.cos(query.anim_time*90*2)/5"] } }, "right_leg": { "rotation": { - "vector": ["5+math.cos(q.anim_time*90*2)*2", 0, 2.5] + "vector": ["5+math.cos(query.anim_time*90*2)*2", 0, 2.5] }, "position": { - "vector": [0, "0.15+math.cos(q.anim_time*90*2)/14", "-math.cos(q.anim_time*90*2)/5"] + "vector": [0, "0.15+math.cos(query.anim_time*90*2)/14", "-math.cos(query.anim_time*90*2)/5"] } }, "torso": { "rotation": { - "vector": ["-math.cos(q.anim_time*90*2-60)", 0, 0] + "vector": ["-math.cos(query.anim_time*90*2-60)", 0, 0] }, "position": { - "vector": [0, "math.cos(q.anim_time*90*2)/5", 0] + "vector": [0, "math.cos(query.anim_time*90*2)/5", 0] } }, "head": { "rotation": { - "vector": ["-math.cos(q.anim_time*90*2-160)*2", 0, 0] + "vector": ["-math.cos(query.anim_time*90*2-160)*2", 0, 0] } }, "left_ear": { "rotation": { - "vector": ["math.cos(q.anim_time*90*2)*6", "math.cos(q.anim_time*90*2-40)*5", "7.5+math.cos(q.anim_time*90*2+30)*5"] + "vector": ["math.cos(query.anim_time*90*2)*6", "math.cos(query.anim_time*90*2-40)*5", "7.5+math.cos(query.anim_time*90*2+30)*5"] } }, "right_ear": { "rotation": { - "vector": ["math.cos(q.anim_time*90*2)*6", "-math.cos(q.anim_time*90*2-40)*5", "-7.5-math.cos(q.anim_time*90*2+30)*5"] + "vector": ["math.cos(query.anim_time*90*2)*6", "-math.cos(query.anim_time*90*2-40)*5", "-7.5-math.cos(query.anim_time*90*2+30)*5"] } }, "tail": { "rotation": { - "vector": ["math.cos(q.anim_time*90*2+50)*4", 0, 0] + "vector": ["math.cos(query.anim_time*90*2+50)*4", 0, 0] } }, "left_arm": { "rotation": { - "vector": ["math.cos(q.anim_time*90*2-60)*3-3", 0, -5] + "vector": ["math.cos(query.anim_time*90*2-60)*3-3", 0, -5] }, "position": { - "vector": [0, "-math.cos(q.anim_time*90*2-30)/4", "-math.cos(q.anim_time*90*2-50)/5"] + "vector": [0, "-math.cos(query.anim_time*90*2-30)/4", "-math.cos(query.anim_time*90*2-50)/5"] } }, "right_arm": { "rotation": { - "vector": ["math.cos(q.anim_time*90*2-60)*3-3", 0, 5] + "vector": ["math.cos(query.anim_time*90*2-60)*3-3", 0, 5] }, "position": { - "vector": [0, "-math.cos(q.anim_time*90*2-30)/4", "-math.cos(q.anim_time*90*2-50)/5"] + "vector": [0, "-math.cos(query.anim_time*90*2-30)/4", "-math.cos(query.anim_time*90*2-50)/5"] } }, "left_leg2": { "rotation": { - "vector": ["-5-math.cos(q.anim_time*90*2)*2", 0, 2.5] + "vector": ["-5-math.cos(query.anim_time*90*2)*2", 0, 2.5] } }, "right_leg2": { "rotation": { - "vector": ["-5-math.cos(q.anim_time*90*2)*2", 0, -2.5] + "vector": ["-5-math.cos(query.anim_time*90*2)*2", 0, -2.5] } } } }, - "climbing": { - "loop": true, - "animation_length": 1, - "bones": { - "squirrel": { - "rotation": { - "vector": [-90, 0, 0] - }, - "position": { - "vector": [0, 6.75, -5] - } - }, - "left_leg": { - "rotation": { - "0.25": { - "pre": { - "vector": [108.1133, 33.6443, 10.272] - }, - "post": { - "vector": [108.1133, 33.6443, 10.272] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [118.1133, 33.6443, 10.272] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [108.1133, 33.6443, 10.272] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [108.1133, 33.6443, 10.272] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.25": { - "pre": { - "vector": [0, 0, 0] - }, - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, -1, -2] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_arm": { - "rotation": { - "0.0": { - "post": { - "vector": [-90, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-110, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-90, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-90, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, -1.06031, 0.34202] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, -2.06, -0.66] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, -2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_flying_part": { - "scale": { - "vector": [0, 0, 0] - } - }, - "right_arm": { - "rotation": { - "0.25": { - "pre": { - "vector": [-90, 0, 0] - }, - "post": { - "vector": [-90, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-110, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-90, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-90, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.25": { - "pre": { - "vector": [0, -2, 0] - }, - "post": { - "vector": [0, -2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, -1.06031, 0.34202] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, -2.06, -0.66] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, -2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_flying_part": { - "scale": { - "vector": [0, 0, 0] - } - }, - "right_leg": { - "rotation": { - "0.0": { - "post": { - "vector": [108.1133, -33.6443, -10.272] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [118.1133, -33.6443, -10.272] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [108.1133, -33.6443, -10.272] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [108.1133, -33.6443, -10.272] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, -1, -2] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_cheeks": { - "scale": { - "vector": [0, 0, 0] - } - }, - "right_cheeks": { - "scale": { - "vector": [0, 0, 0] - } - } - } - }, - "walking": { + "walk": { "loop": true, "animation_length": 0.5, "bones": { @@ -415,51 +85,31 @@ "position": { "0.0": { "post": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, "0.0833": { "post": { - "vector": [ - 0, - 2, - 0 - ] + "vector": [0, 2, 0] }, "lerp_mode": "catmullrom" }, "0.2083": { "post": { - "vector": [ - 0, - 2, - 0 - ] + "vector": [0, 2, 0] }, "lerp_mode": "catmullrom" }, "0.3333": { "post": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } @@ -468,230 +118,126 @@ "left_leg": { "rotation": { "0.0": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] }, "0.0833": { "pre": { - "vector": [ - 40, - -5, - 0 - ] + "vector": [40, -5, 0] }, "post": { - "vector": [ - 40, - -5, - 0 - ] + "vector": [40, -5, 0] }, "lerp_mode": "catmullrom" }, "0.2083": { "post": { - "vector": [ - 47.5, - -15, - 0 - ] + "vector": [47.5, -15, 0] }, "lerp_mode": "catmullrom" }, "0.375": { "post": { - "vector": [ - -20, - -10, - -15 - ] + "vector": [-20, -10, -15] }, "lerp_mode": "catmullrom" }, "0.5": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] } }, "position": { "0.0": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] }, "0.125": { "pre": { - "vector": [ - 0, - 1, - 1 - ] + "vector": [0, 1, 1] }, "post": { - "vector": [ - 0, - 1, - 1 - ] + "vector": [0, 1, 1] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - 0, - 2.5, - -1.22 - ] + "vector": [0, 2.5, -1.22] }, "lerp_mode": "catmullrom" }, "0.375": { "post": { - "vector": [ - 0, - 1, - -0.58 - ] + "vector": [0, 1, -0.58] }, "lerp_mode": "catmullrom" }, "0.5": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] } } }, "right_leg": { "rotation": { "0.0": { - "vector": [ - -11.39, - 2.41, - 5 - ] + "vector": [-11.39, 2.41, 5] }, "0.0417": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] }, "0.125": { "pre": { - "vector": [ - 40, - 5, - 0 - ] + "vector": [40, 5, 0] }, "post": { - "vector": [ - 40, - 5, - 0 - ] + "vector": [40, 5, 0] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - 47.5, - 15, - 0 - ] + "vector": [47.5, 15, 0] }, "lerp_mode": "catmullrom" }, "0.4167": { "post": { - "vector": [ - -20, - 10, - 15 - ] + "vector": [-20, 10, 15] }, "lerp_mode": "catmullrom" }, "0.5": { - "vector": [ - -11.39, - 2.41, - 5 - ] + "vector": [-11.39, 2.41, 5] } }, "position": { "0.0": { - "vector": [ - 0, - 0.17, - -0.22 - ] + "vector": [0, 0.17, -0.22] }, "0.0417": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] }, "0.1667": { "pre": { - "vector": [ - 0, - 1, - 1 - ] + "vector": [0, 1, 1] }, "post": { - "vector": [ - 0, - 1, - 1 - ] + "vector": [0, 1, 1] }, "lerp_mode": "catmullrom" }, "0.2917": { "post": { - "vector": [ - 0, - 2.5, - -1.22 - ] + "vector": [0, 2.5, -1.22] }, "lerp_mode": "catmullrom" }, "0.4167": { "post": { - "vector": [ - 0, - 1, - -0.58 - ] + "vector": [0, 1, -0.58] }, "lerp_mode": "catmullrom" }, "0.5": { - "vector": [ - 0, - 0.17, - -0.22 - ] + "vector": [0, 0.17, -0.22] } } }, @@ -699,41 +245,25 @@ "rotation": { "0.0": { "post": { - "vector": [ - -5, - 0, - 0 - ] + "vector": [-5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.0833": { "post": { - "vector": [ - -10, - 0, - 0 - ] + "vector": [-10, 0, 0] }, "lerp_mode": "catmullrom" }, "0.2917": { "post": { - "vector": [ - 7.5, - 0, - 0 - ] + "vector": [7.5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - -5, - 0, - 0 - ] + "vector": [-5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -741,41 +271,25 @@ "position": { "0.0": { "post": { - "vector": [ - 0, - -0.71, - 0 - ] + "vector": [0, -0.71, 0] }, "lerp_mode": "catmullrom" }, "0.0833": { "post": { - "vector": [ - 0, - -1, - 0 - ] + "vector": [0, -1, 0] }, "lerp_mode": "catmullrom" }, "0.2917": { "post": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - 0, - -0.71, - 0 - ] + "vector": [0, -0.71, 0] }, "lerp_mode": "catmullrom" } @@ -785,41 +299,25 @@ "rotation": { "0.0": { "post": { - "vector": [ - 10, - 0, - 0 - ] + "vector": [10, 0, 0] }, "lerp_mode": "catmullrom" }, "0.125": { "post": { - "vector": [ - 7.5, - 0, - 0 - ] + "vector": [7.5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.2917": { "post": { - "vector": [ - -7.5, - 0, - 0 - ] + "vector": [-7.5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - 10, - 0, - 0 - ] + "vector": [10, 0, 0] }, "lerp_mode": "catmullrom" } @@ -829,61 +327,37 @@ "rotation": { "0.0": { "post": { - "vector": [ - 0, - 0, - 37.5 - ] + "vector": [0, 0, 37.5] }, "lerp_mode": "catmullrom" }, "0.0833": { "post": { - "vector": [ - 0, - 0, - 55 - ] + "vector": [0, 0, 55] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - 0, - 0, - 7.5 - ] + "vector": [0, 0, 7.5] }, "lerp_mode": "catmullrom" }, "0.3333": { "post": { - "vector": [ - 0, - 0, - 7.5 - ] + "vector": [0, 0, 7.5] }, "lerp_mode": "catmullrom" }, "0.4167": { "post": { - "vector": [ - 0, - 0, - 17.5 - ] + "vector": [0, 0, 17.5] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - 0, - 0, - 37.5 - ] + "vector": [0, 0, 37.5] }, "lerp_mode": "catmullrom" } @@ -893,61 +367,37 @@ "rotation": { "0.0": { "post": { - "vector": [ - 0, - 0, - -37.5 - ] + "vector": [0, 0, -37.5] }, "lerp_mode": "catmullrom" }, "0.0833": { "post": { - "vector": [ - 0, - 0, - -55 - ] + "vector": [0, 0, -55] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - 0, - 0, - -7.5 - ] + "vector": [0, 0, -7.5] }, "lerp_mode": "catmullrom" }, "0.3333": { "post": { - "vector": [ - 0, - 0, - -7.5 - ] + "vector": [0, 0, -7.5] }, "lerp_mode": "catmullrom" }, "0.4167": { "post": { - "vector": [ - 0, - 0, - -17.5 - ] + "vector": [0, 0, -17.5] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - 0, - 0, - -37.5 - ] + "vector": [0, 0, -37.5] }, "lerp_mode": "catmullrom" } @@ -957,41 +407,25 @@ "rotation": { "0.0": { "post": { - "vector": [ - 5.56, - 0, - 0 - ] + "vector": [5.56, 0, 0] }, "lerp_mode": "catmullrom" }, "0.1667": { "post": { - "vector": [ - -10, - 0, - 0 - ] + "vector": [-10, 0, 0] }, "lerp_mode": "catmullrom" }, "0.4167": { "post": { - "vector": [ - 10, - 0, - 0 - ] + "vector": [10, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - 5.56, - 0, - 0 - ] + "vector": [5.56, 0, 0] }, "lerp_mode": "catmullrom" } @@ -1000,125 +434,73 @@ "left_arm": { "rotation": { "0.0": { - "vector": [ - 5, - -5, - 2.5 - ] + "vector": [5, -5, 2.5] }, "0.0833": { "pre": { - "vector": [ - 27.73, - -7.5, - 10 - ] + "vector": [27.73, -7.5, 10] }, "post": { - "vector": [ - 27.73, - -7.5, - 10 - ] + "vector": [27.73, -7.5, 10] }, "lerp_mode": "catmullrom" }, "0.2083": { "post": { - "vector": [ - -80, - -12.5, - 15 - ] + "vector": [-80, -12.5, 15] }, "lerp_mode": "catmullrom" }, "0.3333": { "post": { - "vector": [ - -35, - -7.5, - 10 - ] + "vector": [-35, -7.5, 10] }, "lerp_mode": "catmullrom" }, "0.4167": { "post": { - "vector": [ - -10, - 0, - 0 - ] + "vector": [-10, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { - "vector": [ - 5, - -5, - 2.5 - ] + "vector": [5, -5, 2.5] } }, "position": { "0.0": { "post": { - "vector": [ - 0.5, - 0, - 0 - ] + "vector": [0.5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.0833": { "post": { - "vector": [ - 0.86, - 0, - 0 - ] + "vector": [0.86, 0, 0] }, "lerp_mode": "catmullrom" }, "0.2083": { "post": { - "vector": [ - 0.8, - 0, - 0 - ] + "vector": [0.8, 0, 0] }, "lerp_mode": "catmullrom" }, "0.3333": { "post": { - "vector": [ - 0.55, - 0, - 0 - ] + "vector": [0.55, 0, 0] }, "lerp_mode": "catmullrom" }, "0.4167": { "post": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - 0.5, - 0, - 0 - ] + "vector": [0.5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -1126,152 +508,88 @@ }, "left_flying_part": { "rotation": { - "vector": [ - 32.5, - 0, - 0 - ] + "vector": [32.5, 0, 0] } }, "right_arm": { "rotation": { "0.0": { - "vector": [ - -2.36, - 1.88, - -0.16 - ] + "vector": [-2.36, 1.88, -0.16] }, "0.0417": { - "vector": [ - 5, - 5, - -2.5 - ] + "vector": [5, 5, -2.5] }, "0.125": { "pre": { - "vector": [ - 27.73, - 7.5, - -10 - ] + "vector": [27.73, 7.5, -10] }, "post": { - "vector": [ - 27.73, - 7.5, - -10 - ] + "vector": [27.73, 7.5, -10] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - -80, - 12.5, - -15 - ] + "vector": [-80, 12.5, -15] }, "lerp_mode": "catmullrom" }, "0.375": { "post": { - "vector": [ - -35, - 7.5, - -10 - ] + "vector": [-35, 7.5, -10] }, "lerp_mode": "catmullrom" }, "0.4583": { "post": { - "vector": [ - -10, - 0, - 0 - ] + "vector": [-10, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { - "vector": [ - -2.36, - 1.88, - -0.16 - ] + "vector": [-2.36, 1.88, -0.16] } }, "position": { "0.0": { "post": { - "vector": [ - -0.19, - 0, - 0 - ] + "vector": [-0.19, 0, 0] }, "lerp_mode": "catmullrom" }, "0.0417": { "post": { - "vector": [ - -0.5, - 0, - 0 - ] + "vector": [-0.5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.125": { "post": { - "vector": [ - -0.86, - 0, - 0 - ] + "vector": [-0.86, 0, 0] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - -0.8, - 0, - 0 - ] + "vector": [-0.8, 0, 0] }, "lerp_mode": "catmullrom" }, "0.375": { "post": { - "vector": [ - -0.55, - 0, - 0 - ] + "vector": [-0.55, 0, 0] }, "lerp_mode": "catmullrom" }, "0.4583": { "post": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - -0.19, - 0, - 0 - ] + "vector": [-0.19, 0, 0] }, "lerp_mode": "catmullrom" } @@ -1279,16 +597,12 @@ }, "right_flying_part": { "rotation": { - "vector": [ - 32.5, - 0, - 0 - ] + "vector": [32.5, 0, 0] } } } }, - "gliding": { + "fly": { "loop": true, "animation_length": 1, "bones": { @@ -1296,102 +610,62 @@ "rotation": { "0.0": { "post": { - "vector": [ - 7.5, - 0, - -2.5 - ] + "vector": [7.5, 0, -2.5] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - 10, - 0, - 0 - ] + "vector": [10, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - 7.5, - 0, - 2.5 - ] + "vector": [7.5, 0, 2.5] }, "lerp_mode": "catmullrom" }, "0.75": { "post": { - "vector": [ - 5, - 0, - 0 - ] + "vector": [5, 0, 0] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [ - 7.5, - 0, - -2.5 - ] + "vector": [7.5, 0, -2.5] }, "lerp_mode": "catmullrom" } }, "position": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] } }, "left_leg": { "rotation": { "0.0": { "post": { - "vector": [ - 92.5, - 12.5, - -15 - ] + "vector": [92.5, 12.5, -15] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - 85, - 12.5, - -15 - ] + "vector": [85, 12.5, -15] }, "lerp_mode": "catmullrom" }, "0.75": { "post": { - "vector": [ - 100, - 12.5, - -15 - ] + "vector": [100, 12.5, -15] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [ - 92.5, - 12.5, - -15 - ] + "vector": [92.5, 12.5, -15] }, "lerp_mode": "catmullrom" } @@ -1401,51 +675,31 @@ "rotation": { "0.0": { "post": { - "vector": [ - 95.83, - -12.5, - 15 - ] + "vector": [95.83, -12.5, 15] }, "lerp_mode": "catmullrom" }, "0.0833": { "post": { - "vector": [ - 92.5, - -12.5, - 15 - ] + "vector": [92.5, -12.5, 15] }, "lerp_mode": "catmullrom" }, "0.3333": { "post": { - "vector": [ - 85, - -12.5, - 15 - ] + "vector": [85, -12.5, 15] }, "lerp_mode": "catmullrom" }, "0.8333": { "post": { - "vector": [ - 100, - -12.5, - 15 - ] + "vector": [100, -12.5, 15] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [ - 95.83, - -12.5, - 15 - ] + "vector": [95.83, -12.5, 15] }, "lerp_mode": "catmullrom" } @@ -1455,41 +709,25 @@ "rotation": { "0.0": { "post": { - "vector": [ - -1.84, - 0, - 1.84 - ] + "vector": [-1.84, 0, 1.84] }, "lerp_mode": "catmullrom" }, "0.375": { "post": { - "vector": [ - 2.5, - 0, - -2.5 - ] + "vector": [2.5, 0, -2.5] }, "lerp_mode": "catmullrom" }, "0.875": { "post": { - "vector": [ - -2.5, - 0, - 2.5 - ] + "vector": [-2.5, 0, 2.5] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [ - -1.84, - 0, - 1.84 - ] + "vector": [-1.84, 0, 1.84] }, "lerp_mode": "catmullrom" } @@ -1499,102 +737,62 @@ "rotation": { "0.0": { "post": { - "vector": [ - -79.17, - 0, - 0 - ] + "vector": [-79.17, 0, 0] }, "lerp_mode": "catmullrom" }, "0.3333": { "post": { - "vector": [ - -67.5, - 0, - 0 - ] + "vector": [-67.5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.8333": { "post": { - "vector": [ - -85, - 0, - 0 - ] + "vector": [-85, 0, 0] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [ - -79.17, - 0, - 0 - ] + "vector": [-79.17, 0, 0] }, "lerp_mode": "catmullrom" } }, "position": { - "vector": [ - 0, - 3, - 0 - ] + "vector": [0, 3, 0] } }, "left_arm": { "rotation": { "0.0": { "post": { - "vector": [ - -27.5, - 0, - -92.5 - ] + "vector": [-27.5, 0, -92.5] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - -27.5, - 0, - -90 - ] + "vector": [-27.5, 0, -90] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - -27.5, - 0, - -92.5 - ] + "vector": [-27.5, 0, -92.5] }, "lerp_mode": "catmullrom" }, "0.75": { "post": { - "vector": [ - -27.5, - 0, - -90 - ] + "vector": [-27.5, 0, -90] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [ - -27.5, - 0, - -92.5 - ] + "vector": [-27.5, 0, -92.5] }, "lerp_mode": "catmullrom" } @@ -1604,131 +802,79 @@ "rotation": { "0.0": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "0.0833": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "0.1667": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "0.3333": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "0.4167": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "0.5833": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "0.6667": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "0.75": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "0.8333": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "0.9167": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" } @@ -1738,51 +884,31 @@ "rotation": { "0.0": { "post": { - "vector": [ - -27.5, - 0, - 92.5 - ] + "vector": [-27.5, 0, 92.5] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - -27.5, - 0, - 90 - ] + "vector": [-27.5, 0, 90] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - -27.5, - 0, - 92.5 - ] + "vector": [-27.5, 0, 92.5] }, "lerp_mode": "catmullrom" }, "0.75": { "post": { - "vector": [ - -27.5, - 0, - 90 - ] + "vector": [-27.5, 0, 90] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [ - -27.5, - 0, - 92.5 - ] + "vector": [-27.5, 0, 92.5] }, "lerp_mode": "catmullrom" } @@ -1792,131 +918,79 @@ "rotation": { "0.0": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "0.0833": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "0.1667": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "0.3333": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "0.4167": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "0.5833": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "0.6667": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "0.75": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "0.8333": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "0.9167": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" } @@ -1924,306 +998,6 @@ } } }, - "item_pickup": { - "animation_length": 3, - "bones": { - "body": { - "rotation": { - "0.0": { - "post": { - "vector": [-65, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-65, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_arm": { - "rotation": { - "0.25": { - "pre": { - "vector": [0, 0, 0] - }, - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [-44.8924, 3.2116, 26.3342] - }, - "lerp_mode": "catmullrom" - }, - "1.375": { - "post": { - "vector": [-49.8924, 3.2116, 26.3342] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-42.3924, 3.2116, 26.3342] - }, - "lerp_mode": "catmullrom" - }, - "1.625": { - "post": { - "vector": [-44.8924, 3.2116, 26.3342] - }, - "lerp_mode": "catmullrom" - }, - "1.75": { - "post": { - "vector": [-49.8924, 3.2116, 26.3342] - }, - "lerp_mode": "catmullrom" - }, - "1.875": { - "post": { - "vector": [-42.3924, 3.2116, 26.3342] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-44.8924, 3.2116, 26.3342] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.25": { - "pre": { - "vector": [0, 0, 0] - }, - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail": { - "rotation": { - "0.0": { - "post": { - "vector": [42.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [60, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -1.0425, -1.31366] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_flying_part": { - "scale": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_arm": { - "rotation": { - "0.25": { - "pre": { - "vector": [0, 0, 0] - }, - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [-44.8924, -3.2116, -26.3342] - }, - "lerp_mode": "catmullrom" - }, - "1.375": { - "post": { - "vector": [-49.8924, -3.2116, -26.3342] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-42.3924, -3.2116, -26.3342] - }, - "lerp_mode": "catmullrom" - }, - "1.625": { - "post": { - "vector": [-44.8924, -3.2116, -26.3342] - }, - "lerp_mode": "catmullrom" - }, - "1.75": { - "post": { - "vector": [-49.8924, -3.2116, -26.3342] - }, - "lerp_mode": "catmullrom" - }, - "1.875": { - "post": { - "vector": [-42.3924, -3.2116, -26.3342] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-44.8924, -3.2116, -26.3342] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.25": { - "pre": { - "vector": [0, 0, 0] - }, - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_flying_part": { - "scale": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_cheeks": { - "scale": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.125": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_cheeks": { - "scale": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.125": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "quirk1": { "animation_length": 2, "bones": { @@ -2704,7 +1478,7 @@ "vector": [0, 0, 0] }, "0.7917": { - "vector": ["-math.cos(q.anim_time*90*32-60)*20", "-math.cos(q.anim_time*90*32)*20", "math.cos(q.anim_time*90*32-50)*20"] + "vector": ["-math.cos(query.anim_time*90*32-60)*20", "-math.cos(query.anim_time*90*32)*20", "math.cos(query.anim_time*90*32-50)*20"] }, "0.9167": { "vector": [0, 0, 0] @@ -2717,7 +1491,7 @@ "vector": [0, 0, 0] }, "0.4583": { - "vector": ["-math.cos(q.anim_time*90*32-60)*20", "math.cos(q.anim_time*90*32)*20", "-math.cos(q.anim_time*90*32-50)*20"] + "vector": ["-math.cos(query.anim_time*90*32-60)*20", "math.cos(query.anim_time*90*32)*20", "-math.cos(query.anim_time*90*32-50)*20"] }, "0.5833": { "vector": [0, 0, 0] @@ -2726,7 +1500,7 @@ "vector": [0, 0, 0] }, "1.2917": { - "vector": ["-math.cos(q.anim_time*90*32-60)*20", "math.cos(q.anim_time*90*32)*20", "-math.cos(q.anim_time*90*32-50)*20"] + "vector": ["-math.cos(query.anim_time*90*32-60)*20", "math.cos(query.anim_time*90*32)*20", "-math.cos(query.anim_time*90*32-50)*20"] }, "1.4167": { "vector": [0, 0, 0] @@ -2773,13 +1547,13 @@ }, "1.0": { "post": { - "vector": [67.5, "-math.cos(q.anim_time*90*16)*10", "-17.5+math.cos(q.anim_time*90*16-60)*10"] + "vector": [67.5, "-math.cos(query.anim_time*90*16)*10", "-17.5+math.cos(query.anim_time*90*16-60)*10"] }, "lerp_mode": "catmullrom" }, "1.1667": { "post": { - "vector": [67.5, "-math.cos(q.anim_time*90*16)*10", "-17.5+math.cos(q.anim_time*90*16-60)*10"] + "vector": [67.5, "-math.cos(query.anim_time*90*16)*10", "-17.5+math.cos(query.anim_time*90*16-60)*10"] }, "lerp_mode": "catmullrom" }, @@ -3371,13 +2145,13 @@ }, "0.5": { "post": { - "vector": ["85-math.clamp(math.cos(q.anim_time*90*10-80)*10,0,10)", "math.cos(q.anim_time*90*8)*20", "math.cos(q.anim_time*90*8-80)*10"] + "vector": ["85-math.clamp(math.cos(query.anim_time*90*10-80)*10,0,10)", "math.cos(query.anim_time*90*8)*20", "math.cos(query.anim_time*90*8-80)*10"] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": ["85-math.clamp(math.cos(q.anim_time*90*10-80)*10,0,10)", "math.cos(q.anim_time*90*8)*20", "math.cos(q.anim_time*90*8-80)*10"] + "vector": ["85-math.clamp(math.cos(query.anim_time*90*10-80)*10,0,10)", "math.cos(query.anim_time*90*8)*20", "math.cos(query.anim_time*90*8-80)*10"] }, "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 13782188..74d958b0 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 @@ -528,6 +528,568 @@ "lerp_mode": "catmullrom" } } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, -13, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, -20, 0] + } + } + } + }, + "idle_P2": { + "loop": true, + "animation_length": 4, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-17, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [-13, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-15.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 6] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -3, 6] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 1, 6] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, -1, 6] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, -17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-32.5, -17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-17.5, -17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-20, -17.5, -5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.5, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_foot": { + "rotation": { + "vector": [-20, 0, 5] + } + }, + "Tail": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, -15, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [7.5, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [7.5, -15, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, -4.69, 1.87] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-7.5, -12.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [-7.5, 12.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-7.5, -4.69, 1.87] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, -0.83, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [7.5, -10, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.9167": { + "post": { + "vector": [7.5, 10, -5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [7.5, -0.83, 0.42] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-32.5, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-17.5, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0.5, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_foot": { + "rotation": { + "vector": [-20, 0, -5] + } + }, + "L_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [12.5, 30, -5] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [12.5, 10, -5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, -42.5, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-17.5, -17.5, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [12.5, -30, 5] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [12.5, -10, 5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, 42.5, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-17.5, 17.5, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, -0.75, 1.75] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [0, 0, -0.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } } } }, @@ -1358,6 +1920,868 @@ "lerp_mode": "catmullrom" } } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, -13, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, -20, 0] + } + } + } + }, + "walk_P2": { + "loop": true, + "animation_length": 2, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [15, 2.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [15, -2.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [15, -2.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [15, 2.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [15, 2.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "pre": { + "vector": [0, 7.5, 0] + }, + "post": { + "vector": [0, 7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-5, 3.87, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [8.73, -0.63, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, 0] + }, + "1.375": { + "pre": { + "vector": [0, -7.5, 0] + }, + "post": { + "vector": [0, -7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [-5, -3.87, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [8.73, 0.63, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 0, 0] + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "vector": [-2.5, 0, 0] + }, + "0.125": { + "pre": { + "vector": [0.68, -2.5, 0] + }, + "post": { + "vector": [0.68, -2.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-0.99, -4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-2.44, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [2.5, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-4.79, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "vector": [-2.5, 0, 0] + }, + "1.125": { + "pre": { + "vector": [0.68, 2.5, 0] + }, + "post": { + "vector": [0.68, 2.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-0.99, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-2.44, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [2.5, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [-4.79, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 2, 5] + }, + "0.0833": { + "vector": [0, -1, 4.5] + }, + "0.1667": { + "vector": [0, 4, 4.25] + }, + "0.25": { + "vector": [0, 1, 4.75] + }, + "0.375": { + "vector": [0, 2, 6.5] + }, + "0.5417": { + "pre": { + "vector": [0, 3.83, 9] + }, + "post": { + "vector": [0, 3.83, 9] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 7, 9] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 7, 7] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 2, 5] + }, + "1.0833": { + "vector": [0, -1, 4.5] + }, + "1.1667": { + "vector": [0, 4, 4.25] + }, + "1.25": { + "vector": [0, 1, 4.75] + }, + "1.375": { + "vector": [0, 2, 6.5] + }, + "1.5417": { + "pre": { + "vector": [0, 3.83, 9] + }, + "post": { + "vector": [0, 3.83, 9] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 7, 9] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [0, 7, 7] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 2, 5] + } + } + }, + "L_Tight": { + "rotation": { + "0.0": { + "vector": [20, -5, 0] + }, + "0.5": { + "pre": { + "vector": [15.94, -5, 0] + }, + "post": { + "vector": [15.94, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [-17.5, -5, 0] + }, + "2.0": { + "vector": [20, -5, 0] + } + }, + "position": { + "0.0": { + "vector": [0, -3.75, 5] + }, + "0.2917": { + "pre": { + "vector": [0, -1.73, 2.79] + }, + "post": { + "vector": [0, -1.73, 2.79] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 4.96, -5.58] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 4.96, -5.58] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, -0.25, -6] + }, + "1.0417": { + "vector": [0, -2.14, -5.54] + }, + "1.0833": { + "vector": [0, 0.96, -5.08] + }, + "1.1667": { + "vector": [0, -0.93, -4.12] + }, + "1.25": { + "vector": [0, -0.12, -3.25] + }, + "1.375": { + "vector": [0, 0.03, -1.87] + }, + "1.5": { + "vector": [0, -0.33, -0.5] + }, + "1.625": { + "vector": [0, -0.93, 0.88] + }, + "1.75": { + "vector": [0, -2.04, 2.25] + }, + "1.875": { + "vector": [0, -2.64, 3.63] + }, + "2.0": { + "vector": [0, -3.75, 5] + } + } + }, + "L_leg": { + "rotation": { + "0.0": { + "vector": [22.5, 0, 0] + }, + "0.5": { + "pre": { + "vector": [62.5, 0, 0] + }, + "post": { + "vector": [62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [7.5, 0, 0] + }, + "2.0": { + "vector": [22.5, 0, 0] + } + } + }, + "L_foot": { + "rotation": { + "0.0": { + "vector": [-42.5, 0, 0] + }, + "0.2917": { + "pre": { + "vector": [-37.19, 0, 0] + }, + "post": { + "vector": [-37.19, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-28.85, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-20.35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-20.35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [10, 0, 0] + }, + "2.0": { + "vector": [-42.5, 0, 0] + } + } + }, + "Tail": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -12.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -3.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -3.33, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Tight": { + "rotation": { + "0.0": { + "vector": [-17.5, 5, 0] + }, + "1.0": { + "vector": [20, 5, 0] + }, + "1.5": { + "pre": { + "vector": [15.94, 5, 0] + }, + "post": { + "vector": [15.94, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [-17.5, 5, 0] + } + }, + "position": { + "0.0": { + "vector": [0, -0.25, -6] + }, + "0.0417": { + "vector": [0, -2.14, -5.54] + }, + "0.0833": { + "vector": [0, 0.96, -5.08] + }, + "0.1667": { + "vector": [0, -0.93, -4.12] + }, + "0.25": { + "vector": [0, -0.12, -3.25] + }, + "0.375": { + "vector": [0, 0.03, -1.87] + }, + "0.5": { + "vector": [0, -0.33, -0.5] + }, + "0.625": { + "vector": [0, -0.93, 0.88] + }, + "0.75": { + "vector": [0, -2.04, 2.25] + }, + "0.875": { + "vector": [0, -2.64, 3.63] + }, + "1.0": { + "vector": [0, -3.75, 5] + }, + "1.2917": { + "pre": { + "vector": [0, -1.73, 2.79] + }, + "post": { + "vector": [0, -1.73, 2.79] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 4.96, -5.58] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [0, 4.96, -5.58] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, -0.25, -6] + } + } + }, + "R_leg": { + "rotation": { + "0.0": { + "vector": [7.5, 0, 0] + }, + "1.0": { + "vector": [22.5, 0, 0] + }, + "1.5": { + "pre": { + "vector": [62.5, 0, 0] + }, + "post": { + "vector": [62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [7.5, 0, 0] + } + } + }, + "R_foot": { + "rotation": { + "0.0": { + "vector": [10, 0, 0] + }, + "1.0": { + "vector": [-42.5, 0, 0] + }, + "1.2917": { + "pre": { + "vector": [-37.19, 0, 0] + }, + "post": { + "vector": [-37.19, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [-28.85, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [-20.35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [-20.35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [10, 0, 0] + } + } + }, + "L_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, 15, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, 30, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [10, 15, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [12.5, 5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-1.88, -21.88, 21.26] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, -20, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-5, -25, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -20, 21.67] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, -20, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [-5, -25, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-1.88, -21.88, 21.26] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, -30, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, -15, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, -5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [10, -15, -5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [12.5, -30, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 20, -21.67] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 20, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-5, 25, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 20, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [-5, 25, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 20, -21.67] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } } } }, @@ -1527,7 +2951,7 @@ }, "0.7917": { "post": { - "vector": [27.5, 0, 0] + "vector": [-17.5, 0, 0] }, "lerp_mode": "catmullrom" }, @@ -1846,6 +3270,526 @@ "lerp_mode": "catmullrom" } } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, -20, 0] + } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, -13, 0] + } + } + } + }, + "fly_P2": { + "loop": true, + "animation_length": 1, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [10, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [9.31, -4.68, 2.04] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [20, -7.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-18.06, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-18.06, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "vector": [0, -1, -3] + } + }, + "L_leg": { + "rotation": { + "vector": [47.5, 0, 0] + } + }, + "L_foot": { + "rotation": { + "vector": [122.5, 0, 0] + } + }, + "Tail": { + "rotation": { + "0.0": { + "vector": [15, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [-30, 0, 0] + }, + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "vector": [-22.86, 0, 0] + }, + "0.7083": { + "pre": { + "vector": [27.5, 0, 0] + }, + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [15, 0, 0] + } + } + }, + "Tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [5.58, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "vector": [0, -1, -3] + } + }, + "R_leg": { + "rotation": { + "vector": [47.5, 0, 0] + } + }, + "R_foot": { + "rotation": { + "vector": [122.5, 0, 0] + } + }, + "L_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.5, 20, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-30, 40, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [25, 27.5, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-22.5, 20, -40] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [22.5, -30, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -45, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-2.67, -13.15, 55.66] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.5, -20, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-30, -40, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [25, -27.5, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-22.5, -20, 40] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [22.5, 30, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 45, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-2.67, 13.15, -55.66] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [10, 0, 2.5] + }, + "post": { + "vector": [10, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [2.5, 5, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-7.5, 5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 14, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 11.68, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, -7, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } } } }, @@ -2438,6 +4382,630 @@ "lerp_mode": "catmullrom" } } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, -13, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, -20, 0] + } + } + } + }, + "attack_P2": { + "animation_length": 1, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [10.78, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-28, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-37.01, 0, 16.84] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "vector": [-33, 0, 15] + }, + "0.6667": { + "vector": [-5, 0, 0] + }, + "0.7083": { + "pre": { + "vector": [2.5, 0, 0] + }, + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-10.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 6] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, -17.5, -5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_foot": { + "rotation": { + "vector": [-20, 0, 5] + } + }, + "Tail": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [7.5, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [7.5, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [7.5, 7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-7.5, -4.26, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-7.5, -21.89, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-7.5, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-7.5, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [7.5, -6.9, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [7.5, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [7.5, -18.28, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [7.5, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-1.25, 17.5, 11.25] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-17.5, 17.5, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2.25, 0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [3, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "vector": [0, -4, 0] + }, + "0.7083": { + "vector": [0, 0, 0] + }, + "0.7917": { + "vector": [0, -2, 0] + }, + "0.9167": { + "pre": { + "vector": [0, -1, 0] + }, + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_foot": { + "rotation": { + "vector": [-20, 0, -5] + } + }, + "L_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [12.5, 30, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [12.5, 7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [12.5, 13.88, -3.19] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, -10, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-12.66, -23.37, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [12.5, -30, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [12.5, -7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [12.5, -13.88, 3.19] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, 10, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-12.66, 23.37, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } } } }, @@ -3197,6 +5765,797 @@ "lerp_mode": "catmullrom" } } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, -13, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, -20, 0] + } + } + } + }, + "attack2_P2": { + "animation_length": 1, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-2.5, 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" + } + } + }, + "L_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "vector": [0, -1, -3] + } + }, + "L_leg": { + "rotation": { + "0.0": { + "vector": [47.5, 0, 0] + }, + "0.2083": { + "pre": { + "vector": [45, 0, 0] + }, + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [26.56, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [47.5, 0, 0] + } + } + }, + "L_foot": { + "rotation": { + "0.0": { + "vector": [122.5, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [94.12, 0, 0] + }, + "post": { + "vector": [94.12, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [122.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail": { + "rotation": { + "0.0": { + "vector": [15, 0, 0] + }, + "0.125": { + "pre": { + "vector": [-27.5, 0, 0] + }, + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [15, 0, 0] + } + } + }, + "Tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "vector": [0, -1, -3] + } + }, + "R_leg": { + "rotation": { + "0.0": { + "vector": [47.5, 0, 0] + }, + "0.2083": { + "pre": { + "vector": [45, 0, 0] + }, + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [26.56, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [47.5, 0, 0] + } + } + }, + "R_foot": { + "rotation": { + "0.0": { + "vector": [122.5, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [94.12, 0, 0] + }, + "post": { + "vector": [94.12, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [122.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.5, 20, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [40, 37.5, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-72.5, -22.5, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-72.5, -47.5, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-17.5, 35, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-17.5, 35, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-22.5, 20, -40] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, -60] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -50] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 23.75] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.5, -20, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [40, -37.5, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-72.5, 22.5, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-72.5, 47.5, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-17.5, -35, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-17.5, -35, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-22.5, -20, 40] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 60] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 50] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -23.75] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "pre": { + "vector": [-5, 0, 0] + }, + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 25, 14] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 17, 21] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, -5, -41] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 1.75, -23.95] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 4.44, -5.56] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } } } }, @@ -3636,6 +6995,4479 @@ "lerp_mode": "catmullrom" } } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, -13, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, -20, 0] + } + } + } + }, + "roar_P2": { + "animation_length": 1.5, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-25.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [1.71, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-11.46, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-15.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 6] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, -17.5, -5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_foot": { + "rotation": { + "vector": [-20, 0, 5] + } + }, + "Tail": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_foot": { + "rotation": { + "vector": [-20, 0, -5] + } + }, + "L_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [12.5, 37.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [12.5, -12.5, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [12.5, -17.5, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-12.5, -55, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [12.5, -37.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [12.5, 12.5, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [12.5, 17.5, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-12.5, 55, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [26.09, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } + } + } + }, + "phase2": { + "animation_length": 4, + "bones": { + "head": { + "rotation": { + "0.0": { + "vector": [15, 0, 0] + }, + "0.125": { + "pre": { + "vector": [-7.5, 0, 0] + }, + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [15, 0, 0] + }, + "0.625": { + "pre": { + "vector": [-7.5, 0, 0] + }, + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [15, 0, 0] + }, + "1.125": { + "pre": { + "vector": [-7.5, 0, 0] + }, + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.1667": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.375": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.7083": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "vector": [15, 0, 0] + } + } + }, + "neck": { + "rotation": { + "0.0": { + "vector": [12.5, 0, 0] + }, + "0.0417": { + "vector": [17.59, 0, 0] + }, + "0.125": { + "pre": { + "vector": [-12.5, 0, 0] + }, + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-9.54, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [12.5, 0, 0] + }, + "0.5417": { + "vector": [17.59, 0, 0] + }, + "0.625": { + "pre": { + "vector": [-12.5, 0, 0] + }, + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-9.54, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [12.5, 0, 0] + }, + "1.0417": { + "vector": [17.59, 0, 0] + }, + "1.125": { + "pre": { + "vector": [-12.5, 0, 0] + }, + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-9.54, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [5.69, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0417": { + "post": { + "vector": [-3.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0.08, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [12.53, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [-17.47, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.9583": { + "post": { + "vector": [-17.47, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [20.03, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.75": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "vector": [12.5, 0, 0] + } + } + }, + "torso": { + "rotation": { + "0.0": { + "vector": [-17.5, 0, 0] + }, + "0.0833": { + "pre": { + "vector": [-30, -2.5, 10] + }, + "post": { + "vector": [-30, -2.5, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [-17.5, 0, 7.5] + }, + "0.5833": { + "pre": { + "vector": [-30, -2.5, 10] + }, + "post": { + "vector": [-30, -2.5, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [-17.5, 0, 7.5] + }, + "1.0833": { + "pre": { + "vector": [-30, -2.5, 10] + }, + "post": { + "vector": [-30, -2.5, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [1.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [-1.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [-12.81, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5417": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.9583": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.125": { + "post": { + "vector": [3.86, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [-8.24, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.4583": { + "post": { + "vector": [-15.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.6667": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "vector": [-17.5, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, -1, 6] + }, + "0.125": { + "pre": { + "vector": [0, 4, 6] + }, + "post": { + "vector": [0, 4, 6] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 4, 6] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, "-1+math.cos(query.anim_time*90*32)*2", 6] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, -1, 6] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, -1, 6] + }, + "0.625": { + "pre": { + "vector": [0, 4, 6] + }, + "post": { + "vector": [0, 4, 6] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 4, 6] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, "-1+math.cos(query.anim_time*90*32)*2", 6] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, -1, 6] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, -1, 6] + }, + "1.125": { + "pre": { + "vector": [0, 4, 6] + }, + "post": { + "vector": [0, 4, 6] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 4, 6] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [0, "-1+math.cos(query.anim_time*90*32)*2", 6] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [0, -3, 6] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, -1, 6] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [0, 1, 6] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 1, 6] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [0, 0, 6] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [0, 0, 6] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, -2, 6] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [0, -2.5, 6] + }, + "lerp_mode": "catmullrom" + }, + "3.2083": { + "post": { + "vector": [0, -2.5, 6] + }, + "lerp_mode": "catmullrom" + }, + "3.5833": { + "post": { + "vector": [0, -1, 6] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "vector": [0, -1, 6] + } + } + }, + "L_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, -17.5, -5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_foot": { + "rotation": { + "vector": [-20, 0, 5] + } + }, + "Tail": { + "rotation": { + "vector": [-10, 0, 0] + } + }, + "Tail2": { + "rotation": { + "vector": [5, 0, 0] + } + }, + "Tail3": { + "rotation": { + "vector": [12.5, 0, 0] + } + }, + "R_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [-13.15, 13.8, 10.19] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-47.5, 5, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-47.5, 5, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-13.15, 13.8, 10.19] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-47.5, 5, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-47.5, 5, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [-13.15, 13.8, 10.19] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-47.5, 5, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-47.5, 5, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "vector": [-10, 17.5, 5] + }, + "2.6667": { + "vector": [-20, 17.5, 5] + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [3, 4, -4] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [3, 7, -7] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-1, -1, -6] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-1, -1, -6] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [3, 4, -4] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [3, 7, -7] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-1, -1, -6] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-1, -1, -6] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [3, 4, -4] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [3, 7, -7] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-1, -1, -6] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-1, -1, -6] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-1, -1, -6] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [-1, -1, -6] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [-0.5, 4, -3] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "vector": [0, -1, 0] + } + } + }, + "R_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [80, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [40, 15, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [80, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [40, 15, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [80, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [40, 15, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_foot": { + "rotation": { + "0.0": { + "vector": [-20, 0, -5] + }, + "0.0417": { + "pre": { + "vector": [-42.5, 0, -5] + }, + "post": { + "vector": [-42.5, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-20, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [-20, 0, -5] + }, + "0.5": { + "vector": [-20, 0, -5] + }, + "0.5417": { + "pre": { + "vector": [-42.5, 0, -5] + }, + "post": { + "vector": [-42.5, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-20, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "vector": [-20, 0, -5] + }, + "1.0": { + "vector": [-20, 0, -5] + }, + "1.0417": { + "pre": { + "vector": [-42.5, 0, -5] + }, + "post": { + "vector": [-42.5, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-20, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "vector": [-20, 0, -5] + } + } + }, + "L_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [5, 7.5, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [10, 12.5, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [10, 12.5, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [5, 7.5, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [10, 12.5, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [10, 12.5, 20] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [5, 7.5, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [10, 12.5, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [17.5, 17.5, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [25, 32.5, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [25, 32.5, 25] + }, + "lerp_mode": "catmullrom" + }, + "2.3333": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [12.5, 17.5, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.7917": { + "post": { + "vector": [15, 35, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [17.5, 40, 15] + }, + "lerp_mode": "catmullrom" + }, + "3.125": { + "post": { + "vector": [17.5, 40, 15] + }, + "lerp_mode": "catmullrom" + }, + "3.5417": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [-30, -60, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-12.5, -20, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -57.5, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-30, -60, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-12.5, -20, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, -57.5, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [-30, -60, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-12.5, -20, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, -57.5, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, -82.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [-2.5, -87.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [-2.5, -87.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [-10, -30, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [0, -2.5, -15] + }, + "lerp_mode": "catmullrom" + }, + "3.125": { + "post": { + "vector": [0, -2.5, -15] + }, + "lerp_mode": "catmullrom" + }, + "3.5417": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [5, -7.5, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [10, -12.5, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [10, -12.5, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [5, -7.5, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [10, -12.5, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [10, -12.5, -20] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [5, -7.5, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [10, -12.5, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [17.5, -17.5, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [25, -32.5, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [25, -32.5, -25] + }, + "lerp_mode": "catmullrom" + }, + "2.3333": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [12.5, -17.5, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.7917": { + "post": { + "vector": [15, -35, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [17.5, -40, -15] + }, + "lerp_mode": "catmullrom" + }, + "3.125": { + "post": { + "vector": [17.5, -40, -15] + }, + "lerp_mode": "catmullrom" + }, + "3.5417": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [-30, 60, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-12.5, 20, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 57.5, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-30, 60, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-12.5, 20, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 57.5, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [-30, 60, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-12.5, 20, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 57.5, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 82.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [-2.5, 87.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [-2.5, 87.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [-10, 30, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [0, 2.5, 15] + }, + "lerp_mode": "catmullrom" + }, + "3.125": { + "post": { + "vector": [0, 2.5, 15] + }, + "lerp_mode": "catmullrom" + }, + "3.5417": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [0, 0, 0] + }, + "0.2917": { + "pre": { + "vector": [17.5, 0, 0] + }, + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.625": { + "vector": [0, 0, 0] + }, + "0.7917": { + "pre": { + "vector": [17.5, 0, 0] + }, + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, 0] + }, + "1.125": { + "vector": [0, 0, 0] + }, + "1.2917": { + "pre": { + "vector": [17.5, 0, 0] + }, + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": ["35-math.cos(query.anim_time*90*32-50)*5", 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": ["35-math.cos(query.anim_time*90*32-50)*5", 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.125": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.8333": { + "vector": [0, 0, 0] + } + } + }, + "spike2": { + "rotation": { + "0.0": { + "vector": [22.5, 0, 0] + }, + "2.625": { + "vector": [22.5, 0, 0] + }, + "2.7083": { + "vector": [0, 0, 0] + }, + "2.7917": { + "pre": { + "vector": [22.5, 0, 0] + }, + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.9583": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, -13, 0] + }, + "2.6667": { + "vector": [0, -13, 0] + }, + "2.75": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "spike": { + "rotation": { + "0.0": { + "vector": [-22.5, 0, 0] + }, + "2.6667": { + "vector": [-22.5, 0, 0] + }, + "2.75": { + "vector": [0, 0, 0] + }, + "2.8333": { + "pre": { + "vector": [-22.5, 0, 0] + }, + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, -20, 0] + }, + "2.7083": { + "vector": [0, -20, 0] + }, + "2.7917": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.9583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "pose": { + "animation_length": 0.0417, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 6] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, -17.5, -5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_foot": { + "rotation": { + "vector": [-20, 0, 5] + } + }, + "Tail": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_foot": { + "rotation": { + "vector": [-20, 0, -5] + } + }, + "L_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "vector": [0, 0, 0] + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, -13, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, -20, 0] + } + } + } + }, + "portal_enter": { + "animation_length": 1.75, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-6.4, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-20.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-57.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-77.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 6] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, -17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [25, -17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [45, -17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [52.5, -7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [80.98, -6.9, 0.3] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-5, -7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [-32.5, -7.5, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, -6, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [40, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [40, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [57.5, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_foot": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [37.5, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [47.5, 0, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [14.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [24.43, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [34.86, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [36.98, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [1.22, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [2.82, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [32.84, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [14.39, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [25, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [45, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [52.5, 7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [80.98, 6.9, -0.3] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-5, 7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [-32.5, 7.5, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, -6, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [40, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [40, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [57.5, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_foot": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [37.5, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [47.5, 0, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [55, -30, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [55, -30, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 42.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-17.5, -70, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -22.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, -22.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [2.5, -87.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [55, 30, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [55, 30, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, -42.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-17.5, 70, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 22.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 22.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [2.5, 87.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-85, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-127.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-167.14, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-190, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-222.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [-255, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-327.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [-345, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [-345, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 16.59, -67.19] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 49, -88] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 95, -91] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 135, -65] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 153, -18] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 148, 17] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 129.74, 40.11] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 105, 54.44] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 77.49, 57.29] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [0, 39, 37] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [0, 25.59, -18.71] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 22, -63] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [0, 22, -63] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "1.3333": { + "vector": [1, 1, 1] + }, + "1.4583": { + "pre": { + "vector": [0.8, 0.8, 1.4] + }, + "post": { + "vector": [0.8, 0.8, 1.4] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + } + } + } + }, + "portal_out": { + "animation_length": 1.125, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 6] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [25, -17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [33.76, -17.98, -5.24] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-37.5, -17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-45, -17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [12.5, -17.5, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [5, -17.5, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-20, -17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-20, -17.5, -5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [13.32, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-2.57, 0.42, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_foot": { + "rotation": { + "0.0": { + "vector": [-20, 0, 5] + }, + "0.0417": { + "pre": { + "vector": [70, 0, 5] + }, + "post": { + "vector": [70, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [21.57, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-17.24, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [43.95, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [5.26, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-20, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-20, 0, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-36.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-39.69, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [33.76, 17.98, 5.24] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-37.5, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-45, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [12.5, 17.5, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [5, 17.5, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [57.5, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [13.32, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-2.57, -0.42, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_foot": { + "rotation": { + "0.0": { + "vector": [-20, 0, -5] + }, + "0.0417": { + "pre": { + "vector": [70, 0, -5] + }, + "post": { + "vector": [70, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [21.57, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-17.24, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [43.95, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [5.26, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-20, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-20, 0, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-32.5, 60, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-24.38, 41.8, 1.1] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, -12.5, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 20, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [2.5, -87.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [2.5, -45, -47.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [2.5, -2.5, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2.5, -30, 62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [2.5, 0, 62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [3.75, -7.03, 29.22] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [2.5, -32.5, -45] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [5, -30, -20] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-32.5, -60, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-24.38, -41.8, -1.1] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 12.5, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -20, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [2.5, 87.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [2.5, 45, 47.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [2.5, 2.5, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2.5, 30, -62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [2.5, 0, -62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [3.75, 7.03, -29.22] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [2.5, 32.5, 45] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [5, 30, 20] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [19.17, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [6.02, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 22, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 24, -107] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 47, -87] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 58, -68] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 63, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 64, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 44.06, -19.06] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0.75, 0.75, 1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + } } } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/chiten_block.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/chiten_block.json deleted file mode 100644 index 651df798..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/chiten_block.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "variants": { - "axis=x": { - "model": "antarchy:block/chiten_block", - "x": 90, - "y": 90 - }, - "axis=y": { - "model": "antarchy:block/chiten_block" - }, - "axis=z": { - "model": "antarchy:block/chiten_block", - "x": 90 - } - } -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/chitin_block.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/chitin_block.json new file mode 100644 index 00000000..97a967f0 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/chitin_block.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/chitin_block", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/chitin_block" + }, + "axis=z": { + "model": "antarchy:block/chitin_block", + "x": 90 + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/chiten_spike.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/chitin_spike.json similarity index 63% rename from common-1.21.1/src/main/resources/assets/antarchy/blockstates/chiten_spike.json rename to common-1.21.1/src/main/resources/assets/antarchy/blockstates/chitin_spike.json index 4cef7a2b..35e0fe28 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/chiten_spike.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/chitin_spike.json @@ -1,14 +1,14 @@ { "variants": { - "thickness=base,vertical_direction=down": { "model": "antarchy:block/chiten_spike_down_base" }, - "thickness=base,vertical_direction=up": { "model": "antarchy:block/chiten_spike_up_base" }, - "thickness=frustum,vertical_direction=down": { "model": "antarchy:block/chiten_spike_down_frustum" }, - "thickness=frustum,vertical_direction=up": { "model": "antarchy:block/chiten_spike_up_frustum" }, - "thickness=middle,vertical_direction=down": { "model": "antarchy:block/chiten_spike_down_middle" }, - "thickness=middle,vertical_direction=up": { "model": "antarchy:block/chiten_spike_up_middle" }, - "thickness=tip,vertical_direction=down": { "model": "antarchy:block/chiten_spike_down_tip" }, - "thickness=tip,vertical_direction=up": { "model": "antarchy:block/chiten_spike_up_tip" }, - "thickness=tip_merge,vertical_direction=down": { "model": "antarchy:block/chiten_spike_down_tip_merge" }, - "thickness=tip_merge,vertical_direction=up": { "model": "antarchy:block/chiten_spike_up_tip_merge" } + "thickness=base,vertical_direction=down": { "model": "antarchy:block/chitin_spike_down_base" }, + "thickness=base,vertical_direction=up": { "model": "antarchy:block/chitin_spike_up_base" }, + "thickness=frustum,vertical_direction=down": { "model": "antarchy:block/chitin_spike_down_frustum" }, + "thickness=frustum,vertical_direction=up": { "model": "antarchy:block/chitin_spike_up_frustum" }, + "thickness=middle,vertical_direction=down": { "model": "antarchy:block/chitin_spike_down_middle" }, + "thickness=middle,vertical_direction=up": { "model": "antarchy:block/chitin_spike_up_middle" }, + "thickness=tip,vertical_direction=down": { "model": "antarchy:block/chitin_spike_down_tip" }, + "thickness=tip,vertical_direction=up": { "model": "antarchy:block/chitin_spike_up_tip" }, + "thickness=tip_merge,vertical_direction=down": { "model": "antarchy:block/chitin_spike_down_tip_merge" }, + "thickness=tip_merge,vertical_direction=up": { "model": "antarchy:block/chitin_spike_up_tip_merge" } } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/cut_titanium_wall.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/cut_titanium_wall.json deleted file mode 100644 index 182e05d8..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/cut_titanium_wall.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "multipart": [ - { - "when": { "up": "true" }, - "apply": { "model": "antarchy:block/cut_titanium_wall_post" } - }, - { - "when": { "north": "low" }, - "apply": { "model": "antarchy:block/cut_titanium_wall_side", "uvlock": true } - }, - { - "when": { "east": "low" }, - "apply": { "model": "antarchy:block/cut_titanium_wall_side", "y": 90, "uvlock": true } - }, - { - "when": { "south": "low" }, - "apply": { "model": "antarchy:block/cut_titanium_wall_side", "y": 180, "uvlock": true } - }, - { - "when": { "west": "low" }, - "apply": { "model": "antarchy:block/cut_titanium_wall_side", "y": 270, "uvlock": true } - }, - { - "when": { "north": "tall" }, - "apply": { "model": "antarchy:block/cut_titanium_wall_side_tall", "uvlock": true } - }, - { - "when": { "east": "tall" }, - "apply": { "model": "antarchy:block/cut_titanium_wall_side_tall", "y": 90, "uvlock": true } - }, - { - "when": { "south": "tall" }, - "apply": { "model": "antarchy:block/cut_titanium_wall_side_tall", "y": 180, "uvlock": true } - }, - { - "when": { "west": "tall" }, - "apply": { "model": "antarchy:block/cut_titanium_wall_side_tall", "y": 270, "uvlock": true } - } - ] -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/cut_uranium_wall.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/cut_uranium_wall.json deleted file mode 100644 index c1083213..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/cut_uranium_wall.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "multipart": [ - { - "when": { "up": "true" }, - "apply": { "model": "antarchy:block/cut_uranium_wall_post" } - }, - { - "when": { "north": "low" }, - "apply": { "model": "antarchy:block/cut_uranium_wall_side", "uvlock": true } - }, - { - "when": { "east": "low" }, - "apply": { "model": "antarchy:block/cut_uranium_wall_side", "y": 90, "uvlock": true } - }, - { - "when": { "south": "low" }, - "apply": { "model": "antarchy:block/cut_uranium_wall_side", "y": 180, "uvlock": true } - }, - { - "when": { "west": "low" }, - "apply": { "model": "antarchy:block/cut_uranium_wall_side", "y": 270, "uvlock": true } - }, - { - "when": { "north": "tall" }, - "apply": { "model": "antarchy:block/cut_uranium_wall_side_tall", "uvlock": true } - }, - { - "when": { "east": "tall" }, - "apply": { "model": "antarchy:block/cut_uranium_wall_side_tall", "y": 90, "uvlock": true } - }, - { - "when": { "south": "tall" }, - "apply": { "model": "antarchy:block/cut_uranium_wall_side_tall", "y": 180, "uvlock": true } - }, - { - "when": { "west": "tall" }, - "apply": { "model": "antarchy:block/cut_uranium_wall_side_tall", "y": 270, "uvlock": true } - } - ] -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/lucid_anchor.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/lucid_anchor.json new file mode 100644 index 00000000..ce302016 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/lucid_anchor.json @@ -0,0 +1,10 @@ +{ + "variants": { + "lit=false": { + "model": "antarchy:block/lucid_anchor" + }, + "lit=true": { + "model": "antarchy:block/lucid_anchor" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/geo/nightmare.geo.json b/common-1.21.1/src/main/resources/assets/antarchy/geo/nightmare.geo.json index f724110b..47b39246 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/geo/nightmare.geo.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/geo/nightmare.geo.json @@ -105,6 +105,14 @@ {"origin": [-3, 30, 56], "size": [6, 7, 21], "uv": [70, 0]} ] }, + { + "name": "spike", + "parent": "torso", + "pivot": [0, 39, 2.5], + "cubes": [ + {"origin": [-3.5, 29, -3], "size": [7, 20, 11], "uv": [148, 128]} + ] + }, { "name": "neck", "parent": "torso", @@ -113,6 +121,14 @@ {"origin": [-9, 13, -24], "size": [18, 19, 16], "uv": [0, 42]} ] }, + { + "name": "spike2", + "parent": "neck", + "pivot": [0, 30, -14.5], + "cubes": [ + {"origin": [-3.5, 30, -19], "size": [7, 14, 9], "uv": [129, 49]} + ] + }, { "name": "head", "parent": "neck", @@ -123,11 +139,13 @@ {"origin": [-8, 22, -42], "size": [16, 5, 19], "uv": [0, 0]}, {"origin": [0, 27, -42], "size": [0, 13, 9], "uv": [0, 75]}, {"origin": [0, 27, -52], "size": [0, 4, 9], "uv": [0, 70]}, + {"origin": [-11, 28, -36], "size": [0, 4, 9], "uv": [0, 70]}, + {"origin": [11, 28, -36], "size": [0, 4, 9], "uv": [0, 70], "mirror": true}, {"origin": [-15, 24, -36], "size": [9, 4, 12], "uv": [0, 202]}, {"origin": [6, 24, -36], "size": [9, 4, 12], "uv": [0, 202], "mirror": true}, {"origin": [-6, 18, -54], "size": [12, 5, 12], "inflate": 0.1, "uv": [68, 179]}, {"origin": [-6, 21, -54], "size": [12, 6, 12], "uv": [0, 24]}, - {"origin": [-3, 27, -55], "size": [6, 6, 0], "uv": [53, 51]} + {"origin": [-3, 27, -53.75], "size": [6, 6, 0], "uv": [53, 51]} ] }, { 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 fdee7c26..b4b0b248 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 @@ -869,8 +869,8 @@ "advancements.antarchy.gravity_gun_craft.description": "Stelle eine Gravitationskanone her.", "block.antarchy.cavaryn_portal": "Cavaryn-Portal", "block.antarchy.termite_nest": "Termite-Nest", - "block.antarchy.chiten_spike": "Chitin-Stachel", - "block.antarchy.chiten_block": "Chitin-Block", + "block.antarchy.chitin_spike": "Chitin-Stachel", + "block.antarchy.chitin_block": "Chitin-Block", "block.antarchy.myrmite": "Myrmite", "block.antarchy.broodstone": "Broodstone", "block.antarchy.amber_moss_block": "Bernsteinmoosblock", @@ -896,7 +896,7 @@ "item.antarchy.creeping_horror_spawn_egg": "Kriechender Schrecken-Spawn-Ei", "item.antarchy.lurking_terror_spawn_egg": "Lauernder Terror-Spawn-Ei", "item.antarchy.hercules_beetle_spawn_egg": "Herkuleskäfer-Spawn-Ei", - "item.antarchy.chiten": "Chitin", + "item.antarchy.chitin": "Chitin", "block.antarchy.polished_broodstone": "Poliert Broodstone", "block.antarchy.chiseled_broodstone": "Gemeißelt Broodstone", "block.antarchy.broodstone_bricks": "Broodstoneziegel", 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 5bb3bfad..ef545166 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 @@ -46,6 +46,7 @@ "item.antarchy.critter_cage": "Critter Cage", "block.antarchy.giant_lily_pad": "Giant Lily Pad", "block.antarchy.seashell": "Seashell", + "block.antarchy.lucid_anchor": "Lucid Anchor", "block.antarchy.critter_cage_block": "Critter Cage", "block.antarchy.hushweed": "Hushweed", "block.antarchy.umbral_moss_block": "Umbral Moss Block", @@ -60,6 +61,7 @@ "block.antarchy.polished_nyxite": "Polished Nyxite", "block.antarchy.chiseled_nyxite": "Chiseled Nyxite", "block.antarchy.nyxite_bricks": "Nyxite Bricks", + "block.antarchy.nyxite_pillar": "Nyxite Pillar", "block.antarchy.shellstone": "Shellstone", "block.antarchy.polished_shellstone": "Polished Shellstone", "block.antarchy.shellstone_bricks": "Shellstone Bricks", @@ -69,6 +71,7 @@ "block.antarchy.mossy_shellstone_brick_slab": "Mossy Shellstone Brick Slab", "block.antarchy.mossy_shellstone_brick_wall": "Mossy Shellstone Brick Wall", "block.antarchy.cracked_shellstone_bricks": "Cracked Shellstone Bricks", + "block.antarchy.shellstone_pillar": "Shellstone Pillar", "block.antarchy.shellstone_stairs": "Shellstone Stairs", "block.antarchy.shellstone_slab": "Shellstone Slab", "block.antarchy.shellstone_wall": "Shellstone Wall", @@ -97,12 +100,18 @@ "block.antarchy.cloud_block": "Cloud Block", "block.antarchy.thoraxis_portal": "Thoraxis Portal", "block.antarchy.antimetal": "Antimetal", + "block.antarchy.antimetal_stairs": "Antimetal Stairs", + "block.antarchy.antimetal_slab": "Antimetal Slab", "block.antarchy.polished_antimetal": "Polished Antimetal", + "block.antarchy.polished_antimetal_stairs": "Polished Antimetal Stairs", + "block.antarchy.polished_antimetal_slab": "Polished Antimetal Slab", "block.antarchy.antimetal_scaffolding": "Antimetal Scaffolding", "block.antarchy.antimetal_rail": "Antimetal Rail", "block.antarchy.antimetal_powered_rail": "Antimetal Powered Rail", "block.antarchy.antimetal_detector_rail": "Antimetal Detector Rail", "block.antarchy.antimetal_activator_rail": "Antimetal Activator Rail", + "block.antarchy.upper": "Upper", + "container.antarchy.upper": "Upper", "block.antarchy.cornea_stalk": "Cornea Stalk", "block.antarchy.corn_crop": "Corn Crop", "block.antarchy.dream_torch": "Dream Torch", @@ -118,6 +127,8 @@ "block.antarchy.large_blood_crystal_bud": "Large Blood Crystal Bud", "block.antarchy.blood_crystal_cluster": "Blood Crystal Cluster", "block.antarchy.dream_sand": "Dream Sand", + "block.antarchy.antigravel": "Antigravel", + "block.antarchy.loam": "Loam", "block.antarchy.dream_sandstone": "Dream Sandstone", "block.antarchy.chiseled_dream_sandstone": "Chiseled Dream Sandstone", "block.antarchy.cut_dream_sandstone": "Cut Dream Sandstone", @@ -142,6 +153,7 @@ "block.antarchy.bluestone_repeater": "Bluestone Repeater", "block.antarchy.bluestone_comparator": "Bluestone Comparator", "block.antarchy.bluestone_torch": "Bluestone Torch", + "block.antarchy.bluestone_lamp": "Bluestone Lamp", "block.antarchy.uranium_block": "Block of Uranium", "block.antarchy.titanium_block": "Block of Titanium", "block.antarchy.raw_uranium_block": "Block of Raw Uranium", @@ -236,6 +248,7 @@ "tooltip.antarchy.critter_cage.place": "Shift + click to place", "item.antarchy.kraken_tooth": "Kraken Tooth", "item.antarchy.kraken_tentacle": "Kraken Tentacle", + "item.antarchy.kraken_kalamari": "Kraken Calamari", "item.antarchy.krakens_grasp": "Kraken's Grasp", "entity.antarchy.tentacle": "Tentacle", "item.antarchy.basilisk_fang": "Basilisk Fang", @@ -376,7 +389,6 @@ "key.antarchy.dorrie_charge_jump": "Dorrie Charge Jump", "key.antarchy.hercules_beetle_charge": "Hercules Beetle Charge", "key.antarchy.hercules_beetle_flight_toggle": "Hercules Beetle Flight Toggle", - "item.antarchy.carapace": "Carapace", "item.antarchy.jumpy_bug_leg": "Jumpy Bug Leg", "item.antarchy.jumpy_boots": "Jumpy Boots", "tooltip.antarchy.jumpy_boots": "Sneak to charge, then jump to spring upward.", @@ -459,6 +471,7 @@ "item.antarchy.ouranwood_deer_spawn_egg": "Ouranwood Deer Spawn Egg", "item.antarchy.spirit_apple": "Spirit Apple", "tooltip.antarchy.spirit_apple": "Tames a Glimmer", + "tooltip.antarchy.spirit_apple.eaten": "Grants Glimmering when eaten", "item.antarchy.elka_spawn_egg": "Elka Spawn Egg", "item.antarchy.glimmer_bottle": "Bottle of Glimmer", "item.antarchy.glimmer_bottle.contains": "Contains: %s", @@ -568,6 +581,8 @@ "effect.antarchy.growth": "Growth", "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.", "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", @@ -606,9 +621,9 @@ "advancements.antarchy.fallen_kingdom_castle.description": "Discover the Fallen Kingdom Castle.", "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": "Hello Everyone, Dan Here!", + "advancements.antarchy.the_lab.title": "Hey everyone, Dan here", "advancements.antarchy.the_lab.description": "Discover Dr. Trayaurus\u0027 lab.", - "advancements.antarchy.sweater_dreams.title": "Sweater Dreams", + "advancements.antarchy.sweater_dreams.title": "Sweeter Dreams", "advancements.antarchy.sweater_dreams.description": "Defeat the Nightmare.", "advancements.antarchy.stone_cold.title": "Stone Cold", "advancements.antarchy.stone_cold.description": "Defeat a Basilisk.", @@ -899,15 +914,22 @@ "advancements.antarchy.rocket_powered_octopus.description": "Craft an R.P.O. Launcher.", "advancements.antarchy.gravity_gun_craft.title": "Pick Up Artist", "advancements.antarchy.gravity_gun_craft.description": "Craft a Gravity Gun.", + "advancements.antarchy.upper_craft.title": "Uppies?? Uppies!!!", + "advancements.antarchy.upper_craft.description": "Craft an Upper.", + "advancements.antarchy.mucus_obtained.title": "Gazuntite!", + "advancements.antarchy.mucus_obtained.description": "Obtain some Mucus.", "block.antarchy.cavaryn_portal": "Cavaryn Portal", + "biome.antarchy.cavaryn_moleworm_caves": "Moleworm Caves", "block.antarchy.termite_nest": "Termite Nest", - "block.antarchy.chiten_spike": "Chiten Spike", - "block.antarchy.chiten_block": "Chiten Block", + "block.antarchy.chitin_spike": "Chitin Spike", + "block.antarchy.chitin_block": "Chitin Block", "block.antarchy.myrmite": "Myrmite", "block.antarchy.broodstone": "Broodstone", "block.antarchy.amber_moss_block": "Amber Moss Block", "block.antarchy.amber_moss_carpet": "Amber Moss Carpet", "block.antarchy.amber_lichen": "Amber Lichen", + "block.antarchy.mucus": "Mucus", + "tooltip.antarchy.mucus_slippery": "Makes the block it's on slippery like ice", "block.antarchy.bile_vein": "Bile Vein", "block.antarchy.creepvine": "Creepvine", "block.antarchy.creeping_horror_egg": "Creeping Horror Egg", @@ -928,7 +950,7 @@ "item.antarchy.creeping_horror_spawn_egg": "Creeping Horror Spawn Egg", "item.antarchy.lurking_terror_spawn_egg": "Lurking Terror Spawn Egg", "item.antarchy.hercules_beetle_spawn_egg": "Hercules Beetle Spawn Egg", - "item.antarchy.chiten": "Chiten", + "item.antarchy.chitin": "Chitin", "block.antarchy.polished_broodstone": "Polished Broodstone", "block.antarchy.chiseled_broodstone": "Chiseled Broodstone", "block.antarchy.broodstone_bricks": "Broodstone Bricks", @@ -941,6 +963,7 @@ "block.antarchy.broodstone_brick_stairs": "Broodstone Brick Stairs", "block.antarchy.broodstone_brick_slab": "Broodstone Brick Slab", "block.antarchy.broodstone_brick_wall": "Broodstone Brick Wall", + "block.antarchy.broodstone_pillar": "Broodstone Pillar", "block.antarchy.myrmite_coal_ore": "Myrmite Coal Ore", "block.antarchy.broodstone_uranium_ore": "Broodstone Uranium Ore", "block.antarchy.broodstone_titanium_ore": "Broodstone Titanium Ore", @@ -1001,5 +1024,26 @@ "advancements.antarchy.beetle_buddies.title": "Beetle Buddies", "advancements.antarchy.beetle_buddies.description": "Tame a Hercules Beetle.", "advancements.antarchy.herculean_task.title": "Herculean Task", - "advancements.antarchy.herculean_task.description": "Slay a Hercules Beetle." + "advancements.antarchy.herculean_task.description": "Slay a Hercules Beetle.", + "item.antarchy.tigers_eye": "Tiger's Eye", + "item.antarchy.tigers_eye_helmet": "Tiger's Eye Helmet", + "item.antarchy.tigers_eye_chestplate": "Tiger's Eye Chestplate", + "item.antarchy.tigers_eye_leggings": "Tiger's Eye Leggings", + "item.antarchy.tigers_eye_boots": "Tiger's Eye Boots", + "trim_material.antarchy.tigers_eye": "Tiger's Eye", + "item.antarchy.tigers_eye_armor.passive": "Up to 10% detection reduction", + "item.antarchy.tigers_eye_armor.full_set": "Full Set: Adaptive Camouflage", + "item.antarchy.tigers_eye_armor.activate": "Press %s to mimic the block beneath you", + "item.antarchy.tigers_eye_armor.active_bonus": "Doubles detection reduction while active", + "key.antarchy.tigers_eye_camouflage": "Adaptive Camouflage", + "message.antarchy.tiger_eye_camouflage.activated": "Adaptive Camouflage activated", + "message.antarchy.tiger_eye_camouflage.disabled": "Adaptive Camouflage disabled", + "message.antarchy.tiger_eye_camouflage.full_set_required": "A full set of Tiger's Eye armor is required", + "message.antarchy.tiger_eye_camouflage.invalid_block": "There is no suitable block beneath you", + "music.antarchy.lucid_lullaby": "Lucid Lullaby", + "music.antarchy.lucid_lullaby.credit": "hewo_", + "music.antarchy.venenatus": "Venenatus", + "music.antarchy.venenatus.credit": "hewo_", + "tooltip.antarchy.lucid_anchor.pyramid": "Requires an Antimetal Beacon pyramid above it", + "tooltip.antarchy.lucid_anchor.path": "Projects Inverted downward while it has an unobstructed path to the world below" } 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 8d6efdf1..263534e8 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 @@ -869,8 +869,8 @@ "advancements.antarchy.gravity_gun_craft.description": "Fabrica una pistola gravitatoria.", "block.antarchy.cavaryn_portal": "Portal de Cavaryn", "block.antarchy.termite_nest": "Nido de Termita", - "block.antarchy.chiten_spike": "Púa de Quitina", - "block.antarchy.chiten_block": "Bloque de Quitina", + "block.antarchy.chitin_spike": "Púa de Quitina", + "block.antarchy.chitin_block": "Bloque de Quitina", "block.antarchy.myrmite": "Myrmite", "block.antarchy.broodstone": "Broodstone", "block.antarchy.amber_moss_block": "Bloque de musgo ámbar", @@ -896,7 +896,7 @@ "item.antarchy.creeping_horror_spawn_egg": "Huevo generador de Horror rastrero", "item.antarchy.lurking_terror_spawn_egg": "Huevo generador de Terror acechante", "item.antarchy.hercules_beetle_spawn_egg": "Huevo generador de Escarabajo hércules", - "item.antarchy.chiten": "Quitina", + "item.antarchy.chitin": "Quitina", "block.antarchy.polished_broodstone": "Broodstone pulido", "block.antarchy.chiseled_broodstone": "Broodstone cincelado", "block.antarchy.broodstone_bricks": "Ladrillos de Broodstone", 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 92426d80..90486b95 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 @@ -869,8 +869,8 @@ "advancements.antarchy.gravity_gun_craft.description": "Fabriquez un canon à gravité.", "block.antarchy.cavaryn_portal": "Portail de Cavaryn", "block.antarchy.termite_nest": "Nid de Termite", - "block.antarchy.chiten_spike": "Pointe de Chitine", - "block.antarchy.chiten_block": "Bloc de Chitine", + "block.antarchy.chitin_spike": "Pointe de Chitine", + "block.antarchy.chitin_block": "Bloc de Chitine", "block.antarchy.myrmite": "Myrmite", "block.antarchy.broodstone": "Broodstone", "block.antarchy.amber_moss_block": "Bloc de mousse ambrée", @@ -896,7 +896,7 @@ "item.antarchy.creeping_horror_spawn_egg": "Œuf d’apparition de Horreur rampante", "item.antarchy.lurking_terror_spawn_egg": "Œuf d’apparition de Terreur tapie", "item.antarchy.hercules_beetle_spawn_egg": "Œuf d’apparition de Scarabée Hercule", - "item.antarchy.chiten": "Chitine", + "item.antarchy.chitin": "Chitine", "block.antarchy.polished_broodstone": "Broodstone poli", "block.antarchy.chiseled_broodstone": "Broodstone ciselé", "block.antarchy.broodstone_bricks": "Briques de Broodstone", 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 00b59863..8cae2bf2 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 @@ -869,8 +869,8 @@ "advancements.antarchy.gravity_gun_craft.description": "Fabbrica un Cannone gravitazionale.", "block.antarchy.cavaryn_portal": "Portale per Cavaryn", "block.antarchy.termite_nest": "Nido di Termite", - "block.antarchy.chiten_spike": "Spuntone di Chiten", - "block.antarchy.chiten_block": "Blocco di Chiten", + "block.antarchy.chitin_spike": "Spuntone di Chiten", + "block.antarchy.chitin_block": "Blocco di Chiten", "block.antarchy.myrmite": "Myrmite", "block.antarchy.broodstone": "Broodstone", "block.antarchy.amber_moss_block": "Blocco di muschio ambrato", @@ -896,7 +896,7 @@ "item.antarchy.creeping_horror_spawn_egg": "Uovo generatore di Orrore strisciante", "item.antarchy.lurking_terror_spawn_egg": "Uovo generatore di Terrore in agguato", "item.antarchy.hercules_beetle_spawn_egg": "Uovo generatore di Scarabeo Ercole", - "item.antarchy.chiten": "Chiten", + "item.antarchy.chitin": "Chiten", "block.antarchy.polished_broodstone": "Broodstone levigato", "block.antarchy.chiseled_broodstone": "Broodstone cesellato", "block.antarchy.broodstone_bricks": "Mattoni di Broodstone", 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 7ac05450..a0888c20 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 @@ -869,8 +869,8 @@ "advancements.antarchy.gravity_gun_craft.description": "重力銃をクラフトする。", "block.antarchy.cavaryn_portal": "カヴァリンのポータル", "block.antarchy.termite_nest": "シロアリの巣", - "block.antarchy.chiten_spike": "キチンのトゲ", - "block.antarchy.chiten_block": "キチンのブロック", + "block.antarchy.chitin_spike": "キチンのトゲ", + "block.antarchy.chitin_block": "キチンのブロック", "block.antarchy.myrmite": "ミルマイト", "block.antarchy.broodstone": "ブルードストーン", "block.antarchy.amber_moss_block": "琥珀色の苔ブロック", @@ -896,7 +896,7 @@ "item.antarchy.creeping_horror_spawn_egg": "這い寄る恐怖のスポーンエッグ", "item.antarchy.lurking_terror_spawn_egg": "潜む恐怖のスポーンエッグ", "item.antarchy.hercules_beetle_spawn_egg": "ヘラクレスオオカブトのスポーンエッグ", - "item.antarchy.chiten": "キチン", + "item.antarchy.chitin": "キチン", "block.antarchy.polished_broodstone": "磨かれたブルードストーン", "block.antarchy.chiseled_broodstone": "模様入りのブルードストーン", "block.antarchy.broodstone_bricks": "ブルードストーンレンガ", 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 bb5facc5..712792fe 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 @@ -869,8 +869,8 @@ "advancements.antarchy.gravity_gun_craft.description": "중력총을 제작하세요.", "block.antarchy.cavaryn_portal": "카바린 차원문", "block.antarchy.termite_nest": "흰개미 둥지", - "block.antarchy.chiten_spike": "치텐 가시", - "block.antarchy.chiten_block": "치텐 블록", + "block.antarchy.chitin_spike": "치텐 가시", + "block.antarchy.chitin_block": "치텐 블록", "block.antarchy.myrmite": "미르마이트", "block.antarchy.broodstone": "브루드스톤", "block.antarchy.amber_moss_block": "호박색 이끼 블록", @@ -896,7 +896,7 @@ "item.antarchy.creeping_horror_spawn_egg": "기어오는 공포 생성 알", "item.antarchy.lurking_terror_spawn_egg": "도사린 공포 생성 알", "item.antarchy.hercules_beetle_spawn_egg": "헤라클레스장수풍뎅이 생성 알", - "item.antarchy.chiten": "치텐", + "item.antarchy.chitin": "치텐", "block.antarchy.polished_broodstone": "윤나는 브루드스톤", "block.antarchy.chiseled_broodstone": "조각된 브루드스톤", "block.antarchy.broodstone_bricks": "브루드스톤 벽돌", 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 ef307900..1527e9eb 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 @@ -869,8 +869,8 @@ "advancements.antarchy.gravity_gun_craft.description": "Fabrique uma arma gravitacional.", "block.antarchy.cavaryn_portal": "Portal de Cavaryn", "block.antarchy.termite_nest": "Ninho de Cupim", - "block.antarchy.chiten_spike": "Espinho de Quitina", - "block.antarchy.chiten_block": "Bloco de Quitina", + "block.antarchy.chitin_spike": "Espinho de Quitina", + "block.antarchy.chitin_block": "Bloco de Quitina", "block.antarchy.myrmite": "Myrmite", "block.antarchy.broodstone": "Broodstone", "block.antarchy.amber_moss_block": "Bloco de Musgo Âmbar", @@ -896,7 +896,7 @@ "item.antarchy.creeping_horror_spawn_egg": "Ovo Gerador de Horror Rastejante", "item.antarchy.lurking_terror_spawn_egg": "Ovo Gerador de Terror à Espreita", "item.antarchy.hercules_beetle_spawn_egg": "Ovo Gerador de Besouro-hércules", - "item.antarchy.chiten": "Quitina", + "item.antarchy.chitin": "Quitina", "block.antarchy.polished_broodstone": "Broodstone polido", "block.antarchy.chiseled_broodstone": "Broodstone talhado", "block.antarchy.broodstone_bricks": "Tijolos de Broodstone", 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 03490d88..09d5e643 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 @@ -869,8 +869,8 @@ "advancements.antarchy.gravity_gun_craft.description": "合成重力枪。", "block.antarchy.cavaryn_portal": "卡瓦林传送门", "block.antarchy.termite_nest": "白蚁巢", - "block.antarchy.chiten_spike": "甲壳素尖刺", - "block.antarchy.chiten_block": "甲壳素块", + "block.antarchy.chitin_spike": "甲壳素尖刺", + "block.antarchy.chitin_block": "甲壳素块", "block.antarchy.myrmite": "米尔迈特", "block.antarchy.broodstone": "布鲁德斯通", "block.antarchy.amber_moss_block": "琥珀苔藓块", @@ -896,7 +896,7 @@ "item.antarchy.creeping_horror_spawn_egg": "爬行恐魔刷怪蛋", "item.antarchy.lurking_terror_spawn_egg": "潜伏恐魔刷怪蛋", "item.antarchy.hercules_beetle_spawn_egg": "赫拉克勒斯甲虫刷怪蛋", - "item.antarchy.chiten": "甲壳素", + "item.antarchy.chitin": "甲壳素", "block.antarchy.polished_broodstone": "磨制布鲁德斯通", "block.antarchy.chiseled_broodstone": "雕纹布鲁德斯通", "block.antarchy.broodstone_bricks": "布鲁德斯通砖块", 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 a9ca7ebe..0d3e7a3e 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 @@ -869,8 +869,8 @@ "advancements.antarchy.gravity_gun_craft.description": "合成重力槍。", "block.antarchy.cavaryn_portal": "卡瓦林傳送門", "block.antarchy.termite_nest": "白蟻巢", - "block.antarchy.chiten_spike": "甲殼素尖刺", - "block.antarchy.chiten_block": "甲殼素塊", + "block.antarchy.chitin_spike": "甲殼素尖刺", + "block.antarchy.chitin_block": "甲殼素塊", "block.antarchy.myrmite": "米爾邁特", "block.antarchy.broodstone": "布魯德斯通", "block.antarchy.amber_moss_block": "琥珀苔蘚塊", @@ -896,7 +896,7 @@ "item.antarchy.creeping_horror_spawn_egg": "爬行恐魔刷怪蛋", "item.antarchy.lurking_terror_spawn_egg": "潛伏恐魔刷怪蛋", "item.antarchy.hercules_beetle_spawn_egg": "赫拉克勒斯甲蟲刷怪蛋", - "item.antarchy.chiten": "甲殼素", + "item.antarchy.chitin": "甲殼素", "block.antarchy.polished_broodstone": "磨製布魯德斯通", "block.antarchy.chiseled_broodstone": "雕紋布魯德斯通", "block.antarchy.broodstone_bricks": "布魯德斯通磚塊", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_block.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_block.json deleted file mode 100644 index c3d21bb3..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_block.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column", - "textures": { - "end": "antarchy:block/chiten_block", - "side": "antarchy:block/chiten_block" - } -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_block.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_block.json new file mode 100644 index 00000000..e74bec2a --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_block.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "antarchy:block/chitin_block", + "side": "antarchy:block/chitin_block" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_down_base.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_base.json similarity index 53% rename from common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_down_base.json rename to common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_base.json index 5bb4d70a..4ec45128 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_down_base.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_base.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/pointed_dripstone", "textures": { - "cross": "antarchy:block/chiten_spike/chiten_spike_down_base" + "cross": "antarchy:block/chitin_spike/chitin_spike_down_base" } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_down_frustum.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_frustum.json similarity index 54% rename from common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_down_frustum.json rename to common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_frustum.json index c94fcdb5..5ad13746 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_down_frustum.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_frustum.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/pointed_dripstone", "textures": { - "cross": "antarchy:block/chiten_spike/chiten_spike_down_frustum" + "cross": "antarchy:block/chitin_spike/chitin_spike_down_frustum" } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_down_middle.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_middle.json similarity index 54% rename from common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_down_middle.json rename to common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_middle.json index 8cd7d902..9e3fd73e 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_down_middle.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_middle.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/pointed_dripstone", "textures": { - "cross": "antarchy:block/chiten_spike/chiten_spike_down_middle" + "cross": "antarchy:block/chitin_spike/chitin_spike_down_middle" } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_down_tip.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_tip.json similarity index 53% rename from common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_down_tip.json rename to common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_tip.json index d8b89d9b..9f3622fb 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_down_tip.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_tip.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/pointed_dripstone", "textures": { - "cross": "antarchy:block/chiten_spike/chiten_spike_down_tip" + "cross": "antarchy:block/chitin_spike/chitin_spike_down_tip" } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_down_tip_merge.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_tip_merge.json similarity index 55% rename from common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_down_tip_merge.json rename to common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_tip_merge.json index 3941f02d..e1325f39 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_down_tip_merge.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_tip_merge.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/pointed_dripstone", "textures": { - "cross": "antarchy:block/chiten_spike/chiten_spike_down_tip_merge" + "cross": "antarchy:block/chitin_spike/chitin_spike_down_tip_merge" } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_up_base.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_base.json similarity index 53% rename from common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_up_base.json rename to common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_base.json index a896ccbb..2fa8eca9 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_up_base.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_base.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/pointed_dripstone", "textures": { - "cross": "antarchy:block/chiten_spike/chiten_spike_up_base" + "cross": "antarchy:block/chitin_spike/chitin_spike_up_base" } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_up_frustum.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_frustum.json similarity index 54% rename from common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_up_frustum.json rename to common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_frustum.json index e3e84f52..75aeda2b 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_up_frustum.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_frustum.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/pointed_dripstone", "textures": { - "cross": "antarchy:block/chiten_spike/chiten_spike_up_frustum" + "cross": "antarchy:block/chitin_spike/chitin_spike_up_frustum" } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_up_middle.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_middle.json similarity index 53% rename from common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_up_middle.json rename to common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_middle.json index ba4e46f2..dd2baeff 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_up_middle.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_middle.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/pointed_dripstone", "textures": { - "cross": "antarchy:block/chiten_spike/chiten_spike_up_middle" + "cross": "antarchy:block/chitin_spike/chitin_spike_up_middle" } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_up_tip.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_tip.json similarity index 53% rename from common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_up_tip.json rename to common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_tip.json index 25dda590..34d704ce 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_up_tip.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_tip.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/pointed_dripstone", "textures": { - "cross": "antarchy:block/chiten_spike/chiten_spike_up_tip" + "cross": "antarchy:block/chitin_spike/chitin_spike_up_tip" } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_up_tip_merge.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_tip_merge.json similarity index 54% rename from common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_up_tip_merge.json rename to common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_tip_merge.json index 6349e79a..6d0e4964 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_up_tip_merge.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_tip_merge.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/pointed_dripstone", "textures": { - "cross": "antarchy:block/chiten_spike/chiten_spike_up_tip_merge" + "cross": "antarchy:block/chitin_spike/chitin_spike_up_tip_merge" } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_inventory.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_inventory.json deleted file mode 100644 index 91807bc1..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_inventory.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_inventory", - "textures": { - "wall": "antarchy:block/titanium/titanium_block" - } -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_post.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_post.json deleted file mode 100644 index fefb11fe..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_post.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_post", - "textures": { - "wall": "antarchy:block/titanium/titanium_block" - } -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_side.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_side.json deleted file mode 100644 index 6c784c47..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_side.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_side", - "textures": { - "wall": "antarchy:block/titanium/titanium_block" - } -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_side_tall.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_side_tall.json deleted file mode 100644 index bcddc58e..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_side_tall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_side_tall", - "textures": { - "wall": "antarchy:block/titanium/titanium_block" - } -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_inventory.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_inventory.json deleted file mode 100644 index 68cb60c7..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_inventory.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_inventory", - "textures": { - "wall": "antarchy:block/uranium/uranium_block" - } -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_post.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_post.json deleted file mode 100644 index 8ac993de..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_post.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_post", - "textures": { - "wall": "antarchy:block/uranium/uranium_block" - } -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_side.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_side.json deleted file mode 100644 index e95dcf78..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_side.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_side", - "textures": { - "wall": "antarchy:block/uranium/uranium_block" - } -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_side_tall.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_side_tall.json deleted file mode 100644 index 363da0fb..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_side_tall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_side_tall", - "textures": { - "wall": "antarchy:block/uranium/uranium_block" - } -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/chiten_block.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/chiten_block.json deleted file mode 100644 index 47e06517..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/item/chiten_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "antarchy:block/chiten_block" -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/chiten.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/chitin.json similarity index 63% rename from common-1.21.1/src/main/resources/assets/antarchy/models/item/chiten.json rename to common-1.21.1/src/main/resources/assets/antarchy/models/item/chitin.json index 20b2e019..8c0fb56b 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/item/chiten.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/chitin.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "antarchy:item/chiten" + "layer0": "antarchy:item/chitin" } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/chitin_block.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/chitin_block.json new file mode 100644 index 00000000..af0eb6ea --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/chitin_block.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/chitin_block" +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/chiten_spike.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/chitin_spike.json similarity index 59% rename from common-1.21.1/src/main/resources/assets/antarchy/models/item/chiten_spike.json rename to common-1.21.1/src/main/resources/assets/antarchy/models/item/chitin_spike.json index 0a70c0e9..0204bc60 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/item/chiten_spike.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/chitin_spike.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "antarchy:item/chiten_spike" + "layer0": "antarchy:item/chitin_spike" } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/cut_titanium_wall.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/cut_titanium_wall.json deleted file mode 100644 index c3db6023..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/item/cut_titanium_wall.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "antarchy:block/cut_titanium_wall_inventory" -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/cut_uranium_wall.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/cut_uranium_wall.json deleted file mode 100644 index 3bdb1efd..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/item/cut_uranium_wall.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "antarchy:block/cut_uranium_wall_inventory" -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/lucid_anchor.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/lucid_anchor.json new file mode 100644 index 00000000..00045879 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/lucid_anchor.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/lucid_anchor" +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/carapace.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/tigers_eye.json similarity index 60% rename from common-1.21.1/src/main/resources/assets/antarchy/models/item/carapace.json rename to common-1.21.1/src/main/resources/assets/antarchy/models/item/tigers_eye.json index 33c0b13e..a3eb2d1b 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/item/carapace.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/tigers_eye.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "antarchy:item/carapace" + "layer0": "antarchy:item/tigers_eye" } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/tigers_eye_boots.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/tigers_eye_boots.json new file mode 100644 index 00000000..d7e69c26 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/tigers_eye_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/tigers_eye/tigers_eye_boots" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/tigers_eye_chestplate.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/tigers_eye_chestplate.json new file mode 100644 index 00000000..32f5bdf2 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/tigers_eye_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/tigers_eye/tigers_eye_chestplate" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/tigers_eye_helmet.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/tigers_eye_helmet.json new file mode 100644 index 00000000..6bd539db --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/tigers_eye_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/tigers_eye/tigers_eye_helmet" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/tigers_eye_leggings.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/tigers_eye_leggings.json new file mode 100644 index 00000000..bb9a8c56 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/tigers_eye_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/tigers_eye/tigers_eye_leggings" + } +} 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 9c31a672..cfdb304d 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 @@ -916,6 +916,22 @@ } ] }, + "lucid_lullaby": { + "sounds": [ + { + "name": "antarchy:music/game/thoraxis/lucid_lullaby", + "stream": true + } + ] + }, + "venenatus": { + "sounds": [ + { + "name": "antarchy:music/game/cavaryn/venenatus", + "stream": true + } + ] + }, "lucid_ambient": { "subtitle": "subtitles.antarchy.lucid_ambient", "sounds": [ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/biomite.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/biomite.png index 02f43731..db068cdf 100644 Binary files a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/biomite.png and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/biomite.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/biomite_turf.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/biomite_turf.png index 10cf07b2..7ed82ebc 100644 Binary files a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/biomite_turf.png and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/biomite_turf.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/biowart.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/biowart.png index a09ef65b..a1a388af 100644 Binary files a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/biowart.png and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/biowart.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/biowart.png.mcmeta b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/biowart.png.mcmeta index 6714e205..e96a96aa 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/biowart.png.mcmeta +++ b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/biowart.png.mcmeta @@ -1,6 +1,6 @@ { - "animation": { - "frametime": 16, - "interpolate": true - } -} + "animation": { + "frametime": 20, + "interpolate": true + } +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/biowart_tendrils.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/biowart_tendrils.png index 6aac53fa..818afa2b 100644 Binary files a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/biowart_tendrils.png and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/biowart_tendrils.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_block.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_block.png deleted file mode 100644 index bee3628b..00000000 Binary files a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_block.png and /dev/null differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_base.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_base.png deleted file mode 100644 index 49c5d6a1..00000000 Binary files a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_base.png and /dev/null differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_frustum.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_frustum.png deleted file mode 100644 index 1660e8e0..00000000 Binary files a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_frustum.png and /dev/null differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_middle.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_middle.png deleted file mode 100644 index cecd80c1..00000000 Binary files a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_middle.png and /dev/null differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_tip.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_tip.png deleted file mode 100644 index 324c5c8a..00000000 Binary files a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_tip.png and /dev/null differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_tip_merge.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_tip_merge.png deleted file mode 100644 index 9c78714d..00000000 Binary files a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_tip_merge.png and /dev/null differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_base.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_base.png deleted file mode 100644 index f9eab88e..00000000 Binary files a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_base.png and /dev/null differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_frustum.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_frustum.png deleted file mode 100644 index a4894a9d..00000000 Binary files a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_frustum.png and /dev/null differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_middle.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_middle.png deleted file mode 100644 index 37c8e4d2..00000000 Binary files a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_middle.png and /dev/null differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_tip.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_tip.png deleted file mode 100644 index 9b66fa38..00000000 Binary files a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_tip.png and /dev/null differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_tip_merge.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_tip_merge.png deleted file mode 100644 index 0d9972f2..00000000 Binary files a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_tip_merge.png and /dev/null differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/critter_cage.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/critter_cage.png index ebb5b439..bdbb7c5c 100644 Binary files a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/critter_cage.png and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/critter_cage.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/myrmite_coal_ore.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/myrmite_coal_ore.png index 2f24f398..a2c6baed 100644 Binary files a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/myrmite_coal_ore.png and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/myrmite_coal_ore.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/potent_nyxite.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/potent_nyxite.png index 4613bd56..6a029a2b 100644 Binary files a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/potent_nyxite.png and b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/potent_nyxite.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/potent_nyxite.png.mcmeta b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/potent_nyxite.png.mcmeta index ffc3e528..39e48b93 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/potent_nyxite.png.mcmeta +++ b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/potent_nyxite.png.mcmeta @@ -1,11 +1,12 @@ { "animation": { - "frametime": 8, + "frametime": 25, "interpolate": true, "frames": [ 0, 1, - 2 + 2, + 3 ] } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/alpha_mantis.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/alpha_mantis.png index 092738fc..2e8fc5ea 100644 Binary files a/common-1.21.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/alpha_mantis.png and b/common-1.21.1/src/main/resources/assets/antarchy/textures/gui/boss_bars/alpha_mantis.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/carapace.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/carapace.png deleted file mode 100644 index e6b73ca2..00000000 Binary files a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/carapace.png and /dev/null differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/chiten_spike.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/chiten_spike.png deleted file mode 100644 index 9b66fa38..00000000 Binary files a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/chiten_spike.png and /dev/null differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/chiten.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/chitin.png similarity index 100% rename from common-1.21.1/src/main/resources/assets/antarchy/textures/item/chiten.png rename to common-1.21.1/src/main/resources/assets/antarchy/textures/item/chitin.png diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/chitin_spike.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/chitin_spike.png new file mode 100644 index 00000000..3f058ad5 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/chitin_spike.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/critter_cage_item.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/critter_cage_item.png index 5de2b472..ff3e575d 100644 Binary files a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/critter_cage_item.png and b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/critter_cage_item.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/critter_cage_item_overlay.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/critter_cage_item_overlay.png deleted file mode 100644 index aabed591..00000000 Binary files a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/critter_cage_item_overlay.png and /dev/null differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/jerry_nucleus.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/jerry_nucleus.png index c37a4bd5..689c8f82 100644 Binary files a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/jerry_nucleus.png and b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/jerry_nucleus.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/mob_effect/glimmering.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/mob_effect/glimmering.png new file mode 100644 index 00000000..21567e89 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/mob_effect/glimmering.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/trims/color_palettes/tigers_eye.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/trims/color_palettes/tigers_eye.png new file mode 100644 index 00000000..e99d57c6 Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/trims/color_palettes/tigers_eye.png differ diff --git a/common-1.21.1/src/main/resources/assets/minecraft/atlases/armor_trims.json b/common-1.21.1/src/main/resources/assets/minecraft/atlases/armor_trims.json index 8c1050d9..e8a9a58d 100644 --- a/common-1.21.1/src/main/resources/assets/minecraft/atlases/armor_trims.json +++ b/common-1.21.1/src/main/resources/assets/minecraft/atlases/armor_trims.json @@ -46,7 +46,8 @@ "uranium": "antarchy:trims/color_palettes/uranium", "titanium": "antarchy:trims/color_palettes/titanium", "blood_crystal": "antarchy:trims/color_palettes/blood_crystal", - "nightmare_scale": "antarchy:trims/color_palettes/nightmare_scale" + "nightmare_scale": "antarchy:trims/color_palettes/nightmare_scale", + "tigers_eye": "antarchy:trims/color_palettes/tigers_eye" } } ] diff --git a/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/awakening.json b/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/awakening.json new file mode 100644 index 00000000..82ae7c0e --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/awakening.json @@ -0,0 +1,16 @@ +{ + "entries": [ + { + "entity_tag": "antarchy:horde_moleworm", + "base_count": 3, + "per_player_count": 1 + }, + { + "entity_tag": "antarchy:horde_molevore", + "base_count": 1, + "per_players": 2, + "per_players_count": 1, + "min_count": 1 + } + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/dormant.json b/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/dormant.json new file mode 100644 index 00000000..8096d520 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/dormant.json @@ -0,0 +1,16 @@ +{ + "max_active": 8, + "entries": [ + { + "entity_tag": "antarchy:horde_moleworm", + "base_count": 1, + "high_attention_base_count": 2 + }, + { + "entity_tag": "antarchy:horde_molevore", + "base_count": 0, + "high_attention_base_count": 1, + "max_count": 1 + } + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/final.json b/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/final.json new file mode 100644 index 00000000..24d1395b --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/final.json @@ -0,0 +1,16 @@ +{ + "entries": [ + { + "entity_tag": "antarchy:horde_moleworm", + "base_count": 14, + "per_player_count": 3 + }, + { + "entity_tag": "antarchy:horde_molevore", + "base_count": 4, + "per_players": 2, + "per_players_count": 1, + "max_count": 6 + } + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/wave_1.json b/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/wave_1.json new file mode 100644 index 00000000..f178ea41 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/wave_1.json @@ -0,0 +1,15 @@ +{ + "entries": [ + { + "entity_tag": "antarchy:horde_moleworm", + "base_count": 8, + "per_player_count": 2 + }, + { + "entity_tag": "antarchy:horde_molevore", + "base_count": 1, + "per_players": 2, + "per_players_count": 1 + } + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/wave_2.json b/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/wave_2.json new file mode 100644 index 00000000..4ce192f8 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/wave_2.json @@ -0,0 +1,15 @@ +{ + "entries": [ + { + "entity_tag": "antarchy:horde_moleworm", + "base_count": 10, + "per_player_count": 2 + }, + { + "entity_tag": "antarchy:horde_molevore", + "base_count": 2, + "per_players": 2, + "per_players_count": 1 + } + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/wave_3.json b/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/wave_3.json new file mode 100644 index 00000000..0f757113 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/wave_3.json @@ -0,0 +1,15 @@ +{ + "entries": [ + { + "entity_tag": "antarchy:horde_moleworm", + "base_count": 12, + "per_player_count": 3 + }, + { + "entity_tag": "antarchy:horde_molevore", + "base_count": 3, + "per_players": 2, + "per_players_count": 1 + } + ] +} 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 2e514481..95fe35bc 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 @@ -96,6 +96,36 @@ }, "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.25, + 0.65 + ], + "depth": [ + 0.35, + 2.0 + ], + "offset": 0.0 + }, + "biome": "antarchy:cavaryn_moleworm_caves" + }, { "parameters": { "temperature": [ diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/chiten_block.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/chitin_block.json similarity index 74% rename from common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/chiten_block.json rename to common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/chitin_block.json index c53e8175..dee0af3b 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/chiten_block.json +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/chitin_block.json @@ -10,11 +10,11 @@ "entries": [ { "type": "minecraft:item", - "name": "antarchy:chiten_block" + "name": "antarchy:chitin_block" } ], "rolls": 1.0 } ], - "random_sequence": "antarchy:blocks/chiten_block" + "random_sequence": "antarchy:blocks/chitin_block" } diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/chiten_spike.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/chitin_spike.json similarity index 86% rename from common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/chiten_spike.json rename to common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/chitin_spike.json index b1d9fae3..ded89868 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/chiten_spike.json +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/chitin_spike.json @@ -6,7 +6,7 @@ "entries": [ { "type": "minecraft:item", - "name": "antarchy:chiten_spike" + "name": "antarchy:chitin_spike" } ], "conditions": [ diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/cut_titanium_wall.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/cut_titanium_wall.json deleted file mode 100644 index 6e1ae02c..00000000 --- a/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/cut_titanium_wall.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:cut_titanium_wall" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/cut_uranium_wall.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/cut_uranium_wall.json deleted file mode 100644 index 7360e0cf..00000000 --- a/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/cut_uranium_wall.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:cut_uranium_wall" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/creeping_horror.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/creeping_horror.json index 513e710d..a6a1b354 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/creeping_horror.json +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/creeping_horror.json @@ -1,4 +1,4 @@ -{ +{ "type": "minecraft:entity", "pools": [ { @@ -6,7 +6,7 @@ "entries": [ { "type": "minecraft:item", - "name": "antarchy:chiten", + "name": "antarchy:chitin", "functions": [ { "function": "minecraft:set_count", diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/jerry.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/jerry.json index efe5ce89..2a746c8b 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/jerry.json +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/jerry.json @@ -33,58 +33,6 @@ "condition": "minecraft:killed_by_player" } ] - }, - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:carapace", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ] - } - ], - "conditions": [ - { - "condition": "minecraft:killed_by_player" - }, - { - "condition": "minecraft:any_of", - "terms": [ - { - "condition": "minecraft:entity_properties", - "entity": "this", - "predicate": { - "nbt": "{JerryStage:\"alpha\"}" - } - }, - { - "condition": "minecraft:entity_properties", - "entity": "this", - "predicate": { - "nbt": "{JerryStage:\"gamma\"}" - } - } - ] - } - ] } ], "random_sequence": "antarchy:entities/jerry" diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/jumpy_bug.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/jumpy_bug.json index ac0ff303..7bb37ad8 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/jumpy_bug.json +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/jumpy_bug.json @@ -1,4 +1,4 @@ -{ +{ "type": "minecraft:entity", "pools": [ { @@ -34,7 +34,7 @@ "entries": [ { "type": "minecraft:item", - "name": "antarchy:chiten", + "name": "antarchy:chitin", "functions": [ { "function": "minecraft:set_count", diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/lurking_terror.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/lurking_terror.json index ee2d7233..fa23ca8f 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/lurking_terror.json +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/lurking_terror.json @@ -1,4 +1,4 @@ -{ +{ "type": "minecraft:entity", "pools": [ { @@ -6,7 +6,7 @@ "entries": [ { "type": "minecraft:item", - "name": "antarchy:chiten", + "name": "antarchy:chitin", "functions": [ { "function": "minecraft:set_count", diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/spit_bug.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/spit_bug.json index 286621a3..15863bcc 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/spit_bug.json +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/spit_bug.json @@ -1,4 +1,4 @@ -{ +{ "type": "minecraft:entity", "pools": [ { @@ -6,7 +6,7 @@ "entries": [ { "type": "minecraft:item", - "name": "antarchy:chiten", + "name": "antarchy:chitin", "functions": [ { "function": "minecraft:set_count", diff --git a/common-1.21.1/src/main/resources/data/antarchy/recipe/bone_meal_from_chiten.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/bone_meal_from_chitin.json similarity index 84% rename from common-1.21.1/src/main/resources/data/antarchy/recipe/bone_meal_from_chiten.json rename to common-1.21.1/src/main/resources/data/antarchy/recipe/bone_meal_from_chitin.json index 1b4f069e..f8e96c09 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/recipe/bone_meal_from_chiten.json +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/bone_meal_from_chitin.json @@ -3,7 +3,7 @@ "category": "misc", "ingredients": [ { - "item": "antarchy:chiten" + "item": "antarchy:chitin" } ], "result": { diff --git a/common-1.21.1/src/main/resources/data/antarchy/recipe/chiten_block.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/chitin_block.json similarity index 73% rename from common-1.21.1/src/main/resources/data/antarchy/recipe/chiten_block.json rename to common-1.21.1/src/main/resources/data/antarchy/recipe/chitin_block.json index 749134a9..9a22bc0b 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/recipe/chiten_block.json +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/chitin_block.json @@ -3,7 +3,7 @@ "category": "building", "key": { "#": { - "item": "antarchy:chiten" + "item": "antarchy:chitin" } }, "pattern": [ @@ -12,7 +12,7 @@ "###" ], "result": { - "id": "antarchy:chiten_block", + "id": "antarchy:chitin_block", "count": 1 } } diff --git a/common-1.21.1/src/main/resources/data/antarchy/recipe/chiten_from_chiten_block.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/chitin_from_chitin_block.json similarity index 67% rename from common-1.21.1/src/main/resources/data/antarchy/recipe/chiten_from_chiten_block.json rename to common-1.21.1/src/main/resources/data/antarchy/recipe/chitin_from_chitin_block.json index 6047f3cb..8ac1b4d7 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/recipe/chiten_from_chiten_block.json +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/chitin_from_chitin_block.json @@ -3,11 +3,11 @@ "category": "misc", "ingredients": [ { - "item": "antarchy:chiten_block" + "item": "antarchy:chitin_block" } ], "result": { - "id": "antarchy:chiten", + "id": "antarchy:chitin", "count": 9 } } diff --git a/common-1.21.1/src/main/resources/data/antarchy/recipe/lucid_anchor.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/lucid_anchor.json new file mode 100644 index 00000000..1fcd5ea6 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/lucid_anchor.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "pattern": [ + "AAA", + "BNB", + "BLB" + ], + "key": { + "A": { + "item": "antarchy:polished_antimetal" + }, + "B": { + "item": "antarchy:blood_crystal_shard" + }, + "N": { + "item": "minecraft:nether_star" + }, + "L": { + "item": "antarchy:lucid_eye" + } + }, + "result": { + "id": "antarchy:lucid_anchor", + "count": 1 + } +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/recipe/tigers_eye_boots.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/tigers_eye_boots.json new file mode 100644 index 00000000..dc67d407 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/tigers_eye_boots.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "S S", + "S S" + ], + "key": { + "S": { + "item": "antarchy:tigers_eye" + } + }, + "result": { + "id": "antarchy:tigers_eye_boots", + "count": 1 + } +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/recipe/tigers_eye_chestplate.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/tigers_eye_chestplate.json new file mode 100644 index 00000000..659ce168 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/tigers_eye_chestplate.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "S S", + "SSS", + "SSS" + ], + "key": { + "S": { + "item": "antarchy:tigers_eye" + } + }, + "result": { + "id": "antarchy:tigers_eye_chestplate", + "count": 1 + } +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/recipe/tigers_eye_helmet.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/tigers_eye_helmet.json new file mode 100644 index 00000000..9a6cceef --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/tigers_eye_helmet.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "SSS", + "S S" + ], + "key": { + "S": { + "item": "antarchy:tigers_eye" + } + }, + "result": { + "id": "antarchy:tigers_eye_helmet", + "count": 1 + } +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/recipe/tigers_eye_leggings.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/tigers_eye_leggings.json new file mode 100644 index 00000000..b43d1e71 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/tigers_eye_leggings.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "SSS", + "S S", + "S S" + ], + "key": { + "S": { + "item": "antarchy:tigers_eye" + } + }, + "result": { + "id": "antarchy:tigers_eye_leggings", + "count": 1 + } +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/tags/block/antimetal_inversion_blocks.json b/common-1.21.1/src/main/resources/data/antarchy/tags/block/antimetal_inversion_blocks.json new file mode 100644 index 00000000..9ae6d24b --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/tags/block/antimetal_inversion_blocks.json @@ -0,0 +1,10 @@ +{ + "values": [ + "antarchy:antimetal", + "antarchy:polished_antimetal", + "antarchy:antimetal_stairs", + "antarchy:antimetal_slab", + "antarchy:polished_antimetal_stairs", + "antarchy:polished_antimetal_slab" + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/tags/block/lucid_anchor_base_blocks.json b/common-1.21.1/src/main/resources/data/antarchy/tags/block/lucid_anchor_base_blocks.json new file mode 100644 index 00000000..b68760f5 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/tags/block/lucid_anchor_base_blocks.json @@ -0,0 +1,11 @@ +{ + "replace": false, + "values": [ + "antarchy:antimetal", + "antarchy:polished_antimetal", + "antarchy:antimetal_stairs", + "antarchy:antimetal_slab", + "antarchy:polished_antimetal_stairs", + "antarchy:polished_antimetal_slab" + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/tags/block/tiger_eye_camouflage_blacklist.json b/common-1.21.1/src/main/resources/data/antarchy/tags/block/tiger_eye_camouflage_blacklist.json new file mode 100644 index 00000000..7d4a90b8 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/tags/block/tiger_eye_camouflage_blacklist.json @@ -0,0 +1,11 @@ +{ + "replace": false, + "values": [ + "minecraft:barrier", + "minecraft:light", + "minecraft:structure_void", + "minecraft:end_portal", + "minecraft:end_gateway", + "minecraft:nether_portal" + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/horde_molevore.json b/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/horde_molevore.json new file mode 100644 index 00000000..ece7739d --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/horde_molevore.json @@ -0,0 +1,5 @@ +{ + "values": [ + "antarchy:molevore" + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/horde_moleworm.json b/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/horde_moleworm.json new file mode 100644 index 00000000..8d9eb37b --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/horde_moleworm.json @@ -0,0 +1,5 @@ +{ + "values": [ + "antarchy:moleworm" + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/lucid_anchor_immune.json b/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/lucid_anchor_immune.json new file mode 100644 index 00000000..5d341ba2 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/lucid_anchor_immune.json @@ -0,0 +1,4 @@ +{ + "replace": false, + "values": [] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/tiger_eye_detection_immune.json b/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/tiger_eye_detection_immune.json new file mode 100644 index 00000000..6becc3cd --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/tiger_eye_detection_immune.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "antarchy:kraken", + "antarchy:nightmare", + "antarchy:toreterror", + "antarchy:emperor_scorpion" + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/tags/item/tigers_eye_armor.json b/common-1.21.1/src/main/resources/data/antarchy/tags/item/tigers_eye_armor.json new file mode 100644 index 00000000..e2b2f6b2 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/tags/item/tigers_eye_armor.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "antarchy:tigers_eye_helmet", + "antarchy:tigers_eye_chestplate", + "antarchy:tigers_eye_leggings", + "antarchy:tigers_eye_boots" + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/tags/worldgen/biome/is_cavaryn.json b/common-1.21.1/src/main/resources/data/antarchy/tags/worldgen/biome/is_cavaryn.json index 8f87b48f..f94ddcb5 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/tags/worldgen/biome/is_cavaryn.json +++ b/common-1.21.1/src/main/resources/data/antarchy/tags/worldgen/biome/is_cavaryn.json @@ -1,6 +1,7 @@ { "values": [ "antarchy:cavaryn", + "antarchy:cavaryn_moleworm_caves", "antarchy:glowcap_caves", "antarchy:biowart_caves", "antarchy:brooding_tunnels", diff --git a/common-1.21.1/src/main/resources/data/antarchy/trim_material/tigers_eye.json b/common-1.21.1/src/main/resources/data/antarchy/trim_material/tigers_eye.json new file mode 100644 index 00000000..d4e61197 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/trim_material/tigers_eye.json @@ -0,0 +1,9 @@ +{ + "asset_name": "tigers_eye", + "ingredient": "antarchy:tigers_eye", + "item_model_index": 0.82, + "description": { + "color": "#C7882C", + "translate": "trim_material.antarchy.tigers_eye" + } +} 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 c5b8bd84..282f26fd 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 @@ -21,6 +21,12 @@ "options": { "type": "antarchy:orange_ash" } + }, + "music": { + "sound": "antarchy:venenatus", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": { 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 c9b515a3..3b891866 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 @@ -20,17 +20,15 @@ "options": { "type": "antarchy:orange_ash" } + }, + "music": { + "sound": "antarchy:venenatus", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": { - "antarchy:jumpy_bug": { - "energy_budget": 0.4, - "charge": 7 - }, - "antarchy:spit_bug": { - "energy_budget": 0.9, - "charge": 2 - } }, "carvers": { "air": [], @@ -65,12 +63,6 @@ "creature_spawn_probability": 0.12, "spawners": { "monster": [ - { - "type": "antarchy:jumpy_bug", - "weight": 95, - "minCount": 1, - "maxCount": 3 - } ], "creature": [ { 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 c68563b6..d8893daa 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 @@ -20,6 +20,12 @@ "options": { "type": "antarchy:orange_ash" } + }, + "music": { + "sound": "antarchy:venenatus", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": { @@ -48,7 +54,7 @@ [ "antarchy:cavaryn_bile_veins", "antarchy:cavaryn_bile_cysts", - "antarchy:cavaryn_chiten_spikes", + "antarchy:cavaryn_chitin_spikes", "antarchy:cavaryn_terror_egg_patch", "antarchy:termite_nest_cavaryn" ], 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 new file mode 100644 index 00000000..6527b4f1 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/cavaryn_moleworm_caves.json @@ -0,0 +1,93 @@ +{ + "has_precipitation": false, + "temperature": 0.77, + "downfall": 0.96, + "effects": { + "fog_color": 8084735, + "water_color": 5021432, + "water_fog_color": 2502722, + "sky_color": 8084735, + "foliage_color": 2867501, + "grass_color": 4566565, + "grass_color_modifier": "none", + "particle": { + "probability": 0.009, + "options": { + "type": "minecraft:ash" + } + }, + "music": { + "sound": "antarchy:venenatus", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true + } + }, + "spawn_costs": { + "antarchy:molevore": { + "energy_budget": 0.9, + "charge": 2.2 + } + }, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [], + [], + [], + [], + [], + [ + "antarchy:myrmite_coal_ore", + "antarchy:broodstone_uranium_ore", + "antarchy:broodstone_titanium_ore" + ], + [ + "minecraft:large_dripstone", + "minecraft:pointed_dripstone" + ], + [ + "antarchy:cavaryn_bile_veins", + "antarchy:cavaryn_bile_cysts" + ], + [ + "antarchy:moleworm_caves_creepvine", + "antarchy:moleworm_caves_hanging_creeproots" + ], + [] + ], + "creature_spawn_probability": 0.08, + "spawners": { + "monster": [ + { + "type": "antarchy:molevore", + "weight": 28, + "minCount": 1, + "maxCount": 2 + }, + { + "type": "antarchy:moleworm", + "weight": 20, + "minCount": 2, + "maxCount": 4 + } + ], + "creature": [], + "ambient": [ + { + "type": "minecraft:bat", + "weight": 12, + "minCount": 4, + "maxCount": 8 + } + ], + "axolotls": [], + "underground_water_creature": [], + "water_creature": [], + "water_ambient": [], + "misc": [] + } +} 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 0f86fe53..61f0be87 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 @@ -23,6 +23,12 @@ "tick_delay": 8572, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "antarchy:lucid_lullaby", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": { @@ -51,7 +57,8 @@ ], [ "antarchy:nyxite_spikes", - "antarchy:patch_ceiling_fire" + "antarchy:patch_ceiling_fire", + "antarchy:patch_ceiling_antigravel" ], [ "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 2f185cc5..00681984 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 @@ -15,6 +15,12 @@ "tick_delay": 7000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "minecraft:music.game", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": {}, 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 a22516ec..c5bf77d3 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 @@ -15,6 +15,12 @@ "tick_delay": 6000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "minecraft:music.game", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": {}, 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 48be0038..43edad79 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 @@ -21,6 +21,12 @@ "tick_delay": 60000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "minecraft:music.game", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": {}, 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 6ec3d4da..6f1dd61b 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 @@ -15,6 +15,12 @@ "tick_delay": 8000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "minecraft:music.game", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": { 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 da6adc89..97b97bfd 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 @@ -15,6 +15,12 @@ "tick_delay": 6000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "minecraft:music.game", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": {}, 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 b31c4bd8..ae74314c 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 @@ -15,6 +15,12 @@ "tick_delay": 7000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "minecraft:music.game", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": {}, 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 567e1843..640f61b8 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 @@ -21,6 +21,12 @@ "tick_delay": 6000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "minecraft:music.game", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": { 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 1aab1a79..300543e7 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 @@ -15,6 +15,12 @@ "tick_delay": 6000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "minecraft:music.game", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": {}, 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 0addf183..e08f3352 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 @@ -21,6 +21,12 @@ "options": { "type": "antarchy:orange_ash" } + }, + "music": { + "sound": "antarchy:venenatus", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": {}, 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 5d904267..cd2ba45b 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 @@ -23,6 +23,12 @@ "tick_delay": 12000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "antarchy:lucid_lullaby", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "carvers": { @@ -56,7 +62,8 @@ "antarchy:red_ant_nest_magma", "antarchy:nyxite_spikes", "antarchy:patch_fire_sparse", - "antarchy:patch_ceiling_fire" + "antarchy:patch_ceiling_fire", + "antarchy:patch_ceiling_antigravel" ], [], [ 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 7efaca3e..693e4356 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 @@ -15,6 +15,12 @@ "options": { "type": "minecraft:ash" } + }, + "music": { + "sound": "minecraft:music.game", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": { 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 19120521..314d5549 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 @@ -23,6 +23,12 @@ "tick_delay": 8572, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "antarchy:lucid_lullaby", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "carvers": { @@ -58,7 +64,8 @@ "antarchy:bed_bug_nest", "antarchy:nyxite_spikes", "antarchy:patch_fire_sparse", - "antarchy:patch_ceiling_fire" + "antarchy:patch_ceiling_fire", + "antarchy:patch_ceiling_antigravel" ], [ "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 bcc3929b..4891f0d6 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 @@ -21,6 +21,12 @@ "tick_delay": 6000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "minecraft:music.game", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": { 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 06c3a159..63f4cf94 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 @@ -15,6 +15,12 @@ "tick_delay": 6000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "minecraft:music.game", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": { 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 33d8d16b..195a8563 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 @@ -20,6 +20,12 @@ "options": { "type": "minecraft:spore_blossom_air" } + }, + "music": { + "sound": "antarchy:venenatus", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": {}, 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 d3018dd7..a29da3e7 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 @@ -21,7 +21,13 @@ "tick_delay": 6000, "block_search_extent": 8, "offset": 2.0 - } + }, + "music": { + "sound": "minecraft:music.game", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true + } }, "spawn_costs": { 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 ff541751..48773b92 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 @@ -23,6 +23,12 @@ "tick_delay": 6000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "antarchy:lucid_lullaby", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": { @@ -52,7 +58,8 @@ "antarchy:bed_bug_surface_cluster", "antarchy:nyxite_spikes", "antarchy:patch_fire_sparse", - "antarchy:patch_ceiling_fire" + "antarchy:patch_ceiling_fire", + "antarchy:patch_ceiling_antigravel" ], [], [ diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_chiten_spikes.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_chitin_spikes.json similarity index 92% rename from common-1.21.1/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_chiten_spikes.json rename to common-1.21.1/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_chitin_spikes.json index cb963a90..4272b51d 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_chiten_spikes.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_chitin_spikes.json @@ -1,5 +1,5 @@ { - "type": "antarchy:cavaryn_chiten_spikes", + "type": "antarchy:cavaryn_chitin_spikes", "config": { "floor_to_ceiling_search_range": 10, "radius": 4, diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/noise_settings/cavaryn.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/noise_settings/cavaryn.json index 5f4002c4..c576e96a 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/noise_settings/cavaryn.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/noise_settings/cavaryn.json @@ -203,6 +203,123 @@ ] } }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": ["antarchy:cavaryn_moleworm_caves"] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "floor", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "antarchy:surface_blend", + "min_threshold": -1.0, + "max_threshold": -0.18 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:podzol", + "Properties": { + "snowy": "false" + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "antarchy:surface_blend", + "min_threshold": -0.055, + "max_threshold": 0.195 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:rooted_dirt" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "antarchy:surface_blend", + "min_threshold": 0.32, + "max_threshold": 0.68 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:coarse_dirt" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:coarse_dirt" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": -1, + "surface_depth_multiplier": 2, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:rooted_dirt" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": -4, + "surface_depth_multiplier": 3, + "add_stone_depth": true + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:coarse_dirt" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:rooted_dirt" + } + } + ] + } + }, { "type": "minecraft:condition", "if_true": { diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_chiten_spikes.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_chitin_spikes.json similarity index 90% rename from common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_chiten_spikes.json rename to common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_chitin_spikes.json index f4e08187..d78c77b1 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_chiten_spikes.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_chitin_spikes.json @@ -1,5 +1,5 @@ { - "feature": "antarchy:cavaryn_chiten_spikes", + "feature": "antarchy:cavaryn_chitin_spikes", "placement": [ { "type": "minecraft:count", diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/moleworm_caves_creepvine.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/moleworm_caves_creepvine.json new file mode 100644 index 00000000..61470bd2 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/moleworm_caves_creepvine.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:cavaryn_creepvine", + "placement": [ + { + "type": "minecraft:count", + "count": 22 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 12 + }, + "max_inclusive": { + "below_top": 12 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/moleworm_caves_hanging_creeproots.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/moleworm_caves_hanging_creeproots.json new file mode 100644 index 00000000..f5e407dc --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/moleworm_caves_hanging_creeproots.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:hanging_creeproots", + "placement": [ + { + "type": "minecraft:count", + "count": 24 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 12 + }, + "max_inclusive": { + "below_top": 12 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.21.1/src/main/resources/data/c/tags/item/foods.json b/common-1.21.1/src/main/resources/data/c/tags/item/foods.json index 35048616..cbbbf1bc 100644 --- a/common-1.21.1/src/main/resources/data/c/tags/item/foods.json +++ b/common-1.21.1/src/main/resources/data/c/tags/item/foods.json @@ -12,6 +12,7 @@ "antarchy:cooked_bug_meat", "antarchy:raw_venison", "antarchy:cooked_venison", + "antarchy:kraken_kalamari", "antarchy:mud_pie", "antarchy:high_fructose_corn_syrup", "antarchy:spirit_apple", diff --git a/common-1.21.1/src/main/resources/data/c/tags/item/foods/cooked_meat.json b/common-1.21.1/src/main/resources/data/c/tags/item/foods/cooked_meat.json index e3f95c3d..fce61011 100644 --- a/common-1.21.1/src/main/resources/data/c/tags/item/foods/cooked_meat.json +++ b/common-1.21.1/src/main/resources/data/c/tags/item/foods/cooked_meat.json @@ -2,6 +2,7 @@ "replace": false, "values": [ "antarchy:cooked_venison", - "antarchy:cooked_bug_meat" + "antarchy:cooked_bug_meat", + "antarchy:kraken_kalamari" ] } diff --git a/common-1.21.1/src/main/resources/data/c/tags/item/gems.json b/common-1.21.1/src/main/resources/data/c/tags/item/gems.json new file mode 100644 index 00000000..f61a414f --- /dev/null +++ b/common-1.21.1/src/main/resources/data/c/tags/item/gems.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:tigers_eye" + ] +} diff --git a/common-1.21.1/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json b/common-1.21.1/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json index 4b1b099a..513c94bf 100644 --- a/common-1.21.1/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json +++ b/common-1.21.1/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ + "antarchy:upper", "antarchy:uranium_ore", "antarchy:deepslate_uranium_ore", "antarchy:titanium_ore", @@ -106,12 +107,20 @@ "antarchy:broodstone_titanium_ore", "antarchy:biomite", "antarchy:biomite_turf", - "antarchy:chiten_block", - "antarchy:chiten_spike", + "antarchy:chitin_block", + "antarchy:chitin_spike", "antarchy:antimetal", "antarchy:polished_antimetal", + "antarchy:antimetal_stairs", + "antarchy:antimetal_slab", + "antarchy:polished_antimetal_stairs", + "antarchy:polished_antimetal_slab", "antarchy:dream_lantern", "antarchy:bluestone_ore", - "antarchy:bluestone_block" + "antarchy:bluestone_block", + "antarchy:bluestone_lamp", + "antarchy:shellstone_pillar", + "antarchy:nyxite_pillar", + "antarchy:broodstone_pillar" ] } diff --git a/common-1.21.1/src/main/resources/data/minecraft/tags/block/mineable/shovel.json b/common-1.21.1/src/main/resources/data/minecraft/tags/block/mineable/shovel.json index 5346432f..ccec4d78 100644 --- a/common-1.21.1/src/main/resources/data/minecraft/tags/block/mineable/shovel.json +++ b/common-1.21.1/src/main/resources/data/minecraft/tags/block/mineable/shovel.json @@ -7,6 +7,8 @@ "antarchy:rainbow_ant_nest", "antarchy:termite_nest", "antarchy:dream_sand", - "antarchy:cloud_block" + "antarchy:cloud_block", + "antarchy:antigravel", + "antarchy:loam" ] } diff --git a/common-1.21.1/src/main/resources/data/minecraft/tags/block/needs_stone_tool.json b/common-1.21.1/src/main/resources/data/minecraft/tags/block/needs_stone_tool.json index e85a4f54..8a635a20 100644 --- a/common-1.21.1/src/main/resources/data/minecraft/tags/block/needs_stone_tool.json +++ b/common-1.21.1/src/main/resources/data/minecraft/tags/block/needs_stone_tool.json @@ -20,7 +20,7 @@ "antarchy:shellstone_brick_slab", "antarchy:shellstone_brick_wall", "antarchy:myrmite_coal_ore", - "antarchy:chiten_block", + "antarchy:chitin_block", "antarchy:broodstone", "antarchy:polished_broodstone", "antarchy:chiseled_broodstone", @@ -37,6 +37,8 @@ "antarchy:biomite", "antarchy:biomite_turf", "antarchy:bluestone_ore", - "antarchy:bluestone_block" + "antarchy:bluestone_block", + "antarchy:shellstone_pillar", + "antarchy:broodstone_pillar" ] } diff --git a/common-1.21.1/src/main/resources/data/minecraft/tags/block/slabs.json b/common-1.21.1/src/main/resources/data/minecraft/tags/block/slabs.json index 9a281d20..9bd75693 100644 --- a/common-1.21.1/src/main/resources/data/minecraft/tags/block/slabs.json +++ b/common-1.21.1/src/main/resources/data/minecraft/tags/block/slabs.json @@ -15,6 +15,8 @@ "antarchy:cut_titanium_slab", "antarchy:broodstone_slab", "antarchy:polished_broodstone_slab", - "antarchy:broodstone_brick_slab" + "antarchy:broodstone_brick_slab", + "antarchy:antimetal_slab", + "antarchy:polished_antimetal_slab" ] } diff --git a/common-1.21.1/src/main/resources/data/minecraft/tags/block/stairs.json b/common-1.21.1/src/main/resources/data/minecraft/tags/block/stairs.json index b8de10dc..8dae86d4 100644 --- a/common-1.21.1/src/main/resources/data/minecraft/tags/block/stairs.json +++ b/common-1.21.1/src/main/resources/data/minecraft/tags/block/stairs.json @@ -14,6 +14,8 @@ "antarchy:cut_uranium_stairs", "antarchy:broodstone_stairs", "antarchy:polished_broodstone_stairs", - "antarchy:broodstone_brick_stairs" + "antarchy:broodstone_brick_stairs", + "antarchy:antimetal_stairs", + "antarchy:polished_antimetal_stairs" ] } diff --git a/common-1.21.1/src/main/resources/data/minecraft/tags/item/trimmable_armor.json b/common-1.21.1/src/main/resources/data/minecraft/tags/item/trimmable_armor.json index 62754ec1..d4c8c904 100644 --- a/common-1.21.1/src/main/resources/data/minecraft/tags/item/trimmable_armor.json +++ b/common-1.21.1/src/main/resources/data/minecraft/tags/item/trimmable_armor.json @@ -15,6 +15,10 @@ "antarchy:nightmare_helmet", "antarchy:primordial_helmet", "antarchy:blood_crystal_helmet", - "antarchy:jumpy_boots" + "antarchy:jumpy_boots", + "antarchy:tigers_eye_helmet", + "antarchy:tigers_eye_chestplate", + "antarchy:tigers_eye_leggings", + "antarchy:tigers_eye_boots" ] } diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java index 4e0f1604..12f18e9e 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java @@ -730,9 +730,6 @@ public final class AntarchyFabricItems { .build()))); - public static final DeferredItem CARAPACE = ITEMS.registerSimpleItem("carapace", new Item.Properties().rarity(Rarity.UNCOMMON)); - - public static final DeferredItem STINK_BUG_ITEM = ITEMS.registerSimpleItem("stink_bug", new Item.Properties().rarity(Rarity.UNCOMMON)); diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java index 177867f5..8ee6fde0 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java @@ -152,6 +152,7 @@ public final class AntarchyFabric implements ModInitializer { registerWorldgenFeatures(); AntarchyFabricEvents.register(); BloodglassManager.register(); + TigerEyeFabricManager.register(); Antarchy.init(); BloodCrystalShardItem.SYNC_BLOODGLASS = BloodglassManager::syncBloodglass; registerTradeReloadListener(); 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 1b3f2159..577ffbec 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 @@ -16,6 +16,7 @@ import com.craisinlord.antarchy.content.item.ScorpionWhipTetherSync; import com.craisinlord.antarchy.content.network.ImpactShakeSync; import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakeSync; import com.craisinlord.antarchy.content.network.HordeIntensitySync; +import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageSync; import com.craisinlord.antarchy.content.portal.PermanentPortalType; import net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistryBuilder; import net.minecraft.core.Holder; @@ -90,6 +91,11 @@ 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()); }); AntarchyFabricSounds.SOUND_EVENTS.register(); @@ -287,6 +293,8 @@ public final class AntarchyFabricContent { AntarchyObjects.setOctopusBomb(AntarchyFabricEntities.OCTOPUS_BOMB); AntarchyObjects.setTentacle(AntarchyFabricEntities.TENTACLE); + AntarchyObjects.setNightmarePortal(AntarchyFabricEntities.NIGHTMARE_PORTAL); + AntarchyObjects.setNightmareBite(AntarchyFabricEntities.NIGHTMARE_BITE); AntarchyObjects.setKrakensGraspTrident(AntarchyFabricEntities.KRAKENS_GRASP_TRIDENT); AntarchyObjects.setLotus(() -> AntarchyFabricBlocks.LOTUS.get()); AntarchyObjects.setKrakenTentacle(() -> AntarchyFabricItems.KRAKEN_TENTACLE.get()); @@ -294,6 +302,7 @@ public final class AntarchyFabricContent { AntarchyObjects.setOuranwoodDeer(AntarchyFabricEntities.OURANWOOD_DEER); AntarchyObjects.setGlimmer(AntarchyFabricEntities.GLIMMER); AntarchyObjects.setSpiritApple(() -> AntarchyFabricItems.SPIRIT_APPLE.get()); + AntarchyObjects.setGlimmeringEffect(() -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.GLIMMERING)); AntarchyObjects.setElka(AntarchyFabricEntities.ELKA); AntarchyObjects.setPeach(() -> AntarchyFabricItems.PEACH.get()); AntarchyObjects.setCorn(() -> AntarchyFabricItems.CORN.get()); @@ -316,7 +325,9 @@ public final class AntarchyFabricContent { AntarchyObjects.setDorrieInventoryMenu(AntarchyFabricMisc.DORRIE_INVENTORY_MENU); AntarchyObjects.setCritterCage(() -> AntarchyFabricItems.CRITTER_CAGE.get()); AntarchyObjects.setCritterCageBlock(() -> AntarchyFabricBlocks.CRITTER_CAGE_BLOCK.get()); + AntarchyObjects.setLucidAnchor(() -> AntarchyFabricBlocks.LUCID_ANCHOR.get()); AntarchyObjects.setCritterCageBlockEntity(() -> AntarchyFabricBlocks.CRITTER_CAGE_BLOCK_ENTITY.get()); + AntarchyObjects.setLucidAnchorBlockEntity(() -> AntarchyFabricBlocks.LUCID_ANCHOR_BLOCK_ENTITY.get()); AntarchyObjects.setCritterCageProjectile(() -> AntarchyFabricEntities.CRITTER_CAGE_PROJECTILE.get()); AntarchyObjects.setCritterCageEntityTypeComponent(() -> AntarchyFabricMisc.CRITTER_CAGE_ENTITY_TYPE_COMPONENT.get()); AntarchyObjects.setCritterCagePrimaryColorComponent(() -> AntarchyFabricMisc.CRITTER_CAGE_PRIMARY_COLOR_COMPONENT.get()); @@ -374,8 +385,8 @@ public final class AntarchyFabricContent { () -> AntarchyFabricBlocks.TRIFFID_GOO_BLOCK.get(), () -> AntarchyFabricBlocks.PALE_NYXITE.get(), () -> AntarchyFabricBlocks.NYXITE_SPIKE.get(), - () -> AntarchyFabricBlocks.CHITEN_BLOCK.get(), - () -> AntarchyFabricBlocks.CHITEN_SPIKE.get(), + () -> AntarchyFabricBlocks.CHITIN_BLOCK.get(), + () -> AntarchyFabricBlocks.CHITIN_SPIKE.get(), () -> AntarchyFabricBlocks.POTENT_NYXITE.get(), () -> AntarchyFabricBlocks.ANTIMETAL.get(), () -> AntarchyFabricBlocks.POLISHED_ANTIMETAL.get(), @@ -434,6 +445,8 @@ public final class AntarchyFabricContent { HerculesBeetleImpactShakeSync.setSink((player, ticks) -> net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking.send(player, new com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakePayload(ticks))); ImpactShakeSync.setSink((player, payload) -> net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking.send(player, payload)); HordeIntensitySync.setSink((player, payload) -> net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking.send(player, payload)); + TigerEyeCamouflageSync.setSendToPlayer((player, payload) -> net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking.send(player, payload)); + TigerEyeCamouflageSync.setSyncSelfAndTracking(AntarchyFabricNetworking::syncTigerEyeCamouflage); BloodCrystalKatanaItem.setTrailCallback(AntarchyFabricNetworking::syncKatanaTrail); com.craisinlord.antarchy.content.gravity.AntarchyGravityApi.setSyncDispatcher(AntarchyFabricNetworking::syncGravityEntity); AntarchyFabricEvents.register(); diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/TigerEyeFabricManager.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/TigerEyeFabricManager.java new file mode 100644 index 00000000..83aa077e --- /dev/null +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/TigerEyeFabricManager.java @@ -0,0 +1,51 @@ +package com.craisinlord.antarchy.fabric; + +import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageController; +import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageSync; +import net.fabricmc.fabric.api.entity.event.v1.ServerEntityWorldChangeEvents; +import net.fabricmc.fabric.api.entity.event.v1.ServerLivingEntityEvents; +import net.fabricmc.fabric.api.entity.event.v1.ServerPlayerEvents; +import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; +import net.fabricmc.fabric.api.networking.v1.EntityTrackingEvents; +import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; + +public final class TigerEyeFabricManager { + private TigerEyeFabricManager() { + } + + public static void register() { + ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> TigerEyeCamouflageSync.sync(handler.player)); + ServerPlayConnectionEvents.DISCONNECT.register((handler, server) -> + TigerEyeCamouflageController.deactivate(handler.player, false)); + ServerPlayerEvents.AFTER_RESPAWN.register((oldPlayer, newPlayer, alive) -> { + TigerEyeCamouflageController.deactivate(newPlayer, false); + TigerEyeCamouflageSync.sync(newPlayer); + }); + ServerEntityWorldChangeEvents.AFTER_PLAYER_CHANGE_WORLD.register((player, origin, destination) -> { + TigerEyeCamouflageController.deactivate(player, false); + TigerEyeCamouflageSync.sync(player); + }); + EntityTrackingEvents.START_TRACKING.register((trackedEntity, player) -> { + if (trackedEntity instanceof ServerPlayer trackedPlayer) { + TigerEyeCamouflageSync.syncTo(player, trackedPlayer); + } + }); + ServerLivingEntityEvents.AFTER_DEATH.register((entity, damageSource) -> { + if (entity instanceof ServerPlayer player) { + TigerEyeCamouflageController.deactivate(player, false); + TigerEyeCamouflageSync.sync(player); + } + }); + ServerTickEvents.END_SERVER_TICK.register(server -> { + for (ServerLevel level : server.getAllLevels()) { + for (ServerPlayer player : level.players()) { + if (TigerEyeCamouflageController.validateOrDeactivate(player)) { + TigerEyeCamouflageSync.sync(player); + } + } + } + }); + } +} diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClient.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClient.java index 4570a6e8..ee14787f 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClient.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClient.java @@ -1,7 +1,18 @@ package com.craisinlord.antarchy.fabric.client; +import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking; import net.fabricmc.api.ClientModInitializer; +import net.fabricmc.fabric.api.resource.IdentifiableResourceReloadListener; +import net.fabricmc.fabric.api.resource.ResourceManagerHelper; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.packs.PackType; +import net.minecraft.server.packs.resources.PreparableReloadListener; +import net.minecraft.server.packs.resources.ResourceManager; +import net.minecraft.util.profiling.ProfilerFiller; + +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Executor; public final class AntarchyFabricClient implements ClientModInitializer { @Override @@ -9,6 +20,19 @@ public final class AntarchyFabricClient implements ClientModInitializer { AntarchyFabricClientNetworking.register(); AntarchyFabricClientNetworking.bootstrapMultipartClient(); AntarchyFabricClientBootstrap.register(); + ResourceManagerHelper.get(PackType.CLIENT_RESOURCES).registerReloadListener(new IdentifiableResourceReloadListener() { + @Override + public ResourceLocation getFabricId() { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "tiger_eye_camouflage_client_cache"); + } + + @Override + public CompletableFuture reload(PreparableReloadListener.PreparationBarrier barrier, ResourceManager manager, + ProfilerFiller prepareProfiler, ProfilerFiller applyProfiler, + Executor prepareExecutor, Executor applyExecutor) { + return barrier.wait(null).thenRunAsync(TigerEyeCamouflageClientHandler::clearClientCaches, applyExecutor); + } + }); } } diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java index ac4f0cb3..17b45669 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java @@ -8,6 +8,7 @@ import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.client.CameraShakeClientState; import com.craisinlord.antarchy.content.client.HerculesBeetleImpactShakeClientState; import com.craisinlord.antarchy.content.client.HordeClientState; +import com.craisinlord.antarchy.content.client.TigerEyeClientHooks; import com.craisinlord.antarchy.content.client.renderer.*; import com.craisinlord.antarchy.content.client.particle.*; import com.craisinlord.antarchy.content.client.renderer.AntiwaterFluidRenderer; @@ -78,6 +79,10 @@ public final class AntarchyFabricClientBootstrap { (net.minecraft.world.level.block.entity.BlockEntityType) AntarchyFabricBlocks.SEASHELL_BLOCK_ENTITY.get(), (BlockEntityRendererProvider) SeashellRenderer::new ); + BlockEntityRendererRegistry.register( + (net.minecraft.world.level.block.entity.BlockEntityType) AntarchyFabricBlocks.LUCID_ANCHOR_BLOCK_ENTITY.get(), + (BlockEntityRendererProvider) LucidAnchorBlockEntityRenderer::new + ); BlockEntityRendererRegistry.register( (net.minecraft.world.level.block.entity.BlockEntityType) AntarchyFabricBlocks.CRITTER_CAGE_BLOCK_ENTITY.get(), (BlockEntityRendererProvider) CritterCageRenderer::new @@ -114,6 +119,8 @@ public final class AntarchyFabricClientBootstrap { EntityRendererRegistry.register(AntarchyFabricEntities.MISSILE_SQUID.get(), MissileSquidRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.OCTOPUS_BOMB.get(), OctopusBombRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.NIGHTMARE.get(), NightmareRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.NIGHTMARE_PORTAL.get(), NightmarePortalRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.NIGHTMARE_BITE.get(), NightmareBiteRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.LUCID.get(), LucidRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.BED_BUG.get(), BedBugRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.WASP.get(), WaspRenderer::new); @@ -303,6 +310,7 @@ public final class AntarchyFabricClientBootstrap { BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.ORANGE_MILKWEED.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.PINK_MILKWEED.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.AMBER_LICHEN.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.MUCUS.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.CREEPVINE.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.CAMELLIA.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.SPIDER_LILY.get(), RenderType.cutout()); @@ -320,7 +328,7 @@ public final class AntarchyFabricClientBootstrap { BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.ANTIMETAL_SCAFFOLDING.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.UMBRAL_MOSS_CARPET.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.NYXITE_SPIKE.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.CHITEN_SPIKE.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.CHITIN_SPIKE.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.STAR_CORAL.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.STAR_CORAL_FAN.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.STAR_CORAL_WALL_FAN.get(), RenderType.cutout()); @@ -354,6 +362,7 @@ public final class AntarchyFabricClientBootstrap { BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.URANIUM_BARS.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.TITANIUM_BARS.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.CLOUD_BLOCK.get(), RenderType.translucent()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.LUCID_ANCHOR.get(), RenderType.translucent()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.JUMPY_BUG_EGG.get(), RenderType.translucent()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.SPIT_BUG_EGG.get(), RenderType.translucent()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.JERRY_EGG.get(), RenderType.translucent()); @@ -431,7 +440,9 @@ public final class AntarchyFabricClientBootstrap { if (entityType == EntityType.PLAYER) { if (renderer instanceof net.minecraft.client.renderer.entity.player.PlayerRenderer playerRenderer) { registrationHelper.register(new ParalyzedStonePlayerLayer(playerRenderer)); + registrationHelper.register(new TigerEyeCamouflagePlayerLayer(playerRenderer)); registrationHelper.register(new GoopedLivingLayer(playerRenderer)); + registrationHelper.register(new GlimmeringLivingLayer(playerRenderer)); registrationHelper.register(new BrutalflyElytraLayer(playerRenderer)); registrationHelper.register(new FallenKingCrownLayer(playerRenderer)); } @@ -450,10 +461,12 @@ public final class AntarchyFabricClientBootstrap { } registrationHelper.register(new ParalyzedStoneLivingLayer(renderer)); registrationHelper.register(new GoopedLivingLayer(renderer)); + registrationHelper.register(new GlimmeringLivingLayer(renderer)); }); } private static void registerClientCallbacks() { + TigerEyeClientHooks.setCamouflageKeyTextSupplier(() -> AntarchyKeyBindings.TIGERS_EYE_CAMOUFLAGE.getTranslatedKeyMessage()); ClientTickEvents.END_CLIENT_TICK.register(client -> { CameraShakeClientState.tick(); HerculesBeetleImpactShakeClientState.tick(); @@ -466,6 +479,7 @@ public final class AntarchyFabricClientBootstrap { DiamondMinecartClientHandler.tick(); ParalyzedClientHandler.tick(); DreadClientHandler.tick(); + TigerEyeCamouflageClientHandler.tick(); BloodCrystalKatanaTrailHandler.tick(); ScorpionWhipTetherRenderHandler.tick(); DorrieJumpClientHandler.tick(); @@ -484,6 +498,7 @@ public final class AntarchyFabricClientBootstrap { DreadHudRenderer.render(guiGraphics); com.craisinlord.antarchy.content.client.HordeHudRenderer.render(guiGraphics); com.craisinlord.antarchy.content.client.GoopedHudRenderer.render(guiGraphics); + com.craisinlord.antarchy.content.client.GlimmeringHudRenderer.render(guiGraphics); ParalyzedHudRenderer.render(guiGraphics); BrutalflyElytraHudRenderer.render(guiGraphics); JumpyBootsHudRenderer.render(guiGraphics); diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyKeyBindings.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyKeyBindings.java index 955d42cb..e185db07 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyKeyBindings.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyKeyBindings.java @@ -37,6 +37,12 @@ public final class AntarchyKeyBindings { GLFW.GLFW_KEY_R, CATEGORY ); + public static final KeyMapping TIGERS_EYE_CAMOUFLAGE = new KeyMapping( + "key.antarchy.tigers_eye_camouflage", + InputConstants.Type.KEYSYM, + InputConstants.UNKNOWN.getValue(), + CATEGORY + ); private AntarchyKeyBindings() {} @@ -45,6 +51,7 @@ public final class AntarchyKeyBindings { KeyBindingHelper.registerKeyBinding(DORRIE_CHARGE_JUMP); KeyBindingHelper.registerKeyBinding(HERCULES_BEETLE_CHARGE); KeyBindingHelper.registerKeyBinding(HERCULES_BEETLE_FLIGHT_TOGGLE); + KeyBindingHelper.registerKeyBinding(TIGERS_EYE_CAMOUFLAGE); } public static boolean isBrutalflyFlapPressed() { @@ -62,4 +69,8 @@ public final class AntarchyKeyBindings { public static boolean isHerculesBeetleFlightTogglePressed() { return Minecraft.getInstance().screen == null && HERCULES_BEETLE_FLIGHT_TOGGLE.isDown(); } + + public static boolean consumeTigerEyeCamouflagePressed() { + return Minecraft.getInstance().screen == null && TIGERS_EYE_CAMOUFLAGE.consumeClick(); + } } diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/TigerEyeCamouflageClientHandler.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/TigerEyeCamouflageClientHandler.java new file mode 100644 index 00000000..a70ca398 --- /dev/null +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/TigerEyeCamouflageClientHandler.java @@ -0,0 +1,29 @@ +package com.craisinlord.antarchy.fabric.client; + +import com.craisinlord.antarchy.content.client.TigerEyeCamouflageClientState; +import com.craisinlord.antarchy.content.client.renderer.TigerEyeCamouflageTextureResolver; +import com.craisinlord.antarchy.content.network.ToggleTigerEyeCamouflagePayload; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +import net.minecraft.client.Minecraft; + +public final class TigerEyeCamouflageClientHandler { + private TigerEyeCamouflageClientHandler() { + } + + public static void tick() { + Minecraft minecraft = Minecraft.getInstance(); + if (minecraft.player == null || minecraft.level == null) { + TigerEyeCamouflageClientState.clear(); + return; + } + + while (AntarchyKeyBindings.consumeTigerEyeCamouflagePressed()) { + ClientPlayNetworking.send(new ToggleTigerEyeCamouflagePayload()); + } + } + + public static void clearClientCaches() { + TigerEyeCamouflageClientState.clear(); + TigerEyeCamouflageTextureResolver.clearCache(); + } +} diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntimetalInversionMixin.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntimetalInversionMixin.java index c534a6dc..6a6f0ae2 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntimetalInversionMixin.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntimetalInversionMixin.java @@ -1,6 +1,7 @@ package com.craisinlord.antarchy.fabric.mixin; import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; import com.craisinlord.antarchy.content.gravity.AntarchyGravityTransition; @@ -50,8 +51,7 @@ public abstract class AntimetalInversionMixin { for (int y = minY; y <= maxY; y++) { for (int z = minZ; z <= maxZ; z++) { BlockPos above = new BlockPos(x, y + 1, z); - if (entity.level().getBlockState(above).is(AntarchyObjects.ANTIMETAL.get()) - || entity.level().getBlockState(above).is(AntarchyObjects.POLISHED_ANTIMETAL.get())) { + if (entity.level().getBlockState(above).is(AntarchyTags.Blocks.ANTIMETAL_INVERSION_BLOCKS)) { return true; } } diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricClientNetworking.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricClientNetworking.java index d83a1a1c..a6a0256f 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricClientNetworking.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricClientNetworking.java @@ -4,6 +4,7 @@ import com.craisinlord.antarchy.content.client.BloodglassClientState; import com.craisinlord.antarchy.content.client.BrutalflyElytraClientState; import com.craisinlord.antarchy.content.client.HordeClientState; import com.craisinlord.antarchy.content.client.ScorpionWhipTetherClientState; +import com.craisinlord.antarchy.content.client.TigerEyeCamouflageClientState; import com.craisinlord.antarchy.content.client.ThoraxisWeatherClientState; import com.craisinlord.antarchy.content.entity.multipart.MultipartFramework; import com.craisinlord.antarchy.content.entity.multipart.network.MultipartAttackPayload; @@ -40,6 +41,8 @@ public final class AntarchyFabricClientNetworking { context.client().execute(() -> AntarchyFabricNetworking.handleGravityState(context.player(), payload))); ClientPlayNetworking.registerGlobalReceiver(BloodglassStatePayload.TYPE, (payload, context) -> context.client().execute(() -> BloodglassClientState.update(payload.shieldsActive(), payload.shieldsMax()))); + ClientPlayNetworking.registerGlobalReceiver(TigerEyeCamouflageStatePayload.TYPE, (payload, context) -> + context.client().execute(() -> TigerEyeCamouflageClientState.update(payload.entityId(), payload.active(), payload.blockStateId()))); ClientPlayNetworking.registerGlobalReceiver(BloodCrystalKatanaTrailPayload.TYPE, (payload, context) -> context.client().execute(() -> BloodCrystalKatanaTrailClientState.trigger(payload.entityId(), payload.durationTicks()))); ClientPlayNetworking.registerGlobalReceiver(ScorpionWhipTetherPayload.TYPE, (payload, context) -> diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java index 5c908e15..0a6ef05f 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java @@ -17,7 +17,10 @@ import com.craisinlord.antarchy.content.item.JumpyBootsHelper; import com.craisinlord.antarchy.fabric.util.JumpyBootsFabricHelper; import com.craisinlord.antarchy.content.item.JumpyBootsItem; import com.craisinlord.antarchy.content.item.GravityGunItem; +import com.craisinlord.antarchy.content.item.TigerEyeArmorUtil; import com.craisinlord.antarchy.content.network.*; +import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageController; +import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageSync; import com.craisinlord.antarchy.content.entity.DorrieEntity; import com.craisinlord.antarchy.content.network.DorrieJumpInputPayload; import com.craisinlord.antarchy.content.network.JumpyBootsLaunchPayload; @@ -70,6 +73,7 @@ public final class AntarchyFabricNetworking { private static void registerPayloadTypes() { PayloadTypeRegistry.playS2C().register(GravityStatePayload.TYPE, GravityStatePayload.STREAM_CODEC); PayloadTypeRegistry.playS2C().register(BloodglassStatePayload.TYPE, BloodglassStatePayload.STREAM_CODEC); + PayloadTypeRegistry.playS2C().register(TigerEyeCamouflageStatePayload.TYPE, TigerEyeCamouflageStatePayload.STREAM_CODEC); PayloadTypeRegistry.playS2C().register(BloodCrystalKatanaTrailPayload.TYPE, BloodCrystalKatanaTrailPayload.STREAM_CODEC); PayloadTypeRegistry.playS2C().register(ScorpionWhipTetherPayload.TYPE, ScorpionWhipTetherPayload.STREAM_CODEC); PayloadTypeRegistry.playS2C().register(BrutalflyElytraAnimationPayload.TYPE, BrutalflyElytraAnimationPayload.STREAM_CODEC); @@ -81,6 +85,7 @@ public final class AntarchyFabricNetworking { PayloadTypeRegistry.playC2S().register(GravityGunPrimaryPayload.TYPE, GravityGunPrimaryPayload.STREAM_CODEC); PayloadTypeRegistry.playC2S().register(GravityGunScrollPayload.TYPE, GravityGunScrollPayload.STREAM_CODEC); PayloadTypeRegistry.playC2S().register(BigBerthaModeCyclePayload.TYPE, BigBerthaModeCyclePayload.STREAM_CODEC); + PayloadTypeRegistry.playC2S().register(ToggleTigerEyeCamouflagePayload.TYPE, ToggleTigerEyeCamouflagePayload.STREAM_CODEC); PayloadTypeRegistry.playC2S().register(DiamondMinecartInputPayload.TYPE, DiamondMinecartInputPayload.STREAM_CODEC); PayloadTypeRegistry.playC2S().register(BrutalflyElytraFlapPayload.TYPE, BrutalflyElytraFlapPayload.STREAM_CODEC); PayloadTypeRegistry.playC2S().register(JumpyBootsLaunchPayload.TYPE, JumpyBootsLaunchPayload.STREAM_CODEC); @@ -101,6 +106,8 @@ public final class AntarchyFabricNetworking { context.server().execute(() -> handleGravityGunScroll(context.player(), payload))); ServerPlayNetworking.registerGlobalReceiver(BigBerthaModeCyclePayload.TYPE, (payload, context) -> context.server().execute(() -> handleBigBerthaModeCycle(context.player(), payload))); + ServerPlayNetworking.registerGlobalReceiver(ToggleTigerEyeCamouflagePayload.TYPE, (payload, context) -> + context.server().execute(() -> handleTigerEyeCamouflageToggle(context.player()))); ServerPlayNetworking.registerGlobalReceiver(DiamondMinecartInputPayload.TYPE, (payload, context) -> context.server().execute(() -> handleDiamondMinecartInput(context.player(), payload))); ServerPlayNetworking.registerGlobalReceiver(BrutalflyElytraFlapPayload.TYPE, (payload, context) -> @@ -158,6 +165,14 @@ public final class AntarchyFabricNetworking { ServerPlayNetworking.send(player, new BloodglassStatePayload(shieldsActive, shieldsMax)); } + public static void syncTigerEyeCamouflage(ServerPlayer player) { + TigerEyeCamouflageStatePayload payload = TigerEyeCamouflageSync.payload(player); + for (ServerPlayer tracking : PlayerLookup.tracking(player)) { + ServerPlayNetworking.send(tracking, payload); + } + ServerPlayNetworking.send(player, payload); + } + public static void syncKatanaTrail(Entity entity, int durationTicks) { BloodCrystalKatanaTrailPayload payload = new BloodCrystalKatanaTrailPayload(entity.getId(), durationTicks); for (ServerPlayer player : PlayerLookup.tracking(entity)) { @@ -420,4 +435,24 @@ public final class AntarchyFabricNetworking { payload.radius() ); } + + private static void handleTigerEyeCamouflageToggle(ServerPlayer player) { + TigerEyeCamouflageController.ToggleResult result = TigerEyeCamouflageController.toggle(player); + if (result != TigerEyeCamouflageController.ToggleResult.NO_CHANGE) { + syncTigerEyeCamouflage(player); + } + + String messageKey = switch (result) { + case ACTIVATED -> "message.antarchy.tiger_eye_camouflage.activated"; + case DEACTIVATED -> "message.antarchy.tiger_eye_camouflage.disabled"; + case FULL_SET_REQUIRED -> TigerEyeArmorUtil.countEquippedPieces(player) > 0 + ? "message.antarchy.tiger_eye_camouflage.full_set_required" + : null; + case INVALID_BLOCK -> "message.antarchy.tiger_eye_camouflage.invalid_block"; + case NO_CHANGE -> null; + }; + if (messageKey != null) { + player.displayClientMessage(net.minecraft.network.chat.Component.translatable(messageKey), true); + } + } } diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricBlocks.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricBlocks.java index 259c86b1..31a5d37e 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricBlocks.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricBlocks.java @@ -8,8 +8,10 @@ import com.craisinlord.antarchy.content.block.entity.AntNestBlockEntity; import com.craisinlord.antarchy.content.block.entity.CritterCageBlockEntity; import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; +import com.craisinlord.antarchy.content.block.entity.LucidAnchorBlockEntity; import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity; import com.craisinlord.antarchy.content.block.entity.SeashellBlockEntity; +import com.craisinlord.antarchy.content.block.entity.UpperBlockEntity; import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; import com.craisinlord.antarchy.content.fluid.BileLiquidBlock; import com.craisinlord.antarchy.content.fluid.LumenLiquidBlock; @@ -149,6 +151,8 @@ public final class AntarchyFabricBlocks { () -> new net.minecraft.world.level.block.FlowerPotBlock(LOTUS.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.POTTED_DANDELION))); public static final DeferredBlock SEASHELL = BLOCKS.register("seashell", () -> new SeashellBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.TURTLE_EGG).noOcclusion())); + public static final DeferredBlock LUCID_ANCHOR = BLOCKS.register("lucid_anchor", + () -> new LucidAnchorBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BEACON).strength(3.0F))); public static final DeferredBlock CRITTER_CAGE_BLOCK = BLOCKS.register("critter_cage_block", () -> new CritterCageBlock(BlockBehaviour.Properties.of().strength(5.0F, 6.0F).sound(net.minecraft.world.level.block.SoundType.METAL).noOcclusion())); @@ -328,6 +332,10 @@ public final class AntarchyFabricBlocks { () -> new net.minecraft.world.level.block.WallBlock(nyxiteProperties())); + public static final DeferredBlock NYXITE_PILLAR = BLOCKS.register("nyxite_pillar", + () -> new RotatedPillarBlock(nyxiteProperties())); + + public static final DeferredBlock SHELLSTONE = BLOCKS.register("shellstone", () -> new Block(AntarchyObjects.shellstoneProperties())); @@ -400,6 +408,10 @@ public final class AntarchyFabricBlocks { () -> new net.minecraft.world.level.block.WallBlock(AntarchyObjects.shellstoneProperties())); + public static final DeferredBlock SHELLSTONE_PILLAR = BLOCKS.register("shellstone_pillar", + () -> new RotatedPillarBlock(AntarchyObjects.shellstoneProperties())); + + public static final DeferredBlock TRIFFID_GOO_BLOCK = BLOCKS.register("triffid_goo_block", () -> new com.craisinlord.antarchy.content.block.TriffidGooBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SLIME_BLOCK).noOcclusion().isViewBlocking((s, l, p) -> false).isSuffocating((s, l, p) -> false))); @@ -431,8 +443,8 @@ public final class AntarchyFabricBlocks { () -> new NyxiteSpikeBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POINTED_DRIPSTONE))); - public static final DeferredBlock CHITEN_SPIKE = BLOCKS.register("chiten_spike", - () -> new ChitenSpikeBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POINTED_DRIPSTONE))); + public static final DeferredBlock CHITIN_SPIKE = BLOCKS.register("chitin_spike", + () -> new ChitinSpikeBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POINTED_DRIPSTONE))); public static final DeferredBlock POTENT_NYXITE = BLOCKS.register("potent_nyxite", @@ -518,6 +530,10 @@ public final class AntarchyFabricBlocks { () -> new WallBlock(broodstoneProperties())); + public static final DeferredBlock BROODSTONE_PILLAR = BLOCKS.register("broodstone_pillar", + () -> new RotatedPillarBlock(broodstoneProperties())); + + public static final DeferredBlock BROODSTONE_URANIUM_ORE = BLOCKS.register("broodstone_uranium_ore", () -> createOre(Blocks.DEEPSLATE_EMERALD_ORE, 4, 8, MapColor.COLOR_YELLOW)); @@ -526,7 +542,7 @@ public final class AntarchyFabricBlocks { () -> createOre(Blocks.DEEPSLATE_DIAMOND_ORE, 4, 8, MapColor.COLOR_LIGHT_BLUE)); - public static final DeferredBlock CHITEN_BLOCK = BLOCKS.register("chiten_block", + public static final DeferredBlock CHITIN_BLOCK = BLOCKS.register("chitin_block", () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BONE_BLOCK).requiresCorrectToolForDrops())); @@ -730,6 +746,8 @@ public final class AntarchyFabricBlocks { () -> new BluestoneComparatorBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.COMPARATOR).mapColor(MapColor.COLOR_BLUE).noCollission(), AntarchyFabricBlocks::bluestoneComparatorBlockEntityType)); public static final DeferredBlock BLUESTONE_TORCH = BLOCKS.register("bluestone_torch", () -> new BluestoneTorchBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.REDSTONE_TORCH).mapColor(MapColor.COLOR_BLUE).lightLevel(state -> state.getValue(BluestoneTorchBlock.LIT) ? 7 : 0).noCollission().instabreak())); + public static final DeferredBlock BLUESTONE_LAMP = BLOCKS.register("bluestone_lamp", + () -> new com.craisinlord.antarchy.content.block.BluestoneLampBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.REDSTONE_LAMP).mapColor(MapColor.COLOR_BLUE))); public static final DeferredBlock URANIUM_BLOCK = BLOCKS.register("uranium_block", @@ -818,12 +836,22 @@ public final class AntarchyFabricBlocks { public static final DeferredBlock POLISHED_ANTIMETAL = BLOCKS.register("polished_antimetal", () -> new net.minecraft.world.level.block.RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POLISHED_BASALT))); + public static final DeferredBlock ANTIMETAL_STAIRS = BLOCKS.register("antimetal_stairs", + () -> new StairBlock(ANTIMETAL.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.BASALT))); + public static final DeferredBlock ANTIMETAL_SLAB = BLOCKS.register("antimetal_slab", + () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BASALT))); + public static final DeferredBlock POLISHED_ANTIMETAL_STAIRS = BLOCKS.register("polished_antimetal_stairs", + () -> new StairBlock(POLISHED_ANTIMETAL.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.POLISHED_BASALT))); + public static final DeferredBlock POLISHED_ANTIMETAL_SLAB = BLOCKS.register("polished_antimetal_slab", + () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POLISHED_BASALT))); public static final DeferredBlock ANTIMETAL_SCAFFOLDING = BLOCKS.register("antimetal_scaffolding", () -> new com.craisinlord.antarchy.content.block.AntimetalScaffoldingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SCAFFOLDING))); + public static final DeferredBlock UPPER = BLOCKS.register("upper", + () -> new UpperBlock(AntarchyFabricBlocks::upperBlockEntityType, BlockBehaviour.Properties.ofFullCopy(Blocks.HOPPER))); public static final DeferredBlock ANTIMETAL_RAIL = BLOCKS.register("antimetal_rail", () -> new com.craisinlord.antarchy.content.block.AntimetalRailBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.RAIL))); @@ -905,6 +933,18 @@ public final class AntarchyFabricBlocks { () -> new DreamSandBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SAND))); + public static final DeferredBlock ANTIGRAVEL = BLOCKS.register("antigravel", + () -> new com.craisinlord.antarchy.content.block.AntigravelBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.GRAVEL))); + + + public static final DeferredBlock LOAM = BLOCKS.register("loam", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.MUD))); + + + public static final DeferredBlock MUCUS = BLOCKS.register("mucus", + () -> new com.craisinlord.antarchy.content.block.MucusBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.GLOW_LICHEN).friction(0.98F).lightLevel(state -> 0).sound(SoundType.SLIME_BLOCK))); + + public static final DeferredBlock DREAM_SANDSTONE = BLOCKS.register("dream_sandstone", () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.SANDSTONE))); @@ -1018,6 +1058,11 @@ public final class AntarchyFabricBlocks { SeashellBlockEntity::new, SEASHELL.get() ).build(null)); + public static final DeferredHolder, BlockEntityType> LUCID_ANCHOR_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("lucid_anchor", + () -> BlockEntityType.Builder.of( + LucidAnchorBlockEntity::new, + LUCID_ANCHOR.get() + ).build(null)); public static final DeferredHolder, BlockEntityType> CRITTER_CAGE_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("critter_cage_block", () -> BlockEntityType.Builder.of( CritterCageBlockEntity::new, @@ -1028,6 +1073,11 @@ public final class AntarchyFabricBlocks { (pos, state) -> new com.craisinlord.antarchy.content.block.entity.BluestoneComparatorBlockEntity(pos, state, AntarchyFabricBlocks::bluestoneComparatorBlockEntityType), BLUESTONE_COMPARATOR.get() ).build(null)); + public static final DeferredHolder, BlockEntityType> UPPER_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("upper", + () -> BlockEntityType.Builder.of( + (pos, state) -> new UpperBlockEntity(pos, state, AntarchyFabricBlocks::upperBlockEntityType), + UPPER.get() + ).build(null)); @@ -1055,6 +1105,10 @@ public final class AntarchyFabricBlocks { return BLUESTONE_COMPARATOR_BLOCK_ENTITY.get(); } + private static BlockEntityType upperBlockEntityType() { + return UPPER_BLOCK_ENTITY.get(); + } + private static Block smallBloodCrystalBudBlock() { diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java index d9100353..3338e776 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java @@ -32,6 +32,8 @@ import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity; import com.craisinlord.antarchy.content.entity.EmperorScorpionEntity; import com.craisinlord.antarchy.content.entity.ScorpionEntity; import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; +import com.craisinlord.antarchy.content.entity.nightmare.NightmarePortalEntity; +import com.craisinlord.antarchy.content.entity.nightmare.NightmareBiteEntity; import com.craisinlord.antarchy.content.entity.ToreterrorEntity; import com.craisinlord.antarchy.content.entity.WaterBombEntity; import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; @@ -328,6 +330,20 @@ public final class AntarchyFabricEntities { .clientTrackingRange(12) .build("nightmare")); + public static final DeferredHolder, EntityType> NIGHTMARE_PORTAL = ENTITY_TYPES.register("nightmare_portal", + () -> EntityType.Builder.of(NightmarePortalEntity::new, MobCategory.MISC) + .sized(2.5F, 3.0F) + .clientTrackingRange(10) + .updateInterval(1) + .build("nightmare_portal")); + + public static final DeferredHolder, EntityType> NIGHTMARE_BITE = ENTITY_TYPES.register("nightmare_bite", + () -> EntityType.Builder.of(NightmareBiteEntity::new, MobCategory.MISC) + .sized(2.5F, 2.0F) + .clientTrackingRange(10) + .updateInterval(1) + .build("nightmare_bite")); + public static final DeferredHolder, EntityType> LUCID = ENTITY_TYPES.register("lucid", () -> EntityType.Builder.of(LucidEntity::new, MobCategory.MONSTER) 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 3bb7d40c..0ac1d170 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 @@ -7,6 +7,7 @@ import com.craisinlord.antarchy.content.item.BloodCrystalAppleItem; import com.craisinlord.antarchy.content.item.BloodCrystalKatanaItem; import com.craisinlord.antarchy.content.item.CritterCageItem; import com.craisinlord.antarchy.fabric.item.DeferredSpawnEggItem; +import com.craisinlord.antarchy.content.item.LucidAnchorBlockItem; import com.craisinlord.antarchy.content.item.LucidEyeItem; import com.craisinlord.antarchy.content.item.LucidPearlItem; import com.craisinlord.antarchy.content.item.PrimordialArmorItem; @@ -221,6 +222,8 @@ public final class AntarchyFabricItems { public static final DeferredItem GIANT_LILY_PAD_ITEM = ITEMS.register("giant_lily_pad", () -> new com.craisinlord.antarchy.content.item.GiantLilyPadItem(AntarchyFabricBlocks.GIANT_LILY_PAD.get(), new Item.Properties())); public static final DeferredItem SEASHELL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SEASHELL); + public static final DeferredItem LUCID_ANCHOR_ITEM = ITEMS.register("lucid_anchor", + () -> new LucidAnchorBlockItem(AntarchyFabricBlocks.LUCID_ANCHOR.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); public static final DeferredItem LOTUS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.LOTUS); @@ -295,6 +298,7 @@ public final class AntarchyFabricItems { () -> new CeilingPlacementTooltipBlockItem(AntarchyFabricBlocks.BLUESTONE_COMPARATOR.get(), new Item.Properties())); public static final DeferredItem BLUESTONE_TORCH_ITEM = ITEMS.register("bluestone_torch", () -> new CeilingPlacementTooltipBlockItem(AntarchyFabricBlocks.BLUESTONE_TORCH.get(), new Item.Properties())); + public static final DeferredItem BLUESTONE_LAMP_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BLUESTONE_LAMP); public static final DeferredItem URANIUM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.URANIUM_BLOCK, new Item.Properties().rarity(Rarity.UNCOMMON)); @@ -365,6 +369,14 @@ public final class AntarchyFabricItems { public static final DeferredItem POLISHED_ANTIMETAL_ITEM = ITEMS.register("polished_antimetal", () -> new AntimetalBlockItem(AntarchyFabricBlocks.POLISHED_ANTIMETAL.get(), new Item.Properties())); + public static final DeferredItem ANTIMETAL_STAIRS_ITEM = ITEMS.register("antimetal_stairs", + () -> new AntimetalBlockItem(AntarchyFabricBlocks.ANTIMETAL_STAIRS.get(), new Item.Properties())); + public static final DeferredItem ANTIMETAL_SLAB_ITEM = ITEMS.register("antimetal_slab", + () -> new AntimetalBlockItem(AntarchyFabricBlocks.ANTIMETAL_SLAB.get(), new Item.Properties())); + public static final DeferredItem POLISHED_ANTIMETAL_STAIRS_ITEM = ITEMS.register("polished_antimetal_stairs", + () -> new AntimetalBlockItem(AntarchyFabricBlocks.POLISHED_ANTIMETAL_STAIRS.get(), new Item.Properties())); + public static final DeferredItem POLISHED_ANTIMETAL_SLAB_ITEM = ITEMS.register("polished_antimetal_slab", + () -> new AntimetalBlockItem(AntarchyFabricBlocks.POLISHED_ANTIMETAL_SLAB.get(), new Item.Properties())); public static final DeferredItem ANTIMETAL_SCAFFOLDING_ITEM = ITEMS.register("antimetal_scaffolding", @@ -379,6 +391,7 @@ public final class AntarchyFabricItems { () -> new CeilingPlacementTooltipBlockItem(AntarchyFabricBlocks.ANTIMETAL_DETECTOR_RAIL.get(), new Item.Properties())); public static final DeferredItem ANTIMETAL_ACTIVATOR_RAIL_ITEM = ITEMS.register("antimetal_activator_rail", () -> new CeilingPlacementTooltipBlockItem(AntarchyFabricBlocks.ANTIMETAL_ACTIVATOR_RAIL.get(), new Item.Properties())); + public static final DeferredItem UPPER_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.UPPER); public static final DeferredItem SMALL_BLOOD_CRYSTAL_BUD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SMALL_BLOOD_CRYSTAL_BUD); @@ -401,6 +414,10 @@ public final class AntarchyFabricItems { public static final DeferredItem DREAM_SAND_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DREAM_SAND); + public static final DeferredItem ANTIGRAVEL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ANTIGRAVEL); + public static final DeferredItem LOAM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.LOAM); + public static final DeferredItem MUCUS_ITEM = ITEMS.register("mucus", + () -> new com.craisinlord.antarchy.content.item.MucusBlockItem(AntarchyFabricBlocks.MUCUS.get(), new Item.Properties())); public static final DeferredItem DREAM_SANDSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DREAM_SANDSTONE); @@ -482,6 +499,7 @@ public final class AntarchyFabricItems { public static final DeferredItem BROODSTONE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BROODSTONE_BRICK_STAIRS); public static final DeferredItem BROODSTONE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BROODSTONE_BRICK_SLAB); public static final DeferredItem BROODSTONE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BROODSTONE_BRICK_WALL); + public static final DeferredItem BROODSTONE_PILLAR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BROODSTONE_PILLAR); public static final DeferredItem MYRMITE_COAL_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MYRMITE_COAL_ORE); public static final DeferredItem BROODSTONE_URANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BROODSTONE_URANIUM_ORE, new Item.Properties().rarity(Rarity.UNCOMMON)); public static final DeferredItem BROODSTONE_TITANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BROODSTONE_TITANIUM_ORE, new Item.Properties().rarity(Rarity.UNCOMMON)); @@ -494,7 +512,7 @@ public final class AntarchyFabricItems { public static final DeferredItem NYXITE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NYXITE_BRICKS); - public static final DeferredItem CHITEN_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CHITEN_BLOCK); + public static final DeferredItem CHITIN_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CHITIN_BLOCK); public static final DeferredItem NYXITE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NYXITE_STAIRS); @@ -525,6 +543,7 @@ public final class AntarchyFabricItems { public static final DeferredItem NYXITE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NYXITE_BRICK_WALL); + public static final DeferredItem NYXITE_PILLAR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NYXITE_PILLAR); public static final DeferredItem SHELLSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SHELLSTONE); @@ -579,6 +598,7 @@ public final class AntarchyFabricItems { public static final DeferredItem SHELLSTONE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SHELLSTONE_BRICK_WALL); + public static final DeferredItem SHELLSTONE_PILLAR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SHELLSTONE_PILLAR); public static final DeferredItem TRIFFID_GOO_BLOCK_ITEM = ITEMS.register("triffid_goo_block", @@ -589,7 +609,7 @@ public final class AntarchyFabricItems { public static final DeferredItem NYXITE_SPIKE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NYXITE_SPIKE); - public static final DeferredItem CHITEN_SPIKE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CHITEN_SPIKE); + public static final DeferredItem CHITIN_SPIKE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CHITIN_SPIKE); public static final DeferredItem POTENT_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.POTENT_NYXITE); @@ -696,6 +716,16 @@ public final class AntarchyFabricItems { public static final DeferredItem BLOOD_CRYSTAL_BOOTS = ITEMS.register("blood_crystal_boots", () -> new BloodCrystalArmorItem(net.minecraft.core.Holder.direct(AntarchyFabricMisc.BLOOD_CRYSTAL_ARMOR_MATERIAL.get()), ArmorItem.Type.BOOTS, new Item.Properties().rarity(Rarity.RARE))); + public static final DeferredItem TIGERS_EYE = ITEMS.registerSimpleItem("tigers_eye", new Item.Properties().rarity(Rarity.UNCOMMON)); + public static final DeferredItem TIGERS_EYE_HELMET = ITEMS.register("tigers_eye_helmet", + () -> new com.craisinlord.antarchy.content.item.TigerEyeArmorItem(net.minecraft.core.Holder.direct(AntarchyFabricMisc.TIGERS_EYE_ARMOR_MATERIAL.get()), ArmorItem.Type.HELMET, new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem TIGERS_EYE_CHESTPLATE = ITEMS.register("tigers_eye_chestplate", + () -> new com.craisinlord.antarchy.content.item.TigerEyeArmorItem(net.minecraft.core.Holder.direct(AntarchyFabricMisc.TIGERS_EYE_ARMOR_MATERIAL.get()), ArmorItem.Type.CHESTPLATE, new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem TIGERS_EYE_LEGGINGS = ITEMS.register("tigers_eye_leggings", + () -> new com.craisinlord.antarchy.content.item.TigerEyeArmorItem(net.minecraft.core.Holder.direct(AntarchyFabricMisc.TIGERS_EYE_ARMOR_MATERIAL.get()), ArmorItem.Type.LEGGINGS, new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem TIGERS_EYE_BOOTS = ITEMS.register("tigers_eye_boots", + () -> new com.craisinlord.antarchy.content.item.TigerEyeArmorItem(net.minecraft.core.Holder.direct(AntarchyFabricMisc.TIGERS_EYE_ARMOR_MATERIAL.get()), ArmorItem.Type.BOOTS, new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem BLOOD_CRYSTAL_KATANA = ITEMS.register("blood_crystal_katana", () -> new BloodCrystalKatanaItem( @@ -719,7 +749,7 @@ public final class AntarchyFabricItems { () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); - public static final DeferredItem CHITEN = ITEMS.registerSimpleItem("chiten", new Item.Properties().rarity(Rarity.UNCOMMON)); + public static final DeferredItem CHITIN = ITEMS.registerSimpleItem("chitin", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final DeferredItem JERRY_NUCLEUS = ITEMS.register("jerry_nucleus", @@ -730,9 +760,6 @@ public final class AntarchyFabricItems { .build()))); - public static final DeferredItem CARAPACE = ITEMS.registerSimpleItem("carapace", new Item.Properties().rarity(Rarity.UNCOMMON)); - - public static final DeferredItem STINK_BUG_ITEM = ITEMS.registerSimpleItem("stink_bug", new Item.Properties().rarity(Rarity.UNCOMMON)); @@ -1225,6 +1252,14 @@ public final class AntarchyFabricItems { "kraken_tentacle", new Item.Properties().rarity(Rarity.RARE) ); + public static final DeferredItem KRAKEN_KALAMARI = ITEMS.register("kraken_kalamari", + () -> new Item(new Item.Properties() + .rarity(Rarity.EPIC) + .food(new FoodProperties.Builder() + .nutrition(20) + .saturationModifier(1.2F) + .alwaysEdible() + .build()))); public static final DeferredItem KRAKENS_GRASP = ITEMS.register("krakens_grasp", () -> new KrakensGraspItem( @@ -1461,6 +1496,7 @@ public final class AntarchyFabricItems { .food(new FoodProperties.Builder() .nutrition(4) .saturationModifier(0.3F) + .alwaysEdible() .build()))); 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 a039eb50..7f63b415 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 @@ -56,8 +56,8 @@ import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeConfiguration; import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeFeature; import com.craisinlord.antarchy.content.worldgen.elythia.TriffidPatchFeature; import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynEggPatchFeature; -import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeConfiguration; -import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitinSpikeConfiguration; +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; @@ -250,6 +250,16 @@ public final class AntarchyFabricMisc { 0.0F, 0.0F )); + public static final DeferredHolder TIGERS_EYE_ARMOR_MATERIAL = ARMOR_MATERIALS.register("tigers_eye", + () -> new ArmorMaterial( + createDiamondArmorDefense(), + 18, + SoundEvents.ARMOR_EQUIP_GOLD, + () -> Ingredient.of(AntarchyFabricItems.TIGERS_EYE.get()), + List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "tigers_eye"))), + 2.0F, + 0.0F + )); public static final DeferredHolder MOGGLES_ARMOR_MATERIAL = ARMOR_MATERIALS.register("moggles", @@ -352,6 +362,9 @@ public final class AntarchyFabricMisc { public static final DeferredHolder BLOODGLASS_WARD = MOB_EFFECTS.register("bloodglass_ward", com.craisinlord.antarchy.content.effect.BloodglassWardEffect::new); + public static final DeferredHolder GLIMMERING = MOB_EFFECTS.register("glimmering", com.craisinlord.antarchy.content.effect.GlimmeringMobEffect::new); + + public static final DeferredHolder BLOODGLASS_MAX_HEARTS = ATTRIBUTES.register( "bloodglass_max_hearts", () -> new net.minecraft.world.entity.ai.attributes.RangedAttribute("attribute.antarchy.bloodglass_max_hearts", 0.0, 0.0, 8.0).setSyncable(true) @@ -676,8 +689,8 @@ public final class AntarchyFabricMisc { () -> new NyxiteSpikeFeature(NyxiteSpikeConfiguration.CODEC)); - public static final DeferredHolder, ChitenSpikeFeature> CAVARYN_CHITEN_SPIKES = FEATURES.register("cavaryn_chiten_spikes", - () -> new ChitenSpikeFeature(ChitenSpikeConfiguration.CODEC)); + public static final DeferredHolder, ChitinSpikeFeature> CAVARYN_CHITIN_SPIKES = FEATURES.register("cavaryn_chitin_spikes", + () -> new ChitinSpikeFeature(ChitinSpikeConfiguration.CODEC)); public static final DeferredHolder, CavarynBileVeinFeature> CAVARYN_BILE_VEINS = FEATURES.register("cavaryn_bile_veins", @@ -852,6 +865,16 @@ public final class AntarchyFabricMisc { return defense; } + private static java.util.EnumMap createDiamondArmorDefense() { + java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); + defense.put(ArmorItem.Type.BOOTS, 3); + defense.put(ArmorItem.Type.LEGGINGS, 6); + defense.put(ArmorItem.Type.CHESTPLATE, 8); + defense.put(ArmorItem.Type.HELMET, 3); + defense.put(ArmorItem.Type.BODY, 11); + return defense; + } + private static java.util.EnumMap createMogglesArmorDefense() { 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 6a95a440..656c8e13 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 @@ -157,6 +157,9 @@ public final class AntarchyFabricSounds { public static final DeferredHolder THORAXIS_LUCID_POOLS_MOOD = registerSoundEvent("thoraxis_lucid_pools_mood"); + public static final DeferredHolder LUCID_LULLABY = registerSoundEvent("lucid_lullaby"); + + public static final DeferredHolder LUCID_AMBIENT = registerSoundEvent("lucid_ambient"); @@ -388,6 +391,9 @@ public final class AntarchyFabricSounds { public static final DeferredHolder CAVARYN_HEARTBEAT = registerSoundEvent("cavaryn_heartbeat"); + public static final DeferredHolder VENENATUS = registerSoundEvent("venenatus"); + + public static final DeferredHolder ROLLY_POLLY_IDLE = registerSoundEvent("rolly_polly_idle"); public static final DeferredHolder ROLLY_POLLY_WHEEL_MODE = registerSoundEvent("rolly_polly_wheel_mode"); public static final DeferredHolder ROLLY_POLLY_NORMAL_MODE = registerSoundEvent("rolly_polly_normal_mode"); diff --git a/forge-1.20.1/gradle.properties b/forge-1.20.1/gradle.properties index af3a5742..7813e356 100644 --- a/forge-1.20.1/gradle.properties +++ b/forge-1.20.1/gradle.properties @@ -6,7 +6,7 @@ mod_name=Antarchy mod_description=ANTS! ANTS! ANTS! ANTS! mod_authors=CraisinLord mod_group_id=com.craisinlord -mod_version=1.0.3 +mod_version=1.0.4 mod_license=All Rights Reserved minecraft_version=1.20.1 diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyConfigModuleForge.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyConfigModuleForge.java index ed6611c8..63a2f4a2 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyConfigModuleForge.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyConfigModuleForge.java @@ -57,24 +57,28 @@ public final class AntarchyConfigModuleForge { AntarchySettings.setAntsStealFromChests(AntarchyMobsConfig.antsStealFromChests()); AntarchySettings.setBrownAntRequiresReagent(AntarchyMobsConfig.brownAntRequiresReagent()); + AntarchySettings.setBrownAntRightClickDimension(AntarchyMobsConfig.brownAntRightClickDimension()); AntarchySettings.setBrownAntHealth(AntarchyMobsConfig.brownAntHealth()); AntarchySettings.setBrownAntMovementSpeed(AntarchyMobsConfig.brownAntMovementSpeed()); AntarchySettings.setBrownAntAttackDamage(AntarchyMobsConfig.brownAntAttackDamage()); AntarchySettings.setBrownAntDestinationDimension(AntarchyMobsConfig.brownAntDestinationDimension()); AntarchySettings.setRedAntRequiresReagent(AntarchyMobsConfig.redAntRequiresReagent()); + AntarchySettings.setRedAntRightClickDimension(AntarchyMobsConfig.redAntRightClickDimension()); AntarchySettings.setRedAntHealth(AntarchyMobsConfig.redAntHealth()); AntarchySettings.setRedAntMovementSpeed(AntarchyMobsConfig.redAntMovementSpeed()); AntarchySettings.setRedAntAttackDamage(AntarchyMobsConfig.redAntAttackDamage()); AntarchySettings.setRedAntDestinationDimension(AntarchyMobsConfig.redAntDestinationDimension()); AntarchySettings.setRainbowAntRequiresReagent(AntarchyMobsConfig.rainbowAntRequiresReagent()); + AntarchySettings.setRainbowAntRightClickDimension(AntarchyMobsConfig.rainbowAntRightClickDimension()); AntarchySettings.setRainbowAntHealth(AntarchyMobsConfig.rainbowAntHealth()); AntarchySettings.setRainbowAntMovementSpeed(AntarchyMobsConfig.rainbowAntMovementSpeed()); AntarchySettings.setRainbowAntAttackDamage(AntarchyMobsConfig.rainbowAntAttackDamage()); AntarchySettings.setRainbowAntNonInfinityFallbackDimension(AntarchyMobsConfig.rainbowAntNonInfinityFallbackDimension()); AntarchySettings.setTermiteRequiresReagent(AntarchyMobsConfig.termiteRequiresReagent()); + AntarchySettings.setTermiteRightClickDimension(AntarchyMobsConfig.termiteRightClickDimension()); AntarchySettings.setTermiteHealth(AntarchyMobsConfig.termiteHealth()); AntarchySettings.setTermiteMovementSpeed(AntarchyMobsConfig.termiteMovementSpeed()); AntarchySettings.setTermiteAttackDamage(AntarchyMobsConfig.termiteAttackDamage()); diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyMobsConfig.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyMobsConfig.java index 90073afa..75927b00 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyMobsConfig.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyMobsConfig.java @@ -11,24 +11,28 @@ public final class AntarchyMobsConfig { private static final ForgeConfigSpec.BooleanValue ANTS_STEAL_FROM_CHESTS; private static final ForgeConfigSpec.BooleanValue BROWN_ANT_REQUIRES_REAGENT; + private static final ForgeConfigSpec.BooleanValue BROWN_ANT_RIGHT_CLICK_DIMENSION; private static final ForgeConfigSpec.DoubleValue BROWN_ANT_HEALTH; private static final ForgeConfigSpec.DoubleValue BROWN_ANT_MOVEMENT_SPEED; private static final ForgeConfigSpec.DoubleValue BROWN_ANT_ATTACK_DAMAGE; private static final ForgeConfigSpec.ConfigValue BROWN_ANT_DESTINATION_DIMENSION; private static final ForgeConfigSpec.BooleanValue RED_ANT_REQUIRES_REAGENT; + private static final ForgeConfigSpec.BooleanValue RED_ANT_RIGHT_CLICK_DIMENSION; private static final ForgeConfigSpec.DoubleValue RED_ANT_HEALTH; private static final ForgeConfigSpec.DoubleValue RED_ANT_MOVEMENT_SPEED; private static final ForgeConfigSpec.DoubleValue RED_ANT_ATTACK_DAMAGE; private static final ForgeConfigSpec.ConfigValue RED_ANT_DESTINATION_DIMENSION; private static final ForgeConfigSpec.BooleanValue RAINBOW_ANT_REQUIRES_REAGENT; + private static final ForgeConfigSpec.BooleanValue RAINBOW_ANT_RIGHT_CLICK_DIMENSION; private static final ForgeConfigSpec.DoubleValue RAINBOW_ANT_HEALTH; private static final ForgeConfigSpec.DoubleValue RAINBOW_ANT_MOVEMENT_SPEED; private static final ForgeConfigSpec.DoubleValue RAINBOW_ANT_ATTACK_DAMAGE; private static final ForgeConfigSpec.ConfigValue RAINBOW_ANT_NON_INFINITY_FALLBACK_DIMENSION; private static final ForgeConfigSpec.BooleanValue TERMITE_REQUIRES_REAGENT; + private static final ForgeConfigSpec.BooleanValue TERMITE_RIGHT_CLICK_DIMENSION; private static final ForgeConfigSpec.DoubleValue TERMITE_HEALTH; private static final ForgeConfigSpec.DoubleValue TERMITE_MOVEMENT_SPEED; private static final ForgeConfigSpec.DoubleValue TERMITE_ATTACK_DAMAGE; @@ -278,6 +282,9 @@ public final class AntarchyMobsConfig { "Breeding foods tag: data/antarchy/tags/item/brown_ant_breeding_foods.json" ) .define("requiresReagent", false); + BROWN_ANT_RIGHT_CLICK_DIMENSION = b + .comment("If false, right-clicking brown ants will never teleport players.") + .define("rightClickDimension", true); BROWN_ANT_HEALTH = b.comment("Base max health.") .defineInRange("health", 5.0D, 0.1D, 1024.0D); BROWN_ANT_MOVEMENT_SPEED = b.comment("Base movement speed.") .defineInRange("movementSpeed", 0.28D, 0.0D, 10.0D); BROWN_ANT_ATTACK_DAMAGE = b.comment("Base attack damage.") .defineInRange("attackDamage", 1.0D, 0.0D, 1024.0D); @@ -294,6 +301,9 @@ public final class AntarchyMobsConfig { "Breeding foods tag: data/antarchy/tags/item/red_ant_breeding_foods.json" ) .define("requiresReagent", false); + RED_ANT_RIGHT_CLICK_DIMENSION = b + .comment("If false, right-clicking red ants will never teleport players.") + .define("rightClickDimension", true); RED_ANT_HEALTH = b.comment("Base max health.") .defineInRange("health", 5.0D, 0.1D, 1024.0D); RED_ANT_MOVEMENT_SPEED = b.comment("Base movement speed.") .defineInRange("movementSpeed", 0.30D, 0.0D, 10.0D); RED_ANT_ATTACK_DAMAGE = b.comment("Base attack damage.") .defineInRange("attackDamage", 3.0D, 0.0D, 1024.0D); @@ -310,6 +320,9 @@ public final class AntarchyMobsConfig { "Breeding foods tag: data/antarchy/tags/item/rainbow_ant_breeding_foods.json" ) .define("requiresReagent", true); + RAINBOW_ANT_RIGHT_CLICK_DIMENSION = b + .comment("If false, right-clicking rainbow ants will never teleport players.") + .define("rightClickDimension", true); RAINBOW_ANT_HEALTH = b.comment("Base max health.") .defineInRange("health", 5.0D, 0.1D, 1024.0D); RAINBOW_ANT_MOVEMENT_SPEED = b.comment("Base movement speed.") .defineInRange("movementSpeed", 0.28D, 0.0D, 10.0D); RAINBOW_ANT_ATTACK_DAMAGE = b.comment("Base attack damage.") .defineInRange("attackDamage", 1.0D, 0.0D, 1024.0D); @@ -326,6 +339,9 @@ public final class AntarchyMobsConfig { "Breeding foods tag: data/antarchy/tags/item/termite_breeding_foods.json" ) .define("requiresReagent", false); + TERMITE_RIGHT_CLICK_DIMENSION = b + .comment("If false, right-clicking termites will never teleport players.") + .define("rightClickDimension", true); TERMITE_HEALTH = b.comment("Base max health.") .defineInRange("health", 5.0D, 0.1D, 1024.0D); TERMITE_MOVEMENT_SPEED = b.comment("Base movement speed.") .defineInRange("movementSpeed", 0.28D, 0.0D, 10.0D); TERMITE_ATTACK_DAMAGE = b.comment("Base attack damage.") .defineInRange("attackDamage", 1.0D, 0.0D, 1024.0D); @@ -625,24 +641,28 @@ public final class AntarchyMobsConfig { static boolean antsStealFromChests() { return ANTS_STEAL_FROM_CHESTS.get(); } static boolean brownAntRequiresReagent() { return BROWN_ANT_REQUIRES_REAGENT.get(); } + static boolean brownAntRightClickDimension() { return BROWN_ANT_RIGHT_CLICK_DIMENSION.get(); } static double brownAntHealth() { return BROWN_ANT_HEALTH.get(); } static double brownAntMovementSpeed() { return BROWN_ANT_MOVEMENT_SPEED.get(); } static double brownAntAttackDamage() { return BROWN_ANT_ATTACK_DAMAGE.get(); } static String brownAntDestinationDimension() { return BROWN_ANT_DESTINATION_DIMENSION.get(); } static boolean redAntRequiresReagent() { return RED_ANT_REQUIRES_REAGENT.get(); } + static boolean redAntRightClickDimension() { return RED_ANT_RIGHT_CLICK_DIMENSION.get(); } static double redAntHealth() { return RED_ANT_HEALTH.get(); } static double redAntMovementSpeed() { return RED_ANT_MOVEMENT_SPEED.get(); } static double redAntAttackDamage() { return RED_ANT_ATTACK_DAMAGE.get(); } static String redAntDestinationDimension() { return RED_ANT_DESTINATION_DIMENSION.get(); } static boolean rainbowAntRequiresReagent() { return RAINBOW_ANT_REQUIRES_REAGENT.get(); } + static boolean rainbowAntRightClickDimension() { return RAINBOW_ANT_RIGHT_CLICK_DIMENSION.get(); } static double rainbowAntHealth() { return RAINBOW_ANT_HEALTH.get(); } static double rainbowAntMovementSpeed() { return RAINBOW_ANT_MOVEMENT_SPEED.get(); } static double rainbowAntAttackDamage() { return RAINBOW_ANT_ATTACK_DAMAGE.get(); } static String rainbowAntNonInfinityFallbackDimension() { return RAINBOW_ANT_NON_INFINITY_FALLBACK_DIMENSION.get(); } static boolean termiteRequiresReagent() { return TERMITE_REQUIRES_REAGENT.get(); } + static boolean termiteRightClickDimension() { return TERMITE_RIGHT_CLICK_DIMENSION.get(); } static double termiteHealth() { return TERMITE_HEALTH.get(); } static double termiteMovementSpeed() { return TERMITE_MOVEMENT_SPEED.get(); } static double termiteAttackDamage() { return TERMITE_ATTACK_DAMAGE.get(); } diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeItems.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeItems.java index 4cb22e0c..de806192 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeItems.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeItems.java @@ -472,7 +472,6 @@ public final class AntarchyForgeItems { .nutrition(2) .saturationMod(0.1F) .build()))); - public static final RegistryObject CARAPACE = ITEMS.registerSimpleItem("carapace", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final RegistryObject STINK_BUG = ITEMS.registerSimpleItem("stink_bug", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final RegistryObject JUMPY_BUG_LEG = ITEMS.registerSimpleItem("jumpy_bug_leg", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final RegistryObject JUMPY_BOOTS = ITEMS.register("jumpy_boots", diff --git a/gradle.properties b/gradle.properties index 9197a9ca..eeeeff6b 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.3 +mod_version=1.0.4 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 c298e18a..7561e056 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 @@ -57,24 +57,28 @@ public final class AntarchyConfigModuleNeoforge { AntarchySettings.setAntsStealFromChests(AntarchyMobsConfig.antsStealFromChests()); AntarchySettings.setBrownAntRequiresReagent(AntarchyMobsConfig.brownAntRequiresReagent()); + AntarchySettings.setBrownAntRightClickDimension(AntarchyMobsConfig.brownAntRightClickDimension()); AntarchySettings.setBrownAntHealth(AntarchyMobsConfig.brownAntHealth()); AntarchySettings.setBrownAntMovementSpeed(AntarchyMobsConfig.brownAntMovementSpeed()); AntarchySettings.setBrownAntAttackDamage(AntarchyMobsConfig.brownAntAttackDamage()); AntarchySettings.setBrownAntDestinationDimension(AntarchyMobsConfig.brownAntDestinationDimension()); AntarchySettings.setRedAntRequiresReagent(AntarchyMobsConfig.redAntRequiresReagent()); + AntarchySettings.setRedAntRightClickDimension(AntarchyMobsConfig.redAntRightClickDimension()); AntarchySettings.setRedAntHealth(AntarchyMobsConfig.redAntHealth()); AntarchySettings.setRedAntMovementSpeed(AntarchyMobsConfig.redAntMovementSpeed()); AntarchySettings.setRedAntAttackDamage(AntarchyMobsConfig.redAntAttackDamage()); AntarchySettings.setRedAntDestinationDimension(AntarchyMobsConfig.redAntDestinationDimension()); AntarchySettings.setRainbowAntRequiresReagent(AntarchyMobsConfig.rainbowAntRequiresReagent()); + AntarchySettings.setRainbowAntRightClickDimension(AntarchyMobsConfig.rainbowAntRightClickDimension()); AntarchySettings.setRainbowAntHealth(AntarchyMobsConfig.rainbowAntHealth()); AntarchySettings.setRainbowAntMovementSpeed(AntarchyMobsConfig.rainbowAntMovementSpeed()); AntarchySettings.setRainbowAntAttackDamage(AntarchyMobsConfig.rainbowAntAttackDamage()); AntarchySettings.setRainbowAntNonInfinityFallbackDimension(AntarchyMobsConfig.rainbowAntNonInfinityFallbackDimension()); AntarchySettings.setTermiteRequiresReagent(AntarchyMobsConfig.termiteRequiresReagent()); + AntarchySettings.setTermiteRightClickDimension(AntarchyMobsConfig.termiteRightClickDimension()); AntarchySettings.setTermiteHealth(AntarchyMobsConfig.termiteHealth()); AntarchySettings.setTermiteMovementSpeed(AntarchyMobsConfig.termiteMovementSpeed()); AntarchySettings.setTermiteAttackDamage(AntarchyMobsConfig.termiteAttackDamage()); 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 f26fd9b6..2858e34e 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 @@ -11,24 +11,28 @@ public final class AntarchyMobsConfig { private static final ModConfigSpec.BooleanValue ANTS_STEAL_FROM_CHESTS; private static final ModConfigSpec.BooleanValue BROWN_ANT_REQUIRES_REAGENT; + private static final ModConfigSpec.BooleanValue BROWN_ANT_RIGHT_CLICK_DIMENSION; private static final ModConfigSpec.DoubleValue BROWN_ANT_HEALTH; private static final ModConfigSpec.DoubleValue BROWN_ANT_MOVEMENT_SPEED; private static final ModConfigSpec.DoubleValue BROWN_ANT_ATTACK_DAMAGE; private static final ModConfigSpec.ConfigValue BROWN_ANT_DESTINATION_DIMENSION; private static final ModConfigSpec.BooleanValue RED_ANT_REQUIRES_REAGENT; + private static final ModConfigSpec.BooleanValue RED_ANT_RIGHT_CLICK_DIMENSION; private static final ModConfigSpec.DoubleValue RED_ANT_HEALTH; private static final ModConfigSpec.DoubleValue RED_ANT_MOVEMENT_SPEED; private static final ModConfigSpec.DoubleValue RED_ANT_ATTACK_DAMAGE; private static final ModConfigSpec.ConfigValue RED_ANT_DESTINATION_DIMENSION; private static final ModConfigSpec.BooleanValue RAINBOW_ANT_REQUIRES_REAGENT; + private static final ModConfigSpec.BooleanValue RAINBOW_ANT_RIGHT_CLICK_DIMENSION; private static final ModConfigSpec.DoubleValue RAINBOW_ANT_HEALTH; private static final ModConfigSpec.DoubleValue RAINBOW_ANT_MOVEMENT_SPEED; private static final ModConfigSpec.DoubleValue RAINBOW_ANT_ATTACK_DAMAGE; private static final ModConfigSpec.ConfigValue RAINBOW_ANT_NON_INFINITY_FALLBACK_DIMENSION; private static final ModConfigSpec.BooleanValue TERMITE_REQUIRES_REAGENT; + private static final ModConfigSpec.BooleanValue TERMITE_RIGHT_CLICK_DIMENSION; private static final ModConfigSpec.DoubleValue TERMITE_HEALTH; private static final ModConfigSpec.DoubleValue TERMITE_MOVEMENT_SPEED; private static final ModConfigSpec.DoubleValue TERMITE_ATTACK_DAMAGE; @@ -278,6 +282,9 @@ public final class AntarchyMobsConfig { "Breeding foods tag: data/antarchy/tags/item/brown_ant_breeding_foods.json" ) .define("requiresReagent", false); + BROWN_ANT_RIGHT_CLICK_DIMENSION = b + .comment("If false, right-clicking brown ants will never teleport players.") + .define("rightClickDimension", true); BROWN_ANT_HEALTH = b.comment("Base max health.") .defineInRange("health", 5.0D, 0.1D, 1024.0D); BROWN_ANT_MOVEMENT_SPEED = b.comment("Base movement speed.") .defineInRange("movementSpeed", 0.28D, 0.0D, 10.0D); BROWN_ANT_ATTACK_DAMAGE = b.comment("Base attack damage.") .defineInRange("attackDamage", 1.0D, 0.0D, 1024.0D); @@ -294,6 +301,9 @@ public final class AntarchyMobsConfig { "Breeding foods tag: data/antarchy/tags/item/red_ant_breeding_foods.json" ) .define("requiresReagent", false); + RED_ANT_RIGHT_CLICK_DIMENSION = b + .comment("If false, right-clicking red ants will never teleport players.") + .define("rightClickDimension", true); RED_ANT_HEALTH = b.comment("Base max health.") .defineInRange("health", 5.0D, 0.1D, 1024.0D); RED_ANT_MOVEMENT_SPEED = b.comment("Base movement speed.") .defineInRange("movementSpeed", 0.30D, 0.0D, 10.0D); RED_ANT_ATTACK_DAMAGE = b.comment("Base attack damage.") .defineInRange("attackDamage", 3.0D, 0.0D, 1024.0D); @@ -310,6 +320,9 @@ public final class AntarchyMobsConfig { "Breeding foods tag: data/antarchy/tags/item/rainbow_ant_breeding_foods.json" ) .define("requiresReagent", true); + RAINBOW_ANT_RIGHT_CLICK_DIMENSION = b + .comment("If false, right-clicking rainbow ants will never teleport players.") + .define("rightClickDimension", true); RAINBOW_ANT_HEALTH = b.comment("Base max health.") .defineInRange("health", 5.0D, 0.1D, 1024.0D); RAINBOW_ANT_MOVEMENT_SPEED = b.comment("Base movement speed.") .defineInRange("movementSpeed", 0.28D, 0.0D, 10.0D); RAINBOW_ANT_ATTACK_DAMAGE = b.comment("Base attack damage.") .defineInRange("attackDamage", 1.0D, 0.0D, 1024.0D); @@ -326,6 +339,9 @@ public final class AntarchyMobsConfig { "Breeding foods tag: data/antarchy/tags/item/termite_breeding_foods.json" ) .define("requiresReagent", false); + TERMITE_RIGHT_CLICK_DIMENSION = b + .comment("If false, right-clicking termites will never teleport players.") + .define("rightClickDimension", true); TERMITE_HEALTH = b.comment("Base max health.") .defineInRange("health", 5.0D, 0.1D, 1024.0D); TERMITE_MOVEMENT_SPEED = b.comment("Base movement speed.") .defineInRange("movementSpeed", 0.28D, 0.0D, 10.0D); TERMITE_ATTACK_DAMAGE = b.comment("Base attack damage.") .defineInRange("attackDamage", 1.0D, 0.0D, 1024.0D); @@ -625,24 +641,28 @@ public final class AntarchyMobsConfig { static boolean antsStealFromChests() { return ANTS_STEAL_FROM_CHESTS.get(); } static boolean brownAntRequiresReagent() { return BROWN_ANT_REQUIRES_REAGENT.get(); } + static boolean brownAntRightClickDimension() { return BROWN_ANT_RIGHT_CLICK_DIMENSION.get(); } static double brownAntHealth() { return BROWN_ANT_HEALTH.get(); } static double brownAntMovementSpeed() { return BROWN_ANT_MOVEMENT_SPEED.get(); } static double brownAntAttackDamage() { return BROWN_ANT_ATTACK_DAMAGE.get(); } static String brownAntDestinationDimension() { return BROWN_ANT_DESTINATION_DIMENSION.get(); } static boolean redAntRequiresReagent() { return RED_ANT_REQUIRES_REAGENT.get(); } + static boolean redAntRightClickDimension() { return RED_ANT_RIGHT_CLICK_DIMENSION.get(); } static double redAntHealth() { return RED_ANT_HEALTH.get(); } static double redAntMovementSpeed() { return RED_ANT_MOVEMENT_SPEED.get(); } static double redAntAttackDamage() { return RED_ANT_ATTACK_DAMAGE.get(); } static String redAntDestinationDimension() { return RED_ANT_DESTINATION_DIMENSION.get(); } static boolean rainbowAntRequiresReagent() { return RAINBOW_ANT_REQUIRES_REAGENT.get(); } + static boolean rainbowAntRightClickDimension() { return RAINBOW_ANT_RIGHT_CLICK_DIMENSION.get(); } static double rainbowAntHealth() { return RAINBOW_ANT_HEALTH.get(); } static double rainbowAntMovementSpeed() { return RAINBOW_ANT_MOVEMENT_SPEED.get(); } static double rainbowAntAttackDamage() { return RAINBOW_ANT_ATTACK_DAMAGE.get(); } static String rainbowAntNonInfinityFallbackDimension() { return RAINBOW_ANT_NON_INFINITY_FALLBACK_DIMENSION.get(); } static boolean termiteRequiresReagent() { return TERMITE_REQUIRES_REAGENT.get(); } + static boolean termiteRightClickDimension() { return TERMITE_RIGHT_CLICK_DIMENSION.get(); } static double termiteHealth() { return TERMITE_HEALTH.get(); } static double termiteMovementSpeed() { return TERMITE_MOVEMENT_SPEED.get(); } static double termiteAttackDamage() { return TERMITE_ATTACK_DAMAGE.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 1933b975..5aaaa82b 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 @@ -9,6 +9,7 @@ import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.item.BloodCrystalKatanaItem; import com.craisinlord.antarchy.content.item.ScorpionWhipTetherSync; import com.craisinlord.antarchy.content.network.BloodCrystalKatanaTrailPayload; +import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageSync; import com.craisinlord.antarchy.content.portal.PermanentPortalType; import com.craisinlord.antarchy.neoforge.registry.*; import com.craisinlord.antarchy.neoforge.network.AntarchyGravityNetworking; @@ -200,6 +201,11 @@ public class AntarchyNeoforge { player, new BloodCrystalKatanaTrailPayload(player.getId(), durationTicks) )); + TigerEyeCamouflageSync.setSendToPlayer(PacketDistributor::sendToPlayer); + TigerEyeCamouflageSync.setSyncSelfAndTracking(player -> PacketDistributor.sendToPlayersTrackingEntityAndSelf( + player, + TigerEyeCamouflageSync.payload(player) + )); com.craisinlord.antarchy.content.gravity.AntarchyGravityApi.setSyncDispatcher(AntarchyGravityNetworking::syncEntity); if (isSupportedInfinityLoaded()) { InfinityCompat.bind(new NeoForgeInfinityCompat()); @@ -242,6 +248,8 @@ public class AntarchyNeoforge { private static void bindCommonObjects() { com.craisinlord.antarchy.content.entity.UpwardFallingBlockEntity.TYPE = AntarchyNeoforgeEntites.UPWARD_FALLING_BLOCK; + AntarchyObjects.setLucidAnchor(() -> AntarchyNeoforgeBlocks.LUCID_ANCHOR.get()); + AntarchyObjects.setLucidAnchorBlockEntity(() -> AntarchyNeoforgeBlocks.LUCID_ANCHOR_BLOCK_ENTITY.get()); PermanentPortalType.bindBlocks( () -> AntarchyNeoforgeBlocks.MOSSY_OURANWOOD_WOOD.get(), () -> AntarchyNeoforgeBlocks.ELYTHIA_PORTAL.get(), @@ -303,8 +311,8 @@ public class AntarchyNeoforge { () -> AntarchyNeoforgeBlocks.TRIFFID_GOO_BLOCK.get(), () -> AntarchyNeoforgeBlocks.PALE_NYXITE.get(), () -> AntarchyNeoforgeBlocks.NYXITE_SPIKE.get(), - () -> AntarchyNeoforgeBlocks.CHITEN_BLOCK.get(), - () -> AntarchyNeoforgeBlocks.CHITEN_SPIKE.get(), + () -> AntarchyNeoforgeBlocks.CHITIN_BLOCK.get(), + () -> AntarchyNeoforgeBlocks.CHITIN_SPIKE.get(), () -> AntarchyNeoforgeBlocks.POTENT_NYXITE.get(), () -> AntarchyNeoforgeBlocks.ANTIMETAL.get(), () -> AntarchyNeoforgeBlocks.POLISHED_ANTIMETAL.get(), @@ -354,6 +362,8 @@ public class AntarchyNeoforge { ); AntarchyObjects.setOctopusBomb(AntarchyNeoforgeEntites.OCTOPUS_BOMB); AntarchyObjects.setTentacle(AntarchyNeoforgeEntites.TENTACLE); + AntarchyObjects.setNightmarePortal(AntarchyNeoforgeEntites.NIGHTMARE_PORTAL); + AntarchyObjects.setNightmareBite(AntarchyNeoforgeEntites.NIGHTMARE_BITE); AntarchyObjects.setKrakensGraspTrident(AntarchyNeoforgeEntites.KRAKENS_GRASP_TRIDENT); AntarchyObjects.setLotus(() -> AntarchyNeoforgeBlocks.LOTUS.get()); AntarchyObjects.setKrakenTentacle(() -> AntarchyNeoforgeItems.KRAKEN_TENTACLE.get()); @@ -361,6 +371,7 @@ public class AntarchyNeoforge { AntarchyObjects.setOuranwoodDeer(AntarchyNeoforgeEntites.OURANWOOD_DEER); AntarchyObjects.setGlimmer(AntarchyNeoforgeEntites.GLIMMER); AntarchyObjects.setSpiritApple(() -> AntarchyNeoforgeItems.SPIRIT_APPLE.get()); + AntarchyObjects.setGlimmeringEffect(() -> AntarchyNeoforgeMisc.GLIMMERING); AntarchyObjects.setElka(AntarchyNeoforgeEntites.ELKA); AntarchyObjects.setPeach(() -> AntarchyNeoforgeItems.PEACH.get()); AntarchyObjects.setCorn(() -> AntarchyNeoforgeItems.CORN.get()); diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyKeyBindings.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyKeyBindings.java index c7cbacec..9434785e 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyKeyBindings.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyKeyBindings.java @@ -44,6 +44,13 @@ public final class AntarchyKeyBindings { InputConstants.KEY_R, CATEGORY ); + public static final KeyMapping TIGERS_EYE_CAMOUFLAGE = new KeyMapping( + "key.antarchy.tigers_eye_camouflage", + KeyConflictContext.IN_GAME, + InputConstants.Type.KEYSYM, + InputConstants.UNKNOWN.getValue(), + CATEGORY + ); private AntarchyKeyBindings() {} @@ -53,9 +60,14 @@ public final class AntarchyKeyBindings { event.register(DORRIE_CHARGE_JUMP); event.register(HERCULES_BEETLE_CHARGE); event.register(HERCULES_BEETLE_FLIGHT_TOGGLE); + event.register(TIGERS_EYE_CAMOUFLAGE); } public static boolean isHerculesBeetleFlightTogglePressed() { return HERCULES_BEETLE_FLIGHT_TOGGLE.isDown(); } + + public static boolean consumeTigerEyeCamouflagePressed() { + return TIGERS_EYE_CAMOUFLAGE.consumeClick(); + } } diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java index 9903ee49..6f5b95c6 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java @@ -3,6 +3,7 @@ package com.craisinlord.antarchy.neoforge.client; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.client.GoopedHudRenderer; import com.craisinlord.antarchy.content.client.HordeHudRenderer; +import com.craisinlord.antarchy.content.client.TigerEyeClientHooks; import com.craisinlord.antarchy.content.client.hud.BloodglassHudRenderer; import com.craisinlord.antarchy.content.client.particle.*; import com.craisinlord.antarchy.content.client.renderer.*; @@ -57,6 +58,7 @@ import net.neoforged.neoforge.client.event.RegisterParticleProvidersEvent; import net.neoforged.neoforge.client.event.RegisterColorHandlersEvent; import net.neoforged.neoforge.client.event.RegisterMenuScreensEvent; import net.neoforged.neoforge.client.event.EntityRenderersEvent; +import net.neoforged.neoforge.client.event.RegisterClientReloadListenersEvent; import net.neoforged.neoforge.client.event.RegisterGuiLayersEvent; import net.neoforged.neoforge.client.gui.VanillaGuiLayers; import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions; @@ -89,6 +91,7 @@ public final class AntarchyNeoForgeClient { public static void registerRenderers(EntityRenderersEvent.RegisterRenderers event) { event.registerBlockEntityRenderer(AntarchyNeoforgeBlocks.DREAM_CAMPFIRE_BLOCK_ENTITY.get(), CampfireRenderer::new); event.registerBlockEntityRenderer(AntarchyNeoforgeBlocks.SEASHELL_BLOCK_ENTITY.get(), SeashellRenderer::new); + event.registerBlockEntityRenderer(AntarchyNeoforgeBlocks.LUCID_ANCHOR_BLOCK_ENTITY.get(), LucidAnchorBlockEntityRenderer::new); event.registerBlockEntityRenderer(AntarchyNeoforgeBlocks.CRITTER_CAGE_BLOCK_ENTITY.get(), CritterCageRenderer::new); event.registerEntityRenderer(AntarchyNeoforgeEntites.EASTER_BUNNY.get(), context -> withParalyzedGeoLayer(new EasterBunnyRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.FLYING_SQUIRREL.get(), context -> withParalyzedGeoLayer(new FlyingSquirrelRenderer(context))); @@ -120,6 +123,8 @@ public final class AntarchyNeoForgeClient { event.registerEntityRenderer(AntarchyNeoforgeEntites.MISSILE_SQUID.get(), context -> withParalyzedGeoLayer(new MissileSquidRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.OCTOPUS_BOMB.get(), context -> withParalyzedGeoLayer(new OctopusBombRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.NIGHTMARE.get(), context -> withParalyzedGeoLayer(new NightmareRenderer(context))); + event.registerEntityRenderer(AntarchyNeoforgeEntites.NIGHTMARE_PORTAL.get(), NightmarePortalRenderer::new); + event.registerEntityRenderer(AntarchyNeoforgeEntites.NIGHTMARE_BITE.get(), NightmareBiteRenderer::new); event.registerEntityRenderer(AntarchyNeoforgeEntites.LUCID.get(), context -> withParalyzedGeoLayer(new LucidRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.BED_BUG.get(), context -> withParalyzedGeoLayer(new BedBugRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.WASP.get(), context -> withParalyzedGeoLayer(new WaspRenderer(context))); @@ -162,7 +167,9 @@ public final class AntarchyNeoForgeClient { (LivingEntityRenderer>) event.getSkin(skin); if (renderer != null) { renderer.addLayer(new ParalyzedStonePlayerLayer(renderer)); + renderer.addLayer(new TigerEyeCamouflagePlayerLayer(renderer)); renderer.addLayer(new GoopedLivingLayer(renderer)); + renderer.addLayer(new GlimmeringLivingLayer(renderer)); renderer.addLayer(new BrutalflyElytraLayer(renderer)); renderer.addLayer(new FallenKingCrownLayer(renderer)); } @@ -200,6 +207,7 @@ public final class AntarchyNeoForgeClient { } ((LivingEntityRenderer) livingRenderer).addLayer(new ParalyzedStoneLivingLayer<>(livingRenderer)); ((LivingEntityRenderer) livingRenderer).addLayer(new GoopedLivingLayer<>(livingRenderer)); + ((LivingEntityRenderer) livingRenderer).addLayer(new GlimmeringLivingLayer<>(livingRenderer)); } private static GeoEntityRenderer withParalyzedGeoLayer(GeoEntityRenderer renderer) { @@ -313,6 +321,10 @@ public final class AntarchyNeoForgeClient { ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "gooped_tint"), (guiGraphics, partialTick) -> GoopedHudRenderer.render(guiGraphics) ); + event.registerAboveAll( + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "glimmering_tint"), + (guiGraphics, partialTick) -> com.craisinlord.antarchy.content.client.GlimmeringHudRenderer.render(guiGraphics) + ); event.registerAboveAll( ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "brutalfly_elytra"), (guiGraphics, partialTick) -> BrutalflyElytraHudRenderer.render(guiGraphics) @@ -540,6 +552,7 @@ public final class AntarchyNeoForgeClient { @SubscribeEvent public static void onClientSetup(FMLClientSetupEvent event) { event.enqueueWork(() -> { + TigerEyeClientHooks.setCamouflageKeyTextSupplier(() -> AntarchyKeyBindings.TIGERS_EYE_CAMOUFLAGE.getTranslatedKeyMessage()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ANTIMETAL_RAIL.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ANTIMETAL_POWERED_RAIL.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ANTIMETAL_DETECTOR_RAIL.get(), RenderType.cutout()); @@ -559,6 +572,7 @@ public final class AntarchyNeoForgeClient { ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ORANGE_MILKWEED.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.PINK_MILKWEED.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.AMBER_LICHEN.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.MUCUS.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.CREEPVINE.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.CAMELLIA.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.SPIDER_LILY.get(), RenderType.cutout()); @@ -574,7 +588,7 @@ public final class AntarchyNeoForgeClient { ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ANTIMETAL_SCAFFOLDING.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.UMBRAL_MOSS_CARPET.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.NYXITE_SPIKE.get(), RenderType.cutout()); - ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.CHITEN_SPIKE.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.CHITIN_SPIKE.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.STAR_CORAL.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.STAR_CORAL_FAN.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.STAR_CORAL_WALL_FAN.get(), RenderType.cutout()); @@ -598,6 +612,7 @@ public final class AntarchyNeoForgeClient { ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.DREAM_CEILING_FIRE.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ANTIWATER_BLOCK.get(), RenderType.translucent()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.LUMEN_BLOCK.get(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.LUCID_ANCHOR.get(), RenderType.translucent()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ELYTHIA_PORTAL.get(), RenderType.translucent()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.THORAXIS_PORTAL.get(), RenderType.translucent()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.TRIFFID_GOO_BLOCK.get(), RenderType.translucent()); @@ -621,6 +636,21 @@ public final class AntarchyNeoForgeClient { }); } + @SubscribeEvent + public static void registerClientReloadListeners(RegisterClientReloadListenersEvent event) { + event.registerReloadListener(new net.minecraft.server.packs.resources.SimplePreparableReloadListener() { + @Override + protected Void prepare(net.minecraft.server.packs.resources.ResourceManager resourceManager, net.minecraft.util.profiling.ProfilerFiller profiler) { + return null; + } + + @Override + protected void apply(Void object, net.minecraft.server.packs.resources.ResourceManager resourceManager, net.minecraft.util.profiling.ProfilerFiller profiler) { + TigerEyeCamouflageClientHandler.clearClientCaches(); + } + }); + } + private static void registerUltimateBowProperties() { ItemProperties.register( AntarchyNeoforgeItems.ULTIMATE_BOW.get(), diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/TigerEyeCamouflageClientHandler.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/TigerEyeCamouflageClientHandler.java new file mode 100644 index 00000000..85f9cde4 --- /dev/null +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/TigerEyeCamouflageClientHandler.java @@ -0,0 +1,36 @@ +package com.craisinlord.antarchy.neoforge.client; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.client.TigerEyeCamouflageClientState; +import com.craisinlord.antarchy.content.client.renderer.TigerEyeCamouflageTextureResolver; +import com.craisinlord.antarchy.content.network.ToggleTigerEyeCamouflagePayload; +import net.minecraft.client.Minecraft; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.client.event.ClientTickEvent; +import net.neoforged.neoforge.network.PacketDistributor; + +@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) +public final class TigerEyeCamouflageClientHandler { + private TigerEyeCamouflageClientHandler() { + } + + @SubscribeEvent + public static void onClientTick(ClientTickEvent.Post event) { + Minecraft minecraft = Minecraft.getInstance(); + if (minecraft.player == null || minecraft.level == null) { + TigerEyeCamouflageClientState.clear(); + return; + } + + while (AntarchyKeyBindings.consumeTigerEyeCamouflagePressed()) { + PacketDistributor.sendToServer(new ToggleTigerEyeCamouflagePayload()); + } + } + + public static void clearClientCaches() { + TigerEyeCamouflageClientState.clear(); + TigerEyeCamouflageTextureResolver.clearCache(); + } +} 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 a0f78608..8b32c559 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 @@ -26,6 +26,8 @@ import com.craisinlord.antarchy.content.item.ultimate.UltimateGearHelper; import com.craisinlord.antarchy.content.movement.DreamSandLowGravityAccess; import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.portal.PermanentPortalManager; +import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageController; +import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageSync; import com.craisinlord.antarchy.neoforge.AntarchyNeoForgeFluidTypes; import com.craisinlord.antarchy.neoforge.entity.multipart.MultipartPartEntity; import com.craisinlord.antarchy.neoforge.network.AntarchyGravityNetworking; @@ -133,6 +135,12 @@ public final class AntarchyNeoForgeEvents { NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleDreadBedSleep); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleStartTracking); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleDreamSandLogout); + NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleTigerEyeLogout); + NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleTigerEyeDeath); + NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleTigerEyeRespawn); + NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleTigerEyeLogin); + NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleTigerEyeDimensionChange); + NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::tickTigerEyeCamouflage); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::registerReloadListeners); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::onVillagerTrades); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::onWandererTrades); @@ -272,6 +280,48 @@ public final class AntarchyNeoForgeEvents { } AntarchyGravityNetworking.syncEntity(event.getTarget()); + if (event.getTarget() instanceof ServerPlayer trackedPlayer && event.getEntity() instanceof ServerPlayer trackingPlayer) { + TigerEyeCamouflageSync.syncTo(trackingPlayer, trackedPlayer); + } + } + + static void handleTigerEyeLogout(PlayerEvent.PlayerLoggedOutEvent event) { + if (event.getEntity() instanceof ServerPlayer player) { + TigerEyeCamouflageController.deactivate(player, false); + } + } + + static void handleTigerEyeDeath(LivingDeathEvent event) { + if (event.getEntity() instanceof ServerPlayer player) { + TigerEyeCamouflageController.deactivate(player, false); + TigerEyeCamouflageSync.sync(player); + } + } + + static void handleTigerEyeRespawn(PlayerEvent.PlayerRespawnEvent event) { + if (event.getEntity() instanceof ServerPlayer player) { + TigerEyeCamouflageController.deactivate(player, false); + TigerEyeCamouflageSync.sync(player); + } + } + + static void handleTigerEyeLogin(PlayerEvent.PlayerLoggedInEvent event) { + if (event.getEntity() instanceof ServerPlayer player) { + TigerEyeCamouflageSync.sync(player); + } + } + + static void handleTigerEyeDimensionChange(PlayerEvent.PlayerChangedDimensionEvent event) { + if (event.getEntity() instanceof ServerPlayer player) { + TigerEyeCamouflageController.deactivate(player, false); + TigerEyeCamouflageSync.sync(player); + } + } + + static void tickTigerEyeCamouflage(PlayerTickEvent.Post event) { + if (event.getEntity() instanceof ServerPlayer player && TigerEyeCamouflageController.validateOrDeactivate(player)) { + TigerEyeCamouflageSync.sync(player); + } } private static final String DREAD_BED_BUG_NEXT_SPAWN_KEY = Antarchy.MODID + ":dread_bed_bug_next_spawn"; @@ -430,8 +480,7 @@ public final class AntarchyNeoForgeEvents { for (int y = minY; y <= maxY; y++) { for (int z = minZ; z <= maxZ; z++) { net.minecraft.core.BlockPos crystalPos = new net.minecraft.core.BlockPos(x, y + 1, z); - if (entity.level().getBlockState(crystalPos).is(AntarchyNeoforgeBlocks.ANTIMETAL.get()) - || entity.level().getBlockState(crystalPos).is(AntarchyNeoforgeBlocks.POLISHED_ANTIMETAL.get())) { + if (entity.level().getBlockState(crystalPos).is(com.craisinlord.antarchy.content.AntarchyTags.Blocks.ANTIMETAL_INVERSION_BLOCKS)) { return true; } } diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java index 80b94d74..8478c652 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java @@ -8,8 +8,10 @@ import com.craisinlord.antarchy.content.block.entity.AntNestBlockEntity; import com.craisinlord.antarchy.content.block.entity.CritterCageBlockEntity; import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; +import com.craisinlord.antarchy.content.block.entity.LucidAnchorBlockEntity; import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity; import com.craisinlord.antarchy.content.block.entity.SeashellBlockEntity; +import com.craisinlord.antarchy.content.block.entity.UpperBlockEntity; import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; import com.craisinlord.antarchy.content.fluid.BileLiquidBlock; import com.craisinlord.antarchy.content.fluid.LumenLiquidBlock; @@ -97,6 +99,8 @@ public final class AntarchyNeoforgeBlocks { () -> new FlowerPotBlock(LOTUS.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.POTTED_DANDELION))); public static final DeferredBlock SEASHELL = BLOCKS.register("seashell", () -> new SeashellBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.TURTLE_EGG).noOcclusion())); + public static final DeferredBlock LUCID_ANCHOR = BLOCKS.register("lucid_anchor", + () -> new LucidAnchorBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BEACON).strength(3.0F))); public static final DeferredBlock CRITTER_CAGE_BLOCK = BLOCKS.register("critter_cage_block", () -> new CritterCageBlock(BlockBehaviour.Properties.of().strength(5.0F, 6.0F).sound(net.minecraft.world.level.block.SoundType.METAL).noOcclusion())); public static final DeferredBlock OURANWOOD_SIGN = BLOCKS.register("ouranwood_sign", @@ -191,6 +195,8 @@ public final class AntarchyNeoforgeBlocks { () -> new SlabBlock(nyxiteProperties())); public static final DeferredBlock NYXITE_BRICK_WALL = BLOCKS.register("nyxite_brick_wall", () -> new WallBlock(nyxiteProperties())); + public static final DeferredBlock NYXITE_PILLAR = BLOCKS.register("nyxite_pillar", + () -> new RotatedPillarBlock(nyxiteProperties())); public static final DeferredBlock SHELLSTONE = BLOCKS.register("shellstone", () -> new Block(AntarchyObjects.shellstoneProperties())); public static final DeferredBlock POLISHED_SHELLSTONE = BLOCKS.register("polished_shellstone", @@ -227,6 +233,8 @@ public final class AntarchyNeoforgeBlocks { () -> new SlabBlock(AntarchyObjects.shellstoneProperties())); public static final DeferredBlock SHELLSTONE_BRICK_WALL = BLOCKS.register("shellstone_brick_wall", () -> new WallBlock(AntarchyObjects.shellstoneProperties())); + public static final DeferredBlock SHELLSTONE_PILLAR = BLOCKS.register("shellstone_pillar", + () -> new RotatedPillarBlock(AntarchyObjects.shellstoneProperties())); public static final DeferredBlock TRIFFID_GOO_BLOCK = BLOCKS.register("triffid_goo_block", () -> new com.craisinlord.antarchy.content.block.TriffidGooBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SLIME_BLOCK).noOcclusion().isViewBlocking((s, l, p) -> false).isSuffocating((s, l, p) -> false))); public static final DeferredBlock CLOUD_BLOCK = BLOCKS.register("cloud_block", @@ -244,8 +252,8 @@ public final class AntarchyNeoforgeBlocks { () -> new Block(nyxiteProperties())); public static final DeferredBlock NYXITE_SPIKE = BLOCKS.register("nyxite_spike", () -> new NyxiteSpikeBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POINTED_DRIPSTONE))); - public static final DeferredBlock CHITEN_SPIKE = BLOCKS.register("chiten_spike", - () -> new ChitenSpikeBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POINTED_DRIPSTONE))); + public static final DeferredBlock CHITIN_SPIKE = BLOCKS.register("chitin_spike", + () -> new ChitinSpikeBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POINTED_DRIPSTONE))); public static final DeferredBlock POTENT_NYXITE = BLOCKS.register("potent_nyxite", () -> new PotentNyxiteBlock( AntarchyNeoforgeItems::potentNyxiteBlockEntityType, @@ -289,11 +297,13 @@ public final class AntarchyNeoforgeBlocks { () -> new SlabBlock(broodstoneProperties())); public static final DeferredBlock BROODSTONE_BRICK_WALL = BLOCKS.register("broodstone_brick_wall", () -> new WallBlock(broodstoneProperties())); + public static final DeferredBlock BROODSTONE_PILLAR = BLOCKS.register("broodstone_pillar", + () -> new RotatedPillarBlock(broodstoneProperties())); public static final DeferredBlock BROODSTONE_URANIUM_ORE = BLOCKS.register("broodstone_uranium_ore", () -> createOre(Blocks.DEEPSLATE_EMERALD_ORE, 4, 8, MapColor.COLOR_YELLOW)); public static final DeferredBlock BROODSTONE_TITANIUM_ORE = BLOCKS.register("broodstone_titanium_ore", () -> createOre(Blocks.DEEPSLATE_DIAMOND_ORE, 4, 8, MapColor.COLOR_LIGHT_BLUE)); - public static final DeferredBlock CHITEN_BLOCK = BLOCKS.register("chiten_block", + public static final DeferredBlock CHITIN_BLOCK = BLOCKS.register("chitin_block", () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BONE_BLOCK).requiresCorrectToolForDrops())); public static final DeferredBlock UMBRAL_MOSS_BLOCK = BLOCKS.register("umbral_moss_block", () -> new UmbralMossBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_BLOCK))); @@ -408,6 +418,8 @@ public final class AntarchyNeoforgeBlocks { () -> new BluestoneComparatorBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.COMPARATOR).mapColor(MapColor.COLOR_BLUE).noCollission(), AntarchyNeoforgeBlocks::bluestoneComparatorBlockEntityType)); public static final DeferredBlock BLUESTONE_TORCH = BLOCKS.register("bluestone_torch", () -> new BluestoneTorchBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.REDSTONE_TORCH).mapColor(MapColor.COLOR_BLUE).lightLevel(state -> state.getValue(BluestoneTorchBlock.LIT) ? 7 : 0).noCollission().instabreak())); + public static final DeferredBlock BLUESTONE_LAMP = BLOCKS.register("bluestone_lamp", + () -> new BluestoneLampBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.REDSTONE_LAMP).mapColor(MapColor.COLOR_BLUE))); public static final DeferredBlock URANIUM_BLOCK = BLOCKS.register("uranium_block", () -> createStorageBlock(Blocks.EMERALD_BLOCK, MapColor.COLOR_YELLOW)); public static final DeferredBlock TITANIUM_BLOCK = BLOCKS.register("titanium_block", @@ -452,10 +464,20 @@ public final class AntarchyNeoforgeBlocks { () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BASALT))); public static final DeferredBlock POLISHED_ANTIMETAL = BLOCKS.register("polished_antimetal", () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POLISHED_BASALT))); + public static final DeferredBlock ANTIMETAL_STAIRS = BLOCKS.register("antimetal_stairs", + () -> new StairBlock(ANTIMETAL.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.BASALT))); + public static final DeferredBlock ANTIMETAL_SLAB = BLOCKS.register("antimetal_slab", + () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BASALT))); + public static final DeferredBlock POLISHED_ANTIMETAL_STAIRS = BLOCKS.register("polished_antimetal_stairs", + () -> new StairBlock(POLISHED_ANTIMETAL.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.POLISHED_BASALT))); + public static final DeferredBlock POLISHED_ANTIMETAL_SLAB = BLOCKS.register("polished_antimetal_slab", + () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POLISHED_BASALT))); public static final DeferredBlock ANTIMETAL_SCAFFOLDING = BLOCKS.register("antimetal_scaffolding", () -> new com.craisinlord.antarchy.content.block.AntimetalScaffoldingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SCAFFOLDING))); public static final DeferredBlock ANTIMETAL_RAIL = BLOCKS.register("antimetal_rail", () -> new com.craisinlord.antarchy.content.block.AntimetalRailBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.RAIL))); + public static final DeferredBlock UPPER = BLOCKS.register("upper", + () -> new UpperBlock(AntarchyNeoforgeBlocks::upperBlockEntityType, BlockBehaviour.Properties.ofFullCopy(Blocks.HOPPER))); public static final DeferredBlock ANTIMETAL_POWERED_RAIL = BLOCKS.register("antimetal_powered_rail", () -> new com.craisinlord.antarchy.content.block.AntimetalPoweredRailBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POWERED_RAIL))); public static final DeferredBlock ANTIMETAL_DETECTOR_RAIL = BLOCKS.register("antimetal_detector_rail", @@ -501,6 +523,12 @@ public final class AntarchyNeoforgeBlocks { () -> new AmethystClusterBlock(7.0F, 3.0F, BlockBehaviour.Properties.ofFullCopy(Blocks.AMETHYST_CLUSTER))); public static final DeferredBlock DREAM_SAND = BLOCKS.register("dream_sand", () -> new DreamSandBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SAND))); + public static final DeferredBlock ANTIGRAVEL = BLOCKS.register("antigravel", + () -> new AntigravelBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.GRAVEL))); + public static final DeferredBlock LOAM = BLOCKS.register("loam", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.MUD))); + public static final DeferredBlock MUCUS = BLOCKS.register("mucus", + () -> new MucusBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.GLOW_LICHEN).friction(0.98F).lightLevel(state -> 0).sound(SoundType.SLIME_BLOCK))); public static final DeferredBlock DREAM_SANDSTONE = BLOCKS.register("dream_sandstone", () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.SANDSTONE))); public static final DeferredBlock CHISELED_DREAM_SANDSTONE = BLOCKS.register("chiseled_dream_sandstone", @@ -572,6 +600,11 @@ public final class AntarchyNeoforgeBlocks { SeashellBlockEntity::new, SEASHELL.get() ).build(null)); + public static final DeferredHolder, BlockEntityType> LUCID_ANCHOR_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("lucid_anchor", + () -> BlockEntityType.Builder.of( + LucidAnchorBlockEntity::new, + LUCID_ANCHOR.get() + ).build(null)); public static final DeferredHolder, BlockEntityType> CRITTER_CAGE_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("critter_cage_block", () -> BlockEntityType.Builder.of( CritterCageBlockEntity::new, @@ -582,6 +615,11 @@ public final class AntarchyNeoforgeBlocks { (pos, state) -> new com.craisinlord.antarchy.content.block.entity.BluestoneComparatorBlockEntity(pos, state, AntarchyNeoforgeBlocks::bluestoneComparatorBlockEntityType), BLUESTONE_COMPARATOR.get() ).build(null)); + public static final DeferredHolder, BlockEntityType> UPPER_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("upper", + () -> BlockEntityType.Builder.of( + (pos, state) -> new UpperBlockEntity(pos, state, AntarchyNeoforgeBlocks::upperBlockEntityType), + UPPER.get() + ).build(null)); private AntarchyNeoforgeBlocks() {} @@ -645,6 +683,10 @@ public final class AntarchyNeoforgeBlocks { return BLUESTONE_COMPARATOR_BLOCK_ENTITY.get(); } + private static BlockEntityType upperBlockEntityType() { + return UPPER_BLOCK_ENTITY.get(); + } + private static final class SimpleHorizontalFacingBlock extends HorizontalDirectionalBlock { private static final MapCodec CODEC = simpleCodec(SimpleHorizontalFacingBlock::new); diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java index 0743d3d0..a5ed3cfa 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java @@ -1,6 +1,5 @@ package com.craisinlord.antarchy.neoforge.registry; -import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.creative.CreativeTabContents; import net.minecraft.core.registries.Registries; import net.minecraft.world.item.*; @@ -10,9 +9,11 @@ import net.neoforged.neoforge.registries.DeferredHolder; import net.neoforged.neoforge.registries.DeferredRegister; public class AntarchyNeoforgeCreativeModeTabs { + private static final String MODID = "antarchy"; + private AntarchyNeoforgeCreativeModeTabs() {} - private static final DeferredRegister CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, Antarchy.MODID); + private static final DeferredRegister CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, MODID); public static void register(IEventBus modEventBus) { CREATIVE_MODE_TABS.register(modEventBus); diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java index 612f9cce..3d5cc50a 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java @@ -57,6 +57,8 @@ import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity; import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; +import com.craisinlord.antarchy.content.entity.nightmare.NightmarePortalEntity; +import com.craisinlord.antarchy.content.entity.nightmare.NightmareBiteEntity; import com.craisinlord.antarchy.content.entity.CheepEntity; import com.craisinlord.antarchy.content.entity.CreepingHorrorEntity; import com.craisinlord.antarchy.content.entity.DorrieEntity; @@ -266,6 +268,18 @@ public final class AntarchyNeoforgeEntites { .sized(3.2F, 3.8F) .clientTrackingRange(12) .build("nightmare")); + public static final DeferredHolder, EntityType> NIGHTMARE_PORTAL = ENTITY_TYPES.register("nightmare_portal", + () -> EntityType.Builder.of(NightmarePortalEntity::new, MobCategory.MISC) + .sized(2.5F, 3.0F) + .clientTrackingRange(10) + .updateInterval(1) + .build("nightmare_portal")); + public static final DeferredHolder, EntityType> NIGHTMARE_BITE = ENTITY_TYPES.register("nightmare_bite", + () -> EntityType.Builder.of(NightmareBiteEntity::new, MobCategory.MISC) + .sized(2.5F, 2.0F) + .clientTrackingRange(10) + .updateInterval(1) + .build("nightmare_bite")); public static final DeferredHolder, EntityType> LUCID = ENTITY_TYPES.register("lucid", () -> EntityType.Builder.of(LucidEntity::new, MobCategory.MONSTER) .sized(2.0F, 2.0F) 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 c92f23bb..cae42298 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 @@ -105,6 +105,16 @@ public final class AntarchyNeoforgeItems { 0.0F, 0.0F )); + private static final DeferredHolder TIGERS_EYE_ARMOR_MATERIAL = ARMOR_MATERIALS.register("tigers_eye", + () -> new ArmorMaterial( + createDiamondArmorDefense(), + 18, + SoundEvents.ARMOR_EQUIP_GOLD, + () -> Ingredient.of(BuiltInRegistries.ITEM.getOptional(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "tigers_eye")).orElse(Items.AIR)), + List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "tigers_eye"))), + 2.0F, + 0.0F + )); private static final DeferredHolder MOGGLES_ARMOR_MATERIAL = ARMOR_MATERIALS.register("moggles", () -> new ArmorMaterial( createMogglesArmorDefense(), @@ -189,6 +199,8 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem GIANT_LILY_PAD_ITEM = ITEMS.register("giant_lily_pad", () -> new com.craisinlord.antarchy.content.item.GiantLilyPadItem(AntarchyNeoforgeBlocks.GIANT_LILY_PAD.get(), new Item.Properties())); public static final DeferredItem SEASHELL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SEASHELL); + public static final DeferredItem LUCID_ANCHOR_ITEM = ITEMS.register("lucid_anchor", + () -> new LucidAnchorBlockItem(AntarchyNeoforgeBlocks.LUCID_ANCHOR.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); public static final DeferredItem LOTUS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.LOTUS); public static final DeferredItem OURANWOOD_SIGN_ITEM = ITEMS.register("ouranwood_sign", () -> new net.minecraft.world.item.SignItem(new Item.Properties().stacksTo(16), AntarchyNeoforgeBlocks.OURANWOOD_SIGN.get(), AntarchyNeoforgeBlocks.OURANWOOD_WALL_SIGN.get())); @@ -233,6 +245,7 @@ public final class AntarchyNeoforgeItems { () -> new CeilingPlacementTooltipBlockItem(AntarchyNeoforgeBlocks.BLUESTONE_COMPARATOR.get(), new Item.Properties())); public static final DeferredItem BLUESTONE_TORCH_ITEM = ITEMS.register("bluestone_torch", () -> new CeilingPlacementTooltipBlockItem(AntarchyNeoforgeBlocks.BLUESTONE_TORCH.get(), new Item.Properties())); + public static final DeferredItem BLUESTONE_LAMP_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BLUESTONE_LAMP); public static final DeferredItem URANIUM_BLOCK_ITEM = ITEMS.register("uranium_block", () -> new net.minecraft.world.item.BlockItem(AntarchyNeoforgeBlocks.URANIUM_BLOCK.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); public static final DeferredItem TITANIUM_BLOCK_ITEM = ITEMS.register("titanium_block", @@ -277,6 +290,14 @@ public final class AntarchyNeoforgeItems { () -> new AntimetalBlockItem(AntarchyNeoforgeBlocks.ANTIMETAL.get(), new Item.Properties())); public static final DeferredItem POLISHED_ANTIMETAL_ITEM = ITEMS.register("polished_antimetal", () -> new AntimetalBlockItem(AntarchyNeoforgeBlocks.POLISHED_ANTIMETAL.get(), new Item.Properties())); + public static final DeferredItem ANTIMETAL_STAIRS_ITEM = ITEMS.register("antimetal_stairs", + () -> new AntimetalBlockItem(AntarchyNeoforgeBlocks.ANTIMETAL_STAIRS.get(), new Item.Properties())); + public static final DeferredItem ANTIMETAL_SLAB_ITEM = ITEMS.register("antimetal_slab", + () -> new AntimetalBlockItem(AntarchyNeoforgeBlocks.ANTIMETAL_SLAB.get(), new Item.Properties())); + public static final DeferredItem POLISHED_ANTIMETAL_STAIRS_ITEM = ITEMS.register("polished_antimetal_stairs", + () -> new AntimetalBlockItem(AntarchyNeoforgeBlocks.POLISHED_ANTIMETAL_STAIRS.get(), new Item.Properties())); + public static final DeferredItem POLISHED_ANTIMETAL_SLAB_ITEM = ITEMS.register("polished_antimetal_slab", + () -> new AntimetalBlockItem(AntarchyNeoforgeBlocks.POLISHED_ANTIMETAL_SLAB.get(), new Item.Properties())); public static final DeferredItem ANTIMETAL_SCAFFOLDING_ITEM = ITEMS.register("antimetal_scaffolding", () -> new AntimetalScaffoldingItem(AntarchyNeoforgeBlocks.ANTIMETAL_SCAFFOLDING.get(), new Item.Properties())); public static final DeferredItem ANTIMETAL_RAIL_ITEM = ITEMS.register("antimetal_rail", @@ -287,6 +308,7 @@ public final class AntarchyNeoforgeItems { () -> new CeilingPlacementTooltipBlockItem(AntarchyNeoforgeBlocks.ANTIMETAL_DETECTOR_RAIL.get(), new Item.Properties())); public static final DeferredItem ANTIMETAL_ACTIVATOR_RAIL_ITEM = ITEMS.register("antimetal_activator_rail", () -> new CeilingPlacementTooltipBlockItem(AntarchyNeoforgeBlocks.ANTIMETAL_ACTIVATOR_RAIL.get(), new Item.Properties())); + public static final DeferredItem UPPER_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.UPPER); public static final DeferredItem SMALL_BLOOD_CRYSTAL_BUD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SMALL_BLOOD_CRYSTAL_BUD); public static final DeferredItem MEDIUM_BLOOD_CRYSTAL_BUD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.MEDIUM_BLOOD_CRYSTAL_BUD); public static final DeferredItem LARGE_BLOOD_CRYSTAL_BUD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.LARGE_BLOOD_CRYSTAL_BUD); @@ -295,6 +317,10 @@ public final class AntarchyNeoforgeItems { () -> new net.minecraft.world.item.BlockItem(AntarchyNeoforgeBlocks.BLOOD_CRYSTAL.get(), new Item.Properties())); public static final DeferredItem BLOOD_CRYSTAL_CRYSTAL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BLOOD_CRYSTAL_CRYSTAL); public static final DeferredItem DREAM_SAND_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DREAM_SAND); + public static final DeferredItem ANTIGRAVEL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.ANTIGRAVEL); + public static final DeferredItem LOAM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.LOAM); + public static final DeferredItem MUCUS_ITEM = ITEMS.register("mucus", + () -> new com.craisinlord.antarchy.content.item.MucusBlockItem(AntarchyNeoforgeBlocks.MUCUS.get(), new Item.Properties())); public static final DeferredItem DREAM_SANDSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DREAM_SANDSTONE); public static final DeferredItem CHISELED_DREAM_SANDSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CHISELED_DREAM_SANDSTONE); public static final DeferredItem CUT_DREAM_SANDSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CUT_DREAM_SANDSTONE); @@ -336,6 +362,7 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem BROODSTONE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BROODSTONE_BRICK_STAIRS); public static final DeferredItem BROODSTONE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BROODSTONE_BRICK_SLAB); public static final DeferredItem BROODSTONE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BROODSTONE_BRICK_WALL); + public static final DeferredItem BROODSTONE_PILLAR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BROODSTONE_PILLAR); public static final DeferredItem MYRMITE_COAL_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.MYRMITE_COAL_ORE); public static final DeferredItem BROODSTONE_URANIUM_ORE_ITEM = ITEMS.register("broodstone_uranium_ore", () -> new net.minecraft.world.item.BlockItem(AntarchyNeoforgeBlocks.BROODSTONE_URANIUM_ORE.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); @@ -344,7 +371,7 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem POLISHED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.POLISHED_NYXITE); public static final DeferredItem CHISELED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CHISELED_NYXITE); public static final DeferredItem NYXITE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE_BRICKS); - public static final DeferredItem CHITEN_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CHITEN_BLOCK); + public static final DeferredItem CHITIN_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CHITIN_BLOCK); public static final DeferredItem NYXITE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE_STAIRS); public static final DeferredItem NYXITE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE_SLAB); public static final DeferredItem NYXITE_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE_WALL); @@ -357,6 +384,7 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem NYXITE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE_BRICK_STAIRS); public static final DeferredItem NYXITE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE_BRICK_SLAB); public static final DeferredItem NYXITE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE_BRICK_WALL); + public static final DeferredItem NYXITE_PILLAR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE_PILLAR); public static final DeferredItem SHELLSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SHELLSTONE); public static final DeferredItem POLISHED_SHELLSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.POLISHED_SHELLSTONE); public static final DeferredItem SHELLSTONE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SHELLSTONE_BRICKS); @@ -375,11 +403,12 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem SHELLSTONE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SHELLSTONE_BRICK_STAIRS); public static final DeferredItem SHELLSTONE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SHELLSTONE_BRICK_SLAB); public static final DeferredItem SHELLSTONE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SHELLSTONE_BRICK_WALL); + public static final DeferredItem SHELLSTONE_PILLAR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SHELLSTONE_PILLAR); public static final DeferredItem TRIFFID_GOO_BLOCK_ITEM = ITEMS.register("triffid_goo_block", () -> new com.craisinlord.antarchy.content.item.TriffidGooBlockItem(AntarchyNeoforgeBlocks.TRIFFID_GOO_BLOCK.get(), new Item.Properties())); public static final DeferredItem PALE_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PALE_NYXITE); public static final DeferredItem NYXITE_SPIKE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE_SPIKE); - public static final DeferredItem CHITEN_SPIKE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CHITEN_SPIKE); + public static final DeferredItem CHITIN_SPIKE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CHITIN_SPIKE); public static final DeferredItem POTENT_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.POTENT_NYXITE); public static final DeferredItem UMBRAL_MOSS_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.UMBRAL_MOSS_BLOCK); public static final DeferredItem UMBRAL_MOSS_CARPET_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.UMBRAL_MOSS_CARPET); @@ -437,6 +466,15 @@ public final class AntarchyNeoforgeItems { () -> new BloodCrystalArmorItem(BLOOD_CRYSTAL_ARMOR_MATERIAL, ArmorItem.Type.LEGGINGS, new Item.Properties().rarity(Rarity.RARE))); public static final DeferredItem BLOOD_CRYSTAL_BOOTS = ITEMS.register("blood_crystal_boots", () -> new BloodCrystalArmorItem(BLOOD_CRYSTAL_ARMOR_MATERIAL, ArmorItem.Type.BOOTS, new Item.Properties().rarity(Rarity.RARE))); + public static final DeferredItem TIGERS_EYE = ITEMS.registerSimpleItem("tigers_eye", new Item.Properties().rarity(Rarity.UNCOMMON)); + public static final DeferredItem TIGERS_EYE_HELMET = ITEMS.register("tigers_eye_helmet", + () -> new com.craisinlord.antarchy.content.item.TigerEyeArmorItem(TIGERS_EYE_ARMOR_MATERIAL, ArmorItem.Type.HELMET, new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem TIGERS_EYE_CHESTPLATE = ITEMS.register("tigers_eye_chestplate", + () -> new com.craisinlord.antarchy.content.item.TigerEyeArmorItem(TIGERS_EYE_ARMOR_MATERIAL, ArmorItem.Type.CHESTPLATE, new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem TIGERS_EYE_LEGGINGS = ITEMS.register("tigers_eye_leggings", + () -> new com.craisinlord.antarchy.content.item.TigerEyeArmorItem(TIGERS_EYE_ARMOR_MATERIAL, ArmorItem.Type.LEGGINGS, new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem TIGERS_EYE_BOOTS = ITEMS.register("tigers_eye_boots", + () -> new com.craisinlord.antarchy.content.item.TigerEyeArmorItem(TIGERS_EYE_ARMOR_MATERIAL, ArmorItem.Type.BOOTS, new Item.Properties().rarity(Rarity.UNCOMMON))); public static final DeferredItem BLOOD_CRYSTAL_KATANA = ITEMS.register("blood_crystal_katana", () -> new BloodCrystalKatanaItem( BLOOD_CRYSTAL_KATANA_TIER, @@ -451,14 +489,13 @@ public final class AntarchyNeoforgeItems { () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); public static final DeferredItem QUEEN_SCALE = ITEMS.register("queen_scale", () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); - public static final DeferredItem CHITEN = ITEMS.registerSimpleItem("chiten", new Item.Properties().rarity(Rarity.UNCOMMON)); + public static final DeferredItem CHITIN = ITEMS.registerSimpleItem("chitin", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final DeferredItem JERRY_NUCLEUS = ITEMS.register("jerry_nucleus", () -> new com.craisinlord.antarchy.content.item.JerryNucleusItem(new Item.Properties().rarity(Rarity.UNCOMMON) .food(new FoodProperties.Builder() .nutrition(2) .saturationModifier(0.1F) .build()))); - public static final DeferredItem CARAPACE = ITEMS.registerSimpleItem("carapace", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final DeferredItem STINK_BUG = ITEMS.registerSimpleItem("stink_bug", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final DeferredItem JUMPY_BUG_LEG = ITEMS.registerSimpleItem("jumpy_bug_leg", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final DeferredItem JUMPY_BOOTS = ITEMS.register("jumpy_boots", @@ -727,6 +764,14 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem KRAKEN_TENTACLE = ITEMS.registerSimpleItem("kraken_tentacle", new Item.Properties().rarity(Rarity.RARE)); + public static final DeferredItem KRAKEN_KALAMARI = ITEMS.register("kraken_kalamari", + () -> new Item(new Item.Properties() + .rarity(Rarity.EPIC) + .food(new FoodProperties.Builder() + .nutrition(20) + .saturationModifier(1.2F) + .alwaysEdible() + .build()))); public static final DeferredItem KRAKENS_GRASP = ITEMS.register("krakens_grasp", () -> new KrakensGraspItem( @@ -748,6 +793,7 @@ public final class AntarchyNeoforgeItems { .food(new FoodProperties.Builder() .nutrition(4) .saturationModifier(0.3F) + .alwaysEdible() .build()))); public static final DeferredItem GLIMMER_BOTTLE = ITEMS.register("glimmer_bottle", com.craisinlord.antarchy.content.item.GlimmerBottleItem::new); @@ -924,6 +970,16 @@ public final class AntarchyNeoforgeItems { return defense; } + private static EnumMap createDiamondArmorDefense() { + EnumMap defense = new EnumMap<>(ArmorItem.Type.class); + defense.put(ArmorItem.Type.BOOTS, 3); + defense.put(ArmorItem.Type.LEGGINGS, 6); + defense.put(ArmorItem.Type.CHESTPLATE, 8); + defense.put(ArmorItem.Type.HELMET, 3); + defense.put(ArmorItem.Type.BODY, 11); + return defense; + } + private static EnumMap createMogglesArmorDefense() { EnumMap defense = new EnumMap<>(ArmorItem.Type.class); defense.put(ArmorItem.Type.BOOTS, 0); 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 77cd39fa..3e399d2a 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 @@ -21,8 +21,8 @@ import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynCreepvineFeature import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynEggPatchFeature; import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynWallAmberMossFeature; import com.craisinlord.antarchy.content.worldgen.cavaryn.HangingCreeprootsFeature; -import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeConfiguration; -import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitinSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitinSpikeFeature; import com.craisinlord.antarchy.content.worldgen.cavaryn.MoltingVinesFeature; import com.craisinlord.antarchy.content.worldgen.ocean.SeashellFeature; import com.craisinlord.antarchy.content.worldgen.elythia.*; @@ -128,6 +128,8 @@ public final class AntarchyNeoforgeMisc { public static final DeferredHolder STINKY = MOB_EFFECTS.register("stinky", StinkyMobEffect::new); public static final DeferredHolder GOOPED = MOB_EFFECTS.register("gooped", GoopedMobEffect::new); public static final DeferredHolder BLOODGLASS_WARD = MOB_EFFECTS.register("bloodglass_ward", com.craisinlord.antarchy.content.effect.BloodglassWardEffect::new); + + public static final DeferredHolder GLIMMERING = MOB_EFFECTS.register("glimmering", com.craisinlord.antarchy.content.effect.GlimmeringMobEffect::new); public static final DeferredHolder SHRINKING_EFFECT = MOB_EFFECTS.register("shrinking", ShrinkMobEffect::new); public static final DeferredHolder GROWTH_EFFECT = MOB_EFFECTS.register("growth", GrowthMobEffect::new); @@ -300,8 +302,8 @@ public final class AntarchyNeoforgeMisc { () -> new ThoraxisSpikeFeature(ThoraxisSpikeConfiguration.CODEC)); public static final DeferredHolder, NyxiteSpikeFeature> NYXITE_SPIKES = FEATURES.register("nyxite_spikes", () -> new NyxiteSpikeFeature(NyxiteSpikeConfiguration.CODEC)); - public static final DeferredHolder, ChitenSpikeFeature> CAVARYN_CHITEN_SPIKES = FEATURES.register("cavaryn_chiten_spikes", - () -> new ChitenSpikeFeature(ChitenSpikeConfiguration.CODEC)); + public static final DeferredHolder, ChitinSpikeFeature> CAVARYN_CHITIN_SPIKES = FEATURES.register("cavaryn_chitin_spikes", + () -> new ChitinSpikeFeature(ChitinSpikeConfiguration.CODEC)); public static final DeferredHolder, CavarynBileVeinFeature> CAVARYN_BILE_VEINS = FEATURES.register("cavaryn_bile_veins", () -> new CavarynBileVeinFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, CavarynBileCystFeature> CAVARYN_BILE_CYSTS = FEATURES.register("cavaryn_bile_cysts", diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgePayloadHandlers.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgePayloadHandlers.java index 91ce3af7..485e5d7a 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgePayloadHandlers.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgePayloadHandlers.java @@ -1,6 +1,9 @@ package com.craisinlord.antarchy.neoforge.registry; import com.craisinlord.antarchy.content.network.BloodCrystalKatanaTrailPayload; +import com.craisinlord.antarchy.content.network.ToggleTigerEyeCamouflagePayload; +import com.craisinlord.antarchy.content.item.TigerEyeArmorUtil; +import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageController; import com.craisinlord.antarchy.neoforge.network.AntarchyGravityNetworking; import com.craisinlord.antarchy.neoforge.network.BrutalflyElytraNetworking; import com.craisinlord.antarchy.neoforge.network.DorrieJumpNetworking; @@ -31,6 +34,41 @@ public class AntarchyNeoforgePayloadHandlers { com.craisinlord.antarchy.content.client.BloodglassClientState.update(payload.shieldsActive(), payload.shieldsMax()) ) ); + registrar.playToClient( + com.craisinlord.antarchy.content.network.TigerEyeCamouflageStatePayload.TYPE, + com.craisinlord.antarchy.content.network.TigerEyeCamouflageStatePayload.STREAM_CODEC, + (payload, ctx) -> ctx.enqueueWork(() -> + com.craisinlord.antarchy.content.client.TigerEyeCamouflageClientState.update(payload.entityId(), payload.active(), payload.blockStateId()) + ) + ); + registrar.playToServer( + ToggleTigerEyeCamouflagePayload.TYPE, + ToggleTigerEyeCamouflagePayload.STREAM_CODEC, + (payload, ctx) -> ctx.enqueueWork(() -> { + if (!(ctx.player() instanceof net.minecraft.server.level.ServerPlayer player)) { + return; + } + TigerEyeCamouflageController.ToggleResult result = TigerEyeCamouflageController.toggle(player); + if (result != TigerEyeCamouflageController.ToggleResult.NO_CHANGE) { + net.neoforged.neoforge.network.PacketDistributor.sendToPlayersTrackingEntityAndSelf( + player, + com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageSync.payload(player) + ); + } + String messageKey = switch (result) { + case ACTIVATED -> "message.antarchy.tiger_eye_camouflage.activated"; + case DEACTIVATED -> "message.antarchy.tiger_eye_camouflage.disabled"; + case FULL_SET_REQUIRED -> TigerEyeArmorUtil.countEquippedPieces(player) > 0 + ? "message.antarchy.tiger_eye_camouflage.full_set_required" + : null; + case INVALID_BLOCK -> "message.antarchy.tiger_eye_camouflage.invalid_block"; + case NO_CHANGE -> null; + }; + if (messageKey != null) { + player.displayClientMessage(net.minecraft.network.chat.Component.translatable(messageKey), true); + } + }) + ); registrar.playToClient( BloodCrystalKatanaTrailPayload.TYPE, BloodCrystalKatanaTrailPayload.STREAM_CODEC, 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 2ac56120..db1c939d 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 @@ -60,6 +60,7 @@ public final class AntarchyNeoforgeSounds { public static final DeferredHolder THORAXIS_LUCID_POOLS_AMBIENT = registerSoundEvent("thoraxis_lucid_pools_ambient"); public static final DeferredHolder THORAXIS_LUCID_POOLS_ADDITIONS = registerSoundEvent("thoraxis_lucid_pools_additions"); public static final DeferredHolder THORAXIS_LUCID_POOLS_MOOD = registerSoundEvent("thoraxis_lucid_pools_mood"); + public static final DeferredHolder LUCID_LULLABY = registerSoundEvent("lucid_lullaby"); public static final DeferredHolder LUCID_AMBIENT = registerSoundEvent("lucid_ambient"); public static final DeferredHolder LUCID_FLYING = registerSoundEvent("lucid_flying"); public static final DeferredHolder LUCID_ATTACK = registerSoundEvent("lucid_attack"); @@ -137,6 +138,7 @@ public final class AntarchyNeoforgeSounds { public static final DeferredHolder STINK_BUG_FART = registerSoundEvent("stink_bug_fart"); public static final DeferredHolder STINK_BUG_IDLE = registerSoundEvent("stink_bug_idle"); public static final DeferredHolder CAVARYN_HEARTBEAT = registerSoundEvent("cavaryn_heartbeat"); + public static final DeferredHolder VENENATUS = registerSoundEvent("venenatus"); public static final DeferredHolder ROLLY_POLLY_IDLE = registerSoundEvent("rolly_polly_idle"); public static final DeferredHolder ROLLY_POLLY_WHEEL_MODE = registerSoundEvent("rolly_polly_wheel_mode"); public static final DeferredHolder ROLLY_POLLY_NORMAL_MODE = registerSoundEvent("rolly_polly_normal_mode");