diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/infinity/InfinityWarpResult.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/infinity/InfinityWarpResult.java new file mode 100644 index 00000000..524a4696 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/compat/infinity/InfinityWarpResult.java @@ -0,0 +1,10 @@ +package com.craisinlord.antarchy.compat.infinity; + +/** Shared result vocabulary for future asynchronous Infinity dimension integrations. */ +public enum InfinityWarpResult { + REJECTED, + PENDING, + READY, + FAILED_GENERATION, + TIMEOUT +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/config/AntarchyConfigCatalog.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/config/AntarchyConfigCatalog.java new file mode 100644 index 00000000..1efd5ec0 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/config/AntarchyConfigCatalog.java @@ -0,0 +1,118 @@ +package com.craisinlord.antarchy.config; + +import net.minecraft.resources.ResourceKey; + +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** Shared reflection metadata for presenting the Antarchy settings consistently. */ +public final class AntarchyConfigCatalog { + public enum Section { MOBS, TOOLS, MISC } + public enum ValueType { BOOLEAN, INTEGER, DOUBLE, FLOAT, STRING } + + public record Definition(String name, Section section, ValueType valueType, + Class setterType, Method getter, Method setter) {} + + private static final List DEFINITIONS = buildDefinitions(); + + private AntarchyConfigCatalog() {} + + public static List definitions() { + return DEFINITIONS; + } + + public static Map definitionsByName() { + Map result = new LinkedHashMap<>(); + for (Definition definition : DEFINITIONS) { + result.put(definition.name(), definition); + } + return Map.copyOf(result); + } + + private static List buildDefinitions() { + Map getters = Arrays.stream(AntarchySettings.class.getMethods()) + .filter(AntarchyConfigCatalog::isPublicStatic) + .filter(method -> method.getParameterCount() == 0) + .filter(method -> method.getReturnType() != Void.TYPE) + .collect(java.util.stream.Collectors.toMap(Method::getName, method -> method, + (first, ignored) -> first, LinkedHashMap::new)); + + return Arrays.stream(AntarchySettings.class.getMethods()) + .filter(AntarchyConfigCatalog::isPublicStatic) + .filter(method -> method.getName().startsWith("set")) + .filter(method -> method.getParameterCount() == 1) + .sorted(java.util.Comparator.comparing(Method::getName)) + .map(setter -> definitionFor(setter, getters)) + .filter(java.util.Objects::nonNull) + .toList(); + } + + private static Definition definitionFor(Method setter, Map getters) { + String name = decapitalize(setter.getName().substring(3)); + Method getter = getters.get(name); + if (getter == null) return null; + Class setterType = setter.getParameterTypes()[0]; + ValueType valueType = valueTypeFor(setterType, getter.getReturnType()); + return valueType == null ? null : new Definition(name, sectionFor(name), valueType, setterType, getter, setter); + } + + private static ValueType valueTypeFor(Class setterType, Class getterType) { + if (setterType == boolean.class && getterType == boolean.class) return ValueType.BOOLEAN; + if (setterType == int.class && getterType == int.class) return ValueType.INTEGER; + if (setterType == double.class && getterType == double.class) return ValueType.DOUBLE; + if (setterType == float.class && getterType == float.class) return ValueType.FLOAT; + if (setterType == String.class && ResourceKey.class.isAssignableFrom(getterType)) return ValueType.STRING; + return null; + } + + private static boolean isPublicStatic(Method method) { + int modifiers = method.getModifiers(); + return Modifier.isPublic(modifiers) && Modifier.isStatic(modifiers); + } + + private static String decapitalize(String value) { + return value.isEmpty() ? value : Character.toLowerCase(value.charAt(0)) + value.substring(1); + } + + private static Section sectionFor(String name) { + return isMiscSetting(name) ? Section.MISC : isToolSetting(name) ? Section.TOOLS : Section.MOBS; + } + + private static boolean isMiscSetting(String name) { + return name.equals("disableInfinityBookPortalCreation") + || name.equals("rainbowAntsLeadToInfinityDimensions") + || name.equals("permanentPortalsEnabled") + || name.equals("permanentPortalsFlintAndSteelEnabled") + || name.equals("elythiaPortalEnabled") || name.equals("thoraxisPortalEnabled") + || name.equals("cavarynPortalEnabled") || name.equals("hushweedSporeLifetimeSeconds") + || name.equals("elythiaFireflyParticlesEnabled") || name.equals("duplicatorTreeEnabled") + || name.equals("glowVinesUnderLeaves") || name.equals("swingThroughGrassEnabled") + || name.equals("fabricKeybindingConflictFixEnabled") + || name.equals("experimentalSettingsPopupDisabled") || name.equals("unlockAllArchives") + || name.equals("entitySpecificFireOverlayEnabled") || name.equals("dreamSandEnabled") + || name.startsWith("dreamSand") || name.equals("ichorWitherEnabled") + || name.startsWith("diamondMinecart") || name.startsWith("hoverboard"); + } + + private static boolean isToolSetting(String name) { + return name.equals("sizeChangingRaysEnabled") || name.startsWith("sizeRay") + || name.equals("shrinkingPotionDelta") || name.equals("growthPotionDelta") + || name.startsWith("ultimate") || name.startsWith("battleAxe") + || name.startsWith("bigBertha") || name.startsWith("attitudeAdjuster") + || name.startsWith("scorpionWhip") || name.startsWith("bloodCrystal") + || name.startsWith("nightmareHelmet") || name.startsWith("nightmareChestplate") + || name.startsWith("nightmareLeggings") || name.startsWith("nightmareBoots") + || name.startsWith("nightmareArmorDreadAura") || name.startsWith("primordialArmor") + || name.startsWith("nightmareSword") || name.startsWith("basiliskDagger") + || name.startsWith("squidzooka") || name.equals("invertProjectilesFromInvertedPlayers") + || name.startsWith("gravityGun") || name.startsWith("critterCage") + || name.startsWith("minersDream") || name.equals("potentNyxiteInvertedDurationSeconds") + || name.equals("corneaEarNightVisionSeconds") || name.startsWith("american") + || name.startsWith("mogglesVision") || name.equals("ductTapeRepairPercentPerUse") + || name.startsWith("fallenKingCrown"); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/QueenTrailSpawnMarkerBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/QueenTrailSpawnMarkerBlock.java new file mode 100644 index 00000000..f469554a --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/QueenTrailSpawnMarkerBlock.java @@ -0,0 +1,42 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.block.entity.QueenTrailSpawnMarkerBlockEntity; +import java.util.function.Supplier; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +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; + +/** Invisible worldgen marker which activates the Queen at a generated trail terminus. */ +public final class QueenTrailSpawnMarkerBlock extends BaseEntityBlock { + private final Supplier> type; + + public QueenTrailSpawnMarkerBlock(Supplier> type, + BlockBehaviour.Properties properties) { + super(properties); + this.type = type; + } + + @Override + public RenderShape getRenderShape(BlockState state) { return RenderShape.INVISIBLE; } + + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new QueenTrailSpawnMarkerBlockEntity(pos, state, type); + } + + @Override + public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType blockEntityType) { + if (level.isClientSide) return null; + return createTickerHelper(blockEntityType, type.get(), (tickLevel, tickPos, tickState, marker) -> { + if (tickLevel instanceof ServerLevel serverLevel) QueenTrailSpawnMarkerBlockEntity.serverTick(serverLevel, marker); + }); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/UnderVaultBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/UnderVaultBlock.java new file mode 100644 index 00000000..dd8ca675 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/UnderVaultBlock.java @@ -0,0 +1,90 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.block.entity.UnderVaultBlockEntity; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +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.BooleanProperty; +import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.resources.ResourceLocation; + +import java.util.function.Supplier; + +public final class UnderVaultBlock extends BaseEntityBlock { + public static final DirectionProperty FACING = DirectionProperty.create("facing"); + public static final BooleanProperty ACTIVE = BooleanProperty.create("active"); + private final Supplier> blockEntityType; + + public UnderVaultBlock(Supplier> blockEntityType, + BlockBehaviour.Properties properties) { + super(properties); + this.blockEntityType = blockEntityType; + registerDefaultState(stateDefinition.any().setValue(FACING, Direction.DOWN).setValue(ACTIVE, true)); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(FACING, ACTIVE); + } + + @Override + public BlockState getStateForPlacement(net.minecraft.world.item.context.BlockPlaceContext context) { + return context.getClickedFace() == Direction.DOWN + ? defaultBlockState().setValue(FACING, Direction.DOWN) + : null; + } + + @Override + public RenderShape getRenderShape(BlockState state) { + return RenderShape.MODEL; + } + + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new UnderVaultBlockEntity(pos, state, blockEntityType); + } + + @Override + public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, + InteractionHand hand, BlockHitResult hit) { + ItemStack stack = player.getItemInHand(hand); + if (!state.getValue(ACTIVE) || !isKey(stack)) { + return InteractionResult.PASS; + } + if (!level.isClientSide && level instanceof ServerLevel serverLevel + && level.getBlockEntity(pos) instanceof UnderVaultBlockEntity vault) { + if (vault.unlock(serverLevel, pos, player, stack)) { + level.setBlock(pos, state.setValue(ACTIVE, false), Block.UPDATE_ALL); + return InteractionResult.CONSUME; + } + } + return InteractionResult.sidedSuccess(level.isClientSide); + } + + private static boolean isKey(ItemStack stack) { + return stack.is(BuiltInRegistries.ITEM.get(new ResourceLocation(Antarchy.MODID, "undertrial_key"))); + } + + @Override + public BlockEntityTicker getTicker(Level level, BlockState state, + BlockEntityType type) { + return createTickerHelper(type, blockEntityType.get(), UnderVaultBlockEntity::tick); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/UndertrialSpawnerBlock.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/UndertrialSpawnerBlock.java new file mode 100644 index 00000000..21e05957 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/UndertrialSpawnerBlock.java @@ -0,0 +1,58 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.block.entity.UndertrialSpawnerBlockEntity; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.item.context.BlockPlaceContext; +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.BooleanProperty; + +import java.util.function.Supplier; + +public final class UndertrialSpawnerBlock extends BaseEntityBlock { + public static final BooleanProperty ACTIVE = BooleanProperty.create("active"); + public static final BooleanProperty OMINOUS = BooleanProperty.create("ominous"); + private final Supplier> blockEntityType; + + public UndertrialSpawnerBlock(Supplier> blockEntityType, + BlockBehaviour.Properties properties) { + super(properties); + this.blockEntityType = blockEntityType; + registerDefaultState(stateDefinition.any().setValue(ACTIVE, false).setValue(OMINOUS, false)); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(ACTIVE, OMINOUS); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return context.getClickedFace() == Direction.DOWN ? defaultBlockState() : null; + } + + @Override + public RenderShape getRenderShape(BlockState state) { + return RenderShape.MODEL; + } + + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new UndertrialSpawnerBlockEntity(pos, state, blockEntityType); + } + + @Override + public BlockEntityTicker getTicker(Level level, BlockState state, + BlockEntityType type) { + return createTickerHelper(type, blockEntityType.get(), UndertrialSpawnerBlockEntity::tick); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/QueenTrailSpawnMarkerBlockEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/QueenTrailSpawnMarkerBlockEntity.java new file mode 100644 index 00000000..ceab2def --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/QueenTrailSpawnMarkerBlockEntity.java @@ -0,0 +1,83 @@ +package com.craisinlord.antarchy.content.block.entity; + +import com.craisinlord.antarchy.content.entity.royal.QueenEntity; +import java.util.UUID; +import java.util.function.Supplier; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.Difficulty; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; + +public final class QueenTrailSpawnMarkerBlockEntity extends BlockEntity { + private static final double ACTIVATION_DISTANCE_SQUARED = 96.0D * 96.0D; + private long siteId; + private BlockPos spawnPos = BlockPos.ZERO; + private BlockPos homePos = BlockPos.ZERO; + private float yaw; + private boolean configured; + private boolean consumed; + private UUID queenUuid; + + public QueenTrailSpawnMarkerBlockEntity(BlockPos pos, BlockState state, + Supplier> type) { + super(type.get(), pos, state); + } + + public void configure(long siteId, BlockPos spawnPos, BlockPos homePos, float yaw) { + this.siteId = siteId; + this.spawnPos = spawnPos.immutable(); + this.homePos = homePos.immutable(); + this.yaw = yaw; + this.configured = true; + setChanged(); + } + + public long getSiteId() { return siteId; } + public BlockPos getSpawnPos() { return spawnPos; } + public boolean isConfigured() { return configured; } + + public static void serverTick(ServerLevel level, QueenTrailSpawnMarkerBlockEntity marker) { + if (!marker.configured || marker.consumed || level.getDifficulty() == Difficulty.PEACEFUL) return; + if (Math.floorMod(level.getGameTime(), 20L) != Math.floorMod(marker.siteId, 20L)) return; + boolean nearby = level.players().stream().anyMatch(player -> !player.isSpectator() + && player.distanceToSqr(marker.spawnPos.getX() + .5D, marker.spawnPos.getY() + .5D, + marker.spawnPos.getZ() + .5D) <= ACTIVATION_DISTANCE_SQUARED); + if (!nearby) return; + for (int chunkX = (marker.spawnPos.getX() - 16) >> 4; chunkX <= (marker.spawnPos.getX() + 16) >> 4; chunkX++) + for (int chunkZ = (marker.spawnPos.getZ() - 16) >> 4; chunkZ <= (marker.spawnPos.getZ() + 16) >> 4; chunkZ++) + level.getChunk(chunkX, chunkZ); + QueenEntity queen = QueenEntity.spawnFromUndersideTrail(level, marker.spawnPos, marker.homePos, marker.siteId, marker.yaw); + if (queen != null) { + marker.consumed = true; + marker.queenUuid = queen.getUUID(); + marker.setChanged(); + } + } + + @Override + public void load(CompoundTag tag) { + super.load(tag); + siteId = tag.getLong("site_id"); + spawnPos = BlockPos.of(tag.getLong("spawn_pos")); + homePos = BlockPos.of(tag.getLong("home_pos")); + yaw = tag.getFloat("yaw"); + configured = tag.getBoolean("configured"); + consumed = tag.getBoolean("consumed"); + queenUuid = tag.hasUUID("queen_uuid") ? tag.getUUID("queen_uuid") : null; + } + + @Override + protected void saveAdditional(CompoundTag tag) { + super.saveAdditional(tag); + tag.putLong("site_id", siteId); + tag.putLong("spawn_pos", spawnPos.asLong()); + tag.putLong("home_pos", homePos.asLong()); + tag.putFloat("yaw", yaw); + tag.putBoolean("configured", configured); + tag.putBoolean("consumed", consumed); + if (queenUuid != null) tag.putUUID("queen_uuid", queenUuid); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/UnderVaultBlockEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/UnderVaultBlockEntity.java new file mode 100644 index 00000000..2bc2a91c --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/UnderVaultBlockEntity.java @@ -0,0 +1,83 @@ +package com.craisinlord.antarchy.content.block.entity; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.core.BlockPos; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.particles.SimpleParticleType; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; +import net.minecraft.world.level.storage.loot.LootParams; +import net.minecraft.world.level.storage.loot.LootTable; +import net.minecraft.world.phys.Vec3; +import net.minecraft.core.Direction; +import net.minecraft.core.dispenser.DefaultDispenseItemBehavior; + +import java.util.function.Supplier; + +public final class UnderVaultBlockEntity extends BlockEntity { + private boolean unlocked; + + public UnderVaultBlockEntity(BlockPos pos, net.minecraft.world.level.block.state.BlockState state, + Supplier> type) { + super(type.get(), pos, state); + } + + public static void tick(Level level, BlockPos pos, net.minecraft.world.level.block.state.BlockState state, + UnderVaultBlockEntity blockEntity) { + if (level.isClientSide && state.getValue(com.craisinlord.antarchy.content.block.UnderVaultBlock.ACTIVE) + && level.random.nextInt(4) == 0) { + Player player = level.getNearestPlayer(pos.getX() + 0.5D, pos.getY() + 0.5D, pos.getZ() + 0.5D, 8.0D, false); + if (player != null) { + Vec3 start = Vec3.atCenterOf(pos); + Vec3 end = player.position().add(0.0D, player.getBbHeight() * 0.5D, 0.0D); + Vec3 point = start.lerp(end, 0.15D + level.random.nextDouble() * 0.7D); + level.addParticle(particle("undervault_connection"), point.x, point.y, point.z, 0.0D, 0.0D, 0.0D); + } + } + } + + private static SimpleParticleType particle(String id) { + return (SimpleParticleType) BuiltInRegistries.PARTICLE_TYPE.get(new ResourceLocation(Antarchy.MODID, id)); + } + + public boolean unlock(ServerLevel level, BlockPos pos, Player player, ItemStack key) { + if (unlocked) { + return false; + } + if (!player.getAbilities().instabuild) { + key.shrink(1); + } + LootTable table = level.getServer().getLootData().getLootTable( + new ResourceLocation(Antarchy.MODID, "chests/undertrial_vault")); + LootParams params = new LootParams.Builder(level).withParameter( + net.minecraft.world.level.storage.loot.parameters.LootContextParams.ORIGIN, + Vec3.atCenterOf(pos)).create(LootContextParamSets.CHEST); + for (ItemStack stack : table.getRandomItems(params)) { + DefaultDispenseItemBehavior.spawnItem(level, stack, 2, Direction.DOWN, + Vec3.atBottomCenterOf(pos).relative(Direction.DOWN, 1.2D)); + } + unlocked = true; + setChanged(); + level.levelEvent(3011, pos, 0); + return true; + } + + @Override + public void load(CompoundTag tag) { + super.load(tag); + unlocked = tag.getBoolean("Unlocked"); + } + + @Override + protected void saveAdditional(CompoundTag tag) { + super.saveAdditional(tag); + tag.putBoolean("Unlocked", unlocked); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/UndertrialSpawnerBlockEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/UndertrialSpawnerBlockEntity.java new file mode 100644 index 00000000..a27372a3 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/block/entity/UndertrialSpawnerBlockEntity.java @@ -0,0 +1,113 @@ +package com.craisinlord.antarchy.content.block.entity; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.block.UndertrialSpawnerBlock; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.particles.SimpleParticleType; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.monster.Zombie; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; +import net.minecraft.world.level.storage.loot.LootParams; +import net.minecraft.world.level.storage.loot.LootTable; +import net.minecraft.world.level.storage.loot.parameters.LootContextParam; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import net.minecraft.core.dispenser.DefaultDispenseItemBehavior; + +import java.util.List; +import java.util.function.Supplier; + +public final class UndertrialSpawnerBlockEntity extends BlockEntity { + private static final String COOLDOWN_TAG = "Cooldown"; + private static final String WAVES_TAG = "Waves"; + private static final int MAX_WAVES = 6; + private int cooldown; + private int waves; + + public UndertrialSpawnerBlockEntity(BlockPos pos, BlockState state, + Supplier> type) { + super(type.get(), pos, state); + } + + public static void tick(Level level, BlockPos pos, BlockState state, UndertrialSpawnerBlockEntity blockEntity) { + if (!(level instanceof ServerLevel serverLevel)) { + if (level.isClientSide && state.getValue(UndertrialSpawnerBlock.ACTIVE) + && level.random.nextInt(2) == 0) { + level.addParticle(particle("undertrial_omen"), pos.getX() + 0.5D + (level.random.nextDouble() - 0.5D) * 0.7D, + pos.getY() + 0.45D + level.random.nextDouble() * 0.35D, + pos.getZ() + 0.5D + (level.random.nextDouble() - 0.5D) * 0.7D, 0.0D, 0.01D, 0.0D); + } + return; + } + if (blockEntity.cooldown > 0) { + blockEntity.cooldown--; + return; + } + if (!state.getValue(UndertrialSpawnerBlock.ACTIVE)) { + return; + } + if (serverLevel.getNearestPlayer(pos.getX() + 0.5D, pos.getY() - 0.5D, pos.getZ() + 0.5D, 16.0D, false) == null) { + return; + } + long livingTrialMobs = serverLevel.getEntitiesOfClass(Mob.class, new AABB(pos).inflate(16.0D), + mob -> mob.getTags().contains("antarchy_undertrial_mob")).size(); + if (livingTrialMobs > 0) { + return; + } + if (blockEntity.waves >= MAX_WAVES) { + blockEntity.ejectReward(serverLevel, pos); + serverLevel.setBlock(pos, state.setValue(UndertrialSpawnerBlock.ACTIVE, false), 3); + return; + } + Zombie zombie = EntityType.ZOMBIE.create(serverLevel); + if (zombie != null) { + zombie.moveTo(pos.getX() + 0.5D, pos.getY() - 1.0D, pos.getZ() + 0.5D, + serverLevel.random.nextFloat() * 360.0F, 0.0F); + zombie.addTag("antarchy_undertrial_mob"); + serverLevel.addFreshEntity(zombie); + blockEntity.waves++; + blockEntity.cooldown = 80; + blockEntity.setChanged(); + } + } + + private static SimpleParticleType particle(String id) { + return (SimpleParticleType) BuiltInRegistries.PARTICLE_TYPE.get(new ResourceLocation(Antarchy.MODID, id)); + } + + private void ejectReward(ServerLevel level, BlockPos pos) { + ResourceLocation id = new ResourceLocation(Antarchy.MODID, "spawners/undertrial"); + LootTable table = level.getServer().getLootData().getLootTable(id); + LootParams params = new LootParams.Builder(level).create(LootContextParamSets.EMPTY); + for (ItemStack stack : table.getRandomItems(params)) { + DefaultDispenseItemBehavior.spawnItem(level, stack, 2, Direction.DOWN, + Vec3.atBottomCenterOf(pos).relative(Direction.DOWN, 1.2D)); + } + level.levelEvent(3014, pos, 0); + } + + @Override + public void load(CompoundTag tag) { + super.load(tag); + cooldown = tag.getInt(COOLDOWN_TAG); + waves = tag.getInt(WAVES_TAG); + } + + @Override + protected void saveAdditional(CompoundTag tag) { + super.saveAdditional(tag); + tag.putInt(COOLDOWN_TAG, cooldown); + tag.putInt(WAVES_TAG, waves); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/UndertrialParticle.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/UndertrialParticle.java new file mode 100644 index 00000000..426d4203 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/particle/UndertrialParticle.java @@ -0,0 +1,67 @@ +package com.craisinlord.antarchy.content.client.particle; + +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.particle.Particle; +import net.minecraft.client.particle.ParticleProvider; +import net.minecraft.client.particle.ParticleRenderType; +import net.minecraft.client.particle.SpriteSet; +import net.minecraft.client.particle.TextureSheetParticle; +import net.minecraft.core.particles.SimpleParticleType; + +/** Lightweight 1.20 equivalent of the Undertrial's detection/omen particles. */ +public final class UndertrialParticle extends TextureSheetParticle { + private final SpriteSet sprites; + private final boolean animated; + + private UndertrialParticle(ClientLevel level, double x, double y, double z, double xd, double yd, double zd, + SpriteSet sprites, boolean animated) { + super(level, x, y, z, xd, yd, zd); + this.sprites = sprites; + this.animated = animated; + this.gravity = 0.0F; + this.friction = 0.96F; + this.hasPhysics = false; + this.quadSize = animated ? 0.16F + this.random.nextFloat() * 0.08F : 0.2F + this.random.nextFloat() * 0.1F; + this.lifetime = animated ? 10 : 24; + this.setAlpha(0.9F); + this.pickSprite(sprites); + } + + @Override + public void tick() { + super.tick(); + if (this.animated) { + this.setSprite(this.sprites.get(this.age, this.lifetime)); + } + this.setAlpha(0.9F * (1.0F - (float) this.age / (float) this.lifetime)); + } + + @Override + public ParticleRenderType getRenderType() { + return ParticleRenderType.PARTICLE_SHEET_TRANSLUCENT; + } + + public static final class DetectionProvider implements ParticleProvider { + private final SpriteSet sprites; + + public DetectionProvider(SpriteSet sprites) { this.sprites = sprites; } + + @Override + public Particle createParticle(SimpleParticleType type, ClientLevel level, double x, double y, double z, + double xd, double yd, double zd) { + return new UndertrialParticle(level, x, y, z, xd, yd, zd, this.sprites, true); + } + } + + public static final class OmenProvider implements ParticleProvider { + private final SpriteSet sprites; + + public OmenProvider(SpriteSet sprites) { this.sprites = sprites; } + + @Override + public Particle createParticle(SimpleParticleType type, ClientLevel level, double x, double y, double z, + double xd, double yd, double zd) { + return new UndertrialParticle(level, x, y, z, xd, yd, zd, this.sprites, false); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/UnderVaultRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/UnderVaultRenderer.java new file mode 100644 index 00000000..a6c15660 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/UnderVaultRenderer.java @@ -0,0 +1,34 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.block.entity.UnderVaultBlockEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.world.item.ItemDisplayContext; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; + +/** Compact 1.20 vault display: a rotating key replaces the vanilla vault core. */ +public final class UnderVaultRenderer implements BlockEntityRenderer { + public UnderVaultRenderer() { + } + + public UnderVaultRenderer(BlockEntityRendererProvider.Context ignored) { + } + + @Override + public void render(UnderVaultBlockEntity blockEntity, float partialTick, PoseStack poseStack, + MultiBufferSource buffer, int packedLight, int packedOverlay) { + poseStack.pushPose(); + poseStack.translate(0.5D, 0.55D, 0.5D); + poseStack.mulPose(com.mojang.math.Axis.YP.rotationDegrees((blockEntity.getLevel().getGameTime() + partialTick) * 2.0F)); + poseStack.scale(0.65F, 0.65F, 0.65F); + Minecraft.getInstance().getItemRenderer().renderStatic(new ItemStack(Items.TRIPWIRE_HOOK), + ItemDisplayContext.FIXED, packedLight, OverlayTexture.NO_OVERLAY, poseStack, buffer, + blockEntity.getLevel(), 0); + poseStack.popPose(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/UndertrialSpawnerRenderer.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/UndertrialSpawnerRenderer.java new file mode 100644 index 00000000..4b710d9d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/UndertrialSpawnerRenderer.java @@ -0,0 +1,38 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.block.entity.UndertrialSpawnerBlockEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; +import net.minecraft.client.renderer.entity.EntityRenderDispatcher; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.Level; + +/** 1.20 visual equivalent for the 1.21 trial-spawner display entity. */ +public final class UndertrialSpawnerRenderer implements BlockEntityRenderer { + private final EntityRenderDispatcher dispatcher; + + public UndertrialSpawnerRenderer(BlockEntityRendererProvider.Context context) { + this.dispatcher = context.getEntityRenderer(); + } + + @Override + public void render(UndertrialSpawnerBlockEntity blockEntity, float partialTick, PoseStack poseStack, + MultiBufferSource buffer, int packedLight, int packedOverlay) { + Level level = blockEntity.getLevel(); + if (level == null) return; + Entity display = EntityType.ZOMBIE.create(level); + if (display == null) return; + display.setPos(blockEntity.getBlockPos().getX() + 0.5D, + blockEntity.getBlockPos().getY() + 0.5D, + blockEntity.getBlockPos().getZ() + 0.5D); + float spin = (level.getGameTime() + partialTick) * 2.0F; + poseStack.pushPose(); + poseStack.translate(0.0D, -0.5D, 0.0D); + dispatcher.render(display, 0.0D, 0.0D, 0.0D, spin, partialTick, + poseStack, buffer, packedLight); + poseStack.popPose(); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/command/QueenLocateCommand.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/command/QueenLocateCommand.java new file mode 100644 index 00000000..f3a05fba --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/command/QueenLocateCommand.java @@ -0,0 +1,76 @@ +package com.craisinlord.antarchy.content.command; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.block.entity.QueenTrailSpawnMarkerBlockEntity; +import com.craisinlord.antarchy.content.worldgen.thoraxis.QueenTrailGrid; +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.context.CommandContext; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.Commands; +import net.minecraft.core.BlockPos; +import net.minecraft.core.registries.Registries; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.ClickEvent; +import net.minecraft.network.chat.Style; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.Mth; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; + +public final class QueenLocateCommand { + private static final ResourceKey THORAXIS = ResourceKey.create(Registries.DIMENSION, + new ResourceLocation(Antarchy.MODID, "thoraxis")); + private QueenLocateCommand() {} + + public static void register(CommandDispatcher dispatcher) { + dispatcher.register(Commands.literal("locatequeen").requires(source -> source.hasPermission(2)) + .executes(QueenLocateCommand::locate)); + } + + private static int locate(CommandContext context) { + CommandSourceStack source = context.getSource(); + ServerLevel level = source.getServer().getLevel(THORAXIS); + if (level == null) { source.sendFailure(Component.literal("Thoraxis is not available.")); return 0; } + int ox = Mth.floor(source.getPosition().x), oz = Mth.floor(source.getPosition().z); + int cx = Math.floorDiv(ox, QueenTrailGrid.SPACING), cz = Math.floorDiv(oz, QueenTrailGrid.SPACING); + List sites = new ArrayList<>(); + for (int x = cx - 8; x <= cx + 8; x++) for (int z = cz - 8; z <= cz + 8; z++) sites.add(QueenTrailGrid.site(level.getSeed(), x, z)); + sites.sort(Comparator.comparingDouble(site -> distanceSquared(ox, oz, site))); + for (int i = 0; i < Math.min(64, sites.size()); i++) { + QueenTrailGrid.Site site = sites.get(i); + level.getChunk(site.terminalX() >> 4, site.terminalZ() >> 4); + QueenTrailSpawnMarkerBlockEntity marker = findMarker(level, site); + if (marker == null) continue; + BlockPos spawn = marker.getSpawnPos(); + int distance = Mth.floor(Math.sqrt(distanceSquared(ox, oz, site))); + String coords = "[" + spawn.getX() + ", " + spawn.getY() + ", " + spawn.getZ() + "]"; + String tp = "/execute in " + THORAXIS.location() + " run tp @s " + spawn.getX() + " " + spawn.getY() + " " + spawn.getZ(); + source.sendSuccess(() -> Component.literal("Nearest Queen spawn in " + THORAXIS.location() + ": ") + .append(Component.literal(coords).withStyle(Style.EMPTY.withColor(net.minecraft.ChatFormatting.AQUA) + .withUnderlined(true).withClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, tp)))) + .append(Component.literal(" (" + distance + " blocks away)")), false); + return distance; + } + source.sendFailure(Component.literal("No configured Queen spawn was found within the search area.")); + return 0; + } + + private static QueenTrailSpawnMarkerBlockEntity findMarker(ServerLevel level, QueenTrailGrid.Site site) { + BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(site.terminalX(), level.getMinBuildHeight(), site.terminalZ()); + for (int y = level.getMinBuildHeight(); y < level.getMaxBuildHeight(); y++) { + cursor.setY(y); + BlockEntity entity = level.getBlockEntity(cursor); + if (entity instanceof QueenTrailSpawnMarkerBlockEntity marker && marker.isConfigured() && marker.getSiteId() == site.id()) return marker; + } + return null; + } + private static double distanceSquared(int ox, int oz, QueenTrailGrid.Site site) { + double dx = site.terminalX() - ox, dz = site.terminalZ() - oz; + return dx * dx + dz * dz; + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/creative/CreativeTabContents.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/creative/CreativeTabContents.java index 58696bb4..fb53cf0c 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/creative/CreativeTabContents.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/creative/CreativeTabContents.java @@ -306,7 +306,7 @@ public final class CreativeTabContents { entry("scorpion_whip", "combat"), entry("fallen_king_crown", "combat"), entry("brutalfly_elytra", "combat"), - entry("jumpy_boots", "combat"), + entry("springy_boots", "combat"), entry("raw_uranium_scrap", "ingredients"), entry("raw_titanium_scrap", "ingredients"), entry("bluestone", "redstone_blocks"), diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/enchantment/AntarchyEnchantments.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/enchantment/AntarchyEnchantments.java new file mode 100644 index 00000000..fa93f01b --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/enchantment/AntarchyEnchantments.java @@ -0,0 +1,41 @@ +package com.craisinlord.antarchy.content.enchantment; + +import java.util.Map; +import java.util.function.Supplier; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.enchantment.Enchantment; +import net.minecraft.world.item.enchantment.EnchantmentHelper; + +/** Loader-neutral access to the 1.20 registered enchantments. */ +public final class AntarchyEnchantments { + private static Supplier featherRising = () -> null; + private static Supplier chronosphere = () -> null; + + private AntarchyEnchantments() {} + + public static void bind(Supplier feather, Supplier chrono) { + featherRising = feather; + chronosphere = chrono; + } + + public static Enchantment featherRising() { return featherRising.get(); } + public static Enchantment chronosphere() { return chronosphere.get(); } + + public static int featherRisingLevel(LivingEntity entity) { return level(entity, EquipmentSlot.FEET, featherRising()); } + public static int chronosphereLevel(LivingEntity entity) { return level(entity, EquipmentSlot.CHEST, chronosphere()); } + + private static int level(LivingEntity entity, EquipmentSlot slot, Enchantment enchantment) { + return enchantment == null ? 0 : EnchantmentHelper.getItemEnchantmentLevel(enchantment, entity.getItemBySlot(slot)); + } + + public static void ensure(ItemStack stack, Enchantment enchantment, int level) { + if (enchantment == null) return; + Map enchantments = new java.util.HashMap<>(EnchantmentHelper.getEnchantments(stack)); + if (enchantments.getOrDefault(enchantment, 0) < level) { + enchantments.put(enchantment, level); + EnchantmentHelper.setEnchantments(enchantments, stack); + } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/enchantment/ChronosphereEnchantment.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/enchantment/ChronosphereEnchantment.java new file mode 100644 index 00000000..0db329ee --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/enchantment/ChronosphereEnchantment.java @@ -0,0 +1,20 @@ +package com.craisinlord.antarchy.content.enchantment; + +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.item.enchantment.Enchantment; +import net.minecraft.world.item.enchantment.EnchantmentCategory; + +public final class ChronosphereEnchantment extends Enchantment { + public ChronosphereEnchantment(Rarity rarity, EquipmentSlot... slots) { + super(rarity, EnchantmentCategory.ARMOR_CHEST, slots); + } + + @Override + public int getMaxLevel() { return 3; } + + @Override + public int getMinCost(int level) { return 15 + (level - 1) * 15; } + + @Override + public int getMaxCost(int level) { return getMinCost(level) + 35; } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/enchantment/FeatherRisingEnchantment.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/enchantment/FeatherRisingEnchantment.java new file mode 100644 index 00000000..78a88db4 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/enchantment/FeatherRisingEnchantment.java @@ -0,0 +1,14 @@ +package com.craisinlord.antarchy.content.enchantment; + +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.item.enchantment.Enchantment; +import net.minecraft.world.item.enchantment.EnchantmentCategory; + +public final class FeatherRisingEnchantment extends Enchantment { + public FeatherRisingEnchantment(Rarity rarity, EquipmentSlot... slots) { + super(rarity, EnchantmentCategory.ARMOR_FEET, slots); + } + + @Override + public int getMaxLevel() { return 3; } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/QueenEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/QueenEntity.java index 6ec3e60d..d6bf6a79 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/QueenEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/QueenEntity.java @@ -6,6 +6,9 @@ import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.entity.ManticoreEntity; import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; +import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; +import com.craisinlord.antarchy.content.gravity.AntarchyGravityTransition; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; import java.util.HashMap; import java.util.Map; import java.util.UUID; @@ -41,11 +44,39 @@ public class QueenEntity extends RoyalBossEntity { private static final String SUMMON_COOLDOWN_KEY = "ManticoreSummonCooldownTicks"; private static final int FAILED_SUMMON_RETRY_TICKS = 20; private static final int POSITION_ATTEMPTS_PER_MANTICORE = 8; + private long naturalTrailSiteId = Long.MIN_VALUE; + private BlockPos naturalTrailHome = BlockPos.ZERO; private static final ResourceLocation ACCEL_SPEED_ID = new ResourceLocation("antarchy", "queen_royal_acceleration_speed"); private static final ResourceLocation ACCEL_FLY_ID = new ResourceLocation("antarchy", "queen_royal_acceleration_fly"); private static final DustParticleOptions ACCEL_DUST = new DustParticleOptions(new org.joml.Vector3f(1.0F, 0.15F, 0.15F), 2.0F); + public static QueenEntity spawnFromUndersideTrail(ServerLevel level, BlockPos spawnPos, BlockPos homePos, + long siteId, float yaw) { + if (!ThoraxisUndersideManager.isThoraxis(level) || spawnPos.getY() >= 0) return null; + java.util.List existing = level.getEntitiesOfClass(QueenEntity.class, + new net.minecraft.world.phys.AABB(homePos).inflate(160.0D), + queen -> queen.naturalTrailSiteId == siteId && queen.isAlive()); + if (!existing.isEmpty()) return existing.get(0); + QueenEntity queen = AntarchyObjects.QUEEN.get().create(level); + if (queen == null) return null; + queen.moveTo(spawnPos.getX() + .5D, spawnPos.getY(), spawnPos.getZ() + .5D, yaw, 0.0F); + if (!level.noCollision(queen, queen.getBoundingBox())) { + queen.discard(); + return null; + } + queen.finalizeSpawn(level, level.getCurrentDifficultyAt(spawnPos), MobSpawnType.CHUNK_GENERATION, null, null); + queen.naturalTrailSiteId = siteId; + queen.naturalTrailHome = homePos.immutable(); + queen.setPersistenceRequired(); + queen.setNoGravity(false); + ThoraxisUndersideManager.applyUndersideInversion(queen); + AntarchyGravityApi.setGravityDirection(queen, AntarchyGravityDirection.UP, true, + new AntarchyGravityTransition(12)); + queen.resetFallDistance(); + return level.addFreshEntity(queen) ? queen : null; + } + private static final int GRAVITY_STOMP_COOLDOWN = 180; private static final int TIME_FIELD_COOLDOWN = 260; private static final int MOMENTUM_LOCK_COOLDOWN = 420; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/JumpyBootsHelper.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/JumpyBootsHelper.java index db801b58..b4143048 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/JumpyBootsHelper.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/JumpyBootsHelper.java @@ -8,7 +8,7 @@ public final class JumpyBootsHelper { public static final float MAX_VERTICAL_BOOST = 2.0F; public static final float SPRINT_FORWARD_BOOST = 0.3F; public static final long FALL_PROTECTION_TICKS = 120L; - public static final String FALL_PROTECTION_NBT_KEY = "antarchy:jumpy_boots_protection_until"; + public static final String FALL_PROTECTION_NBT_KEY = "antarchy:springy_boots_protection_until"; private JumpyBootsHelper() { } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/JumpyBootsItem.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/JumpyBootsItem.java index 61cc24b3..0d4b017d 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/JumpyBootsItem.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/item/JumpyBootsItem.java @@ -28,7 +28,7 @@ public final class JumpyBootsItem extends ArmorItem { @Override public void appendHoverText(ItemStack stack, Level level, List tooltipComponents, TooltipFlag tooltipFlag) { - tooltipComponents.add(Component.translatable("tooltip.antarchy.jumpy_boots").withStyle(ChatFormatting.DARK_RED)); + tooltipComponents.add(Component.translatable("tooltip.antarchy.springy_boots").withStyle(ChatFormatting.DARK_RED)); super.appendHoverText(stack, level, tooltipComponents, tooltipFlag); } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/JumpyBootsLaunchPayload.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/JumpyBootsLaunchPayload.java index d876c759..3c00a0e9 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/JumpyBootsLaunchPayload.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/network/JumpyBootsLaunchPayload.java @@ -9,7 +9,7 @@ import net.minecraft.resources.ResourceLocation; public record JumpyBootsLaunchPayload(int chargeTicks, boolean sprinting) implements CustomPacketPayload { public static final Type TYPE = - new Type<>(new ResourceLocation(Antarchy.MODID, "jumpy_boots_launch")); + new Type<>(new ResourceLocation(Antarchy.MODID, "springy_boots_launch")); public static final StreamCodec STREAM_CODEC = StreamCodec.composite( ByteBufCodecs.VAR_INT, JumpyBootsLaunchPayload::chargeTicks, diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/ChronosphereManager.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/ChronosphereManager.java new file mode 100644 index 00000000..8e05e3be --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/ChronosphereManager.java @@ -0,0 +1,49 @@ +package com.craisinlord.antarchy.content.time; + +import com.craisinlord.antarchy.content.enchantment.AntarchyEnchantments; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; + +public final class ChronosphereManager { + public static final double RATE = 0.35D; + private static final Map ACTIVE_FIELDS = new HashMap<>(); + private ChronosphereManager() {} + + public static void refresh(ServerPlayer player) { + if (!(player.level() instanceof ServerLevel level)) return; + int enchantmentLevel = AntarchyEnchantments.chronosphereLevel(player); + UUID playerId = player.getUUID(); + TimeDilationFieldEntity field = null; + UUID known = ACTIVE_FIELDS.get(playerId); + if (known != null && level.getEntity(known) instanceof TimeDilationFieldEntity existing) field = existing; + if (enchantmentLevel <= 0 || !player.isAlive()) { + ACTIVE_FIELDS.remove(playerId); + if (field != null) field.discard(); + return; + } + if (field == null) { + for (net.minecraft.world.entity.Entity entity : level.getAllEntities()) { + if (entity instanceof TimeDilationFieldEntity candidate && candidate.isChronosphere() && candidate.isOwnedBy(player)) { + field = candidate; + break; + } + } + } + if (field == null) { + field = TimeDilationApi.createField(level, player.position(), radius(enchantmentLevel), RATE, -1, player.getUUID()); + field.configureChronosphere(player); + } else { + field.configureChronosphere(player); + } + field.setFieldRadius(radius(enchantmentLevel)); + ACTIVE_FIELDS.put(playerId, field.getUUID()); + } + + public static double radius(int level) { + return level == 1 ? 1.5D : level == 2 ? 2.5D : 3.5D; + } + +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldEntity.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldEntity.java index b7a9d7af..ac8dc536 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldEntity.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldEntity.java @@ -7,7 +7,11 @@ import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.projectile.Projectile; import net.minecraft.world.level.Level; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.phys.Vec3; import java.util.UUID; @@ -25,6 +29,10 @@ public class TimeDilationFieldEntity extends Entity { private int durationTicks = -1; private int age; private UUID ownerId; + private UUID anchorId; + private int missingAnchorTicks; + private boolean visual = true; + private boolean chronosphere; public TimeDilationFieldEntity(EntityType entityType, Level level) { super(entityType, level); @@ -50,6 +58,17 @@ public class TimeDilationFieldEntity extends Entity { return this.ownerId != null && entity != null && this.ownerId.equals(entity.getUUID()); } + public void attachTo(Entity anchor) { this.anchorId = anchor == null ? null : anchor.getUUID(); this.missingAnchorTicks = 0; } + public void configureChronosphere(Entity owner) { + this.ownerId = owner.getUUID(); attachTo(owner); this.durationTicks = -1; this.visual = false; this.chronosphere = true; + } + public boolean isChronosphere() { return chronosphere; } + public boolean isVisual() { return visual; } + public boolean affects(Entity entity) { + if (isOwnedBy(entity) || anchorId != null && anchorId.equals(entity.getUUID())) return false; + return !chronosphere || entity instanceof LivingEntity || entity instanceof Projectile || entity instanceof ItemEntity; + } + @Override protected void defineSynchedData() { this.entityData.define(RADIUS, 8.0F); @@ -62,6 +81,18 @@ public class TimeDilationFieldEntity extends Entity { if (this.level().isClientSide) { return; } + if (anchorId != null && this.level() instanceof ServerLevel level) { + Entity anchor = level.getEntity(anchorId); + if (anchor != null && anchor.isAlive()) { + setPos(anchor.getX(), anchor.getY(), anchor.getZ()); + missingAnchorTicks = 0; + if (chronosphere && age % 20 == 0) { + if (!(anchor instanceof net.minecraft.server.level.ServerPlayer player) + || com.craisinlord.antarchy.content.enchantment.AntarchyEnchantments.chronosphereLevel(player) <= 0) { discard(); return; } + setFieldRadius(ChronosphereManager.radius(com.craisinlord.antarchy.content.enchantment.AntarchyEnchantments.chronosphereLevel(player))); + } + } else if (++missingAnchorTicks > 20) { discard(); return; } + } this.age++; if (this.durationTicks >= 0 && this.age >= this.durationTicks) { this.discard(); @@ -81,6 +112,8 @@ public class TimeDilationFieldEntity extends Entity { return radius * radius; } + public double influenceRadius() { return chronosphere ? fieldRadius() * 2.0D : fieldRadius(); } + public void setFieldRate(double rate) { this.entityData.set(RATE, (float) TimeDilationMath.clampRate(rate)); } @@ -117,6 +150,9 @@ public class TimeDilationFieldEntity extends Entity { this.durationTicks = tag.contains(DURATION_KEY) ? tag.getInt(DURATION_KEY) : -1; this.age = tag.getInt(AGE_KEY); this.ownerId = tag.hasUUID("OwnerUuid") ? tag.getUUID("OwnerUuid") : null; + this.anchorId = tag.hasUUID("AnchorUuid") ? tag.getUUID("AnchorUuid") : null; + this.visual = !tag.contains("Visual") || tag.getBoolean("Visual"); + this.chronosphere = tag.getBoolean("Chronosphere"); } @Override @@ -128,5 +164,8 @@ public class TimeDilationFieldEntity extends Entity { if (this.ownerId != null) { tag.putUUID("OwnerUuid", this.ownerId); } + if (this.anchorId != null) tag.putUUID("AnchorUuid", this.anchorId); + tag.putBoolean("Visual", this.visual); + tag.putBoolean("Chronosphere", this.chronosphere); } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldSampler.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldSampler.java index 5053c6db..fe669540 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldSampler.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldSampler.java @@ -32,7 +32,7 @@ public final class TimeDilationFieldSampler { public static double sample(List fields, Entity entity) { double combinedRate = TimeDilationMath.NORMAL_RATE; for (TimeDilationFieldEntity field : fields) { - if (field.isOwnedBy(entity)) { + if (!field.affects(entity)) { continue; } Vec3 center = field.position(); @@ -40,8 +40,18 @@ public final class TimeDilationFieldSampler { double dy = center.y - entity.getY(); double dz = center.z - entity.getZ(); double distanceSqr = dx * dx + dy * dy + dz * dz; - if (distanceSqr < field.fieldRadiusSqr()) { - double falloff = TimeDilationMath.gaussianFalloff(Math.sqrt(distanceSqr), field.fieldRadius()); + double distance = Math.sqrt(distanceSqr); + double radius = field.fieldRadius(); + double falloff; + if (field.isChronosphere()) { + if (distance >= radius * 2.0D) continue; + falloff = distance <= radius ? 1.0D : TimeDilationMath.gaussianFalloff(distance - radius, radius); + } else if (distanceSqr < field.fieldRadiusSqr()) { + falloff = TimeDilationMath.gaussianFalloff(distance, radius); + } else { + continue; + } + if (falloff > 0.0D) { combinedRate *= TimeDilationMath.localFieldRate(field.effectiveFieldRate(), falloff); } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationManager.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationManager.java index 92782c4d..f8657679 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationManager.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationManager.java @@ -27,6 +27,9 @@ public final class TimeDilationManager { public static void tickServer(MinecraftServer server) { for (ServerLevel level : server.getAllLevels()) { + for (ServerPlayer player : level.players()) { + ChronosphereManager.refresh(player); + } List fields = collectFields(level); TrackingState tracking = TRACKING.computeIfAbsent(level, ignored -> new TrackingState()); discoverFieldEntities(level, fields, tracking); @@ -56,6 +59,7 @@ public final class TimeDilationManager { private static void syncFieldSnapshots(ServerLevel level, List fields, TrackingState tracking) { List snapshots = fields.stream() + .filter(TimeDilationFieldEntity::isVisual) .map(field -> new TimeDilationFieldSnapshot(field.getX(), field.getY(), field.getZ(), field.fieldRadius(), field.fieldRate(), field.fieldAge(), field.fieldDurationTicks())) .limit(128) @@ -81,7 +85,7 @@ public final class TimeDilationManager { private static void discoverFieldEntities(ServerLevel level, List fields, TrackingState tracking) { for (TimeDilationFieldEntity field : fields) { - double radius = field.fieldRadius(); + double radius = field.influenceRadius(); var center = field.position(); var area = new net.minecraft.world.phys.AABB(center.x - radius, center.y - radius, center.z - radius, center.x + radius, center.y + radius, center.z + radius); diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationParticles.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationParticles.java index 7bbee5c5..f10a6039 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationParticles.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationParticles.java @@ -18,7 +18,7 @@ public final class TimeDilationParticles { return; } for (TimeDilationFieldEntity field : fields) { - spawnBorder(level, field.position(), field.fieldRadius()); + if (field.isVisual()) spawnBorder(level, field.position(), field.fieldRadius()); } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/JumpyBugEggCeilingFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/JumpyBugEggCeilingFeature.java index 945de91f..0e9e24c1 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/JumpyBugEggCeilingFeature.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/JumpyBugEggCeilingFeature.java @@ -17,7 +17,9 @@ import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; public final class JumpyBugEggCeilingFeature extends Feature { - private static final ResourceLocation JUMPY_BUG_EGG_ID = new ResourceLocation(Antarchy.MODID, "jumpy_bug_egg"); + // The 1.20 implementation keeps its historical Java name, but the public + // registry id follows the 1.21 rename. + private static final ResourceLocation JUMPY_BUG_EGG_ID = new ResourceLocation(Antarchy.MODID, "springbug_egg"); private static final int SEARCH_RADIUS = 8; private static final int VERTICAL_SCAN = 24; private static final int SEARCH_ATTEMPTS = 24; diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/QueenHavocTrailFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/QueenHavocTrailFeature.java new file mode 100644 index 00000000..411c6ce2 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/QueenHavocTrailFeature.java @@ -0,0 +1,107 @@ +package com.craisinlord.antarchy.content.worldgen.thoraxis; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.block.entity.QueenTrailSpawnMarkerBlockEntity; +import net.minecraft.core.BlockPos; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.WorldGenLevel; +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.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; + +/** Generates the deterministic underside Queen trail and its one-shot spawn marker. */ +public final class QueenHavocTrailFeature extends Feature { + private static final ResourceLocation DREAM_SAND = id("dream_sand"); + private static final ResourceLocation DREAM_SANDSTONE = id("dream_sandstone"); + private static final ResourceLocation CUT_DREAM_SANDSTONE = id("cut_dream_sandstone"); + private static final ResourceLocation DREAM_FIRE = id("dream_fire_ceiling"); + private static final ResourceLocation SPAWN_MARKER = id("queen_trail_spawn_marker"); + + public QueenHavocTrailFeature() { super(NoneFeatureConfiguration.CODEC); } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + ChunkPos chunk = new ChunkPos(context.origin()); + int cellX = Math.floorDiv(chunk.getMiddleBlockX(), QueenTrailGrid.SPACING); + int cellZ = Math.floorDiv(chunk.getMiddleBlockZ(), QueenTrailGrid.SPACING); + boolean placed = false; + for (int gx = cellX - 1; gx <= cellX + 1; gx++) for (int gz = cellZ - 1; gz <= cellZ + 1; gz++) { + QueenTrailGrid.Site site = QueenTrailGrid.site(level.getSeed(), gx, gz); + int reach = site.length() + 30; + if (site.terminalX() + reach < chunk.getMinBlockX() || site.terminalX() - reach > chunk.getMaxBlockX() + || site.terminalZ() + reach < chunk.getMinBlockZ() || site.terminalZ() - reach > chunk.getMaxBlockZ()) continue; + for (int i = 0; i < site.footprints(); i++) { + double distance = 18.0D + (site.footprints() - 1 - i) * site.stride(); + double side = (i & 1) == 0 ? -2.5D : 2.5D; + double cx = site.terminalX() - site.directionX() * distance - site.directionZ() * side; + double cz = site.terminalZ() - site.directionZ() * distance + site.directionX() * side; + placed |= print(level, chunk, site, i, cx, cz); + } + if (site.terminalX() >= chunk.getMinBlockX() && site.terminalX() <= chunk.getMaxBlockX() + && site.terminalZ() >= chunk.getMinBlockZ() && site.terminalZ() <= chunk.getMaxBlockZ()) placed |= marker(level, site); + } + return placed; + } + + private static boolean print(WorldGenLevel level, ChunkPos chunk, QueenTrailGrid.Site site, int index, double cx, double cz) { + boolean placed = false; + for (int x = Math.max(chunk.getMinBlockX(), (int) cx - 4); x <= Math.min(chunk.getMaxBlockX(), (int) cx + 4); x++) + for (int z = Math.max(chunk.getMinBlockZ(), (int) cz - 4); z <= Math.min(chunk.getMaxBlockZ(), (int) cz + 4); z++) { + double dx = x + .5D - cx, dz = z + .5D - cz; + double forward = dx * site.directionX() + dz * site.directionZ(); + double lateral = -dx * site.directionZ() + dz * site.directionX(); + boolean pad = sq((forward + .5D) / 2.5D) + sq(lateral / 2.0D) <= 1.0D; + boolean toes = toe(forward, lateral, -1.5D) || toe(forward, lateral, 0.0D) || toe(forward, lateral, 1.5D); + if (pad || toes) placed |= carve(level, x, z, index > site.footprints() * .78D ? 3 : index > site.footprints() * .35D ? 2 : 1, + index % 3 == 0 ? CUT_DREAM_SANDSTONE : DREAM_SANDSTONE); + } + return placed; + } + + private static boolean marker(WorldGenLevel level, QueenTrailGrid.Site site) { + BlockPos ceiling = findCeiling(level, site.terminalX(), site.terminalZ()); + if (ceiling == null) return false; + BlockPos markerPos = ceiling.above(4); + level.setBlock(markerPos, block(SPAWN_MARKER, Blocks.BARRIER).defaultBlockState(), 2); + BlockEntity entity = level.getBlockEntity(markerPos); + if (!(entity instanceof QueenTrailSpawnMarkerBlockEntity marker)) return false; + marker.configure(site.id(), new BlockPos(site.terminalX(), ceiling.getY() - 17, site.terminalZ()), + new BlockPos(site.terminalX(), ceiling.getY() - 2, site.terminalZ()), + (float) Math.toDegrees(Math.atan2(site.directionZ(), site.directionX())) - 90.0F); + return true; + } + + private static boolean carve(WorldGenLevel level, int x, int z, int depth, ResourceLocation backingId) { + BlockPos ceiling = findCeiling(level, x, z); + if (ceiling == null) return false; + level.setBlock(ceiling.above(depth), block(backingId, Blocks.SANDSTONE).defaultBlockState(), 2); + for (int i = 0; i < depth; i++) level.setBlock(ceiling.above(i), Blocks.AIR.defaultBlockState(), 2); + return true; + } + + private static BlockPos findCeiling(WorldGenLevel level, int x, int z) { + BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(x, -8, z); + int minimum = Math.max(level.getMinBuildHeight() + 20, -240); + for (int y = -8; y >= minimum; y--) { + cursor.setY(y); + if (isDreamSurface(level.getBlockState(cursor)) && level.getBlockState(cursor.below()).isAir()) return cursor.immutable(); + } + return null; + } + + private static boolean isDreamSurface(BlockState state) { + ResourceLocation id = BuiltInRegistries.BLOCK.getKey(state.getBlock()); + return DREAM_SAND.equals(id) || DREAM_SANDSTONE.equals(id) || CUT_DREAM_SANDSTONE.equals(id); + } + private static boolean toe(double forward, double lateral, double center) { return sq((forward - 2.2D) / 1.25D) + sq((lateral - center) / .8D) <= 1.0D; } + private static double sq(double value) { return value * value; } + private static Block block(ResourceLocation id, Block fallback) { return BuiltInRegistries.BLOCK.getOptional(id).orElse(fallback); } + private static ResourceLocation id(String path) { return new ResourceLocation(Antarchy.MODID, path); } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/QueenTrailGrid.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/QueenTrailGrid.java new file mode 100644 index 00000000..dff89cac --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/QueenTrailGrid.java @@ -0,0 +1,34 @@ +package com.craisinlord.antarchy.content.worldgen.thoraxis; + +import net.minecraft.util.RandomSource; + +/** Shared deterministic layout used by Queen trail generation and locatequeen. */ +public final class QueenTrailGrid { + public static final int SPACING = 1_536; + private static final int JITTER_MARGIN = 256; + + private QueenTrailGrid() {} + + public static Site site(long worldSeed, int cellX, int cellZ) { + long seed = mix(worldSeed ^ 0x51A7E4D39B20C16DL, cellX, cellZ); + RandomSource random = RandomSource.create(seed); + int usable = SPACING - JITTER_MARGIN * 2; + int x = cellX * SPACING + JITTER_MARGIN + random.nextInt(usable); + int z = cellZ * SPACING + JITTER_MARGIN + random.nextInt(usable); + double angle = random.nextDouble() * Math.PI * 2.0D; + return new Site(seed, x, z, Math.cos(angle), Math.sin(angle), 16 + random.nextInt(7), 6 + random.nextInt(2)); + } + + private static long mix(long seed, int x, int z) { + long value = seed ^ (long) x * 0x9E3779B97F4A7C15L ^ (long) z * 0xC2B2AE3D27D4EB4FL; + value ^= value >>> 30; + value *= 0xBF58476D1CE4E5B9L; + value ^= value >>> 27; + value *= 0x94D049BB133111EBL; + return value ^ value >>> 31; + } + + public record Site(long id, int terminalX, int terminalZ, double directionX, double directionZ, int footprints, int stride) { + public int length() { return this.footprints * this.stride + 18; } + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisTransitionThroatFeature.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisTransitionThroatFeature.java new file mode 100644 index 00000000..1b2a8f95 --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisTransitionThroatFeature.java @@ -0,0 +1,61 @@ +package com.craisinlord.antarchy.content.worldgen.thoraxis; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; + +/** Carves the vertical transition throat between the upper world and Thoraxis underside. */ +public final class ThoraxisTransitionThroatFeature extends Feature { + public ThoraxisTransitionThroatFeature() { super(NoneFeatureConfiguration.CODEC); } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + BlockPos origin = context.origin(); + BlockPos center = new BlockPos(origin.getX(), ThoraxisUndersideManager.GRAVITY_FLIP_Y, origin.getZ()); + int upperSurface = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, center.getX(), center.getZ()) - 1; + int undersideSurface = findUndersideSurface(level, center); + if (upperSurface < ThoraxisUndersideManager.GRAVITY_FLIP_Y || undersideSurface < level.getMinBuildHeight()) return false; + long seed = context.random().nextLong(); + for (int y = undersideSurface; y <= upperSurface; y++) { + int layerX = noise(seed, Math.floorDiv(y, 5), 17) * 2; + int layerZ = noise(seed, Math.floorDiv(y, 5), 31) * 2; + double radiusX = 3.5D + noise01(seed, Math.floorDiv(y, 11), 43) * 2.0D; + double radiusZ = 3.5D + noise01(seed, Math.floorDiv(y, 13), 59) * 2.0D; + for (int x = -7; x <= 7; x++) for (int z = -7; z <= 7; z++) { + double dx = x - layerX, dz = z - layerZ; + double distance = Math.sqrt((dx * dx) / (radiusX * radiusX) + (dz * dz) / (radiusZ * radiusZ)); + if (distance <= 0.72D + noise01(seed, x * 3 + Math.floorDiv(y, 3), z * 3 + 71) * 0.42D) + level.setBlock(center.offset(x, y, z), Blocks.AIR.defaultBlockState(), 2); + } + } + return true; + } + + private static int findUndersideSurface(WorldGenLevel level, BlockPos center) { + int minY = level.getMinBuildHeight(); + int firstSolid = Integer.MIN_VALUE; + for (int y = ThoraxisUndersideManager.GRAVITY_FLIP_Y - 1; y >= minY; y--) + if (!level.getBlockState(center.atY(y)).isAir()) { firstSolid = y; break; } + if (firstSolid == Integer.MIN_VALUE) return minY; + int y = firstSolid; + while (y > minY && !level.getBlockState(center.atY(y - 1)).isAir()) y--; + return y; + } + + private static double noise01(long seed, int x, int z) { + long value = seed + 0x9E3779B97F4A7C15L; + value ^= x * 0x632BE59BD9B4E019L; + value ^= z * 0xC6BC279692B5CC83L; + value = (value ^ (value >>> 30)) * 0xBF58476D1CE4E5B9L; + value = (value ^ (value >>> 27)) * 0x94D049BB133111EBL; + value ^= value >>> 31; + return (value >>> 11) * 0x1.0p-53; + } + + private static int noise(long seed, int x, int z) { return noise01(seed, x, z) < 0.5D ? -1 : 1; } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisUndersideManager.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisUndersideManager.java index 868e123d..03668c2b 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisUndersideManager.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisUndersideManager.java @@ -222,4 +222,9 @@ public final class ThoraxisUndersideManager { public static boolean isAboveUndersideExit(Entity entity) { return isThoraxis(entity.level()) && entity.getY() >= EXIT_UNDERSIDE_Y; } + + /** True while an entity is inside the inverted-gravity underside volume. */ + public static boolean isInUnderside(Entity entity) { + return isThoraxis(entity.level()) && entity.getY() < EXIT_UNDERSIDE_Y; + } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ThrowableProjectileGravityMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ThrowableProjectileGravityMixin.java index 77418a3d..6f9da5e5 100644 --- a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ThrowableProjectileGravityMixin.java +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ThrowableProjectileGravityMixin.java @@ -1,11 +1,30 @@ package com.craisinlord.antarchy.mixins.gravity; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.world.entity.projectile.ThrowableProjectile; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; @Mixin(ThrowableProjectile.class) /* * Flips thrown projectile gravity for inverted shooters. */ public abstract class ThrowableProjectileGravityMixin { + @Shadow + protected abstract float getGravity(); + + @WrapOperation(method = "tick", + at = @At(value = "INVOKE", + target = "Lnet/minecraft/world/entity/projectile/ThrowableProjectile;setDeltaMovement(DDD)V")) + private void antarchy$reverseUndersideGravity(ThrowableProjectile projectile, double x, double y, double z, + Operation original) { + if (ThoraxisUndersideManager.isInUnderside(projectile)) { + // Vanilla has already subtracted getGravity(); add twice to turn it into an upward acceleration. + y += this.getGravity() * 2.0D; + } + original.call(projectile, x, y, z); + } } diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityChronosphereEquipmentMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityChronosphereEquipmentMixin.java new file mode 100644 index 00000000..83b84a2d --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityChronosphereEquipmentMixin.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.mixins.time; + +import com.craisinlord.antarchy.content.enchantment.AntarchyEnchantments; +import com.craisinlord.antarchy.content.time.ChronosphereManager; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +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.CallbackInfo; + +@Mixin(LivingEntity.class) +public abstract class LivingEntityChronosphereEquipmentMixin { + @Inject(method = "setItemSlot", at = @At("TAIL")) + private void antarchy$refreshChronosphere(EquipmentSlot slot, ItemStack stack, CallbackInfo callback) { + if (slot != EquipmentSlot.CHEST) return; + LivingEntity self = (LivingEntity) (Object) this; + if (self instanceof ServerPlayer player) ChronosphereManager.refresh(player); + } +} diff --git a/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/PlayerCooldownTimeDilationMixin.java b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/PlayerCooldownTimeDilationMixin.java new file mode 100644 index 00000000..5e95ea0a --- /dev/null +++ b/common-1.20.1/src/main/java/com/craisinlord/antarchy/mixins/time/PlayerCooldownTimeDilationMixin.java @@ -0,0 +1,19 @@ +package com.craisinlord.antarchy.mixins.time; + +import com.craisinlord.antarchy.content.time.TimeDilationApi; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemCooldowns; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(Player.class) +public abstract class PlayerCooldownTimeDilationMixin { + @Redirect(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/ItemCooldowns;tick()V")) + private void antarchy$advanceCooldowns(ItemCooldowns cooldowns) { + Player player = (Player) (Object) this; + if (TimeDilationApi.consumeTick(player, "player_item_cooldowns")) { + cooldowns.tick(); + } + } +} diff --git a/common-1.20.1/src/main/resources/antarchy-common.mixins.json b/common-1.20.1/src/main/resources/antarchy-common.mixins.json index 26a8a9b3..29b036a5 100644 --- a/common-1.20.1/src/main/resources/antarchy-common.mixins.json +++ b/common-1.20.1/src/main/resources/antarchy-common.mixins.json @@ -83,6 +83,8 @@ "time.EntityCrouchTimeDilationMixin", "time.LivingEntityTimeDilationCleanupMixin", "time.LivingEntityAttackCooldownTimeDilationMixin", + "time.PlayerCooldownTimeDilationMixin", + "time.LivingEntityChronosphereEquipmentMixin", "time.LookControlTimeDilationMixin", "time.MeleeAttackGoalTimeDilationMixin", "time.MobAttackTimeDilationMixin", diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/crawling_blight.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/crawling_blight.animation.json new file mode 100644 index 00000000..f9736e11 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/crawling_blight.animation.json @@ -0,0 +1,2372 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 5, + "bones": { + "rightjaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailbase": { + "rotation": { + "0.0": { + "post": { + "vector": [12.6866, -9.7606, -2.1856] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [12.6866, 9.7606, 2.1856] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [12.9264, -14.6364, -3.3192] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [12.6866, -9.7606, -2.1856] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailmiddle": { + "rotation": { + "0.0": { + "post": { + "vector": [15.9153, -19.2911, -5.3815] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [15.9153, 19.2911, 5.3815] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [15.9153, -19.2911, -5.3815] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailtip": { + "rotation": { + "0.0": { + "post": { + "vector": [18.5482, -19.0375, -6.246] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [19.5682, -26.1278, -8.8967] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [18.5482, 19.0375, 6.246] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [18.5482, -19.0375, -6.246] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftjaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 1, + "bones": { + "rightjaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [10.257, -28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-9.6179, -48.6127, -5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [7.6439, -48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.4375": { + "post": { + "vector": [7.6439, -48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [10.257, -28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-9.6179, -48.6127, -5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [7.6439, -48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.9375": { + "post": { + "vector": [7.6439, -48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3125": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4375": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5625": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8125": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9375": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "post": { + "vector": [0, 3.75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3125": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4375": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5625": { + "post": { + "vector": [0, 3.75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8125": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9375": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 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" + } + } + }, + "tailbase": { + "rotation": { + "0.0": { + "post": { + "vector": [12.6866, -9.7606, -2.1856] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [12.6866, 9.7606, 2.1856] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [12.9264, -14.6364, -3.3192] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [12.6866, -9.7606, -2.1856] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailmiddle": { + "rotation": { + "0.0": { + "post": { + "vector": [15.9153, -19.2911, -5.3815] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [15.9153, 19.2911, 5.3815] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [15.9153, -19.2911, -5.3815] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailtip": { + "rotation": { + "0.0": { + "post": { + "vector": [18.5482, -19.0375, -6.246] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [19.5682, -26.1278, -8.8967] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [18.5482, 19.0375, 6.246] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [18.5482, -19.0375, -6.246] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [10.257, 28.8205, 9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-9.6179, 48.6127, 5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [7.6439, 48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.3125": { + "post": { + "vector": [7.6439, 48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10.257, 28.8205, 9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-9.6179, 48.6127, 5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [7.6439, 48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.8125": { + "post": { + "vector": [7.6439, 48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10.257, 28.8205, 9.1359] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-10.257, 28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "post": { + "vector": [-10.257, 28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-7.6439, 48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [9.6179, 48.6127, -5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-10.257, 28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.5625": { + "post": { + "vector": [-10.257, 28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-7.6439, 48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [9.6179, 48.6127, -5.3962] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-10.257, 28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-7.6439, -48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [-7.6439, -48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [9.6179, -48.6127, 5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-10.257, -28.8205, 9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-7.6439, -48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [-7.6439, -48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [9.6179, -48.6127, 5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-10.257, -28.8205, 9.1359] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftjaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "attack": { + "loop": true, + "animation_length": 1, + "bones": { + "rightjaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [12.3553, -30.5717, -24.192] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-0.505, -4.5993, -32.7137] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-0.505, -4.5993, -32.7137] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -26.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -29] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 6, 2] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [0, 9.13, -4.06] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 6, -9] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 6, -9] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [12.14, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailbase": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [-5, 0, 0] + }, + "0.25": { + "pre": { + "vector": [17.5, 0, 0] + }, + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailmiddle": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [-5, 0, 0] + }, + "0.25": { + "pre": { + "vector": [20, 0, 0] + }, + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailtip": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [-5, 0, 0] + }, + "0.25": { + "pre": { + "vector": [27.5, 0, 0] + }, + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [12.3553, 30.5717, 24.192] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-0.505, 4.5993, 32.7137] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-0.505, 4.5993, 32.7137] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [1, 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" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 26.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 29] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-13.8657, 21.5444, -24.5629] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-6.3454, 41.2302, -13.6458] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-6.3454, 41.2302, -13.6458] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-13.8657, -21.5444, 24.5629] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-6.3454, -41.2302, 13.6458] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-6.3454, -41.2302, 13.6458] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftjaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/flytrap.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/flytrap.animation.json new file mode 100644 index 00000000..1f68650e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/flytrap.animation.json @@ -0,0 +1,2744 @@ +{ + "format_version": "1.8.0", + "animations": { + "dormant": { + "loop": true, + "animation_length": 4, + "bones": { + "stemLower": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "stemMiddle": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "stemUpper": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5417": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafRight": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongueBase": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-7.5, 0, 15] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongueMiddle": { + "rotation": { + "0.0": { + "post": { + "vector": [9.9161, 1.2988, -7.3873] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [9.9161, 1.2988, -7.3873] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongueTip": { + "rotation": { + "0.0": { + "post": { + "vector": [14.7822, 2.576, -9.6658] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [14.7822, 2.576, -9.6658] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafTipRight": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -72.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -72.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -92.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -72.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafLeft": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafTipLeft": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 72.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 72.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 92.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 72.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafTipFront": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 77.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 67.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafFront": { + "rotation": { + "0.0": { + "post": { + "vector": [-90, -22.5, -90] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-90, -35, -90] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-90, -22.5, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafBack": { + "rotation": { + "0.0": { + "post": { + "vector": [-90, 40, -90] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-90, 50, -90] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-90, 40, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafTipBack": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -95] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -95] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -110] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -95] + }, + "lerp_mode": "catmullrom" + } + } + }, + "saliva_L": { + "scale": { + "vector": [0, 0, 0] + } + }, + "saliva_L2": { + "scale": { + "vector": [0, 0, 0] + } + }, + "saliva_R": { + "scale": { + "vector": [0, 0, 0] + } + }, + "saliva_R2": { + "scale": { + "vector": [0, 0, 0] + } + } + } + }, + "idle": { + "loop": true, + "animation_length": 4, + "bones": { + "stemLower": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "stemMiddle": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "stemUpper": { + "rotation": { + "0.0": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafRight": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongueBase": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongueMiddle": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongueTip": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.1667": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "petal_L": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafTipRight": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -72.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -72.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -92.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -72.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafLeft": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafTipLeft": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 72.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 72.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 92.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 72.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafTipFront": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 77.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 67.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafFront": { + "rotation": { + "0.0": { + "post": { + "vector": [-90, -22.5, -90] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-90, -35, -90] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-90, -22.5, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafBack": { + "rotation": { + "0.0": { + "post": { + "vector": [-90, 40, -90] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-90, 50, -90] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-90, 40, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafTipBack": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -95] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -95] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -110] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -95] + }, + "lerp_mode": "catmullrom" + } + } + }, + "petal_R": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + } + } + }, + "saliva_L": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 1, 1.8] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "saliva_L2": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 1, 1.6] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "saliva_R": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 1, 1.8] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "grab": { + "loop": true, + "animation_length": 1.125, + "bones": { + "base": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.3333": { + "vector": [-17.5, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.5833": { + "vector": [-17.5, 0, 0] + }, + "0.625": { + "vector": [0, 0, 0] + }, + "1.125": { + "vector": [0, 0, 0] + } + } + }, + "stemLower": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "stemMiddle": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "stemUpper": { + "rotation": { + "0.0": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.8333": { + "vector": [0, 0, 0] + }, + "0.875": { + "vector": [0, 1.0822, 4.88148] + }, + "0.9167": { + "vector": [0, 0, 0] + } + } + }, + "leafRight": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongueBase": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.375": { + "vector": [1, 1, 1] + }, + "0.5": { + "vector": [1, 1.6, 1] + }, + "0.75": { + "vector": [1, 1.6, 1] + }, + "1.0": { + "pre": { + "vector": [1, 0.6, 1] + }, + "post": { + "vector": [1, 0.6, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongueMiddle": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.75": { + "pre": { + "vector": [1, 1.1813, 1] + }, + "post": { + "vector": [1, 1.1813, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 0.6, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongueTip": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.5, 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" + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.75": { + "pre": { + "vector": [1, 1.0609, 1] + }, + "post": { + "vector": [1, 1.0609, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 0.7, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "petal_L": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 94.72] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafTipRight": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -72.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafLeft": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafTipLeft": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 72.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 50] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 50] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 47.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafTipFront": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafFront": { + "rotation": { + "0.0": { + "post": { + "vector": [-90, -22.5, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-90, -67.5, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-90, -67.5, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [90, -27.5, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [89.99996, -5, 89.99996] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-89.99999, -17.5, -89.99999] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafBack": { + "rotation": { + "0.0": { + "post": { + "vector": [-90, 40, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-90.00001, 12.5, -89.99999] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-90.00001, 12.5, -89.99999] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-90, 35, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafTipBack": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -95] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -50] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -50] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "petal_R": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -94.72] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "saliva_L": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "saliva_L2": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "saliva_R": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "death": { + "loop": true, + "animation_length": 1, + "bones": { + "stemLower": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, -65, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.6667": { + "vector": [1, 0.6, 1] + }, + "0.8333": { + "vector": [0, 0, 0] + } + } + }, + "stemMiddle": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "stemUpper": { + "rotation": { + "0.0": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [19.02384, 6.61911, -4.99615] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-0.98, 6.62, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-2.94354, -33.87151, 0.23773] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafRight": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongueBase": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongueMiddle": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongueTip": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "petal_L": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.6667": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafTipRight": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -72.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafLeft": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafTipLeft": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 72.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafTipFront": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafFront": { + "rotation": { + "0.0": { + "post": { + "vector": [-90, -22.5, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [90, -20, 90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafBack": { + "rotation": { + "0.0": { + "post": { + "vector": [-90, 40, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [90.00001, 20, -270.00001] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafTipBack": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -95] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "petal_R": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "saliva_L": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "saliva_L2": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "saliva_R": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "attack": { + "loop": true, + "animation_length": 1, + "bones": { + "base": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 4] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 4] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, -6] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "stemLower": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-8.21888, -5.71617, -34.58897] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-8.21888, -5.71617, -34.58897] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [79.10661, -20.70481, -22.20765] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [79.10661, -20.70481, -22.20765] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "stemMiddle": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-23.42053, 4.20854, -24.66569] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-23.42053, 4.20854, -24.66569] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [8.06989, -41.56076, 30.78973] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [8.06989, -41.56076, 30.78973] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "stemUpper": { + "rotation": { + "0.0": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-32.06488, -10.58927, -30.90686] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-32.06488, -10.58927, -30.90686] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [31.65996, -17.26588, 21.741] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [31.65996, -17.26588, 21.741] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [16.59918, -2.86544, 34.89743] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafRight": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-28.22015, -26.49841, 37.56914] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongueBase": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongueMiddle": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongueTip": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "petal_L": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafTipRight": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -72.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [11.57417, 9.54195, -51.44258] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -72.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafLeft": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-1.78487, 2.7794, -25.4094] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [15.54307, -27.69337, -33.62515] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafTipLeft": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 72.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-2.03375, -7.33834, 38.44322] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 72.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafTipFront": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 67.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafFront": { + "rotation": { + "0.0": { + "post": { + "vector": [-90, -22.5, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-90, -32.5, -90] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-90, -22.5, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafBack": { + "rotation": { + "0.0": { + "post": { + "vector": [-90, 40, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-90, 15, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-63.78, 53.90614, -124.44928] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-90, 40, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leafTipBack": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -95] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, -60] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -95] + }, + "lerp_mode": "catmullrom" + } + } + }, + "petal_R": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "saliva_L": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "saliva_L2": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "saliva_R": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/skulking_fright.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/skulking_fright.animation.json new file mode 100644 index 00000000..8f8c3f13 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/skulking_fright.animation.json @@ -0,0 +1,6934 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 5, + "bones": { + "upperRightJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-10, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailbase": { + "rotation": { + "0.0": { + "post": { + "vector": [12.6866, -9.7606, -2.1856] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [12.6866, 9.7606, 2.1856] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [12.9264, -14.6364, -3.3192] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [12.6866, -9.7606, -2.1856] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailmiddle": { + "rotation": { + "0.0": { + "post": { + "vector": [15.9153, -19.2911, -5.3815] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [15.9153, 19.2911, 5.3815] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [15.9153, -19.2911, -5.3815] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailtip": { + "rotation": { + "0.0": { + "post": { + "vector": [18.5482, -19.0375, -6.246] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [19.5682, -26.1278, -8.8967] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [18.5482, 19.0375, 6.246] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [18.5482, -19.0375, -6.246] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lowerRightJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [10, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [10, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upperLeftJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-10, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lowerLeftJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [10, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [10, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddleleg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 17.6521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddleknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddlefoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddleleg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -17.6521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddleknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddlefoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftWing1": { + "rotation": { + "0.0": { + "post": { + "vector": [-38.9808, -3.1406, -63.2916] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightWing1": { + "rotation": { + "0.0": { + "post": { + "vector": [-38.9808, 3.1406, 63.2916] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftWing2": { + "rotation": { + "0.0": { + "post": { + "vector": [-47.3233, 8.7591, -67.0544] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightWing2": { + "rotation": { + "0.0": { + "post": { + "vector": [-47.3233, -8.7591, 67.0544] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 1, + "bones": { + "upperRightJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-10, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [10.257, -28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-9.6179, -48.6127, -5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [7.6439, -48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.4375": { + "post": { + "vector": [7.6439, -48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [10.257, -28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-9.6179, -48.6127, -5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [7.6439, -48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.9375": { + "post": { + "vector": [7.6439, -48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3125": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4375": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5625": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8125": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9375": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "post": { + "vector": [0, 3.75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3125": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4375": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5625": { + "post": { + "vector": [0, 3.75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8125": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9375": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 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" + } + } + }, + "tailbase": { + "rotation": { + "0.0": { + "post": { + "vector": [12.6866, -9.7606, -2.1856] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [12.6866, 9.7606, 2.1856] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [12.9264, -14.6364, -3.3192] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [12.6866, -9.7606, -2.1856] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailmiddle": { + "rotation": { + "0.0": { + "post": { + "vector": [15.9153, -19.2911, -5.3815] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [15.9153, 19.2911, 5.3815] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [15.9153, -19.2911, -5.3815] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailtip": { + "rotation": { + "0.0": { + "post": { + "vector": [18.5482, -19.0375, -6.246] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [19.5682, -26.1278, -8.8967] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [18.5482, 19.0375, 6.246] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [18.5482, -19.0375, -6.246] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [10.257, 28.8205, 9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-9.6179, 48.6127, 5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [7.6439, 48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.3125": { + "post": { + "vector": [7.6439, 48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10.257, 28.8205, 9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-9.6179, 48.6127, 5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [7.6439, 48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.8125": { + "post": { + "vector": [7.6439, 48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10.257, 28.8205, 9.1359] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-10.257, 28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "post": { + "vector": [-10.257, 28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-7.6439, 48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [9.6179, 48.6127, -5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-10.257, 28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.5625": { + "post": { + "vector": [-10.257, 28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-7.6439, 48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [9.6179, 48.6127, -5.3962] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-10.257, 28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-7.6439, -48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [-7.6439, -48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [9.6179, -48.6127, 5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-10.257, -28.8205, 9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-7.6439, -48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [-7.6439, -48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [9.6179, -48.6127, 5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-10.257, -28.8205, 9.1359] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lowerRightJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [15, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [15, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upperLeftJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-10, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lowerLeftJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [15, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [15, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddleleg": { + "rotation": { + "0.0": { + "post": { + "vector": [11.25, -16.6, 9.19] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "post": { + "vector": [8.9897, -3.2477, 3.637] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [-6.3574, 3.99, 12.1976] + }, + "lerp_mode": "catmullrom" + }, + "0.3125": { + "post": { + "vector": [2.6844, 19.5763, 16.2625] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [3.7346, 16.9546, 18.7439] + }, + "lerp_mode": "catmullrom" + }, + "0.4375": { + "post": { + "vector": [12.4227, -23.6439, 15.3703] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.21, -16.44, 8.76] + }, + "lerp_mode": "catmullrom" + }, + "0.5625": { + "post": { + "vector": [8.9897, -3.2477, 3.637] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [-6.3574, 3.99, 12.1976] + }, + "lerp_mode": "catmullrom" + }, + "0.8125": { + "post": { + "vector": [2.6844, 19.5763, 16.2625] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [3.7346, 16.9546, 18.7439] + }, + "lerp_mode": "catmullrom" + }, + "0.9375": { + "post": { + "vector": [12.4227, -23.6439, 15.3703] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [11.25, -16.6, 9.19] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 0, -0.06] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.3125": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.4375": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-1, 0, -0.12] + }, + "lerp_mode": "catmullrom" + }, + "0.5625": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.8125": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.9375": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-1, 0, -0.06] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddleknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddlefoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddleleg": { + "rotation": { + "0.0": { + "post": { + "vector": [12.21, 16.44, -8.76] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "post": { + "vector": [8.9897, 3.2477, -3.637] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [-6.3574, -3.99, -12.1976] + }, + "lerp_mode": "catmullrom" + }, + "0.3125": { + "post": { + "vector": [2.6844, -19.5763, -16.2625] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [3.7346, -16.9546, -18.7439] + }, + "lerp_mode": "catmullrom" + }, + "0.4375": { + "post": { + "vector": [12.4227, 23.6439, -15.3703] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.21, 16.44, -8.76] + }, + "lerp_mode": "catmullrom" + }, + "0.5625": { + "post": { + "vector": [8.9897, 3.2477, -3.637] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [-6.3574, -3.99, -12.1976] + }, + "lerp_mode": "catmullrom" + }, + "0.8125": { + "post": { + "vector": [2.6844, -19.5763, -16.2625] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [3.7346, -16.9546, -18.7439] + }, + "lerp_mode": "catmullrom" + }, + "0.9375": { + "post": { + "vector": [12.4227, 23.6439, -15.3703] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [11.25, 16.6, -9.19] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 0, -0.12] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.3125": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.4375": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 0, -0.12] + }, + "lerp_mode": "catmullrom" + }, + "0.5625": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.8125": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.9375": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 0, -0.06] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddleknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddlefoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftWing1": { + "rotation": { + "0.0": { + "post": { + "vector": [-38.9808, -3.1406, -63.2916] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightWing1": { + "rotation": { + "0.0": { + "post": { + "vector": [-38.9808, 3.1406, 63.2916] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftWing2": { + "rotation": { + "0.0": { + "post": { + "vector": [-47.3233, 8.7591, -67.0544] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightWing2": { + "rotation": { + "0.0": { + "post": { + "vector": [-47.3233, -8.7591, 67.0544] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "attackland": { + "loop": true, + "animation_length": 1, + "bones": { + "upperRightJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [-10, 10, 0] + }, + "post": { + "vector": [-10, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [12.3553, -30.5717, -24.192] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-0.505, -4.5993, -32.7137] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-0.505, -4.5993, -32.7137] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -26.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -29] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 6, 2] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [0, 9.13, -4.06] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 6, -9] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 6, -9] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [12.14, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailbase": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [-5, 0, 0] + }, + "0.25": { + "pre": { + "vector": [10, 0, 0] + }, + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailmiddle": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [-5, 0, 0] + }, + "0.25": { + "pre": { + "vector": [5, 0, 0] + }, + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailtip": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [-5, 0, 0] + }, + "0.25": { + "pre": { + "vector": [10, 0, 0] + }, + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [12.3553, 30.5717, 24.192] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-0.505, 4.5993, 32.7137] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-0.505, 4.5993, 32.7137] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [1, 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" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 26.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 29] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-13.8657, 21.5444, -24.5629] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-6.3454, 41.2302, -13.6458] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-6.3454, 41.2302, -13.6458] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-13.8657, -21.5444, 24.5629] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-6.3454, -41.2302, 13.6458] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-6.3454, -41.2302, 13.6458] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lowerRightJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [15, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [10, 10, 0] + }, + "post": { + "vector": [10, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upperLeftJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15, -15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [-10, -10, 0] + }, + "post": { + "vector": [-10, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lowerLeftJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [15, -15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [10, -10, 0] + }, + "post": { + "vector": [10, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddleleg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 17.6521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 17.6521] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 17.6521] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 17.6521] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 17.6521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 17.6521] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [1, 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" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddleknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddlefoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddleleg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -17.6521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-2.5016, -3.2493, -22.6194] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 19.5, -17.6521] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 19.5, -17.6521] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -17.6521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -17.6521] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [1, 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" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddleknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddlefoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -24.75] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftWing1": { + "rotation": { + "0.0": { + "post": { + "vector": [-38.9808, -3.1406, -63.2916] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightWing1": { + "rotation": { + "0.0": { + "post": { + "vector": [-38.9808, 3.1406, 63.2916] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftWing2": { + "rotation": { + "0.0": { + "post": { + "vector": [-47.3233, 8.7591, -67.0544] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightWing2": { + "rotation": { + "0.0": { + "post": { + "vector": [-47.3233, -8.7591, 67.0544] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "fly": { + "loop": true, + "animation_length": 5, + "bones": { + "upperRightJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-10, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [28.9762, -9.77, -61.5239] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [29.3284, -8.552, -63.7354] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [28.9762, -9.77, -61.5239] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailbase": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.6866, -9.7606, -2.1856] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-12.6866, 9.7606, 2.1856] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-12.9264, -14.6364, -3.3192] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-12.6866, -9.7606, -2.1856] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailmiddle": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.9153, -19.2911, -5.3815] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-15.9153, 19.2911, 5.3815] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-15.9153, -19.2911, -5.3815] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailtip": { + "rotation": { + "0.0": { + "post": { + "vector": [-18.5482, -19.0375, -6.246] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-19.5682, -26.1278, -8.8967] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-18.5482, 19.0375, 6.246] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-18.5482, -19.0375, -6.246] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [28.9762, 9.77, 61.5239] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [29.3284, 8.552, 63.7354] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [28.9762, 9.77, 61.5239] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-28.9762, 9.77, -61.5239] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-29.3284, 8.552, -63.7354] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-28.9762, 9.77, -61.5239] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-28.9762, -9.77, 61.5239] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-29.3284, -8.552, 63.7354] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-28.9762, -9.77, 61.5239] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lowerRightJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [25, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [10, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upperLeftJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-10, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lowerLeftJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [25, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [10, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddleleg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddleknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddlefoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddleleg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddleknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddlefoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftWing1": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.3333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.4167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.9167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.0833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.1667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.3333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.4167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.5833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.6667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.75": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.8333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.9167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.0833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.1667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.25": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.3333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.4167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.5833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.6667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.75": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.8333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.9167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightWing1": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.3333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.4167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.9167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.0833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.1667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.3333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.4167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.5833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.6667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.75": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.8333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.9167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.0833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.1667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.25": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.3333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.4167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.5833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.6667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.75": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.8333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.9167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftWing2": { + "rotation": { + "0.0": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.3333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.4167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.9167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.0833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.1667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.3333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.4167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.5833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.6667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.75": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.8333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.9167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.0833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.1667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.25": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.3333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.4167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.5833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.6667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.75": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.8333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.9167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightWing2": { + "rotation": { + "0.0": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.3333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.4167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.9167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.0833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.1667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.3333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.4167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.5833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.6667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.75": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.8333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.9167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.0833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.1667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.25": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.3333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.4167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.5833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.6667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.75": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.8333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.9167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "attackair": { + "loop": true, + "animation_length": 1, + "bones": { + "upperRightJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [-10, 10, 0] + }, + "post": { + "vector": [-10, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [28.9762, -9.77, -61.5239] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [29.3284, -8.552, -63.7354] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [28.9762, -9.77, -61.5239] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -10.39] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -44.61] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 4, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -2, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 3, -6] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [0, 5, -3] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [12.14, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailbase": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.6866, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-22.6866, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-12.6866, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailmiddle": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.9153, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-30.9153, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.9153, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailtip": { + "rotation": { + "0.0": { + "post": { + "vector": [-18.5482, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-36.0482, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-18.5482, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [28.9762, 9.77, 61.5239] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [29.3284, 8.552, 63.7354] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [28.9762, 9.77, 61.5239] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 10.39] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 44.61] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-28.9762, 9.77, -61.5239] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-29.3284, 8.552, -63.7354] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-28.9762, 9.77, -61.5239] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -10.39] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -44.61] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-28.9762, -9.77, 61.5239] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-29.3284, -8.552, 63.7354] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-28.9762, -9.77, 61.5239] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 10.39] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 44.61] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lowerRightJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [15, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [10, 10, 0] + }, + "post": { + "vector": [10, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upperLeftJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15, -15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [-10, -10, 0] + }, + "post": { + "vector": [-10, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lowerLeftJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [15, -15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [10, -10, 0] + }, + "post": { + "vector": [10, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddleleg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddleknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 10.39] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddlefoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 44.61] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddleleg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddleknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -10.39] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddlefoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -44.61] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftWing1": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightWing1": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftWing2": { + "rotation": { + "0.0": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightWing2": { + "rotation": { + "0.0": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/springbug.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/springbug.animation.json new file mode 100644 index 00000000..210f6cab --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/springbug.animation.json @@ -0,0 +1,5790 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 4.5, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [7.1226, 29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [7.1226, 29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "position": { + "0.0": { + "post": { + "vector": [0, -27.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, -27.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [7.1226, -29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [7.1226, -29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.12, -29.22, 14.36] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, -15, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 60, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 55, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [7.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, -55, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [7.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 1, + "bones": { + "backRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [0.9, 25.37, 22.42] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-14.7966, -19.965, 19.6746] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-12.2252, -29.0774, 13.585] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [13.6745, 58.6061, 23.203] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.9, 25.37, 22.42] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-4.9811, -0.4352, -4.9811] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0.0189, -0.4352, -4.9811] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [5.0189, -0.4352, -4.9811] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [4.9196, -1.0858, 2.4914] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [4.8066, -1.5099, 7.4746] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-0.1934, -1.5099, 7.4746] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-5.1934, -1.5099, 7.4746] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -31.1, -4] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [6, -34.72, -4] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [6, -32.3, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [4, -29.81, 8] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -28.1, 8] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-6, -34.96, 4] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-6, -32.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-6, -32.24, -6] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -31.1, -4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-14.7966, 19.965, -19.6746] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-12.2252, 29.0774, -13.585] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [13.6745, -58.6061, -23.203] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0.9, -25.37, -22.42] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-14.7966, 19.965, -19.6746] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [5.1528, 57.991, -18.9213] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-36.5714, 35.9552, -34.1778] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-23.5556, 44.8303, -14.2689] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5.1528, 57.991, -18.9213] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-36.5714, -35.9552, 34.1778] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-23.5556, -44.8303, 14.2689] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [5.1528, -57.991, 18.9213] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 70, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 50, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 70, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 50, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 70, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightArm": { + "rotation": { + "0.0": { + "post": { + "vector": [35, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5.3498, 1.8604, -13.9961] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [35, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-1.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-52.19, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1.87, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -70, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -50, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -70, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -50, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -70, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftArm": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.3498, -1.8604, 13.9961] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [35, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-5.3498, -1.8604, 13.9961] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-52.19, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-1.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1.87, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "attack": { + "animation_length": 1, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [7.1226, 29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [7.1226, 29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "position": { + "0.0": { + "post": { + "vector": [0, -27.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -27.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [7.1226, -29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [7.1226, -29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 60, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-25.3744, -0.9366, -25.6212] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [41.8878, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [59.72, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-25.3744, 0.9366, 25.6212] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [41.8878, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [59.72, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "walk2": { + "loop": true, + "animation_length": 1, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [5, -5, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-2.5, 2.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5, 5, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-2.5, -2.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5, -5, -2.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -0.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -0.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -0.33, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightThigh": { + "rotation": { + "0.0": { + "vector": [0.51, 55.12, 1.91] + }, + "0.0417": { + "vector": [-0.84, 56.48, -0.24] + }, + "0.0833": { + "vector": [-2.1902, 57.84, -2.3841] + }, + "0.125": { + "vector": [-5.39, 59.14, -6.72] + }, + "0.1667": { + "vector": [-7.0069, 60.4955, -9.1801] + }, + "0.2083": { + "vector": [-12.5271, 61.5058, -16.1362] + }, + "0.375": { + "pre": { + "vector": [9.8447, 60.1008, 12.6529] + }, + "post": { + "vector": [9.8447, 60.1008, 12.6529] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [15.5045, 44.0387, 23.0263] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "vector": [6.77, 46.22, 12.33] + }, + "0.75": { + "vector": [7.3232, 47.2763, 12.8944] + }, + "0.7917": { + "vector": [6.6433, 48.4639, 11.7564] + }, + "0.8333": { + "vector": [5.9013, 49.6755, 10.5073] + }, + "0.875": { + "vector": [4.56, 51.04, 8.36] + }, + "0.9167": { + "vector": [3.21, 52.4, 6.21] + }, + "0.9583": { + "vector": [1.86, 53.76, 4.06] + }, + "1.0": { + "vector": [0.51, 55.12, 1.91] + } + } + }, + "backRightKnee": { + "rotation": { + "0.0": { + "vector": [0, 0, 41.88] + }, + "0.2083": { + "vector": [0, 0, 70] + }, + "0.375": { + "pre": { + "vector": [0, 0, 57.5] + }, + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "vector": [0, 0, 2.5] + }, + "1.0": { + "vector": [0, 0, 41.88] + } + } + }, + "backRightLeg": { + "rotation": { + "0.0": { + "vector": [0, 0, -25.83] + }, + "0.2083": { + "vector": [0, 0, -55] + }, + "0.375": { + "pre": { + "vector": [0, 0, -47.5] + }, + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -1.26] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 18.59] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "vector": [0, 0, 15] + }, + "1.0": { + "vector": [0, 0, -25.83] + } + } + }, + "backRightFoot": { + "rotation": { + "0.0": { + "vector": [0, 0, 25.42] + }, + "0.2083": { + "vector": [0, 0, 40] + }, + "0.375": { + "pre": { + "vector": [0, 0, 28.34] + }, + "post": { + "vector": [0, 0, 28.34] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, -18.33] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "vector": [0, 0, 5] + }, + "1.0": { + "vector": [0, 0, 25.42] + } + } + }, + "rightGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "position": { + "vector": [0, -26, 0] + } + }, + "backLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [15.08, -49.85, -21.28] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [15.5045, -44.0387, -23.0263] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "vector": [6.77, -46.22, -12.33] + }, + "0.25": { + "vector": [7.3232, -47.2763, -12.8944] + }, + "0.2917": { + "vector": [6.6433, -48.4639, -11.7564] + }, + "0.3333": { + "vector": [5.9013, -49.6755, -10.5073] + }, + "0.375": { + "vector": [4.56, -51.04, -8.36] + }, + "0.4167": { + "vector": [3.21, -52.4, -6.21] + }, + "0.4583": { + "vector": [1.86, -53.76, -4.06] + }, + "0.5": { + "vector": [0.51, -55.12, -1.91] + }, + "0.5417": { + "vector": [-0.84, -56.48, 0.24] + }, + "0.5833": { + "vector": [-2.1902, -57.84, 2.3841] + }, + "0.625": { + "vector": [-5.39, -59.14, 6.72] + }, + "0.6667": { + "vector": [-7.0069, -60.4955, 9.1801] + }, + "0.7083": { + "vector": [-12.5271, -61.5058, 16.1362] + }, + "0.875": { + "pre": { + "vector": [9.8447, -60.1008, -12.6529] + }, + "post": { + "vector": [9.8447, -60.1008, -12.6529] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [15.08, -49.85, -21.28] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -19.88] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "vector": [0, 0, -2.5] + }, + "0.5": { + "vector": [0, 0, -41.88] + }, + "0.7083": { + "vector": [0, 0, -70] + }, + "0.875": { + "pre": { + "vector": [0, 0, -57.5] + }, + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -19.88] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 1.26] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0, -6.09] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -18.59] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "vector": [0, 0, -15] + }, + "0.5": { + "vector": [0, 0, 25.83] + }, + "0.7083": { + "vector": [0, 0, 55] + }, + "0.875": { + "pre": { + "vector": [0, 0, 47.5] + }, + "post": { + "vector": [0, 0, 47.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 1.26] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10.76] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0, 18.33] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "vector": [0, 0, -5] + }, + "0.5": { + "vector": [0, 0, -25.42] + }, + "0.7083": { + "vector": [0, 0, -40] + }, + "0.875": { + "pre": { + "vector": [0, 0, -28.34] + }, + "post": { + "vector": [0, 0, -28.34] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 10.76] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftThigh": { + "rotation": { + "0.0": { + "vector": [-6.77, 38.72, -12.33] + }, + "0.1667": { + "pre": { + "vector": [-17.3164, 41.1079, -35.1114] + }, + "post": { + "vector": [-17.3164, 41.1079, -35.1114] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-27.6005, 58.8053, -33.9605] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [-6.77, 63.72, -12.33] + }, + "0.625": { + "vector": [-6.77, 59.35, -12.33] + }, + "0.75": { + "vector": [-6.77, 54.97, -12.33] + }, + "0.875": { + "vector": [-6.77, 49.35, -12.33] + }, + "1.0": { + "vector": [-6.77, 38.72, -12.33] + } + } + }, + "frontLeftKnee": { + "rotation": { + "0.0": { + "vector": [0, 0, -10] + }, + "0.1667": { + "pre": { + "vector": [0, 0, -0.83] + }, + "post": { + "vector": [0, 0, -0.83] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -53] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, 0, -50] + }, + "1.0": { + "vector": [0, 0, -10] + } + } + }, + "frontLeftLeg": { + "rotation": { + "0.0": { + "vector": [0, 0, -12.5] + }, + "0.2083": { + "pre": { + "vector": [0, 0, -13.33] + }, + "post": { + "vector": [0, 0, -13.33] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 42.87] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, 0, 40] + }, + "0.75": { + "vector": [0, 0, 11.25] + }, + "1.0": { + "vector": [0, 0, -12.5] + } + } + }, + "frontLeftFoot": { + "rotation": { + "0.0": { + "vector": [0, 0, 17.5] + }, + "0.1667": { + "pre": { + "vector": [0, 0, 30.83] + }, + "post": { + "vector": [0, 0, 30.83] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -12.77] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, 0, -17.5] + }, + "1.0": { + "vector": [0, 0, 17.5] + } + } + }, + "frontRightThigh": { + "rotation": { + "0.0": { + "vector": [-6.77, -63.72, 12.33] + }, + "0.125": { + "vector": [-6.77, -59.35, 12.33] + }, + "0.25": { + "vector": [-6.77, -54.97, 12.33] + }, + "0.375": { + "vector": [-6.77, -49.35, 12.33] + }, + "0.5": { + "vector": [-6.77, -38.72, 12.33] + }, + "0.6667": { + "pre": { + "vector": [-17.3164, -41.1079, 35.1114] + }, + "post": { + "vector": [-17.3164, -41.1079, 35.1114] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-27.6005, -58.8053, 33.9605] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [-6.7675, -63.7224, 12.3301] + } + } + }, + "frontRightKnee": { + "rotation": { + "0.0": { + "vector": [0, 0, 50] + }, + "0.5": { + "vector": [0, 0, 10] + }, + "0.6667": { + "pre": { + "vector": [0, 0, 0.83] + }, + "post": { + "vector": [0, 0, 0.83] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 53] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, 50] + } + } + }, + "frontRightLeg": { + "rotation": { + "0.0": { + "vector": [0, 0, -40] + }, + "0.25": { + "vector": [0, 0, -11.25] + }, + "0.5": { + "vector": [0, 0, 12.5] + }, + "0.7083": { + "pre": { + "vector": [0, 0, 13.33] + }, + "post": { + "vector": [0, 0, 13.33] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -42.87] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, -40] + } + } + }, + "frontRightFoot": { + "rotation": { + "0.0": { + "vector": [0, 0, 17.5] + }, + "0.5": { + "vector": [0, 0, -17.5] + }, + "0.6667": { + "pre": { + "vector": [0, 0, -30.83] + }, + "post": { + "vector": [0, 0, -30.83] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 12.77] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, 17.5] + } + } + }, + "leftGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntenna": { + "rotation": { + "vector": [0, 60, 0] + } + }, + "rightArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntenna": { + "rotation": { + "vector": [0, -60, 0] + } + }, + "leftArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "walktest": { + "loop": true, + "bones": { + "root": { + "position": { + "vector": [0, 0, "-q.anim_time*90*1.1"] + } + } + } + }, + "jump_start": { + "animation_length": 0.5, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [-5.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [4.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-8, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [7.12, 29.22, 14.36] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [22.12, 19.22, 56.86] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [22.12, 19.22, 56.86] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 30, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 30, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 30, -17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -10, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 62.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "position": { + "0.0": { + "post": { + "vector": [0, -27.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, -43.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, -44.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -42.28, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, -36.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -17.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 33.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 48.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [7.12, -29.22, -14.36] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [22.12, -19.22, -56.86] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [22.12, -19.22, -56.86] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -30, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, -30, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -30, 17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 10, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.12, 29.22, -14.36] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-22.12, 19.22, -56.86] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-22.12, 19.22, -56.86] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 30, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 30, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 30, 17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 10, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.12, -29.22, 14.36] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-22.12, -19.22, 56.86] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-22.12, -19.22, 56.86] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -30, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, -30, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -30, -17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -10, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -62.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [20, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [50, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [57.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [20, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [50, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [57.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "jump_loop": { + "loop": true, + "animation_length": 1, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-8, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 30, -9.17] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 30, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 30, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 30, -9.17] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 16.67] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 16.67] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -50] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -50] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 50] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "pre": { + "vector": [-2.5, -2.5, -5] + }, + "post": { + "vector": [-2.5, -2.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [2.5, 2.5, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [5, 5, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 48.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 46.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 50.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 48.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -30, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -30, 9.17] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -30, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -30, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -5.94] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -16.67] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -5.94] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.34] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 50] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 52.34] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -30.31] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, -50] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -30.31] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 30, 8.61] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 30, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 30, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 30, 8.61] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftKnee": { + "rotation": { + "0.0": { + "vector": [0, 0, -20.09] + }, + "0.0833": { + "vector": [0, 0, -22.5] + }, + "0.1667": { + "vector": [0, 0, -19.17] + }, + "0.5833": { + "pre": { + "vector": [0, 0, -2.5] + }, + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, -20.09] + } + } + }, + "frontLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 50.83] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 43.06] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 36.88] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 50.83] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -45.16] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -51.53] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -45.16] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -30, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -30, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -30, -17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 19.17] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "vector": [0, 0, 22.5] + }, + "1.0": { + "vector": [0, 0, 19.17] + } + } + }, + "frontRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -43.06] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -36.88] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -43.06] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 51.53] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 51.53] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-2.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-2.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-2.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-2.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-2.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-2.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-2.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-2.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "jump_end": { + "animation_length": 0.625, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-8, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-15.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [6.54, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 30, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0.28, 17.47, -16.24] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [3.72, 22.56, 6.64] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [7.1226, 29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 29.62] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 15, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 14.46, 12.92] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, -4.94, -10.51] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 2.79, -27.37] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "vector": [0, 0, 0] + }, + "position": { + "0.0": { + "post": { + "vector": [0, 48.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, -9.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, -20.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, -27.05, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, -31.72, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, -30.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -30, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0.28, -17.47, 16.24] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [3.72, -22.56, -6.64] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [7.1226, -29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -29.62] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, -15, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -14.46, -12.92] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 4.94, 10.51] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -2.79, 27.37] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 30, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [10, 30, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-12.5, 30, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, -14.69] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [10, -30, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [10, -30, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-12.5, -30, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 14.69] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [-22.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [27.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [9.37, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [-22.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [27.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [9.37, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "hanging": { + "loop": true, + "animation_length": 2, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-6.88, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-6.88, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightThigh": { + "rotation": { + "vector": [35, 30, 57.5] + } + }, + "backRightKnee": { + "rotation": { + "vector": [0, 0, 12.5] + } + }, + "backRightLeg": { + "rotation": { + "vector": [0, 0, -45] + } + }, + "backRightFoot": { + "rotation": { + "vector": [0, 0, 45] + } + }, + "rightGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 31.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 35, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 31.25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "position": { + "vector": [0, -49, 0] + } + }, + "backLeftThigh": { + "rotation": { + "vector": [35, -30, -57.5] + } + }, + "backLeftKnee": { + "rotation": { + "vector": [0, 0, -12.5] + } + }, + "backLeftLeg": { + "rotation": { + "vector": [0, 0, 45] + } + }, + "backLeftFoot": { + "rotation": { + "vector": [0, 0, -45] + } + }, + "frontLeftThigh": { + "rotation": { + "vector": [-35, 30, -57.5] + } + }, + "frontLeftKnee": { + "rotation": { + "vector": [0, 0, -12.5] + } + }, + "frontLeftLeg": { + "rotation": { + "vector": [0, 0, 45] + } + }, + "frontLeftFoot": { + "rotation": { + "vector": [0, 0, -45] + } + }, + "frontRightThigh": { + "rotation": { + "vector": [-35, -30, 57.5] + } + }, + "frontRightKnee": { + "rotation": { + "vector": [0, 0, 12.5] + } + }, + "frontRightLeg": { + "rotation": { + "vector": [0, 0, -45] + } + }, + "frontRightFoot": { + "rotation": { + "vector": [0, 0, 45] + } + }, + "leftGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -31.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -35, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -31.25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 57.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 50, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 57.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightArm": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 17.5, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [2.5, 17.5, -20] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [12.5, 17.5, -20] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [7.5, 17.5, -20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "vector": [-42.5, 0, 0] + }, + "2.0": { + "vector": [-50, 0, 0] + } + } + }, + "rightClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [59.37, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "vector": [60, 0, 0] + }, + "2.0": { + "vector": [59.37, 0, 0] + } + } + }, + "leftAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -57.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -50, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -57.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftArm": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, -17.5, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [2.5, -17.5, 20] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [12.5, -17.5, 20] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [7.5, -17.5, 20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "vector": [-42.5, 0, 0] + }, + "2.0": { + "vector": [-50, 0, 0] + } + } + }, + "leftClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [59.37, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "vector": [60, 0, 0] + }, + "2.0": { + "vector": [59.37, 0, 0] + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/animations/stratoshark.animation.json b/common-1.20.1/src/main/resources/assets/antarchy/animations/stratoshark.animation.json new file mode 100644 index 00000000..7a3524e8 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/animations/stratoshark.animation.json @@ -0,0 +1,1692 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 8, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -9, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0833": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.5833": { + "post": { + "vector": [9.05152, -14.71181, -2.33362] + }, + "lerp_mode": "catmullrom" + }, + "5.9167": { + "post": { + "vector": [8.59652, 23.13213, 3.14923] + }, + "lerp_mode": "catmullrom" + }, + "6.2083": { + "post": { + "vector": [12.67376, -21.70208, -2.75583] + }, + "lerp_mode": "catmullrom" + }, + "6.5": { + "post": { + "vector": [7.93597, -1.62811, -0.02639] + }, + "lerp_mode": "catmullrom" + }, + "7.0": { + "post": { + "vector": [7.00225, -12.68164, -1.3867] + }, + "lerp_mode": "catmullrom" + }, + "8.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.3333": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "8.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_fin": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 7.5, -20] + }, + "lerp_mode": "catmullrom" + }, + "8.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_fin": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, -7.5, 20] + }, + "lerp_mode": "catmullrom" + }, + "8.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "8.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 21, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [0, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "8.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "shark": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "5.125": { + "post": { + "vector": [0, 0, 8.34] + }, + "lerp_mode": "catmullrom" + }, + "5.5417": { + "post": { + "vector": [0, 0, -9.4] + }, + "lerp_mode": "catmullrom" + }, + "6.0": { + "post": { + "vector": [0, 0, 7.28] + }, + "lerp_mode": "catmullrom" + }, + "6.4583": { + "post": { + "vector": [0, 0, -20.48] + }, + "lerp_mode": "catmullrom" + }, + "7.125": { + "post": { + "vector": [0, 0, 10.84] + }, + "lerp_mode": "catmullrom" + }, + "8.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "8.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 60] + }, + "lerp_mode": "catmullrom" + }, + "8.0": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 50] + }, + "lerp_mode": "catmullrom" + }, + "8.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + } + } + }, + "halo": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "8.0": { + "post": { + "vector": [0, -360, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 47.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -60] + }, + "lerp_mode": "catmullrom" + }, + "8.0": { + "post": { + "vector": [0, 0, 47.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 50] + }, + "lerp_mode": "catmullrom" + }, + "8.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing_back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 60] + }, + "lerp_mode": "catmullrom" + }, + "8.0": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 50] + }, + "lerp_mode": "catmullrom" + }, + "8.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing_back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 47.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 60] + }, + "lerp_mode": "catmullrom" + }, + "8.0": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 50] + }, + "lerp_mode": "catmullrom" + }, + "8.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "swim": { + "loop": true, + "animation_length": 4, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-24.99904, 0.15373, -0.04445] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.1667": { + "post": { + "vector": [20.04, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_fin": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 10, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "3.9583": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_fin": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -10, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "3.9583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5417": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "shark": { + "rotation": { + "0.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [27.5, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [39.87576, -0.221, 0.70095] + }, + "lerp_mode": "catmullrom" + }, + "3.2083": { + "post": { + "vector": [8.10446, 0, -10.81866] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, -7, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [0, -3.07, -23] + }, + "lerp_mode": "catmullrom" + }, + "3.0833": { + "post": { + "vector": [0, 1.32, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 82.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "halo": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, -360, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 82.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing_back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 82.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing_back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 82.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "attack": { + "animation_length": 1, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-23.90662, 11.91236, 24.96938] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [72.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [72.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_fin": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [18.89595, 26.94622, 37.0662] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [18.89595, 26.94622, 37.0662] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_fin": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [18.89595, -26.94622, -37.0662] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [18.89595, -26.94622, -37.0662] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5417": { + "vector": [0.03742, 9.00972, 6.31059] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [27.22644, -22.52101, -11.14843] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [29.87229, -22.01609, -12.15123] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "shark": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "vector": [15.00835, -0.0566, -0.1949] + }, + "0.2917": { + "vector": [15.00835, -0.0566, -0.1949] + }, + "0.5": { + "vector": [35.00835, -0.0566, -0.1949] + }, + "0.5833": { + "vector": [34.06837, -8.59433, 12.1853] + }, + "1.0": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -4, 8] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, -4, 8] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-1, -4, -9] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0.44, -4, -10.06] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-1, -4, -9] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -4, -9] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, -16, -9] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, -9, -9] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-28.48347, -25.49671, -55.92684] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-28.48347, -25.49671, -55.92684] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-26.25382, 27.79687, 25.89482] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-26.25382, 27.79687, 25.89482] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.40559, -30.89218, -68.73521] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-22.40559, -30.89218, -68.73521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + } + } + }, + "halo": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-28.48347, -25.49671, -55.92684] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-28.48347, -25.49671, -55.92684] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-26.25382, 27.79687, 25.89482] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-26.25382, 27.79687, 25.89482] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.40559, -30.89218, -68.73521] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-22.40559, -30.89218, -68.73521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing_back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-28.48347, -25.49671, -55.92684] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-28.48347, -25.49671, -55.92684] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-26.25382, 27.79687, 25.89482] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-26.25382, 27.79687, 25.89482] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.40559, -30.89218, -68.73521] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-22.40559, -30.89218, -68.73521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing_back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-28.48347, -25.49671, -55.92684] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-28.48347, -25.49671, -55.92684] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-26.25382, 27.79687, 25.89482] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-26.25382, 27.79687, 25.89482] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.40559, -30.89218, -68.73521] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-22.40559, -30.89218, -68.73521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/crawling_blight_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/crawling_blight_egg.json new file mode 100644 index 00000000..be0e9726 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/crawling_blight_egg.json @@ -0,0 +1,76 @@ +{ + "variants": { + "eggs=1,hatch=0": [ + { "model": "antarchy:block/crawling_blight_egg_1" }, + { "model": "antarchy:block/crawling_blight_egg_1", "y": 90 }, + { "model": "antarchy:block/crawling_blight_egg_1", "y": 180 }, + { "model": "antarchy:block/crawling_blight_egg_1", "y": 270 } + ], + "eggs=1,hatch=1": [ + { "model": "antarchy:block/slightly_cracked_crawling_blight_egg_1" }, + { "model": "antarchy:block/slightly_cracked_crawling_blight_egg_1", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_crawling_blight_egg_1", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_crawling_blight_egg_1", "y": 270 } + ], + "eggs=1,hatch=2": [ + { "model": "antarchy:block/very_cracked_crawling_blight_egg_1" }, + { "model": "antarchy:block/very_cracked_crawling_blight_egg_1", "y": 90 }, + { "model": "antarchy:block/very_cracked_crawling_blight_egg_1", "y": 180 }, + { "model": "antarchy:block/very_cracked_crawling_blight_egg_1", "y": 270 } + ], + "eggs=2,hatch=0": [ + { "model": "antarchy:block/crawling_blight_egg_2" }, + { "model": "antarchy:block/crawling_blight_egg_2", "y": 90 }, + { "model": "antarchy:block/crawling_blight_egg_2", "y": 180 }, + { "model": "antarchy:block/crawling_blight_egg_2", "y": 270 } + ], + "eggs=2,hatch=1": [ + { "model": "antarchy:block/slightly_cracked_crawling_blight_egg_2" }, + { "model": "antarchy:block/slightly_cracked_crawling_blight_egg_2", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_crawling_blight_egg_2", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_crawling_blight_egg_2", "y": 270 } + ], + "eggs=2,hatch=2": [ + { "model": "antarchy:block/very_cracked_crawling_blight_egg_2" }, + { "model": "antarchy:block/very_cracked_crawling_blight_egg_2", "y": 90 }, + { "model": "antarchy:block/very_cracked_crawling_blight_egg_2", "y": 180 }, + { "model": "antarchy:block/very_cracked_crawling_blight_egg_2", "y": 270 } + ], + "eggs=3,hatch=0": [ + { "model": "antarchy:block/crawling_blight_egg_3" }, + { "model": "antarchy:block/crawling_blight_egg_3", "y": 90 }, + { "model": "antarchy:block/crawling_blight_egg_3", "y": 180 }, + { "model": "antarchy:block/crawling_blight_egg_3", "y": 270 } + ], + "eggs=3,hatch=1": [ + { "model": "antarchy:block/slightly_cracked_crawling_blight_egg_3" }, + { "model": "antarchy:block/slightly_cracked_crawling_blight_egg_3", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_crawling_blight_egg_3", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_crawling_blight_egg_3", "y": 270 } + ], + "eggs=3,hatch=2": [ + { "model": "antarchy:block/very_cracked_crawling_blight_egg_3" }, + { "model": "antarchy:block/very_cracked_crawling_blight_egg_3", "y": 90 }, + { "model": "antarchy:block/very_cracked_crawling_blight_egg_3", "y": 180 }, + { "model": "antarchy:block/very_cracked_crawling_blight_egg_3", "y": 270 } + ], + "eggs=4,hatch=0": [ + { "model": "antarchy:block/crawling_blight_egg_4" }, + { "model": "antarchy:block/crawling_blight_egg_4", "y": 90 }, + { "model": "antarchy:block/crawling_blight_egg_4", "y": 180 }, + { "model": "antarchy:block/crawling_blight_egg_4", "y": 270 } + ], + "eggs=4,hatch=1": [ + { "model": "antarchy:block/slightly_cracked_crawling_blight_egg_4" }, + { "model": "antarchy:block/slightly_cracked_crawling_blight_egg_4", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_crawling_blight_egg_4", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_crawling_blight_egg_4", "y": 270 } + ], + "eggs=4,hatch=2": [ + { "model": "antarchy:block/very_cracked_crawling_blight_egg_4" }, + { "model": "antarchy:block/very_cracked_crawling_blight_egg_4", "y": 90 }, + { "model": "antarchy:block/very_cracked_crawling_blight_egg_4", "y": 180 }, + { "model": "antarchy:block/very_cracked_crawling_blight_egg_4", "y": 270 } + ] + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/flytrap_goo_block.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/flytrap_goo_block.json new file mode 100644 index 00000000..24b18afc --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/flytrap_goo_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/flytrap_goo_block" + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/skulking_fright_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/skulking_fright_egg.json new file mode 100644 index 00000000..e7cbf512 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/skulking_fright_egg.json @@ -0,0 +1,76 @@ +{ + "variants": { + "eggs=1,hatch=0": [ + { "model": "antarchy:block/skulking_fright_egg_1" }, + { "model": "antarchy:block/skulking_fright_egg_1", "y": 90 }, + { "model": "antarchy:block/skulking_fright_egg_1", "y": 180 }, + { "model": "antarchy:block/skulking_fright_egg_1", "y": 270 } + ], + "eggs=1,hatch=1": [ + { "model": "antarchy:block/slightly_cracked_skulking_fright_egg_1" }, + { "model": "antarchy:block/slightly_cracked_skulking_fright_egg_1", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_skulking_fright_egg_1", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_skulking_fright_egg_1", "y": 270 } + ], + "eggs=1,hatch=2": [ + { "model": "antarchy:block/very_cracked_skulking_fright_egg_1" }, + { "model": "antarchy:block/very_cracked_skulking_fright_egg_1", "y": 90 }, + { "model": "antarchy:block/very_cracked_skulking_fright_egg_1", "y": 180 }, + { "model": "antarchy:block/very_cracked_skulking_fright_egg_1", "y": 270 } + ], + "eggs=2,hatch=0": [ + { "model": "antarchy:block/skulking_fright_egg_2" }, + { "model": "antarchy:block/skulking_fright_egg_2", "y": 90 }, + { "model": "antarchy:block/skulking_fright_egg_2", "y": 180 }, + { "model": "antarchy:block/skulking_fright_egg_2", "y": 270 } + ], + "eggs=2,hatch=1": [ + { "model": "antarchy:block/slightly_cracked_skulking_fright_egg_2" }, + { "model": "antarchy:block/slightly_cracked_skulking_fright_egg_2", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_skulking_fright_egg_2", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_skulking_fright_egg_2", "y": 270 } + ], + "eggs=2,hatch=2": [ + { "model": "antarchy:block/very_cracked_skulking_fright_egg_2" }, + { "model": "antarchy:block/very_cracked_skulking_fright_egg_2", "y": 90 }, + { "model": "antarchy:block/very_cracked_skulking_fright_egg_2", "y": 180 }, + { "model": "antarchy:block/very_cracked_skulking_fright_egg_2", "y": 270 } + ], + "eggs=3,hatch=0": [ + { "model": "antarchy:block/skulking_fright_egg_3" }, + { "model": "antarchy:block/skulking_fright_egg_3", "y": 90 }, + { "model": "antarchy:block/skulking_fright_egg_3", "y": 180 }, + { "model": "antarchy:block/skulking_fright_egg_3", "y": 270 } + ], + "eggs=3,hatch=1": [ + { "model": "antarchy:block/slightly_cracked_skulking_fright_egg_3" }, + { "model": "antarchy:block/slightly_cracked_skulking_fright_egg_3", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_skulking_fright_egg_3", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_skulking_fright_egg_3", "y": 270 } + ], + "eggs=3,hatch=2": [ + { "model": "antarchy:block/very_cracked_skulking_fright_egg_3" }, + { "model": "antarchy:block/very_cracked_skulking_fright_egg_3", "y": 90 }, + { "model": "antarchy:block/very_cracked_skulking_fright_egg_3", "y": 180 }, + { "model": "antarchy:block/very_cracked_skulking_fright_egg_3", "y": 270 } + ], + "eggs=4,hatch=0": [ + { "model": "antarchy:block/skulking_fright_egg_4" }, + { "model": "antarchy:block/skulking_fright_egg_4", "y": 90 }, + { "model": "antarchy:block/skulking_fright_egg_4", "y": 180 }, + { "model": "antarchy:block/skulking_fright_egg_4", "y": 270 } + ], + "eggs=4,hatch=1": [ + { "model": "antarchy:block/slightly_cracked_skulking_fright_egg_4" }, + { "model": "antarchy:block/slightly_cracked_skulking_fright_egg_4", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_skulking_fright_egg_4", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_skulking_fright_egg_4", "y": 270 } + ], + "eggs=4,hatch=2": [ + { "model": "antarchy:block/very_cracked_skulking_fright_egg_4" }, + { "model": "antarchy:block/very_cracked_skulking_fright_egg_4", "y": 90 }, + { "model": "antarchy:block/very_cracked_skulking_fright_egg_4", "y": 180 }, + { "model": "antarchy:block/very_cracked_skulking_fright_egg_4", "y": 270 } + ] + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/springbug_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/springbug_egg.json new file mode 100644 index 00000000..ad413016 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/springbug_egg.json @@ -0,0 +1,20 @@ +{ + "variants": { + "hanging=false,rotated=false": { + "model": "antarchy:block/springbug_egg" + }, + "hanging=false,rotated=true": { + "model": "antarchy:block/springbug_egg", + "y": 90 + }, + "hanging=true,rotated=false": { + "model": "antarchy:block/springbug_egg", + "x": 180 + }, + "hanging=true,rotated=true": { + "model": "antarchy:block/springbug_egg", + "x": 180, + "y": 90 + } + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/undertrial_spawner.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/undertrial_spawner.json new file mode 100644 index 00000000..649a83cc --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/undertrial_spawner.json @@ -0,0 +1,8 @@ +{ + "variants": { + "active=false,ominous=false": {"model": "antarchy:block/undertrial_spawner_inactive", "x": 180}, + "active=false,ominous=true": {"model": "antarchy:block/undertrial_spawner_inactive", "x": 180}, + "active=true,ominous=false": {"model": "antarchy:block/undertrial_spawner_active", "x": 180}, + "active=true,ominous=true": {"model": "antarchy:block/undertrial_spawner_active", "x": 180} + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/blockstates/undervault.json b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/undervault.json new file mode 100644 index 00000000..93e588a9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/blockstates/undervault.json @@ -0,0 +1,16 @@ +{ + "variants": { + "active=false,facing=down": {"model": "antarchy:block/undervault_off", "x": 180}, + "active=false,facing=up": {"model": "antarchy:block/undervault_off", "x": 270}, + "active=false,facing=north": {"model": "antarchy:block/undervault_off"}, + "active=false,facing=south": {"model": "antarchy:block/undervault_off", "y": 180}, + "active=false,facing=east": {"model": "antarchy:block/undervault_off", "y": 90}, + "active=false,facing=west": {"model": "antarchy:block/undervault_off", "y": 270}, + "active=true,facing=down": {"model": "antarchy:block/undervault_on", "x": 180}, + "active=true,facing=up": {"model": "antarchy:block/undervault_on", "x": 270}, + "active=true,facing=north": {"model": "antarchy:block/undervault_on"}, + "active=true,facing=south": {"model": "antarchy:block/undervault_on", "y": 180}, + "active=true,facing=east": {"model": "antarchy:block/undervault_on", "y": 90}, + "active=true,facing=west": {"model": "antarchy:block/undervault_on", "y": 270} + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/crawling_blight.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/crawling_blight.geo.json new file mode 100644 index 00000000..b073dc1d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/crawling_blight.geo.json @@ -0,0 +1,194 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.crawlingblight", + "texture_width": 256, + "texture_height": 256, + "visible_bounds_width": 9, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "root", + "pivot": [0, 0, 0] + }, + { + "name": "body", + "parent": "root", + "pivot": [0, 0, 0], + "cubes": [ + {"origin": [-6, 0, -7], "size": [12, 12, 14], "uv": [0, 0]}, + {"origin": [-4, 2, -11], "size": [1, 2, 5], "pivot": [-3.5, 3, -7], "rotation": [24.14867, 20.70481, 9.00717], "uv": [0, 0]}, + {"origin": [3, 2, -11], "size": [1, 2, 5], "pivot": [3.5, 3, -7], "rotation": [24.14867, -20.70481, -9.00717], "uv": [0, 0], "mirror": true}, + {"origin": [-4, 8, -11], "size": [1, 2, 5], "pivot": [-3.5, 9, -7], "rotation": [-24.14867, 20.70481, -9.00717], "uv": [0, 0]}, + {"origin": [3, 8, -11], "size": [1, 2, 5], "pivot": [3.5, 9, -7], "rotation": [-24.14867, -20.70481, 9.00717], "uv": [0, 0], "mirror": true}, + {"origin": [-4, 2, -7], "size": [8, 8, 2], "uv": [104, 12]}, + {"origin": [-6, 0, -7], "size": [12, 0, 5], "pivot": [0, 0, -7], "rotation": [30, 0, -180], "uv": [100, 84]}, + {"origin": [-6, 0, -5], "size": [12, 0, 6], "pivot": [0, 0, -5], "rotation": [25, 0, -180], "uv": [100, 54]}, + {"origin": [-6, 0, -2], "size": [12, 0, 7], "pivot": [0, 0, -2], "rotation": [15, 0, -180], "uv": [100, 43]}, + {"origin": [-6, 0, 2], "size": [12, 0, 8], "pivot": [0, 0, 2], "rotation": [10, 0, -180], "uv": [92, 35]}, + {"origin": [-6, 0, 7], "size": [12, 0, 9], "pivot": [0, 0, 7], "rotation": [0, 0, 180], "uv": [92, 26]}, + {"origin": [-12, 6, -2], "size": [12, 0, 7], "pivot": [-6, 6, -2], "rotation": [20, 0, -90], "uv": [100, 43], "mirror": true}, + {"origin": [-12, 6, 2], "size": [12, 0, 8], "pivot": [-6, 6, 2], "rotation": [10, 0, -90], "uv": [92, 35], "mirror": true}, + {"origin": [-12, 6, 7], "size": [12, 0, 9], "pivot": [-6, 6, 7], "rotation": [5, 0, -90], "uv": [92, 26], "mirror": true}, + {"origin": [0, 6, 2], "size": [12, 0, 8], "pivot": [6, 6, 2], "rotation": [10, 0, 90], "uv": [92, 35]}, + {"origin": [0, 6, 7], "size": [12, 0, 9], "pivot": [6, 6, 7], "rotation": [5, 0, 90], "uv": [92, 26]}, + {"origin": [0, 6, -2], "size": [12, 0, 7], "pivot": [6, 6, -2], "rotation": [20, 0, 90], "uv": [100, 43]} + ] + }, + { + "name": "bone", + "parent": "body", + "pivot": [0, 6, -7], + "cubes": [ + {"origin": [-6, 9.85673, -2.40373], "size": [12, 0, 5], "pivot": [0, 6, -7], "rotation": [50, 0, 0], "uv": [100, 84]}, + {"origin": [-6, 10.24264, -0.75736], "size": [12, 0, 6], "pivot": [0, 6, -5], "rotation": [45, 0, 0], "uv": [100, 54]}, + {"origin": [-6, 11.19615, 1], "size": [12, 0, 7], "pivot": [0, 6, -2], "rotation": [30, 0, 0], "uv": [100, 43]}, + {"origin": [-6, 11.43785, 4.53571], "size": [12, 0, 8], "pivot": [0, 6, 2], "rotation": [25, 0, 0], "uv": [92, 35]}, + {"origin": [-6, 11.79555, 8.55291], "size": [12, 0, 9], "pivot": [0, 6, 7], "rotation": [15, 0, 0], "uv": [92, 26]} + ] + }, + { + "name": "rightjaw", + "parent": "body", + "pivot": [-6, 6, -7], + "cubes": [ + {"origin": [-6, 3, -13], "size": [4, 6, 6], "uv": [104, 0]} + ] + }, + { + "name": "leftjaw", + "parent": "body", + "pivot": [6, 6, -7], + "cubes": [ + {"origin": [2, 3, -13], "size": [4, 6, 6], "uv": [104, 0], "mirror": true} + ] + }, + { + "name": "tailbase", + "parent": "body", + "pivot": [0, 6, 7], + "cubes": [ + {"origin": [-5, 1, 7], "size": [10, 10, 14], "uv": [52, 46]} + ] + }, + { + "name": "tailmiddle", + "parent": "tailbase", + "pivot": [0, 6, 21], + "cubes": [ + {"origin": [-3.5, 2.5, 21], "size": [7, 7, 14], "uv": [48, 94]} + ] + }, + { + "name": "tailtip", + "parent": "tailmiddle", + "pivot": [0, 6, 35], + "cubes": [ + {"origin": [-1.5, 4.5, 35], "size": [3, 3, 14], "uv": [58, 26]}, + {"origin": [-4.5, 6, 39], "size": [9, 0, 20], "uv": [0, 26]} + ] + }, + { + "name": "rightfrontleg", + "parent": "root", + "pivot": [-6, 8, -3], + "cubes": [ + {"origin": [-18, 6, -6], "size": [12, 4, 4], "uv": [100, 60]} + ] + }, + { + "name": "rightfrontknee", + "parent": "rightfrontleg", + "pivot": [-18, 6, -4], + "cubes": [ + {"origin": [-18, 6, -5], "size": [3, 16, 2], "uv": [42, 115]} + ] + }, + { + "name": "rightfrontfoot", + "parent": "rightfrontknee", + "pivot": [-18, 18, -4], + "cubes": [ + {"origin": [-35, 18, -4], "size": [20, 4, 0], "uv": [100, 50]} + ] + }, + { + "name": "rightbackleg", + "parent": "root", + "pivot": [-6, 8, 4], + "cubes": [ + {"origin": [-18, 6, 3], "size": [12, 4, 4], "uv": [100, 60]} + ] + }, + { + "name": "rightbackknee", + "parent": "rightbackleg", + "pivot": [-18, 6, 5], + "cubes": [ + {"origin": [-18, 6, 4], "size": [3, 16, 2], "uv": [42, 115]} + ] + }, + { + "name": "rightbackfoot", + "parent": "rightbackknee", + "pivot": [-18, 18, 5], + "cubes": [ + {"origin": [-35, 18, 5], "size": [20, 4, 0], "uv": [100, 50]} + ] + }, + { + "name": "leftfrontleg", + "parent": "root", + "pivot": [6, 8, -3], + "cubes": [ + {"origin": [6, 6, -6], "size": [12, 4, 4], "uv": [100, 60], "mirror": true} + ] + }, + { + "name": "leftfrontknee", + "parent": "leftfrontleg", + "pivot": [18, 6, -4], + "cubes": [ + {"origin": [15, 6, -5], "size": [3, 16, 2], "uv": [42, 115], "mirror": true} + ] + }, + { + "name": "leftfrontfoot", + "parent": "leftfrontknee", + "pivot": [18, 18, -4], + "cubes": [ + {"origin": [15, 18, -4], "size": [20, 4, 0], "uv": [100, 50], "mirror": true} + ] + }, + { + "name": "leftbackleg", + "parent": "root", + "pivot": [6, 8, 4], + "cubes": [ + {"origin": [6, 6, 3], "size": [12, 4, 4], "uv": [100, 60], "mirror": true} + ] + }, + { + "name": "leftbackknee", + "parent": "leftbackleg", + "pivot": [18, 6, 5], + "cubes": [ + {"origin": [15, 6, 4], "size": [3, 16, 2], "uv": [42, 115], "mirror": true} + ] + }, + { + "name": "leftbackfoot", + "parent": "leftbackknee", + "pivot": [18, 18, 5], + "cubes": [ + {"origin": [15, 18, 5], "size": [20, 4, 0], "uv": [100, 50], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/flytrap.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/flytrap.geo.json new file mode 100644 index 00000000..d8943375 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/flytrap.geo.json @@ -0,0 +1,210 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.flytrap", + "texture_width": 256, + "texture_height": 256, + "visible_bounds_width": 8, + "visible_bounds_height": 7.5, + "visible_bounds_offset": [0, 3.25, 0] + }, + "bones": [ + { + "name": "root", + "pivot": [0, 0, 0], + "cubes": [ + {"origin": [-16, 0, -16], "size": [32, 0, 32], "inflate": 0.01, "uv": [26, 2]} + ] + }, + { + "name": "base", + "parent": "root", + "pivot": [0, 0, 0], + "cubes": [ + {"origin": [-8, 0, -8], "size": [16, 8, 16], "uv": [32, 61]} + ] + }, + { + "name": "stemLower", + "parent": "base", + "pivot": [0, 6, 0], + "cubes": [ + {"origin": [-4, 6, -4], "size": [8, 17, 8], "inflate": 0.05, "uv": [1, 18]} + ] + }, + { + "name": "stemMiddle", + "parent": "stemLower", + "pivot": [0, 23, 0], + "cubes": [ + {"origin": [-4, 23, -4], "size": [8, 17, 8], "inflate": 0.025, "uv": [0, 43]} + ] + }, + { + "name": "stemUpper", + "parent": "stemMiddle", + "pivot": [0, 40, 0], + "cubes": [ + {"origin": [-4, 40, -4], "size": [8, 17, 8], "uv": [0, 68]} + ] + }, + { + "name": "head", + "parent": "stemUpper", + "pivot": [0, 57, 0], + "cubes": [ + {"origin": [-8, 57, -8], "size": [16, 5, 16], "uv": [0, 93]}, + {"origin": [-8, 57, -8], "size": [16, 5, 16], "inflate": 0.5, "uv": [0, 114]} + ] + }, + { + "name": "petal_L", + "parent": "head", + "pivot": [0, 61, 0], + "cubes": [ + {"origin": [0, 61, -14], "size": [12, 24, 28], "uv": [64, 85], "mirror": true}, + {"origin": [-8, 61, -14], "size": [8, 24, 0], "pivot": [0, 73, -14], "rotation": [0, -22.5, 0], "uv": [32, 53], "mirror": true}, + {"origin": [-8, 61, 14], "size": [8, 24, 0], "pivot": [0, 73, 14], "rotation": [0, 22.5, 0], "uv": [32, 53], "mirror": true}, + {"origin": [-11, 85, -14], "size": [11, 0, 28], "pivot": [0, 85, 0], "rotation": [0, 0, 45], "uv": [5, 24], "mirror": true} + ] + }, + { + "name": "saliva_L", + "parent": "petal_L", + "pivot": [0, 75.5, -13], + "cubes": [ + {"origin": [0, 75, -20], "size": [0, 1, 7], "inflate": 0.01, "uv": [35, 13], "mirror": true} + ] + }, + { + "name": "saliva_L2", + "parent": "petal_L", + "pivot": [0, 80.5, -13], + "cubes": [ + {"origin": [0, 80, -24], "size": [0, 1, 11], "inflate": 0.01, "uv": [31, 10], "mirror": true} + ] + }, + { + "name": "petal_R", + "parent": "head", + "pivot": [0, 61, 0], + "cubes": [ + {"origin": [-12, 61, -14], "size": [12, 24, 28], "uv": [64, 85]}, + {"origin": [0, 61, -14], "size": [8, 24, 0], "pivot": [0, 73, -14], "rotation": [0, 22.5, 0], "uv": [32, 53]}, + {"origin": [0, 61, 14], "size": [8, 24, 0], "pivot": [0, 73, 14], "rotation": [0, -22.5, 0], "uv": [32, 53]}, + {"origin": [0, 85, -14], "size": [11, 0, 28], "pivot": [0, 85, 0], "rotation": [0, 0, -45], "uv": [5, 24]} + ] + }, + { + "name": "saliva_R", + "parent": "petal_R", + "pivot": [0, 75.5, -13], + "cubes": [ + {"origin": [0, 75, -20], "size": [0, 1, 7], "inflate": 0.01, "uv": [35, 13]} + ] + }, + { + "name": "saliva_R2", + "parent": "petal_R", + "pivot": [0, 80.5, -13], + "cubes": [ + {"origin": [0, 80, -24], "size": [0, 1, 11], "inflate": 0.01, "uv": [31, 10]} + ] + }, + { + "name": "tongueBase", + "parent": "head", + "pivot": [0, 61, 0], + "cubes": [ + {"origin": [-2, 61, -2], "size": [4, 8, 4], "uv": [12, 0]} + ] + }, + { + "name": "tongueMiddle", + "parent": "tongueBase", + "pivot": [0, 69, 0], + "cubes": [ + {"origin": [-1, 69, -1], "size": [2, 16, 2], "uv": [0, 0]} + ] + }, + { + "name": "tongueTip", + "parent": "tongueMiddle", + "pivot": [0, 85, 0], + "cubes": [ + {"origin": [0, 85, -1], "size": [0, 16, 2], "uv": [8, 0]}, + {"origin": [-1, 101, -1], "size": [2, 2, 2], "uv": [32, 6]} + ] + }, + { + "name": "leafRight", + "parent": "base", + "pivot": [-8, 8, 0], + "cubes": [ + {"origin": [-28, 8, -12], "size": [20, 0, 24], "uv": [72, 61]} + ] + }, + { + "name": "leafTipRight", + "parent": "leafRight", + "pivot": [-28, 8, 0], + "cubes": [ + {"origin": [-56, 8, -12], "size": [28, 0, 24], "uv": [31, 37]} + ] + }, + { + "name": "leafLeft", + "parent": "base", + "pivot": [8, 8, 0], + "cubes": [ + {"origin": [8, 8, -12], "size": [20, 0, 24], "uv": [72, 61], "mirror": true} + ] + }, + { + "name": "leafTipLeft", + "parent": "leafLeft", + "pivot": [28, 8, 0], + "cubes": [ + {"origin": [28, 8, -12], "size": [28, 0, 24], "uv": [31, 37], "mirror": true} + ] + }, + { + "name": "leafFront", + "parent": "base", + "pivot": [0, 8, -8], + "rotation": [0, 90, 0], + "cubes": [ + {"origin": [0, 8, -20], "size": [20, 0, 24], "uv": [72, 61], "mirror": true} + ] + }, + { + "name": "leafTipFront", + "parent": "leafFront", + "pivot": [20, 8, -8], + "cubes": [ + {"origin": [20, 8, -20], "size": [28, 0, 24], "uv": [31, 37], "mirror": true} + ] + }, + { + "name": "leafBack", + "parent": "base", + "pivot": [0, 8, 8], + "rotation": [0, -90, 0], + "cubes": [ + {"origin": [0, 8, -4], "size": [20, 0, 24], "uv": [72, 61], "mirror": true} + ] + }, + { + "name": "leafTipBack", + "parent": "leafBack", + "pivot": [20, 8, 8], + "cubes": [ + {"origin": [20, 8, -4], "size": [28, 0, 24], "uv": [31, 37], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/skulking_fright.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/skulking_fright.geo.json new file mode 100644 index 00000000..8468810c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/skulking_fright.geo.json @@ -0,0 +1,281 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.skulkingfright", + "texture_width": 128, + "texture_height": 128, + "visible_bounds_width": 8, + "visible_bounds_height": 4.5, + "visible_bounds_offset": [0, 1.75, 0] + }, + "bones": [ + { + "name": "root", + "pivot": [0, 0, 0] + }, + { + "name": "body", + "parent": "root", + "pivot": [0, 0, 0], + "cubes": [ + {"origin": [-6, 0, -7], "size": [12, 12, 14], "uv": [0, 0]} + ] + }, + { + "name": "upperRightJaw", + "parent": "body", + "pivot": [0, 6, -7], + "cubes": [ + {"origin": [4.5, 13.5, -21], "size": [4, 3, 14], "pivot": [4, 5.5, -14], "rotation": [0, 0, -90], "uv": [0, 50]}, + {"origin": [5.5, 16.5, -21], "size": [3, 3, 14], "pivot": [4, 8.5, -14], "rotation": [0, 0, -90], "uv": [0, 85]}, + {"origin": [8.5, 15.5, -21], "size": [3, 4, 14], "pivot": [7, 8.5, -14], "rotation": [0, 0, -90], "uv": [64, 47]}, + {"origin": [4.5, 15.5, -21], "size": [4, 4, 2], "pivot": [7, 8.5, -14], "rotation": [0, 0, -90], "uv": [34, 68]}, + {"origin": [8.5, -1.5, -20], "size": [6, 1, 13], "pivot": [11, 9.5, -14], "rotation": [0, 0, 90], "uv": [64, 65]}, + {"origin": [14.5, -7.5, -20], "size": [1, 6, 13], "pivot": [11, 9.5, -14], "rotation": [0, 0, 90], "uv": [34, 87]} + ] + }, + { + "name": "upperLeftJaw", + "parent": "body", + "pivot": [0, 6, -7], + "cubes": [ + {"origin": [-8.5, 13.5, -21], "size": [4, 3, 14], "pivot": [-4, 5.5, -14], "rotation": [0, 0, 90], "uv": [0, 50]}, + {"origin": [-8.5, 16.5, -21], "size": [3, 3, 14], "pivot": [-4, 8.5, -14], "rotation": [0, 0, 90], "uv": [0, 85]}, + {"origin": [-11.5, 15.5, -21], "size": [3, 4, 14], "pivot": [-7, 8.5, -14], "rotation": [0, 0, 90], "uv": [0, 67]}, + {"origin": [-8.5, 15.5, -21], "size": [4, 4, 2], "pivot": [-7, 8.5, -14], "rotation": [0, 0, 90], "uv": [34, 68]}, + {"origin": [-14.5, -1.5, -20], "size": [6, 1, 13], "pivot": [-11, 9.5, -14], "rotation": [0, 0, -90], "uv": [64, 79]}, + {"origin": [-15.5, -7.5, -20], "size": [1, 6, 13], "pivot": [-11, 9.5, -14], "rotation": [0, 0, -90], "uv": [88, 0]} + ] + }, + { + "name": "lowerRightJaw", + "parent": "body", + "pivot": [0, 6, -7], + "cubes": [ + {"origin": [4.5, -4.5, -21], "size": [4, 3, 14], "pivot": [4, 6.5, -14], "rotation": [0, 0, 90], "uv": [52, 0]}, + {"origin": [5.5, -7.5, -21], "size": [3, 3, 14], "pivot": [4, 3.5, -14], "rotation": [0, 0, 90], "uv": [0, 85]}, + {"origin": [8.5, -7.5, -21], "size": [3, 4, 14], "pivot": [7, 3.5, -14], "rotation": [0, 0, 90], "uv": [64, 47]}, + {"origin": [4.5, -7.5, -21], "size": [4, 4, 2], "pivot": [7, 3.5, -14], "rotation": [0, 0, 90], "uv": [34, 68]}, + {"origin": [8.5, -7.5, -20], "size": [6, 1, 13], "pivot": [11, 3.5, -14], "rotation": [0, 0, 90], "uv": [64, 79]}, + {"origin": [14.5, -6.5, -20], "size": [1, 6, 13], "pivot": [11, 10.5, -14], "rotation": [0, 0, 90], "uv": [88, 0]} + ] + }, + { + "name": "lowerLeftJaw", + "parent": "body", + "pivot": [0, 6, -7], + "cubes": [ + {"origin": [-8.5, -4.5, -21], "size": [4, 3, 14], "pivot": [-4, 6.5, -14], "rotation": [0, 0, -90], "uv": [52, 0]}, + {"origin": [-8.5, -7.5, -21], "size": [3, 3, 14], "pivot": [-4, 3.5, -14], "rotation": [0, 0, -90], "uv": [0, 85]}, + {"origin": [-11.5, -7.5, -21], "size": [3, 4, 14], "pivot": [-7, 3.5, -14], "rotation": [0, 0, -90], "uv": [0, 67]}, + {"origin": [-8.5, -7.5, -21], "size": [4, 4, 2], "pivot": [-7, 3.5, -14], "rotation": [0, 0, -90], "uv": [34, 68]}, + {"origin": [-14.5, -7.5, -20], "size": [6, 1, 13], "pivot": [-11, 3.5, -14], "rotation": [0, 0, -90], "uv": [64, 65]}, + {"origin": [-15.5, -6.5, -20], "size": [1, 6, 13], "pivot": [-11, 10.5, -14], "rotation": [0, 0, -90], "uv": [34, 87]} + ] + }, + { + "name": "tailbase", + "parent": "body", + "pivot": [0, 6, 7], + "cubes": [ + {"origin": [-5, 1, 7], "size": [10, 10, 14], "uv": [0, 26]} + ] + }, + { + "name": "tailmiddle", + "parent": "tailbase", + "pivot": [0, 6, 21], + "cubes": [ + {"origin": [-3.5, 2.5, 21], "size": [7, 7, 14], "uv": [48, 26]} + ] + }, + { + "name": "tailtip", + "parent": "tailmiddle", + "pivot": [0, 6, 35], + "cubes": [ + {"origin": [-5, 1, 35], "size": [10, 10, 14], "uv": [49, 95]} + ] + }, + { + "name": "leftWing1", + "parent": "body", + "pivot": [-2, 12, -7], + "cubes": [ + {"origin": [-2, 12, -7], "size": [0, 32, 8], "uv": [48, 47]} + ] + }, + { + "name": "leftWing2", + "parent": "body", + "pivot": [-3, 12, 0], + "cubes": [ + {"origin": [-3, 12, 0], "size": [0, 27, 8], "uv": [48, 47]} + ] + }, + { + "name": "rightWing1", + "parent": "body", + "pivot": [2, 12, -7], + "cubes": [ + {"origin": [2, 12, -7], "size": [0, 32, 8], "uv": [48, 47], "mirror": true} + ] + }, + { + "name": "rightWing2", + "parent": "body", + "pivot": [3, 12, 0], + "cubes": [ + {"origin": [3, 12, 0], "size": [0, 27, 8], "uv": [48, 47], "mirror": true} + ] + }, + { + "name": "rightfrontleg", + "parent": "root", + "pivot": [-6, 8, -3], + "cubes": [ + {"origin": [-18, 6, -6], "size": [12, 4, 4], "uv": [90, 23]} + ] + }, + { + "name": "rightfrontknee", + "parent": "rightfrontleg", + "pivot": [-18, 6, -4], + "cubes": [ + {"origin": [-18, 6, -5], "size": [3, 16, 2], "uv": [36, 50]} + ] + }, + { + "name": "rightfrontfoot", + "parent": "rightfrontknee", + "pivot": [-18, 18, -4], + "cubes": [ + {"origin": [-35, 18, -4], "size": [20, 4, 0], "uv": [52, 19]} + ] + }, + { + "name": "rightbackleg", + "parent": "root", + "pivot": [-6, 8, 4], + "cubes": [ + {"origin": [-18, 6, 3], "size": [12, 4, 4], "uv": [90, 23]} + ] + }, + { + "name": "rightbackknee", + "parent": "rightbackleg", + "pivot": [-18, 6, 5], + "cubes": [ + {"origin": [-18, 6, 4], "size": [3, 16, 2], "uv": [36, 50]} + ] + }, + { + "name": "rightbackfoot", + "parent": "rightbackknee", + "pivot": [-18, 18, 5], + "cubes": [ + {"origin": [-35, 18, 5], "size": [20, 4, 0], "uv": [52, 19]} + ] + }, + { + "name": "leftfrontleg", + "parent": "root", + "pivot": [6, 8, -3], + "cubes": [ + {"origin": [6, 6, -6], "size": [12, 4, 4], "uv": [90, 23], "mirror": true} + ] + }, + { + "name": "leftfrontknee", + "parent": "leftfrontleg", + "pivot": [18, 6, -4], + "cubes": [ + {"origin": [15, 6, -5], "size": [3, 16, 2], "uv": [36, 50], "mirror": true} + ] + }, + { + "name": "leftfrontfoot", + "parent": "leftfrontknee", + "pivot": [18, 18, -4], + "cubes": [ + {"origin": [15, 18, -4], "size": [20, 4, 0], "uv": [52, 19], "mirror": true} + ] + }, + { + "name": "leftmiddleleg", + "parent": "root", + "pivot": [6, 8, 1.5], + "cubes": [ + {"origin": [6, 6, -1.5], "size": [12, 4, 4], "uv": [90, 23], "mirror": true} + ] + }, + { + "name": "leftmiddleknee", + "parent": "leftmiddleleg", + "pivot": [18, 6, 0.5], + "cubes": [ + {"origin": [15, 6, -0.5], "size": [3, 16, 2], "uv": [36, 50], "mirror": true} + ] + }, + { + "name": "leftmiddlefoot", + "parent": "leftmiddleknee", + "pivot": [18, 18, 0.5], + "cubes": [ + {"origin": [15, 18, 0.5], "size": [20, 4, 0], "uv": [52, 19], "mirror": true} + ] + }, + { + "name": "rightmiddleleg", + "parent": "root", + "pivot": [-6, 8, 1.5], + "cubes": [ + {"origin": [-18, 6, -1.5], "size": [12, 4, 4], "uv": [90, 23]} + ] + }, + { + "name": "rightmiddleknee", + "parent": "rightmiddleleg", + "pivot": [-18, 6, 0.5], + "cubes": [ + {"origin": [-18, 6, -0.5], "size": [3, 16, 2], "uv": [36, 50]} + ] + }, + { + "name": "rightmiddlefoot", + "parent": "rightmiddleknee", + "pivot": [-18, 18, 0.5], + "cubes": [ + {"origin": [-35, 18, 0.5], "size": [20, 4, 0], "uv": [52, 19]} + ] + }, + { + "name": "leftbackleg", + "parent": "root", + "pivot": [6, 8, 4], + "cubes": [ + {"origin": [6, 6, 3], "size": [12, 4, 4], "uv": [90, 23], "mirror": true} + ] + }, + { + "name": "leftbackknee", + "parent": "leftbackleg", + "pivot": [18, 6, 5], + "cubes": [ + {"origin": [15, 6, 4], "size": [3, 16, 2], "uv": [36, 50], "mirror": true} + ] + }, + { + "name": "leftbackfoot", + "parent": "leftbackknee", + "pivot": [18, 18, 5], + "cubes": [ + {"origin": [15, 18, 5], "size": [20, 4, 0], "uv": [52, 19], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/springbug.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/springbug.geo.json new file mode 100644 index 00000000..5ee68df6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/springbug.geo.json @@ -0,0 +1,287 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.springbug", + "texture_width": 512, + "texture_height": 512, + "visible_bounds_width": 10, + "visible_bounds_height": 9.5, + "visible_bounds_offset": [0, 4.25, 0] + }, + "bones": [ + { + "name": "root", + "pivot": [0, 0, 0] + }, + { + "name": "body", + "parent": "root", + "pivot": [0, 69, 0] + }, + { + "name": "torso", + "parent": "body", + "pivot": [0, 61, 0], + "cubes": [ + {"origin": [-10, 65, -18], "size": [20, 32, 36], "uv": [0, 164]}, + {"origin": [-12, 97, -46], "size": [24, 12, 80], "uv": [0, 0]}, + {"origin": [-10, 81, 18], "size": [20, 16, 16], "uv": [224, 152]}, + {"origin": [-8, 97, -78], "size": [16, 12, 32], "uv": [176, 92]}, + {"origin": [-2.5, 85, -78], "size": [5, 12, 8], "uv": [129, 0]}, + {"origin": [0, 73, -78], "size": [0, 18, 15], "uv": [200, -15]}, + {"origin": [0, 91, -78], "size": [0, 6, 60], "uv": [268, -60]}, + {"origin": [0, 65, -74], "size": [0, 6, 56], "uv": [268, -50]}, + {"origin": [-18, 67, -16], "size": [8, 24, 32], "uv": [208, 0]}, + {"origin": [10, 67, -16], "size": [8, 24, 32], "uv": [208, 0], "mirror": true}, + {"origin": [-12, 57, -42], "size": [24, 8, 64], "uv": [0, 92]}, + {"origin": [-8, 57, -74], "size": [16, 8, 32], "uv": [192, 212]} + ] + }, + { + "name": "right_eye", + "parent": "torso", + "pivot": [-18.32132, 90.25, -12.53553], + "cubes": [ + {"origin": [-22.7, 83.25, -17], "size": [5, 14, 14], "pivot": [-16.2, 90.25, -9], "rotation": [0, -45, 0], "uv": [0, 0]} + ] + }, + { + "name": "left_eye", + "parent": "torso", + "pivot": [18.32132, 90.25, -12.53553], + "cubes": [ + {"origin": [17.7, 83.25, -17], "size": [5, 14, 14], "pivot": [16.2, 90.25, -9], "rotation": [0, 45, 0], "uv": [0, 0], "mirror": true} + ] + }, + { + "name": "rightGrip", + "parent": "torso", + "pivot": [-18, 78, -16], + "cubes": [ + {"origin": [-22, 76, -28], "size": [8, 4, 12], "uv": [268, 268]} + ] + }, + { + "name": "leftGrip", + "parent": "torso", + "pivot": [18, 78, -16], + "cubes": [ + {"origin": [14, 76, -28], "size": [8, 4, 12], "uv": [268, 268], "mirror": true} + ] + }, + { + "name": "rightAntenna", + "parent": "torso", + "pivot": [-10, 95, 14], + "cubes": [ + {"origin": [-42, 93, 14], "size": [32, 4, 4], "uv": [208, 77]} + ] + }, + { + "name": "leftAntenna", + "parent": "torso", + "pivot": [10, 95, 14], + "cubes": [ + {"origin": [10, 93, 14], "size": [32, 4, 4], "uv": [208, 77], "mirror": true} + ] + }, + { + "name": "rightArm", + "parent": "torso", + "pivot": [-12, 93, -17], + "cubes": [ + {"origin": [-14, 91, -35], "size": [4, 4, 20], "uv": [64, 232]} + ] + }, + { + "name": "rightElbow", + "parent": "rightArm", + "pivot": [-12, 95, -29], + "cubes": [ + {"origin": [-15, 91, -35], "size": [6, 32, 6], "uv": [204, 268]} + ] + }, + { + "name": "rightClaw", + "parent": "rightElbow", + "pivot": [-12, 123, -35], + "cubes": [ + {"origin": [-14, 115, -51], "size": [4, 8, 16], "uv": [164, 268]}, + {"origin": [-12, 115, -83], "size": [0, 8, 32], "uv": [0, 232]} + ] + }, + { + "name": "leftArm", + "parent": "torso", + "pivot": [12, 93, -17], + "cubes": [ + {"origin": [10, 91, -35], "size": [4, 4, 20], "uv": [64, 232], "mirror": true} + ] + }, + { + "name": "leftElbow", + "parent": "leftArm", + "pivot": [12, 95, -29], + "cubes": [ + {"origin": [9, 91, -35], "size": [6, 32, 6], "uv": [204, 268], "mirror": true} + ] + }, + { + "name": "leftClaw", + "parent": "leftElbow", + "pivot": [12, 123, -35], + "cubes": [ + {"origin": [10, 115, -51], "size": [4, 8, 16], "uv": [164, 268], "mirror": true}, + {"origin": [12, 115, -83], "size": [0, 8, 32], "uv": [0, 232], "mirror": true} + ] + }, + { + "name": "backRightThigh", + "parent": "body", + "pivot": [-12, 65, 14], + "cubes": [ + {"origin": [-28, 57, 10], "size": [16, 8, 8], "uv": [116, 268]} + ] + }, + { + "name": "backRightKnee", + "parent": "backRightThigh", + "pivot": [-28, 65, 14], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [-60, 55, 9], "size": [32, 11, 10], "inflate": 0.025, "uv": [208, 56]} + ] + }, + { + "name": "backRightLeg", + "parent": "backRightKnee", + "pivot": [-60, 57, 14], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [-108, 57, 10], "size": [48, 8, 8], "uv": [176, 136]} + ] + }, + { + "name": "backRightFoot", + "parent": "backRightLeg", + "pivot": [-108, 64, 14], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [-132, 60, 12], "size": [24, 4, 4], "inflate": 0.025, "uv": [224, 200]}, + {"origin": [-148, 60, 14], "size": [16, 4, 0], "uv": [208, 85]} + ] + }, + { + "name": "backLeftThigh", + "parent": "body", + "pivot": [12, 65, 14], + "cubes": [ + {"origin": [12, 57, 10], "size": [16, 8, 8], "uv": [116, 268], "mirror": true} + ] + }, + { + "name": "backLeftKnee", + "parent": "backLeftThigh", + "pivot": [28, 65, 14], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [28, 55, 9], "size": [32, 11, 10], "inflate": 0.025, "uv": [208, 56], "mirror": true} + ] + }, + { + "name": "backLeftLeg", + "parent": "backLeftKnee", + "pivot": [60, 57, 14], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [60, 57, 10], "size": [48, 8, 8], "uv": [176, 136], "mirror": true} + ] + }, + { + "name": "backLeftFoot", + "parent": "backLeftLeg", + "pivot": [108, 64, 14], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [108, 60, 12], "size": [24, 4, 4], "inflate": 0.025, "uv": [224, 200], "mirror": true}, + {"origin": [132, 60, 14], "size": [16, 4, 0], "uv": [208, 85], "mirror": true} + ] + }, + { + "name": "frontLeftThigh", + "parent": "body", + "pivot": [12, 65, -14], + "cubes": [ + {"origin": [12, 57, -18], "size": [16, 8, 8], "uv": [116, 268], "mirror": true} + ] + }, + { + "name": "frontLeftKnee", + "parent": "frontLeftThigh", + "pivot": [28, 65, -14], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [28, 56, -19], "size": [32, 11, 10], "inflate": 0.025, "uv": [208, 56], "mirror": true} + ] + }, + { + "name": "frontLeftLeg", + "parent": "frontLeftKnee", + "pivot": [60, 57, -14], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [60, 57, -18], "size": [48, 8, 8], "uv": [176, 136], "mirror": true} + ] + }, + { + "name": "frontLeftFoot", + "parent": "frontLeftLeg", + "pivot": [108, 64, -14], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [108, 60, -16], "size": [24, 4, 4], "inflate": 0.025, "uv": [224, 200], "mirror": true}, + {"origin": [132, 60, -14], "size": [16, 4, 0], "uv": [208, 85], "mirror": true} + ] + }, + { + "name": "frontRightThigh", + "parent": "body", + "pivot": [-12, 65, -14], + "cubes": [ + {"origin": [-28, 57, -18], "size": [16, 8, 8], "uv": [116, 268]} + ] + }, + { + "name": "frontRightKnee", + "parent": "frontRightThigh", + "pivot": [-28, 65, -14], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [-60, 55, -19], "size": [32, 11, 10], "inflate": 0.025, "uv": [208, 56]} + ] + }, + { + "name": "frontRightLeg", + "parent": "frontRightKnee", + "pivot": [-60, 57, -14], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [-108, 57, -18], "size": [48, 8, 8], "uv": [176, 136]} + ] + }, + { + "name": "frontRightFoot", + "parent": "frontRightLeg", + "pivot": [-108, 64, -14], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [-132, 60, -16], "size": [24, 4, 4], "inflate": 0.025, "uv": [224, 200]}, + {"origin": [-148, 60, -14], "size": [16, 4, 0], "uv": [208, 85]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/geo/stratoshark.geo.json b/common-1.20.1/src/main/resources/assets/antarchy/geo/stratoshark.geo.json new file mode 100644 index 00000000..aa4ba54b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/geo/stratoshark.geo.json @@ -0,0 +1,171 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 128, + "texture_height": 128, + "visible_bounds_width": 6, + "visible_bounds_height": 5, + "visible_bounds_offset": [0, 1.5, 0] + }, + "bones": [ + { + "name": "shark", + "pivot": [0, 9.5, -9.5] + }, + { + "name": "torso", + "parent": "shark", + "pivot": [0, 9.5, -9.5], + "cubes": [ + {"origin": [-6.5, 3, -22], "size": [13, 13, 25], "inflate": 0.01, "uv": [0, 0]}, + {"origin": [-1, 16, -12], "size": [2, 5, 9], "inflate": 0.01, "uv": [0, 0]}, + {"origin": [-1, 21, -9], "size": [2, 7, 6], "inflate": 0.01, "uv": [51, 0]} + ] + }, + { + "name": "tail", + "parent": "torso", + "pivot": [0, 8.90533, 0.125], + "cubes": [ + {"origin": [-5, 3, 0], "size": [10, 12, 14], "uv": [0, 39]} + ] + }, + { + "name": "tail2", + "parent": "tail", + "pivot": [0, 8.87377, 10.83333], + "cubes": [ + {"origin": [-3, 4, 11], "size": [6, 9, 17], "uv": [44, 59]}, + {"origin": [-1.5, 9.5, 23], "size": [3, 7, 13], "pivot": [0.5, 13, 28], "rotation": [45, 0, 0], "uv": [0, 78]}, + {"origin": [-1.5, -0.5, 22], "size": [3, 7, 13], "inflate": 0.01, "pivot": [0.5, 3, 30], "rotation": [-45, 0, 0], "uv": [31, 85]} + ] + }, + { + "name": "head", + "parent": "torso", + "pivot": [0, 8.92857, -22], + "cubes": [ + {"origin": [-7, 7, -33], "size": [14, 9, 11], "uv": [48, 39]}, + {"origin": [-5.5, 7, -41], "size": [11, 9, 8], "uv": [76, 0]}, + {"origin": [-4.5, 5.75, -40], "size": [9, 2, 0], "uv": [87, 38]}, + {"origin": [-4.5, 5.75, -40], "size": [0, 2, 10], "uv": [76, 26]}, + {"origin": [4.5, 5, -40], "size": [0, 2, 10], "uv": [87, 30], "mirror": true}, + {"origin": [-4.5, 10, -49], "size": [9, 6, 8], "uv": [63, 85]} + ] + }, + { + "name": "left_wing", + "parent": "head", + "pivot": [8, 16, -27.5], + "cubes": [ + {"origin": [8, 16, -33], "size": [16, 0, 15], "uv": [48, 99], "mirror": true} + ] + }, + { + "name": "left_wing2", + "parent": "left_wing", + "pivot": [24, 16, -27.5], + "cubes": [ + {"origin": [24, 16, -35], "size": [16, 0, 17], "uv": [-17, 105], "mirror": true} + ] + }, + { + "name": "left_wing_back", + "parent": "head", + "pivot": [8, 16, -2.5], + "cubes": [ + {"origin": [8, 16, -8], "size": [16, 0, 15], "uv": [48, 99], "mirror": true} + ] + }, + { + "name": "left_wing_back2", + "parent": "left_wing_back", + "pivot": [24, 16, -2.5], + "cubes": [ + {"origin": [24, 16, -10], "size": [16, 0, 17], "uv": [-17, 105], "mirror": true} + ] + }, + { + "name": "right_wing_back", + "parent": "head", + "pivot": [-8, 16, -2.5], + "cubes": [ + {"origin": [-24, 16, -8], "size": [16, 0, 15], "uv": [48, 99]} + ] + }, + { + "name": "right_wing_back2", + "parent": "right_wing_back", + "pivot": [-24, 16, -2.5], + "cubes": [ + {"origin": [-40, 16, -10], "size": [16, 0, 17], "uv": [-17, 105]} + ] + }, + { + "name": "right_wing", + "parent": "head", + "pivot": [-8, 16, -27.5], + "cubes": [ + {"origin": [-24, 16, -33], "size": [16, 0, 15], "uv": [48, 99]} + ] + }, + { + "name": "right_wing2", + "parent": "right_wing", + "pivot": [-24, 16, -27.5], + "cubes": [ + {"origin": [-40, 16, -35], "size": [16, 0, 17], "uv": [-17, 105]} + ] + }, + { + "name": "halo", + "parent": "head", + "pivot": [0, 17.5, -37], + "cubes": [ + {"origin": [-4, 17, -41], "size": [1, 2, 8], "uv": [32, 105]}, + {"origin": [-3, 17, -41], "size": [6, 2, 1], "uv": [42, 105]}, + {"origin": [-3, 17, -34], "size": [6, 2, 1], "uv": [42, 115]}, + {"origin": [3, 17, -41], "size": [1, 2, 8], "uv": [32, 115]} + ] + }, + { + "name": "jaw", + "parent": "head", + "pivot": [0, 7, -22], + "cubes": [ + {"origin": [-5, 7.5, -29], "size": [0, 3, 7], "uv": [70, -7]}, + {"origin": [-5, 7.5, -29], "size": [2, 3, 0], "uv": [80, 21]}, + {"origin": [-3, 7.5, -37], "size": [0, 3, 8], "uv": [76, 22]}, + {"origin": [5, 7.5, -29], "size": [0, 3, 7], "uv": [70, -7], "mirror": true}, + {"origin": [3, 7.5, -29], "size": [2, 3, 0], "uv": [80, 21], "mirror": true}, + {"origin": [-3, 7.5, -37], "size": [6, 3, 0], "uv": [76, 33], "mirror": true}, + {"origin": [3, 7.5, -37], "size": [0, 3, 8], "uv": [76, 22], "mirror": true}, + {"origin": [-6, 4, -30], "size": [12, 4, 8], "uv": [76, 17]}, + {"origin": [-4, 4, -38], "size": [8, 4, 8], "uv": [73, 59]} + ] + }, + { + "name": "right_fin", + "parent": "torso", + "pivot": [-4.25, 5.5, -11.25], + "cubes": [ + {"origin": [-16.5, 4, -17], "size": [12, 3, 10], "inflate": 0.01, "uv": [0, 65]}, + {"origin": [-23.5, 4, -14], "size": [7, 3, 7], "inflate": 0.01, "uv": [90, 73]} + ] + }, + { + "name": "left_fin", + "parent": "torso", + "pivot": [4.25, 5.5, -11.25], + "cubes": [ + {"origin": [4.5, 4, -17], "size": [12, 3, 10], "inflate": 0.01, "uv": [0, 65], "mirror": true}, + {"origin": [16.5, 4, -14], "size": [7, 3, 7], "inflate": 0.01, "uv": [90, 73], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/lang/de_de.json b/common-1.20.1/src/main/resources/assets/antarchy/lang/de_de.json index e72f4b4c..9eecf3e6 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/lang/de_de.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/lang/de_de.json @@ -90,7 +90,7 @@ "block.antarchy.pale_nyxite": "Blass Nyxite", "block.antarchy.nyxite_spike": "Nyxite-Stachel", "block.antarchy.potent_nyxite": "Potent Nyxite", - "block.antarchy.triffid_goo_block": "Triffid Schleim-Block", + "block.antarchy.flytrap_goo_block": "Flytrap Schleim-Block", "block.antarchy.elythia_portal": "Elythia-Portal", "block.antarchy.cloud_block": "Wolke-Block", "block.antarchy.thoraxis_portal": "Thoraxis-Portal", @@ -181,7 +181,7 @@ "entity.antarchy.rainbow_ant": "Regenbogen-Ameise", "entity.antarchy.diamond_minecart": "Die Diamantlore", "entity.antarchy.dr_trayaurus": "Dr. Trayaurus", - "entity.antarchy.cloud_shark": "Wolkenhai", + "entity.antarchy.stratoshark": "Wolkenhai", "entity.antarchy.kraken": "Der Kraken", "entity.antarchy.missile_squid": "Raketenkalmar", "entity.antarchy.octopus_bomb": "Oktopusbombe", @@ -193,7 +193,7 @@ "entity.antarchy.molevore": "Molevore", "entity.antarchy.mantis": "Gottesanbeterin", "entity.antarchy.alpha_mantis": "Alpha-Gottesanbeterin", - "entity.antarchy.triffid": "Triffid", + "entity.antarchy.flytrap": "Flytrap", "entity.antarchy.toreterror": "Toreterror", "entity.antarchy.water_bomb": "Wasserbombe", "subtitles.antarchy.mantis_ambient": "Gottesanbeterin klickt", @@ -212,9 +212,9 @@ "item.antarchy.attitude_adjuster": "Benimmhammer", "tooltip.antarchy.attitude_adjuster.grounded": "Schleudert Ziele am Boden nach oben; Ziele in der Luft werden auf den Boden geschmettert.", "tooltip.antarchy.attitude_adjuster.slam": "Rechtsklicke in der Luft, um auf den Boden zu schmettern.", - "item.antarchy.cloud_shark_fin": "Wolkenhai-Flosse", - "item.antarchy.cloud_shark_fin_soup": "Wolkenhai-Flosse-Suppe", - "tooltip.antarchy.cloud_shark_fin_soup": "Gewährt Stärke und Sanften Fall.", + "item.antarchy.stratoshark_fin": "Wolkenhai-Flosse", + "item.antarchy.stratoshark_fin_soup": "Wolkenhai-Flosse-Suppe", + "tooltip.antarchy.stratoshark_fin_soup": "Gewährt Stärke und Sanften Fall.", "tooltip.antarchy.critter_cage.empty": "Rechtsklick zum Werfen", "tooltip.antarchy.critter_cage.contains": "Enthält: %s", "tooltip.antarchy.critter_cage.release": "Rechtsklick zum Freilassen", @@ -263,7 +263,7 @@ "attribute.antarchy.bloodglass_max_hearts": "Maximale Blutglasherzen", "item.antarchy.molevore_nose": "Molevore-Nase", "item.antarchy.moleworm": "Moleworm", - "item.antarchy.triffid_spawn_egg": "Triffid-Spawn-Ei", + "item.antarchy.flytrap_spawn_egg": "Flytrap-Spawn-Ei", "item.antarchy.infested_rooted_dirt": "Befallen Verwurzelt Erde", "item.antarchy.infested_coarse_dirt": "Befallen Grob Erde", "item.antarchy.pale_nyxite": "Blass Nyxite", @@ -352,9 +352,9 @@ "tooltip.antarchy.mantis_claw.wall_cling": "Dual wield to cling to walls and jump upward.", "item.antarchy.king_scale": "König-Schuppe", "item.antarchy.queen_scale": "Königin-Schuppe", - "item.antarchy.jumpy_bug_leg": "Sprungkäfer-Bein", - "item.antarchy.jumpy_boots": "Sprungstiefel", - "tooltip.antarchy.jumpy_boots": "Schleiche zum Aufladen und springe dann, um nach oben zu schnellen.", + "item.antarchy.springbug_leg": "Sprungkäfer-Bein", + "item.antarchy.springy_boots": "Sprungstiefel", + "tooltip.antarchy.springy_boots": "Schleiche zum Aufladen und springe dann, um nach oben zu schnellen.", "item.antarchy.brutalfly_wing": "Brutalfly-Flügel", "item.antarchy.brutalfly_elytra": "Brutalfly-Elytren", "tooltip.antarchy.brutalfly_elytra.flap": "Halte beim Fliegen %s gedrückt, um mit den Flügeln zu schlagen", @@ -368,9 +368,9 @@ "item.antarchy.american_name": "Amerikanisch: %s", "item.antarchy.root_beer": "Root Beer", "item.antarchy.primordial_scute": "Urzeitlich-Hornplatte", - "item.antarchy.triffid_goo": "Triffid Schleim", - "item.antarchy.triffid_goo_block": "Triffid Schleim-Block", - "tooltip.antarchy.triffid_goo_block": "Bei hoher Geschwindigkeit prallst du nach oben ab, andernfalls sinkst du hindurch.", + "item.antarchy.flytrap_goo": "Flytrap Schleim", + "item.antarchy.flytrap_goo_block": "Flytrap Schleim-Block", + "tooltip.antarchy.flytrap_goo_block": "Bei hoher Geschwindigkeit prallst du nach oben ab, andernfalls sinkst du hindurch.", "item.antarchy.cloud_bucket": "Wolke-Eimer", "tooltip.antarchy.cloud_bucket.midair": "Kann in der Luft platziert werden", "item.antarchy.lumen_bucket": "Lumen-Eimer", @@ -380,7 +380,7 @@ "tooltip.antarchy.scorpion_whip.snap": "Linksklicke erneut auf angebundene Beute, um den Stachel loszureißen.", "item.antarchy.fallen_king_crown": "Krone des gefallenen Königs", "tooltip.antarchy.fallen_king_crown.hero": "Das Töten feindlicher Kreaturen gewährt Held des Dorfes", - "item.antarchy.vortex_eye": "Wirbel-Auge", + "item.antarchy.vortex_charge": "Vortex Charge", "item.antarchy.ultimate_helmet": "Ultimativer Helm", "item.antarchy.ultimate_chestplate": "Ultimativer Brustpanzer", "item.antarchy.ultimate_leggings": "Ultimativer Beinschutz", @@ -474,7 +474,7 @@ "item.antarchy.caterpillar_spawn_egg": "Raupe-Spawn-Ei", "item.antarchy.butterfly_spawn_egg": "Schmetterling-Spawn-Ei", "item.antarchy.brutalfly_spawn_egg": "Brutalfly-Spawn-Ei", - "item.antarchy.cloud_shark_spawn_egg": "Wolkenhai-Spawn-Ei", + "item.antarchy.stratoshark_spawn_egg": "Wolkenhai-Spawn-Ei", "item.antarchy.kraken_spawn_egg": "Äh, nein. Lass das.", "item.antarchy.missile_squid_spawn_egg": "Raketenkalmar-Spawn-Ei", "item.antarchy.octopus_bomb_spawn_egg": "Oktopusbombe-Spawn-Ei", @@ -512,7 +512,7 @@ "message.antarchy.termite_activated": "Die Termite ist bereit, ihr Ziel zu öffnen.", "message.antarchy.termite_needs_reagent": "Diese Termite benötigt ein Reagenz, bevor sie ihr Ziel öffnen kann.", "death.attack.spit_bug_disrespect": "%1$s wurde vom Spuckkäfer respektlos behandelt", - "death.attack.jumpy_bug_jump": "%1$s wurde vom Sprungkäfer angesprungen", + "death.attack.springbug_jump": "%1$s wurde vom Sprungkäfer angesprungen", "death.attack.hercules_beetle_obliteration": "%1$s wurde vom Herkuleskäfer ausgelöscht", "message.antarchy.big_bertha.mode": "Big-Bertha-Modus: %s", "message.antarchy.big_bertha.mode.basilisk": "Basilisk", @@ -533,6 +533,8 @@ "effect.antarchy.paralyzed.description": "Verhindert, dass sich Ziele bewegen.", "effect.antarchy.inverted": "Umgekehrt", "effect.antarchy.inverted.description": "Kehrt die Schwerkraft des Ziels um.", + "effect.antarchy.commanded.description": "Kämpft für den Spieler, der das Ziel kommandiert hat.", + "effect.antarchy.dilated.description": "Verlangsamt den Zeitablauf für das betroffene Wesen.", "effect.antarchy.stinky": "Stinkend", "effect.antarchy.stinky.description": "Vertreibt passive und neutrale Kreaturen und zieht Gliederfüßer an.", "effect.antarchy.gooped.description": "Verlangsamt Bewegung und Angriffsgeschwindigkeit.", @@ -540,10 +542,10 @@ "effect.antarchy.growth": "Wachstum", "effect.antarchy.bloodglass_ward": "Blutglasbarriere", "effect.antarchy.bloodglass_ward.description": "Verleiht Herzen, die zersplittern und einen gesamten Treffer absorbieren. Sie regenerieren sich mit der Zeit.", - "death.attack.triffid_mauling": "%1$s wurde von einer Pflanze zu Tode zerfleischt", - "death.attack.triffid_mauling.player": "%1$s wurde von einer Pflanze zu Tode zerfleischt", - "death.attack.triffid_swallow": "%1$s wurde von einem Triffid verschlungen", - "death.attack.triffid_swallow.player": "%1$s wurde von einem Triffid verschlungen", + "death.attack.flytrap_mauling": "%1$s wurde von einer Pflanze zu Tode zerfleischt", + "death.attack.flytrap_mauling.player": "%1$s wurde von einer Pflanze zu Tode zerfleischt", + "death.attack.flytrap_swallow": "%1$s wurde von einem Flytrap verschlungen", + "death.attack.flytrap_swallow.player": "%1$s wurde von einem Flytrap verschlungen", "potion.antarchy.haste": "Eiletrank", "potion.antarchy.strong_haste": "Starker Eiletrank", "tooltip.antarchy.big_bertha.mode": "Modus: %s", @@ -660,11 +662,11 @@ "subtitles.antarchy.ant_bite": "Ameisen beißt", "subtitles.antarchy.ant_gather": "Ameisen sammeln", "subtitles.antarchy.ant_nest": "Ameisennest raschelt", - "subtitles.antarchy.cloud_shark_bite": "Wolkenhai beißt", - "subtitles.antarchy.cloud_shark_idle": "Wolkenhai ist zu hören", - "subtitles.antarchy.cloud_shark_hurt": "Wolkenhai wird verletzt", - "subtitles.antarchy.cloud_shark_death": "Wolkenhai stirbt", - "subtitles.antarchy.cloud_shark_fly": "Wolkenhai fliegt", + "subtitles.antarchy.stratoshark_bite": "Wolkenhai beißt", + "subtitles.antarchy.stratoshark_idle": "Wolkenhai ist zu hören", + "subtitles.antarchy.stratoshark_hurt": "Wolkenhai wird verletzt", + "subtitles.antarchy.stratoshark_death": "Wolkenhai stirbt", + "subtitles.antarchy.stratoshark_fly": "Wolkenhai fliegt", "subtitles.antarchy.caterpillar_idle": "Raupe ist zu hören", "subtitles.antarchy.caterpillar_hurt": "Raupe wird verletzt", "subtitles.antarchy.caterpillar_crawl": "Raupe kriecht", @@ -704,17 +706,20 @@ "subtitles.antarchy.nightmare_death": "Albtraum stirbt", "subtitles.antarchy.nightmare_bite": "Albtraum beißt", "subtitles.antarchy.nightmare_flap": "Albtraum schlägt mit den Flügeln", - "subtitles.antarchy.triffid_attack": "Triffid greift an", - "subtitles.antarchy.triffid_grab": "Triffid packt zu", - "subtitles.antarchy.triffid_hurt": "Triffid wird verletzt", - "subtitles.antarchy.triffid_death": "Triffid stirbt", - "subtitles.antarchy.triffid_hiss": "Triffid zischt", - "subtitles.antarchy.triffid_growl": "Triffid knurrt", + "subtitles.antarchy.flytrap_attack": "Flytrap greift an", + "subtitles.antarchy.flytrap_grab": "Flytrap packt zu", + "subtitles.antarchy.flytrap_hurt": "Flytrap wird verletzt", + "subtitles.antarchy.flytrap_death": "Flytrap stirbt", + "subtitles.antarchy.flytrap_hiss": "Flytrap zischt", + "subtitles.antarchy.flytrap_growl": "Flytrap knurrt", "subtitles.antarchy.gravity_gun_pickup": "Gravitationskanone hebt etwas auf", "subtitles.antarchy.gravity_gun_drop": "Gravitationskanone lässt los", "subtitles.antarchy.gravity_gun_hold_loop": "Gravitationskanone summt", "subtitles.antarchy.gravity_gun_launch": "Gravitationskanone schleudert", "subtitles.antarchy.gravity_gun_dryfire": "Gravitationskanone klickt leer", + "subtitles.antarchy.antimetal_place": "Antimetall klirrt", + "subtitles.antarchy.antimetal_step": "Antimetall klickt", + "subtitles.antarchy.antimetal_scaffold": "Antimetallgerüst rasselt", "subtitles.antarchy.bed_bug_ambient": "Bettwanze zwitschert", "subtitles.antarchy.bed_bug_hurt": "Bettwanze wird verletzt", "subtitles.antarchy.bed_bug_attack": "Bettwanze beißt", @@ -877,23 +882,23 @@ "block.antarchy.amber_lichen": "Bernsteinflechte", "block.antarchy.bile_vein": "Gallenader", "block.antarchy.creepvine": "Creepvine", - "block.antarchy.creeping_horror_egg": "Kriechender Schrecken-Ei", - "block.antarchy.lurking_terror_egg": "Lauernder Terror-Ei", + "block.antarchy.crawling_blight_egg": "Kriechender Schrecken-Ei", + "block.antarchy.skulking_fright_egg": "Lauernder Terror-Ei", "entity.antarchy.termite": "Termite", - "entity.antarchy.jumpy_bug": "Sprungkäfer", + "entity.antarchy.springbug": "Sprungkäfer", "entity.antarchy.spit_bug": "Spuckkäfer", "entity.antarchy.stink_bug": "Stinkwanze", "entity.antarchy.rolly_polly": "Rollassel", - "entity.antarchy.creeping_horror": "Kriechender Schrecken", - "entity.antarchy.lurking_terror": "Lauernder Terror", + "entity.antarchy.crawling_blight": "Kriechender Schrecken", + "entity.antarchy.skulking_fright": "Lauernder Terror", "entity.antarchy.hercules_beetle": "Herkuleskäfer", - "item.antarchy.jumpy_bug_spawn_egg": "Sprungkäfer-Spawn-Ei", + "item.antarchy.springbug_spawn_egg": "Sprungkäfer-Spawn-Ei", "item.antarchy.spit_bug_spawn_egg": "Spuckkäfer-Spawn-Ei", "item.antarchy.stink_bug_spawn_egg": "Stinkwanze-Spawn-Ei", "item.antarchy.termite_spawn_egg": "Termite-Spawn-Ei", "item.antarchy.rolly_polly_spawn_egg": "Rollassel-Spawn-Ei", - "item.antarchy.creeping_horror_spawn_egg": "Kriechender Schrecken-Spawn-Ei", - "item.antarchy.lurking_terror_spawn_egg": "Lauernder Terror-Spawn-Ei", + "item.antarchy.crawling_blight_spawn_egg": "Kriechender Schrecken-Spawn-Ei", + "item.antarchy.skulking_fright_spawn_egg": "Lauernder Terror-Spawn-Ei", "item.antarchy.hercules_beetle_spawn_egg": "Herkuleskäfer-Spawn-Ei", "item.antarchy.chitin": "Chitin", "block.antarchy.polished_broodstone": "Poliert Broodstone", @@ -920,14 +925,14 @@ "block.antarchy.glowcap_mushroom_block": "Leuchtkappenpilzblock", "block.antarchy.molting_vines": "Häutungsranken", "item.antarchy.broodfruit": "Brutfrucht", - "block.antarchy.jumpy_bug_egg": "Sprungkäfer-Ei", - "subtitles.antarchy.creeping_horror_growl": "Kriechender Schrecken knurrt", - "subtitles.antarchy.creeping_horror_hurt": "Kriechender Schrecken wird verletzt", - "subtitles.antarchy.creeping_horror_bite": "Kriechender Schrecken beißt", - "subtitles.antarchy.lurking_terror_snarl": "Lauernder Terror faucht", - "subtitles.antarchy.lurking_terror_hurt": "Lauernder Terror wird verletzt", - "subtitles.antarchy.lurking_terror_bite": "Lauernder Terror beißt", - "subtitles.antarchy.lurking_terror_fly_loop": "Lauernder Terror fliegt", + "block.antarchy.springbug_egg": "Sprungkäfer-Ei", + "subtitles.antarchy.crawling_blight_growl": "Kriechender Schrecken knurrt", + "subtitles.antarchy.crawling_blight_hurt": "Kriechender Schrecken wird verletzt", + "subtitles.antarchy.crawling_blight_bite": "Kriechender Schrecken beißt", + "subtitles.antarchy.skulking_fright_snarl": "Lauernder Terror faucht", + "subtitles.antarchy.skulking_fright_hurt": "Lauernder Terror wird verletzt", + "subtitles.antarchy.skulking_fright_bite": "Lauernder Terror beißt", + "subtitles.antarchy.skulking_fright_fly_loop": "Lauernder Terror fliegt", "subtitles.antarchy.stink_bug_fart": "Stinkwanze furzt", "subtitles.antarchy.stink_bug_idle": "Stinkwanze ist zu hören", "subtitles.antarchy.rolly_polly_idle": "Rollassel ist zu hören", @@ -944,10 +949,10 @@ "subtitles.antarchy.jerry_hurt": "Jerry wird verletzt", "subtitles.antarchy.jerry_death": "Jerry stirbt", "subtitles.antarchy.jerry_attack": "Jerry greift an", - "subtitles.antarchy.jumpy_bug_idle": "Sprungkäfer ist zu hören", + "subtitles.antarchy.springbug_idle": "Sprungkäfer ist zu hören", "subtitles.antarchy.spit_bug_idle": "Spuckkäfer ist zu hören", - "subtitles.antarchy.jumpy_bug_hurt": "Sprungkäfer wird verletzt", - "subtitles.antarchy.jumpy_bug_jump": "Sprungkäfer springt", + "subtitles.antarchy.springbug_hurt": "Sprungkäfer wird verletzt", + "subtitles.antarchy.springbug_jump": "Sprungkäfer springt", "subtitles.antarchy.spit_bug_hurt": "Spuckkäfer wird verletzt", "subtitles.antarchy.spit_bug_spit": "Spuckkäfer spuckt", "subtitles.antarchy.brutalfly_spit": "Brutalfly spuckt", diff --git a/common-1.20.1/src/main/resources/assets/antarchy/lang/en_us.json b/common-1.20.1/src/main/resources/assets/antarchy/lang/en_us.json index 260b2f50..0ba1bb83 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/lang/en_us.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/lang/en_us.json @@ -37,8 +37,76 @@ "block.antarchy.peach_sapling": "Peach Sapling", "block.antarchy.peach_sign": "Peach Sign", "block.antarchy.peach_hanging_sign": "Peach Hanging Sign", + "block.antarchy.nadir_log": "Nadir Log", + "block.antarchy.nadir_wood": "Nadir Wood", + "block.antarchy.stripped_nadir_log": "Stripped Nadir Log", + "block.antarchy.stripped_nadir_wood": "Stripped Nadir Wood", + "block.antarchy.nadir_planks": "Nadir Planks", + "block.antarchy.nadir_stairs": "Nadir Stairs", + "block.antarchy.nadir_slab": "Nadir Slab", + "block.antarchy.nadir_fence": "Nadir Fence", + "block.antarchy.nadir_fence_gate": "Nadir Fence Gate", + "block.antarchy.nadir_door": "Nadir Door", + "block.antarchy.nadir_trapdoor": "Nadir Trapdoor", + "block.antarchy.nadir_pressure_plate": "Nadir Pressure Plate", + "block.antarchy.nadir_button": "Nadir Button", + "block.antarchy.nadir_veil": "Nadir Veil", + "block.antarchy.nadir_sapling": "Nadir Sapling", + "block.antarchy.nadir_sign": "Nadir Sign", + "block.antarchy.nadir_hanging_sign": "Nadir Hanging Sign", + "block.antarchy.royal_log": "Royal Log", + "block.antarchy.royal_wood": "Royal Wood", + "block.antarchy.stripped_royal_log": "Stripped Royal Log", + "block.antarchy.stripped_royal_wood": "Stripped Royal Wood", + "block.antarchy.royal_planks": "Royal Planks", + "block.antarchy.royal_stairs": "Royal Stairs", + "block.antarchy.royal_slab": "Royal Slab", + "block.antarchy.royal_fence": "Royal Fence", + "block.antarchy.royal_fence_gate": "Royal Fence Gate", + "block.antarchy.royal_door": "Royal Door", + "block.antarchy.royal_trapdoor": "Royal Trapdoor", + "block.antarchy.royal_pressure_plate": "Royal Pressure Plate", + "block.antarchy.royal_button": "Royal Button", + "block.antarchy.royal_leaves": "Royal Leaves", + "block.antarchy.royal_flowering_leaves": "Flowering Royal Leaves", + "block.antarchy.royal_sapling": "Royal Sapling", + "block.antarchy.royal_sign": "Royal Sign", + "block.antarchy.royal_hanging_sign": "Royal Hanging Sign", + "block.antarchy.truffalo_log": "Truffalo Log", + "block.antarchy.truffalo_wood": "Truffalo Wood", + "block.antarchy.stripped_truffalo_log": "Stripped Truffalo Log", + "block.antarchy.stripped_truffalo_wood": "Stripped Truffalo Wood", + "block.antarchy.truffalo_planks": "Truffalo Planks", + "block.antarchy.truffalo_stairs": "Truffalo Stairs", + "block.antarchy.truffalo_slab": "Truffalo Slab", + "block.antarchy.truffalo_fence": "Truffalo Fence", + "block.antarchy.truffalo_fence_gate": "Truffalo Fence Gate", + "block.antarchy.truffalo_door": "Truffalo Door", + "block.antarchy.truffalo_trapdoor": "Truffalo Trapdoor", + "block.antarchy.truffalo_pressure_plate": "Truffalo Pressure Plate", + "block.antarchy.truffalo_button": "Truffalo Button", + "block.antarchy.truffalo_sapling": "Truffalo Sapling", + "block.antarchy.truffalo_sign": "Truffalo Sign", + "block.antarchy.truffalo_hanging_sign": "Truffalo Hanging Sign", + "block.antarchy.white_truffalo_tuft": "White Truffalo Tuft", + "block.antarchy.orange_truffalo_tuft": "Orange Truffalo Tuft", + "block.antarchy.magenta_truffalo_tuft": "Magenta Truffalo Tuft", + "block.antarchy.light_blue_truffalo_tuft": "Light Blue Truffalo Tuft", + "block.antarchy.yellow_truffalo_tuft": "Yellow Truffalo Tuft", + "block.antarchy.lime_truffalo_tuft": "Lime Truffalo Tuft", + "block.antarchy.pink_truffalo_tuft": "Pink Truffalo Tuft", + "block.antarchy.gray_truffalo_tuft": "Gray Truffalo Tuft", + "block.antarchy.light_gray_truffalo_tuft": "Light Gray Truffalo Tuft", + "block.antarchy.cyan_truffalo_tuft": "Cyan Truffalo Tuft", + "block.antarchy.purple_truffalo_tuft": "Purple Truffalo Tuft", + "block.antarchy.blue_truffalo_tuft": "Blue Truffalo Tuft", + "block.antarchy.brown_truffalo_tuft": "Brown Truffalo Tuft", + "block.antarchy.green_truffalo_tuft": "Green Truffalo Tuft", + "block.antarchy.red_truffalo_tuft": "Red Truffalo Tuft", + "block.antarchy.black_truffalo_tuft": "Black Truffalo Tuft", "block.antarchy.orange_milkweed": "Orange Milkweed", "block.antarchy.pink_milkweed": "Pink Milkweed", + "block.antarchy.glimmering_reed": "Glimmering Reed", "block.antarchy.camellia": "Camellia", "block.antarchy.spider_lily": "Spider Lily", "block.antarchy.lotus": "Lotus", @@ -46,6 +114,10 @@ "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.undertrial_spawner": "Undertrial Spawner", + "block.antarchy.undervault": "Undervault", + "item.antarchy.undertrial_key": "Undertrial Key", "block.antarchy.critter_cage_block": "Critter Cage", "block.antarchy.hushweed": "Hushweed", "block.antarchy.umbral_moss_block": "Umbral Moss Block", @@ -94,7 +166,7 @@ "block.antarchy.pale_nyxite": "Pale Nyxite", "block.antarchy.nyxite_spike": "Nyxite Spike", "block.antarchy.potent_nyxite": "Potent Nyxite", - "block.antarchy.triffid_goo_block": "Triffid Goo Block", + "block.antarchy.flytrap_goo_block": "Flytrap Goo Block", "block.antarchy.elythia_portal": "Elythia Portal", "block.antarchy.cloud_block": "Cloud Block", "block.antarchy.thoraxis_portal": "Thoraxis Portal", @@ -111,7 +183,6 @@ "block.antarchy.antimetal_activator_rail": "Antimetal Activator Rail", "block.antarchy.upper": "Upper", "container.antarchy.upper": "Upper", - "block.antarchy.lucid_anchor": "Lucid Anchor", "block.antarchy.cornea_stalk": "Cornea Stalk", "block.antarchy.corn_crop": "Corn Crop", "block.antarchy.dream_torch": "Dream Torch", @@ -139,6 +210,22 @@ "block.antarchy.smooth_dream_sandstone_stairs": "Smooth Dream Sandstone Stairs", "block.antarchy.smooth_dream_sandstone_slab": "Smooth Dream Sandstone Slab", "block.antarchy.cut_dream_sandstone_slab": "Cut Dream Sandstone Slab", + "block.antarchy.typhonite": "Typhonite", + "block.antarchy.typhonite_bricks": "Typhonite Bricks", + "block.antarchy.chiseled_typhonite": "Chiseled Typhonite", + "block.antarchy.polished_typhonite": "Polished Typhonite", + "block.antarchy.veined_typhonite": "Veined Typhonite", + "block.antarchy.typhonite_spike": "Typhonite Spike", + "block.antarchy.typhonite_stairs": "Typhonite Stairs", + "block.antarchy.typhonite_slab": "Typhonite Slab", + "block.antarchy.typhonite_wall": "Typhonite Wall", + "block.antarchy.typhonite_brick_stairs": "Typhonite Brick Stairs", + "block.antarchy.typhonite_brick_slab": "Typhonite Brick Slab", + "block.antarchy.typhonite_brick_wall": "Typhonite Brick Wall", + "block.antarchy.polished_typhonite_stairs": "Polished Typhonite Stairs", + "block.antarchy.polished_typhonite_slab": "Polished Typhonite Slab", + "block.antarchy.polished_typhonite_wall": "Polished Typhonite Wall", + "block.antarchy.spiraling_vines": "Spiraling Vines", "block.antarchy.whirlflower": "Whirlflower", "block.antarchy.bed_bug_egg": "Bed Bug Egg", "block.antarchy.wasp_nest": "Wasp Nest", "block.antarchy.red_ant_nest": "Red Ant Nest", @@ -150,6 +237,8 @@ "block.antarchy.deepslate_titanium_ore": "Deepslate Titanium Ore", "block.antarchy.bluestone_ore": "Bluestone Ore", "block.antarchy.bluestone_block": "Bluestone Block", + "block.antarchy.vortex_lens": "Vortex Lens", + "tooltip.antarchy.vortex_lens": "Redstone power sucks entities into its beam; Bluestone power blasts them away. Stronger signal, bigger vortex.", "block.antarchy.bluestone_repeater": "Bluestone Repeater", "block.antarchy.bluestone_comparator": "Bluestone Comparator", "block.antarchy.bluestone_torch": "Bluestone Torch", @@ -175,8 +264,6 @@ "block.antarchy.uranium_bars": "Uranium Bars", "block.antarchy.titanium_bars": "Titanium Bars", "tooltip.antarchy.signal_saving_bulb": "Toggles on/off. Has light level equal to the signal strength stored on it.", - "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", "tooltip.antarchy.bluestone_placement": "Places below blocks", "tooltip.antarchy.ceiling_compatible_placement": "Can also be placed on ceilings", "tooltip.antarchy.antimetal_scaffolding": "Acts as normal scaffolding, or inverted scaffolding while your gravity is flipped", @@ -209,7 +296,7 @@ "entity.antarchy.rainbow_ant": "Rainbow Ant", "entity.antarchy.diamond_minecart": "The Diamond Minecart", "entity.antarchy.dr_trayaurus": "Dr. Trayaurus", - "entity.antarchy.cloud_shark": "Cloud Shark", + "entity.antarchy.stratoshark": "Stratoshark", "entity.antarchy.kraken": "The Kraken", "entity.antarchy.missile_squid": "Missile Squid", "entity.antarchy.octopus_bomb": "Octopus Bomb", @@ -218,12 +305,17 @@ "entity.antarchy.wasp": "Wasp", "entity.antarchy.bomber": "Bomber", "entity.antarchy.moleworm": "Moleworm", + "entity.antarchy.worm": "Worm", "entity.antarchy.molevore": "Molevore", "entity.antarchy.mantis": "Mantis", "entity.antarchy.alpha_mantis": "Alpha Mantis", - "entity.antarchy.triffid": "Triffid", + "entity.antarchy.flytrap": "Flytrap", "entity.antarchy.toreterror": "Toreterror", "entity.antarchy.water_bomb": "Water Bomb", + "subtitles.antarchy.manticore_idle": "Manticore growls", + "subtitles.antarchy.manticore_walk": "Manticore walks", + "subtitles.antarchy.manticore_fly": "Manticore flies", + "subtitles.antarchy.manticore_bite": "Manticore bites", "subtitles.antarchy.mantis_ambient": "Mantis clicks", "subtitles.antarchy.mantis_hurt": "Mantis screeches", "subtitles.antarchy.mantis_attack": "Mantis snaps", @@ -241,9 +333,9 @@ "item.antarchy.attitude_adjuster": "Attitude Adjuster", "tooltip.antarchy.attitude_adjuster.grounded": "Smashes targets on the ground upward, targets in the air slam onto the ground.", "tooltip.antarchy.attitude_adjuster.slam": "Use while airborne to ground slam.", - "item.antarchy.cloud_shark_fin": "Cloud Shark Fin", - "item.antarchy.cloud_shark_fin_soup": "Cloud Shark Fin Soup", - "tooltip.antarchy.cloud_shark_fin_soup": "Grants Strength and Slow Falling.", + "item.antarchy.stratoshark_fin": "Stratoshark Fin", + "item.antarchy.stratoshark_fin_soup": "Stratoshark Fin Soup", + "tooltip.antarchy.stratoshark_fin_soup": "Grants Strength and Slow Falling.", "tooltip.antarchy.critter_cage.empty": "Use to throw", "tooltip.antarchy.critter_cage.contains": "Contains: %s", "tooltip.antarchy.critter_cage.release": "Use to release", @@ -271,12 +363,31 @@ "item.antarchy.smooth_dream_sandstone_stairs": "Smooth Dream Sandstone Stairs", "item.antarchy.smooth_dream_sandstone_slab": "Smooth Dream Sandstone Slab", "item.antarchy.cut_dream_sandstone_slab": "Cut Dream Sandstone Slab", + "item.antarchy.typhonite": "Typhonite", + "item.antarchy.typhonite_bricks": "Typhonite Bricks", + "item.antarchy.chiseled_typhonite": "Chiseled Typhonite", + "item.antarchy.polished_typhonite": "Polished Typhonite", + "item.antarchy.veined_typhonite": "Veined Typhonite", + "item.antarchy.typhonite_spike": "Typhonite Spike", + "item.antarchy.typhonite_stairs": "Typhonite Stairs", + "item.antarchy.typhonite_slab": "Typhonite Slab", + "item.antarchy.typhonite_wall": "Typhonite Wall", + "item.antarchy.typhonite_brick_stairs": "Typhonite Brick Stairs", + "item.antarchy.typhonite_brick_slab": "Typhonite Brick Slab", + "item.antarchy.typhonite_brick_wall": "Typhonite Brick Wall", + "item.antarchy.polished_typhonite_stairs": "Polished Typhonite Stairs", + "item.antarchy.polished_typhonite_slab": "Polished Typhonite Slab", + "item.antarchy.polished_typhonite_wall": "Polished Typhonite Wall", + "item.antarchy.spiraling_vines": "Spiraling Vines", + "item.antarchy.whirlflower": "Whirlflower", "item.antarchy.dream_torch": "Dream Torch", "item.antarchy.dream_lantern": "Dream Lantern", "item.antarchy.dream_campfire": "Dream Campfire", "item.antarchy.giant_lily_pad": "Giant Lily Pad", "item.antarchy.seashell": "Seashell", "item.antarchy.nightmare_scale": "Nightmare Scale", + "item.antarchy.music_disc_underside": "Music Disc", + "jukebox_song.antarchy.underside": "docshrekbot - underside", "item.antarchy.nightmare_helmet": "Nightmare Helmet", "item.antarchy.nightmare_chestplate": "Nightmare Chestplate", "item.antarchy.nightmare_leggings": "Nightmare Leggings", @@ -293,7 +404,11 @@ "attribute.antarchy.bloodglass_max_hearts": "Max Bloodglass Hearts", "item.antarchy.molevore_nose": "Molevore Nose", "item.antarchy.moleworm": "Moleworm", - "item.antarchy.triffid_spawn_egg": "Triffid Spawn Egg", + "item.antarchy.worm_tooth": "Worm Tooth", + "item.antarchy.worm_hook": "Worm Hook", + "tooltip.antarchy.worm_hook.throw": "Right-click a block to fire and attach", + "tooltip.antarchy.worm_hook.reel": "Sneak to reel in, right-click again to detach", + "item.antarchy.flytrap_spawn_egg": "Flytrap Spawn Egg", "item.antarchy.infested_rooted_dirt": "Infested Rooted Dirt", "item.antarchy.infested_coarse_dirt": "Infested Coarse Dirt", "item.antarchy.pale_nyxite": "Pale Nyxite", @@ -338,6 +453,23 @@ "item.antarchy.ouranwood_acorn": "Ouranwood Acorn", "item.antarchy.ouranwood_boat": "Ouranwood Boat", "item.antarchy.ouranwood_chest_boat": "Ouranwood Chest Boat", + "item.antarchy.hoverboard": "Hoverboard", + "item.antarchy.hoverboard_white": "White Hoverboard", + "item.antarchy.hoverboard_orange": "Orange Hoverboard", + "item.antarchy.hoverboard_magenta": "Magenta Hoverboard", + "item.antarchy.hoverboard_light_blue": "Light Blue Hoverboard", + "item.antarchy.hoverboard_yellow": "Yellow Hoverboard", + "item.antarchy.hoverboard_lime": "Lime Hoverboard", + "item.antarchy.hoverboard_pink": "Pink Hoverboard", + "item.antarchy.hoverboard_gray": "Gray Hoverboard", + "item.antarchy.hoverboard_light_gray": "Light Gray Hoverboard", + "item.antarchy.hoverboard_cyan": "Cyan Hoverboard", + "item.antarchy.hoverboard_purple": "Purple Hoverboard", + "item.antarchy.hoverboard_blue": "Blue Hoverboard", + "item.antarchy.hoverboard_brown": "Brown Hoverboard", + "item.antarchy.hoverboard_green": "Green Hoverboard", + "item.antarchy.hoverboard_red": "Red Hoverboard", + "item.antarchy.hoverboard_black": "Black Hoverboard", "item.antarchy.raw_venison": "Raw Venison", "item.antarchy.cooked_venison": "Cooked Venison", "item.antarchy.peach_sapling": "Peach Sapling", @@ -349,8 +481,27 @@ "item.antarchy.peach_hanging_sign": "Peach Hanging Sign", "item.antarchy.peach_boat": "Peach Boat", "item.antarchy.peach_chest_boat": "Peach Chest Boat", + "item.antarchy.nadir_sign": "Nadir Sign", + "item.antarchy.nadir_hanging_sign": "Nadir Hanging Sign", + "item.antarchy.nadir_boat": "Nadir Boat", + "item.antarchy.nadir_chest_boat": "Nadir Chest Boat", + "entity.antarchy.nadir_boat": "Nadir Boat", + "entity.antarchy.nadir_chest_boat": "Nadir Chest Boat", + "item.antarchy.royal_sign": "Royal Sign", + "item.antarchy.royal_hanging_sign": "Royal Hanging Sign", + "item.antarchy.royal_boat": "Royal Boat", + "item.antarchy.royal_chest_boat": "Royal Chest Boat", + "entity.antarchy.royal_boat": "Royal Boat", + "entity.antarchy.royal_chest_boat": "Royal Chest Boat", + "item.antarchy.truffalo_sign": "Truffalo Sign", + "item.antarchy.truffalo_hanging_sign": "Truffalo Hanging Sign", + "item.antarchy.truffalo_boat": "Truffalo Boat", + "item.antarchy.truffalo_chest_boat": "Truffalo Chest Boat", + "entity.antarchy.truffalo_boat": "Truffalo Boat", + "entity.antarchy.truffalo_chest_boat": "Truffalo Chest Boat", "item.antarchy.orange_milkweed": "Orange Milkweed", "item.antarchy.pink_milkweed": "Pink Milkweed", + "item.antarchy.glimmering_reed": "Glimmering Reed", "item.antarchy.camellia": "Camellia", "item.antarchy.spider_lily": "Spider Lily", "item.antarchy.hushweed": "Hushweed", @@ -381,21 +532,46 @@ "item.antarchy.blood_crystal_boots.tooltip2": "Cancels fall damage when falling upward while gravity is inverted.", "item.antarchy.blood_crystal_apple.tooltip": "Grants Bloodglass Ward, providing temporary Bloodglass Hearts that recharge while the effect lasts.", "tooltip.antarchy.blood_crystal_katana.launch": "Launches you forward on hit.", + "tooltip.antarchy.blood_crystal_katana.dash": "Reaches distant targets you look at; a full swing grants brief immunity.", "tooltip.antarchy.blood_crystal_katana.trail": "Leaves a crimson trail behind you.", + "item.antarchy.eye_of_the_storm": "Eye of the Storm", + "tooltip.antarchy.eye_of_the_storm.updraft": "Use to ride a rising vortex skyward.", + "tooltip.antarchy.eye_of_the_storm.surge": "Attack to hurl a homing tornado that scoops up foes and drags them along.", + "item.antarchy.royal_guardian_helmet": "Royal Guardian Helmet", + "item.antarchy.royal_guardian_chestplate": "Royal Guardian Chestplate", + "item.antarchy.royal_guardian_leggings": "Royal Guardian Leggings", + "item.antarchy.royal_guardian_boots": "Royal Guardian Boots", + "item.antarchy.royal_guardian_sword": "Royal Guardian Sword", + "item.antarchy.royal_guardian_shield": "Royal Guardian Shield", + "item.antarchy.royal_assailant_helmet": "Royal Assailant Helmet", + "item.antarchy.royal_assailant_chestplate": "Royal Assailant Chestplate", + "item.antarchy.royal_assailant_leggings": "Royal Assailant Leggings", + "item.antarchy.royal_assailant_boots": "Royal Assailant Boots", + "item.antarchy.royal_assailant_battleaxe": "Royal Assailant Battle Axe", + "item.antarchy.royal_assailant_staff": "Royal Assailant Staff", + "tooltip.antarchy.royal_assailant_staff": "Opens paired tears that summon four allied Manticores for 30 seconds.", + "tooltip.antarchy.royal_assailant_battleaxe.black_hole": "Use to create a Black Hole", + "tooltip.antarchy.royal_assailant_battleaxe.dilation": "Hits apply Temporal Dilation", + "tooltip.antarchy.royal_guardian_shield.command": "Use to command the nearest mob", + "tooltip.antarchy.royal_assailant_chestplate.invert": "Press the inversion key to toggle inverted gravity on and off.", + "tooltip.antarchy.royal_assailant_boots.fall": "Cancels fall damage while falling upward.", "item.antarchy.mantis_claw": "Mantis Claw", "tooltip.antarchy.mantis_claw.wall_cling": "Dual wield to cling to walls and jump upward.", "item.antarchy.king_scale": "King Scale", "item.antarchy.queen_scale": "Queen Scale", "item.antarchy.jerry_nucleus": "Jerry Nucleus", "tooltip.antarchy.jerry_nucleus.hatch": "While holding, interact with any bug egg or turtle egg to hatch it instantly.", - "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.jumpy_bug_leg": "Jumpy Bug Leg", - "item.antarchy.jumpy_boots": "Jumpy Boots", - "tooltip.antarchy.jumpy_boots": "Sneak to charge, then jump to spring upward.", + "key.antarchy.mount_special": "Mount: Special / Charge", + "key.antarchy.mount_flight_toggle": "Mount: Toggle Flight", + "item.antarchy.springbug_leg": "Springbug Leg", + "item.antarchy.springy_boots": "Springy Boots", + "tooltip.antarchy.springy_boots": "Sneak to charge, then jump to spring upward.", "item.antarchy.brutalfly_wing": "Brutalfly Wing", "item.antarchy.brutalfly_elytra": "Brutalfly Elytra", + "item.antarchy.manticore_wing": "Manticore Wing", + "item.antarchy.manticore_wings": "Manticore Wings", + "tooltip.antarchy.manticore_wings": "While flying, collide with non-allied creatures to deal heavy damage.", + "item.antarchy.broodfruit_cobbler": "Broodfruit Cobbler", "tooltip.antarchy.brutalfly_elytra.flap": "While flying, hold %s to flap your wings", "item.antarchy.cornea_ear": "Ear of Cornea", "item.antarchy.corn": "Corn", @@ -407,9 +583,9 @@ "item.antarchy.american_name": "American %s", "item.antarchy.root_beer": "Root Beer", "item.antarchy.primordial_scute": "Primordial Scute", - "item.antarchy.triffid_goo": "Triffid Goo", - "item.antarchy.triffid_goo_block": "Triffid Goo Block", - "tooltip.antarchy.triffid_goo_block": "At high velocity bounce up, otherwise sink through.", + "item.antarchy.flytrap_goo": "Flytrap Goo", + "item.antarchy.flytrap_goo_block": "Flytrap Goo Block", + "tooltip.antarchy.flytrap_goo_block": "At high velocity bounce up, otherwise sink through.", "item.antarchy.cloud_bucket": "Cloud Bucket", "tooltip.antarchy.cloud_bucket.midair": "Can be placed midair", "item.antarchy.lumen_bucket": "Lumen Bucket", @@ -419,7 +595,12 @@ "tooltip.antarchy.scorpion_whip.snap": "Attack with tethered prey to snap the stinger free.", "item.antarchy.fallen_king_crown": "Fallen King\u0027s Crown", "tooltip.antarchy.fallen_king_crown.hero": "Grants Hero of the Village when you slay hostile mobs", - "item.antarchy.vortex_eye": "Vortex Eye", + "item.antarchy.vortex_charge": "Vortex Charge", + "entity.antarchy.upward_falling_block": "Falling Antigravel", + "entity.antarchy.vortex": "Vortex", + "entity.antarchy.wind_vortex": "Wind Vortex", + "entity.antarchy.dimensional_tear": "Dimensional Tear", + "item.antarchy.vortex_spawn_egg": "Vortex Spawn Egg", "item.antarchy.ultimate_helmet": "Ultimate Helmet", "item.antarchy.ultimate_chestplate": "Ultimate Chestplate", "item.antarchy.ultimate_leggings": "Ultimate Leggings", @@ -450,6 +631,7 @@ "tooltip.antarchy.reverie_bottle.capture": "Right click a Reverie with a glass bottle to store it.", "tooltip.antarchy.reverie_bottle.release": "Right click to release the Reverie.", "item.antarchy.gravity_gun": "Gravity Gun", + "item.antarchy.portal_gun": "Portal Gun", "item.antarchy.miners_dream": "Miner's Dream", "tooltip.antarchy.miners_dream.line1": "Use to carve a winding cave.", "tooltip.antarchy.miners_dream.line2": "Leaves valuable blocks untouched.", @@ -515,7 +697,7 @@ "item.antarchy.caterpillar_spawn_egg": "Caterpillar Spawn Egg", "item.antarchy.butterfly_spawn_egg": "Butterfly Spawn Egg", "item.antarchy.brutalfly_spawn_egg": "Brutalfly Spawn Egg", - "item.antarchy.cloud_shark_spawn_egg": "Cloud Shark Spawn Egg", + "item.antarchy.stratoshark_spawn_egg": "Stratoshark Spawn Egg", "item.antarchy.kraken_spawn_egg": "Uh, no. Don\u0027t.", "item.antarchy.missile_squid_spawn_egg": "Missile Squid Spawn Egg", "item.antarchy.octopus_bomb_spawn_egg": "Octopus Bomb Spawn Egg", @@ -528,12 +710,15 @@ "item.antarchy.primordial_boots": "Primordial Boots", "item.antarchy.bed_bug_spawn_egg": "Bed Bug Spawn Egg", "item.antarchy.moleworm_spawn_egg": "Moleworm Spawn Egg", + "item.antarchy.worm_spawn_egg": "Worm Spawn Egg", "item.antarchy.molevore_spawn_egg": "Molevore Spawn Egg", "item.antarchy.reverie_spawn_egg": "Reverie Spawn Egg", "item.antarchy.mantis_spawn_egg": "Mantis Spawn Egg", "item.antarchy.alpha_mantis_spawn_egg": "Alpha Mantis Spawn Egg", "biome.antarchy.moleworm_caves": "Moleworm Caves", "biome.antarchy.elythia_meadow": "Elythian Meadows", + "biome.antarchy.truffalo_forest": "Truffalo Forest", + "biome.antarchy.elythia_ocean": "Elythian Ocean", "biome.antarchy.butterfly_fields": "Butterfly Fields", "biome.antarchy.ouranwood_forest": "Ouranwood Forest", "biome.antarchy.glimmering_pools": "Glimmering Pools", @@ -553,7 +738,7 @@ "message.antarchy.termite_activated": "The termite is ready to open its destination.", "message.antarchy.termite_needs_reagent": "This termite needs a reagent before it can open its destination.", "death.attack.spit_bug_disrespect": "%1$s was disrespected by Spit Bug", - "death.attack.jumpy_bug_jump": "%1$s was jumped by Jumpy Bug", + "death.attack.springbug_jump": "%1$s was jumped by Springbug", "death.attack.hercules_beetle_obliteration": "%1$s was obliterated by Hercules Beetle", "message.antarchy.big_bertha.mode": "Big Bertha Mode: %s", "message.antarchy.big_bertha.mode.none": "None", @@ -576,6 +761,12 @@ "effect.antarchy.paralyzed.description": "Prevents targets from moving.", "effect.antarchy.inverted": "Inverted", "effect.antarchy.inverted.description": "Inverts the target's gravity.", + "effect.antarchy.commanded": "Commanded", + "effect.antarchy.commanded.description": "Fights for the player who commanded it.", + "effect.antarchy.dilated": "Temporal Dilation", + "effect.antarchy.dilated.description": "Slows the passage of time for the affected entity.", + "effect.antarchy.contracted": "Temporal Contraction", + "effect.antarchy.contracted.description": "Speeds the passage of time for the affected entity.", "effect.antarchy.stinky": "Stinky", "effect.antarchy.stinky.description": "Repels passive and neutral mobs, attracts arthropods.", "effect.antarchy.gooped": "Gooped", @@ -585,19 +776,13 @@ "effect.antarchy.bloodglass_ward": "Bloodglass Ward", "effect.antarchy.bloodglass_ward.description": "Gives hearts that shatter, absorbing an entire hit of damage. They regenerate over time.", "effect.antarchy.glimmering": "Glimmering", - "effect.antarchy.glimmering.description": "Passes through entities and attacks unharmed, like a spirit.", - "effect.antarchy.dilated": "Dilated", - "effect.antarchy.dilated.description": "Slows the passage of time for the affected entity.", - "effect.antarchy.contracted": "Temporal Contraction", - "effect.antarchy.contracted.description": "Speeds the passage of time for the affected entity.", - "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", - "death.attack.triffid_swallow.player": "%1$s was swallowed by a triffid", + "effect.antarchy.glimmering.description": "Passes through entities and attacks unharmed, like a spirit. Grants a lighter step and a higher jump.", + "death.attack.flytrap_mauling": "%1$s was mauled to death by a plant", + "death.attack.flytrap_mauling.player": "%1$s was mauled to death by a plant", + "death.attack.flytrap_swallow": "%1$s was swallowed by a flytrap", + "death.attack.flytrap_swallow.player": "%1$s was swallowed by a flytrap", "potion.antarchy.haste": "Haste Potion", "potion.antarchy.strong_haste": "Strong Haste Potion", - "potion.antarchy.time_dilation": "Potion of Time Dilation", - "potion.antarchy.long_time_dilation": "Potion of Strong Time Dilation", "tooltip.antarchy.big_bertha.mode": "Mode: %s", "tooltip.antarchy.big_bertha.toggle_mode": "Shift + use to cycle boss modes.", "tooltip.antarchy.big_bertha.mode.none": "Hits deal a small amount of bonus damage.", @@ -617,6 +802,9 @@ "tooltip.antarchy.gravity_gun.secondary": "Usage: pull in an entity or a valid block.", "tooltip.antarchy.gravity_gun.scroll": "Hold Ctrl and scroll to move the held target closer or farther away.", "tooltip.antarchy.gravity_gun.blacklist": "Does not affect blacklisted blocks or entities.", + "tooltip.antarchy.portal_gun.primary": "Attack: fire a blue portal.", + "tooltip.antarchy.portal_gun.secondary": "Use: fire an orange portal.", + "tooltip.antarchy.portal_gun.reset": "Sneak + use: fizzle your active portals.", "tooltip.antarchy.antimetal_inversion": "Inverts entites directly below it", "tooltip.antarchy.diamond_minecart.forward": "Will be implemented later.", "tooltip.antarchy.diamond_minecart.rails": " ", @@ -629,13 +817,19 @@ "advancements.antarchy.visit_cavaryn.description": "Enter the infested dimension of Cavaryn.", "advancements.antarchy.fallen_kingdom_castle.title": "I Used to Rule the World...", "advancements.antarchy.fallen_kingdom_castle.description": "Discover the Fallen Kingdom Castle.", + "advancements.antarchy.a_lovely_world.title": "A Lovely World", + "advancements.antarchy.a_lovely_world.description": "You found a strangely familiar house in Elythia.", "advancements.antarchy.cops_n_robbers.title": "Cops N Robbers!", "advancements.antarchy.cops_n_robbers.description": "This is just a nostalgic structure, no affiliation with Sky :)", "advancements.antarchy.fallen_king_crown.title": "Chunks would load when I gave the word...", "advancements.antarchy.fallen_king_crown.description": "Obtain the Fallen King\u0027s Crown.", - "advancements.antarchy.the_lab.title": "Hello Everyone, Dan Here!", + "advancements.antarchy.long_live_the_prince.title": "Long Live the Prince", + "advancements.antarchy.long_live_the_prince.description": "Hatch and tame a Prince.", + "advancements.antarchy.long_live_the_princess.title": "Long Live the Princess", + "advancements.antarchy.long_live_the_princess.description": "Hatch and tame a Princess.", + "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.", @@ -646,11 +840,11 @@ "advancements.antarchy.davy_jones_locker.title": "Davy Jones\u0027 Locker", "advancements.antarchy.davy_jones_locker.description": "Defeat the Kraken.", "advancements.antarchy.shark_weak.title": "When Sharks Fly", - "advancements.antarchy.shark_weak.description": "Defeat a Cloud Shark.", + "advancements.antarchy.shark_weak.description": "Defeat a Stratoshark.", "advancements.antarchy.dont_let_the_bed_bugs_bite.title": "Don\u0027t Let the Bed Bugs Bite", "advancements.antarchy.dont_let_the_bed_bugs_bite.description": "Defeat a Bed Bug.", "advancements.antarchy.soups_up.title": "Soups Up", - "advancements.antarchy.soups_up.description": "Eat Cloud Shark Fin Soup.", + "advancements.antarchy.soups_up.description": "Eat Stratoshark Fin Soup.", "advancements.antarchy.in_the_upside_down.title": "In the Upside Down", "advancements.antarchy.in_the_upside_down.description": "Become inverted for the first time.", "advancements.antarchy.whoever_smelt_it_dealt_it.title": "Whoever smelt it, dealt it", @@ -661,6 +855,8 @@ "advancements.antarchy.ultimate_bow.description": "Obtain an Ultimate Bow.", "advancements.antarchy.brutalfly.title": "Float Like a Brutalfly, Sting Like a Bee", "advancements.antarchy.brutalfly.description": "Obtain a Brutalfly Elytra.", + "advancements.antarchy.royal_assailant_staff.title": "Fly my pretties!", + "advancements.antarchy.royal_assailant_staff.description": "Obtain the Royal Assailant Staff.", "advancements.antarchy.now_watch_me_whip.title": "Now Watch Me Whip", "advancements.antarchy.now_watch_me_whip.description": "Now watch me nae nae", "advancements.antarchy.kill_molevore.title": "Moley Poley", @@ -709,20 +905,19 @@ "tooltip.antarchy.lucid_pearl": "Throws an inverted-gravity projectile.", "tooltip.antarchy.lucid_pearl.detail": "Teleports you to where it lands and applies Inverted.", "subtitles.antarchy.squidzooka_fire": "Squidzooka fires", - "subtitles.antarchy.shrink_ray": "Shrink Ray fires", - "subtitles.antarchy.growth_ray": "Growth Ray fires", "subtitles.antarchy.size_ray_charge": "Size Ray charges", + "subtitles.antarchy.size_ray_fire": "Size Ray fires", "subtitles.antarchy.ant_ambient": "Ants chirp", "subtitles.antarchy.ant_idle": "Ants idle", "subtitles.antarchy.ant_hurt": "Ants hurt", "subtitles.antarchy.ant_bite": "Ants bite", "subtitles.antarchy.ant_gather": "Ants gather", "subtitles.antarchy.ant_nest": "Ant nest rustles", - "subtitles.antarchy.cloud_shark_bite": "Cloud Shark bites", - "subtitles.antarchy.cloud_shark_idle": "Cloud Shark idles", - "subtitles.antarchy.cloud_shark_hurt": "Cloud Shark hurts", - "subtitles.antarchy.cloud_shark_death": "Cloud Shark dies", - "subtitles.antarchy.cloud_shark_fly": "Cloud Shark flies", + "subtitles.antarchy.stratoshark_bite": "Stratoshark bites", + "subtitles.antarchy.stratoshark_idle": "Stratoshark idles", + "subtitles.antarchy.stratoshark_hurt": "Stratoshark hurts", + "subtitles.antarchy.stratoshark_death": "Stratoshark dies", + "subtitles.antarchy.stratoshark_fly": "Stratoshark flies", "subtitles.antarchy.caterpillar_idle": "Caterpillar idles", "subtitles.antarchy.caterpillar_hurt": "Caterpillar hurts", "subtitles.antarchy.caterpillar_crawl": "Caterpillar crawls", @@ -736,6 +931,10 @@ "subtitles.antarchy.thoraxis_dream_dunes_additions": "Dream Dunes rustle", "subtitles.antarchy.thoraxis_dream_dunes_mood": "Dream Dunes sigh", "subtitles.antarchy.thoraxis_lucid_pools_ambient": "Lucid Pools hum", + "subtitles.antarchy.dimensional_tear_open": "A dimensional tear opens", + "subtitles.antarchy.dimensional_tear_idle": "A dimensional tear shimmers", + "subtitles.antarchy.dimensional_tear_creature_leaves": "A creature emerges from the tear", + "subtitles.antarchy.dimensional_tear_close": "A dimensional tear closes", "subtitles.antarchy.thoraxis_lucid_pools_additions": "Lucid Pools curse", "subtitles.antarchy.thoraxis_lucid_pools_mood": "Lucid Pools murmur", "subtitles.antarchy.lucid_ambient": "Lucid hums", @@ -762,17 +961,26 @@ "subtitles.antarchy.nightmare_death": "Nightmare dies", "subtitles.antarchy.nightmare_bite": "Nightmare bites", "subtitles.antarchy.nightmare_flap": "Nightmare flaps", - "subtitles.antarchy.triffid_attack": "Triffid attacks", - "subtitles.antarchy.triffid_grab": "Triffid grabs", - "subtitles.antarchy.triffid_hurt": "Triffid hurts", - "subtitles.antarchy.triffid_death": "Triffid dies", - "subtitles.antarchy.triffid_hiss": "Triffid hisses", - "subtitles.antarchy.triffid_growl": "Triffid growls", + "subtitles.antarchy.flytrap_attack": "Flytrap attacks", + "subtitles.antarchy.flytrap_grab": "Flytrap grabs", + "subtitles.antarchy.flytrap_hurt": "Flytrap hurts", + "subtitles.antarchy.flytrap_death": "Flytrap dies", + "subtitles.antarchy.flytrap_hiss": "Flytrap hisses", + "subtitles.antarchy.flytrap_growl": "Flytrap growls", "subtitles.antarchy.gravity_gun_pickup": "Gravity Gun picks up", "subtitles.antarchy.gravity_gun_drop": "Gravity Gun drops", "subtitles.antarchy.gravity_gun_hold_loop": "Gravity Gun hums", "subtitles.antarchy.gravity_gun_launch": "Gravity Gun launches", "subtitles.antarchy.gravity_gun_dryfire": "Gravity Gun dry fires", + "subtitles.antarchy.antimetal_place": "Antimetal clangs", + "subtitles.antarchy.antimetal_step": "Antimetal clinks", + "subtitles.antarchy.antimetal_scaffold": "Antimetal scaffolding rattles", + "subtitles.antarchy.portal_gun_fire_blue": "Portal Gun fires", + "subtitles.antarchy.portal_gun_fire_orange": "Portal Gun fires", + "subtitles.antarchy.portal_gun_invalid_surface": "Portal fizzles", + "subtitles.antarchy.portal_open_blue": "Blue portal opens", + "subtitles.antarchy.portal_open_orange": "Orange portal opens", + "subtitles.antarchy.portal_fizzle": "Portal fizzles", "subtitles.antarchy.bed_bug_ambient": "Bed Bug chirps", "subtitles.antarchy.bed_bug_hurt": "Bed Bug hurts", "subtitles.antarchy.bed_bug_attack": "Bed Bug bites", @@ -796,6 +1004,11 @@ "subtitles.antarchy.molevore_attack": "Molevore attacks", "subtitles.antarchy.molevore_dig": "Molevore digs", "subtitles.antarchy.duct_tape_use": "Duct Tape tears", + "subtitles.antarchy.worm_hook_flying": "Worm Hook whooshes", + "subtitles.antarchy.blood_crystal_katana_dash": "Blood Crystal Katana dashes", + "subtitles.antarchy.blood_crystal_armor_equip": "Blood Crystal Armor equips", + "subtitles.antarchy.bloodglass_ward_heart_break": "Bloodglass heart shatters", + "subtitles.antarchy.bloodglass_ward_heart_regen": "Bloodglass heart reforms", "subtitles.antarchy.potent_nyxite_hypnotic_gas": "Potent Nyxite hisses", "subtitles.antarchy.potent_nyxite_geyser_eruption": "Potent Nyxite erupts", "subtitles.antarchy.potent_nyxite_geyser_continuous": "Potent Nyxite geyser roars", @@ -829,23 +1042,80 @@ "subtitles.antarchy.water_cannon_fire": "Water Cannon fires", "subtitles.antarchy.toreterror_jump_up": "Toreterror jumps", "subtitles.antarchy.toreterror_jump_land": "Toreterror lands", + "subtitles.antarchy.king_idle": "The King rumbles", + "subtitles.antarchy.king_walk": "The King's footfalls", + "subtitles.antarchy.king_fly_loop": "The King's wings beat", + "subtitles.antarchy.king_wing_flap": "The King's wings surge", + "subtitles.antarchy.king_bite": "The King bites", + "subtitles.antarchy.king_stomp": "The King stomps", + "subtitles.antarchy.king_roar": "The King roars", + "subtitles.antarchy.king_hurt": "The King is struck", + "subtitles.antarchy.king_death": "The King falls", + "subtitles.antarchy.king_beam_shoot": "The King fires a beam", + "subtitles.antarchy.king_fireball_shoot": "The King breathes fire", + "subtitles.antarchy.king_ice_spikes": "The King summons ice spikes", + "subtitles.antarchy.king_decree_cast": "The King pronounces a Decree", + "subtitles.antarchy.king_decree": "The King issues a Decree", + "subtitles.antarchy.king_success": "The King acknowledges compliance", + "subtitles.antarchy.king_judgement": "The King passes Judgement", + "subtitles.antarchy.queen_idle": "The Queen murmurs", + "subtitles.antarchy.queen_walk": "The Queen's footfalls", + "subtitles.antarchy.queen_fly_loop": "The Queen's wings beat", + "subtitles.antarchy.queen_wing_flap": "The Queen's wings surge", + "subtitles.antarchy.queen_bite": "The Queen bites", + "subtitles.antarchy.queen_stomp": "The Queen stomps", + "subtitles.antarchy.queen_roar": "The Queen roars", + "subtitles.antarchy.queen_hurt": "The Queen is struck", + "subtitles.antarchy.queen_death": "The Queen falls", + "subtitles.antarchy.queen_beam_shoot": "The Queen fires a beam", + "subtitles.antarchy.queen_beam_start": "The Queen's beam charges", + "subtitles.antarchy.queen_beam_loop": "The Queen's beam sweeps", + "subtitles.antarchy.queen_beam_end": "The Queen's beam fades", + "subtitles.antarchy.queen_black_hole_shoot": "The Queen tears open a singularity", + "subtitles.antarchy.queen_cast_shoot": "The Queen casts", + "subtitles.antarchy.prince_idle": "The Prince chitters", + "subtitles.antarchy.prince_bite": "The Prince bites", + "subtitles.antarchy.prince_shoot": "The Prince spits a volley", + "subtitles.antarchy.prince_fly": "The Prince's wings beat", + "subtitles.antarchy.prince_step": "The Prince's footfalls", + "subtitles.antarchy.princess_idle": "The Princess chitters", + "subtitles.antarchy.princess_bite": "The Princess bites", + "subtitles.antarchy.princess_shoot": "The Princess spits a volley", + "subtitles.antarchy.princess_fly": "The Princess's wings beat", + "subtitles.antarchy.princess_step": "The Princess's footfalls", "subtitles.antarchy.stinky_fly": "Stinky flies buzz", "item.minecraft.potion.effect.inversion": "Potion of Inversion", "item.minecraft.potion.effect.long_inversion": "Potion of Inversion", - "item.minecraft.potion.effect.time_dilation": "Potion of Time Dilation", - "item.minecraft.potion.effect.long_time_dilation": "Potion of Strong Time Dilation", - "item.minecraft.splash_potion.effect.time_dilation": "Splash Potion of Time Dilation", - "item.minecraft.splash_potion.effect.long_time_dilation": "Splash Potion of Strong Time Dilation", - "item.minecraft.lingering_potion.effect.time_dilation": "Lingering Potion of Time Dilation", - "item.minecraft.lingering_potion.effect.long_time_dilation": "Lingering Potion of Strong Time Dilation", - "item.minecraft.tipped_arrow.effect.time_dilation": "Arrow of Time Dilation", - "item.minecraft.tipped_arrow.effect.long_time_dilation": "Arrow of Strong Time Dilation", "item.minecraft.splash_potion.effect.inversion": "Splash Potion of Inversion", "item.minecraft.splash_potion.effect.long_inversion": "Splash Potion of Inversion", "item.minecraft.lingering_potion.effect.inversion": "Lingering Potion of Inversion", "item.minecraft.lingering_potion.effect.long_inversion": "Lingering Potion of Inversion", "item.minecraft.tipped_arrow.effect.inversion": "Arrow of Inversion", "item.minecraft.tipped_arrow.effect.long_inversion": "Arrow of Inversion", + "item.minecraft.potion.effect.command": "Potion of Command", + "item.minecraft.potion.effect.long_command": "Potion of Command", + "item.minecraft.splash_potion.effect.command": "Splash Potion of Command", + "item.minecraft.splash_potion.effect.long_command": "Splash Potion of Command", + "item.minecraft.lingering_potion.effect.command": "Lingering Potion of Command", + "item.minecraft.lingering_potion.effect.long_command": "Lingering Potion of Command", + "item.minecraft.tipped_arrow.effect.command": "Arrow of Command", + "item.minecraft.tipped_arrow.effect.long_command": "Arrow of Command", + "item.minecraft.potion.effect.time_dilation": "Potion of Temporal Dilation", + "item.minecraft.potion.effect.long_time_dilation": "Potion of Strong Temporal Dilation", + "item.minecraft.splash_potion.effect.time_dilation": "Splash Potion of Temporal Dilation", + "item.minecraft.splash_potion.effect.long_time_dilation": "Splash Potion of Strong Temporal Dilation", + "item.minecraft.lingering_potion.effect.time_dilation": "Lingering Potion of Temporal Dilation", + "item.minecraft.lingering_potion.effect.long_time_dilation": "Lingering Potion of Strong Temporal Dilation", + "item.minecraft.tipped_arrow.effect.time_dilation": "Arrow of Temporal Dilation", + "item.minecraft.tipped_arrow.effect.long_time_dilation": "Arrow of Strong Temporal Dilation", + "item.minecraft.potion.effect.time_contraction": "Potion of Temporal Contraction", + "item.minecraft.splash_potion.effect.time_contraction": "Splash Potion of Temporal Contraction", + "item.minecraft.lingering_potion.effect.time_contraction": "Lingering Potion of Temporal Contraction", + "item.minecraft.tipped_arrow.effect.time_contraction": "Arrow of Temporal Contraction", + "item.minecraft.potion.effect.long_time_contraction": "Potion of Strong Temporal Contraction", + "item.minecraft.splash_potion.effect.long_time_contraction": "Splash Potion of Strong Temporal Contraction", + "item.minecraft.lingering_potion.effect.long_time_contraction": "Lingering Potion of Strong Temporal Contraction", + "item.minecraft.tipped_arrow.effect.long_time_contraction": "Arrow of Strong Temporal Contraction", "item.minecraft.potion.effect.paralysis": "Potion of Paralysis", "item.minecraft.potion.effect.long_paralysis": "Potion of Paralysis", "item.minecraft.splash_potion.effect.paralysis": "Splash Potion of Paralysis", @@ -904,6 +1174,12 @@ "item.minecraft.tipped_arrow.effect.strong_haste": "Arrow of Haste II", "advancements.antarchy.cancel_out.title": "1 - 1 = ?", "advancements.antarchy.cancel_out.description": "Have Growth and Shrinking active at the same time.", + "advancements.antarchy.enter_the_speed_force.title": "Enter the speed force", + "advancements.antarchy.enter_the_speed_force.description": "Gain Temporal Contraction.", + "advancements.antarchy.probably_wondering_how_i_got_here.title": "You're probably wondering how I got here", + "advancements.antarchy.probably_wondering_how_i_got_here.description": "Gain Temporal Dilation.", + "advancements.antarchy.temporal_contradiction.title": "Temporal Contradiction", + "advancements.antarchy.temporal_contradiction.description": "Have Temporal Dilation and Temporal Contraction active at the same time.", "entity.antarchy.cheep": "Cheep", "item.antarchy.cheep": "Cheep", "item.antarchy.cheep_spawn_egg": "Cheep Spawn Egg", @@ -913,6 +1189,7 @@ "biome.antarchy.umbral_hills": "Umbral Hills", "biome.antarchy.lucid_pools": "Lucid Pools", "biome.antarchy.dream_dunes": "Dream Dunes", + "biome.antarchy.vortex_expanse": "Vortex Expanse", "biome.antarchy.cloud_sea": "Cloud Sea", "block.antarchy.wild_corn": "Wild Corn", "trim_material.antarchy.blood_crystal": "Blood Crystal", @@ -920,21 +1197,6 @@ "trim_material.antarchy.nightmare_scale": "Nightmare Scale", "trim_material.antarchy.uranium": "Uranium", "trim_material.antarchy.titanium": "Titanium", - "trim_material.antarchy.tigers_eye": "Tiger's Eye", - "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", - "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", "advancements.antarchy.duct_tape.title": "I sawed this boat in half!", "advancements.antarchy.duct_tape.description": "and fixed it with the power of duct tape!", "key.categories.antarchy": "Antarchy", @@ -954,6 +1216,8 @@ "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", + "biome.antarchy.wormy_caves": "Wormy Caves", "block.antarchy.termite_nest": "Termite Nest", "block.antarchy.chitin_spike": "Chitin Spike", "block.antarchy.chitin_block": "Chitin Block", @@ -963,27 +1227,41 @@ "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", + "tooltip.antarchy.mucus_slippery": "Makes the block it's on even more slippery than ice", "block.antarchy.bile_vein": "Bile Vein", "block.antarchy.creepvine": "Creepvine", - "block.antarchy.creeping_horror_egg": "Creeping Horror Egg", - "block.antarchy.lurking_terror_egg": "Lurking Terror Egg", + "block.antarchy.crawling_blight_egg": "Crawling Blight Egg", + "block.antarchy.skulking_fright_egg": "Skulking Fright Egg", "entity.antarchy.termite": "Termite", - "entity.antarchy.jumpy_bug": "Jumpy Bug", + "entity.antarchy.springbug": "Springbug", "entity.antarchy.spit_bug": "Spit Bug", "entity.antarchy.stink_bug": "Stink Bug", "entity.antarchy.rolly_polly": "Rolly Polly", - "entity.antarchy.creeping_horror": "Creeping Horror", - "entity.antarchy.lurking_terror": "Lurking Terror", + "entity.antarchy.crawling_blight": "Crawling Blight", + "entity.antarchy.skulking_fright": "Skulking Fright", "entity.antarchy.hercules_beetle": "Hercules Beetle", - "item.antarchy.jumpy_bug_spawn_egg": "Jumpy Bug Spawn Egg", + "entity.antarchy.prince": "Prince", + "entity.antarchy.princess": "Princess", + "entity.antarchy.king": "The King", + "entity.antarchy.queen": "The Queen", + "entity.antarchy.manticore": "Manticore", + "entity.antarchy.royal_black_hole": "Singularity", + "entity.antarchy.royal_bolt": "Royal Bolt", + "block.antarchy.prince_egg": "Prince Egg", + "block.antarchy.princess_egg": "Princess Egg", + "item.antarchy.springbug_spawn_egg": "Springbug Spawn Egg", "item.antarchy.spit_bug_spawn_egg": "Spit Bug Spawn Egg", "item.antarchy.stink_bug_spawn_egg": "Stink Bug Spawn Egg", "item.antarchy.termite_spawn_egg": "Termite Spawn Egg", "item.antarchy.rolly_polly_spawn_egg": "Rolly Polly Spawn Egg", - "item.antarchy.creeping_horror_spawn_egg": "Creeping Horror Spawn Egg", - "item.antarchy.lurking_terror_spawn_egg": "Lurking Terror Spawn Egg", + "item.antarchy.crawling_blight_spawn_egg": "Crawling Blight Spawn Egg", + "item.antarchy.skulking_fright_spawn_egg": "Skulking Fright Spawn Egg", "item.antarchy.hercules_beetle_spawn_egg": "Hercules Beetle Spawn Egg", + "item.antarchy.king_spawn_egg": "King Spawn Egg", + "item.antarchy.queen_spawn_egg": "Queen Spawn Egg", + "item.antarchy.manticore_spawn_egg": "Manticore Spawn Egg", + "item.antarchy.prince_spawn_egg": "Prince Spawn Egg", + "item.antarchy.princess_spawn_egg": "Princess Spawn Egg", "item.antarchy.chitin": "Chitin", "block.antarchy.polished_broodstone": "Polished Broodstone", "block.antarchy.chiseled_broodstone": "Chiseled Broodstone", @@ -1010,7 +1288,7 @@ "block.antarchy.glowcap_mushroom_block": "Glowcap Mushroom Block", "block.antarchy.molting_vines": "Molting Vines", "item.antarchy.broodfruit": "Broodfruit", - "block.antarchy.jumpy_bug_egg": "Jumpy Bug Egg", + "block.antarchy.springbug_egg": "Springbug Egg", "block.antarchy.spit_bug_egg": "Spit Bug Egg", "block.antarchy.jerry_egg": "Jerry Egg", "entity.antarchy.jerry": "Jerry", @@ -1020,13 +1298,13 @@ "block.antarchy.biowart": "Biowart", "block.antarchy.biowart_tendrils": "Biowart Tendrils", "biome.antarchy.biowart_caves": "Biowart Caves", - "subtitles.antarchy.creeping_horror_growl": "Creeping Horror growls", - "subtitles.antarchy.creeping_horror_hurt": "Creeping Horror hurts", - "subtitles.antarchy.creeping_horror_bite": "Creeping Horror bites", - "subtitles.antarchy.lurking_terror_snarl": "Lurking Terror snarls", - "subtitles.antarchy.lurking_terror_hurt": "Lurking Terror hurts", - "subtitles.antarchy.lurking_terror_bite": "Lurking Terror bites", - "subtitles.antarchy.lurking_terror_fly_loop": "Lurking Terror flies", + "subtitles.antarchy.crawling_blight_growl": "Crawling Blight growls", + "subtitles.antarchy.crawling_blight_hurt": "Crawling Blight hurts", + "subtitles.antarchy.crawling_blight_bite": "Crawling Blight bites", + "subtitles.antarchy.skulking_fright_snarl": "Skulking Fright snarls", + "subtitles.antarchy.skulking_fright_hurt": "Skulking Fright hurts", + "subtitles.antarchy.skulking_fright_bite": "Skulking Fright bites", + "subtitles.antarchy.skulking_fright_fly_loop": "Skulking Fright flies", "subtitles.antarchy.stink_bug_fart": "Stink Bug farts", "subtitles.antarchy.cavaryn_heartbeat": "Cavaryn pulses", "subtitles.antarchy.stink_bug_idle": "Stink Bug idles", @@ -1040,10 +1318,10 @@ "subtitles.antarchy.hercules_beetle_cry": "Hercules Beetle roars", "subtitles.antarchy.hercules_beetle_charge_start": "Hercules Beetle charges up", "subtitles.antarchy.hercules_beetle_knocked_down": "Hercules Beetle is knocked down", - "subtitles.antarchy.jumpy_bug_idle": "Jumpy Bug idles", + "subtitles.antarchy.springbug_idle": "Springbug idles", "subtitles.antarchy.spit_bug_idle": "Spit Bug idles", - "subtitles.antarchy.jumpy_bug_hurt": "Jumpy Bug hurts", - "subtitles.antarchy.jumpy_bug_jump": "Jumpy Bug jumps", + "subtitles.antarchy.springbug_hurt": "Springbug hurts", + "subtitles.antarchy.springbug_jump": "Springbug jumps", "subtitles.antarchy.spit_bug_hurt": "Spit Bug hurts", "subtitles.antarchy.spit_bug_spit": "Spit Bug spits", "subtitles.antarchy.brutalfly_spit": "Brutalfly spits", @@ -1056,8 +1334,187 @@ "advancements.antarchy.bug_apetit.description": "Eat Cooked Bug Meat.", "advancements.antarchy.behavioral_correction.title": "Behavioral Correction", "advancements.antarchy.behavioral_correction.description": "Obtain an Attitude Adjuster.", + "advancements.antarchy.let_it_die.title": "Let It Die!", + "advancements.antarchy.let_it_die.description": "Obtain any Truffalo Tuft.", + "advancements.antarchy.let_it_grow.title": "Let It Grow!", + "advancements.antarchy.let_it_grow.description": "Grow a Truffalo Sapling.", "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", + "block.antarchy.tigers_eye_block": "Block of 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", + "key.antarchy.royal_inversion_toggle": "Royal Assailant: Toggle Inversion", + "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.whistling_void": "Whistling Void", + "music.antarchy.whistling_void.credit": "docshrekbot", + "music.antarchy.venenatus": "Venenatus", + "music.antarchy.venenatus.credit": "hewo_", + "music.antarchy.wistful_wanderings": "Wistful Wanderings", + "music.antarchy.wistful_wanderings.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", + "block.antarchy.myrmite_stairs": "Myrmite Stairs", + "block.antarchy.myrmite_slab": "Myrmite Slab", + "block.antarchy.myrmite_wall": "Myrmite Wall", + "block.antarchy.polished_myrmite": "Polished Myrmite", + "block.antarchy.polished_myrmite_stairs": "Polished Myrmite Stairs", + "block.antarchy.polished_myrmite_slab": "Polished Myrmite Slab", + "block.antarchy.polished_myrmite_wall": "Polished Myrmite Wall", + "block.antarchy.chiseled_myrmite": "Chiseled Myrmite", + "block.antarchy.myrmite_bricks": "Myrmite Bricks", + "block.antarchy.myrmite_brick_stairs": "Myrmite Brick Stairs", + "block.antarchy.myrmite_brick_slab": "Myrmite Brick Slab", + "block.antarchy.myrmite_brick_wall": "Myrmite Brick Wall", + "block.antarchy.mossy_myrmite_bricks": "Mossy Myrmite Bricks", + "block.antarchy.mossy_myrmite_brick_stairs": "Mossy Myrmite Brick Stairs", + "block.antarchy.mossy_myrmite_brick_slab": "Mossy Myrmite Brick Slab", + "block.antarchy.mossy_myrmite_brick_wall": "Mossy Myrmite Brick Wall", + "block.antarchy.myrmite_pillar": "Myrmite Pillar", + "block.antarchy.mossy_broodstone_bricks": "Mossy Broodstone Bricks", + "block.antarchy.mossy_broodstone_brick_stairs": "Mossy Broodstone Brick Stairs", + "block.antarchy.mossy_broodstone_brick_slab": "Mossy Broodstone Brick Slab", + "block.antarchy.mossy_broodstone_brick_wall": "Mossy Broodstone Brick Wall", + "block.antarchy.mossy_nyxite_bricks": "Mossy Nyxite Bricks", + "block.antarchy.mossy_nyxite_brick_stairs": "Mossy Nyxite Brick Stairs", + "block.antarchy.mossy_nyxite_brick_slab": "Mossy Nyxite Brick Slab", + "block.antarchy.mossy_nyxite_brick_wall": "Mossy Nyxite Brick Wall", + "block.antarchy.packed_loam": "Packed Loam", + "block.antarchy.loam_bricks": "Loam Bricks", + "block.antarchy.loam_brick_stairs": "Loam Brick Stairs", + "block.antarchy.loam_brick_slab": "Loam Brick Slab", + "block.antarchy.loam_brick_wall": "Loam Brick Wall", + "block.antarchy.chiseled_loam_bricks": "Chiseled Loam Bricks", + "item.antarchy.cooked_cheep": "Cooked Cheep", + "item.antarchy.cheep_bucket": "Bucket of Cheep", + "block.antarchy.nadir_nyxium": "Nadir Nyxium", + "block.antarchy.verdant_nyxium": "Verdant Nyxium", + "block.antarchy.typhonite_pillar": "Typhonite Pillar", + "block.antarchy.nadir_fern": "Nadir Fern", + "block.antarchy.large_nadir_fern": "Large Nadir Fern", + "block.antarchy.duskbell": "Duskbell", + "block.antarchy.nadir_roots": "Nadir Roots", + "block.antarchy.verdant_roots": "Verdant Roots", + "block.antarchy.gorevine": "Gorevine" + ,"decree.antarchy.the_sky_is_mine": "THE SKY IS MINE" + ,"decree.antarchy.the_sky_is_mine.subtitle": "Stay grounded." + ,"decree.antarchy.do_not_run": "DO NOT RUN" + ,"decree.antarchy.do_not_run.subtitle": "Stop sprinting." + ,"decree.antarchy.kneel": "KNEEL" + ,"decree.antarchy.kneel.subtitle": "Crouch within five seconds." + ,"decree.antarchy.close_quarters": "CLOSE QUARTERS" + ,"decree.antarchy.close_quarters.subtitle": "Projectiles are forbidden." + ,"decree.antarchy.come_no_closer": "COME NO CLOSER" + ,"decree.antarchy.come_no_closer.subtitle": "Keep out of the King's inner radius." + ,"decree.antarchy.fight_me_coward": "FIGHT ME, COWARD!" + ,"decree.antarchy.fight_me_coward.subtitle": "Approach the King." + ,"decree.antarchy.no_respite": "NO RESPITE" + ,"decree.antarchy.no_respite.subtitle": "Healing is sealed." + ,"decree.antarchy.no_retreat": "NO RETREAT" + ,"decree.antarchy.no_retreat.subtitle": "Do not flee the King's presence." + ,"decree.antarchy.keep_your_distance": "KEEP YOUR DISTANCE" + ,"decree.antarchy.keep_your_distance.subtitle": "Stay out of the King's reach." + ,"decree.antarchy.stand_tall": "STAND TALL" + ,"decree.antarchy.stand_tall.subtitle": "Do not crouch before the King." + ,"decree.antarchy.stand_your_ground": "STAND YOUR GROUND" + ,"decree.antarchy.stand_your_ground.subtitle": "Do not stray from where you stand." + ,"decree.antarchy.hands_off_the_crown": "HANDS OFF THE CROWN" + ,"decree.antarchy.hands_off_the_crown.subtitle": "Strike the King and be judged." + ,"decree.antarchy.advance": "ADVANCE" + ,"decree.antarchy.advance.subtitle": "Close on the King or be judged." + ,"decree.antarchy.show_no_mercy": "SHOW NO MERCY" + ,"decree.antarchy.show_no_mercy.subtitle": "Keep dealing damage." + ,"menu.antarchy.royal_judgment": "Royal Judgment" + ,"enchantment.antarchy.feather_rising": "Feather Rising" + ,"enchantment.antarchy.chronosphere": "Chronosphere" + ,"block.antarchy.computer": "Computer" + ,"item.antarchy.computer": "Computer" + ,"item.antarchy.floppy_disk": "Floppy Disk" + ,"item.antarchy.floppy_disk.tooltip": "Put in a computer to find out more" + ,"screen.antarchy.computer": "ANTINTOSH OS" + ,"guide.antarchy.category.general": "GENERAL" + ,"guide.antarchy.category.elythia": "ELYTHIA" + ,"guide.antarchy.category.thoraxis": "THORAXIS" + ,"guide.antarchy.category.cavaryn": "CAVARYN" + ,"guide.antarchy.missing_title": "CORRUPTED FILE" + ,"guide.antarchy.missing_disk_title": "UNREADABLE DISK" + ,"guide.antarchy.disk.introduction.title": "INITIAL BOOT NOTES" + ,"guide.antarchy.disk.chronosphere.title": "CHRONOSPHERE DATA" + ,"guide.antarchy.disk.toreterror_arena.title": "TORETERROR ARENA DATA" + ,"guide.antarchy.disk.high_fructose_corn_syrup.title": "CORN SYRUP DATA" + ,"guide.antarchy.disk.elythia.title": "ELYTHIA ACCESS RECORD" + ,"guide.antarchy.disk.flying_squirrel.title": "FLYING SQUIRREL FIELD NOTES" + ,"guide.antarchy.disk.cavaryn.title": "CAVARYN ACCESS RECORD" + ,"guide.antarchy.disk.thoraxis.title": "THORAXIS ACCESS RECORD" + ,"guide.antarchy.disk.temporal_fields.title": "TEMPORAL FIELDS MANUAL" + ,"guide.antarchy.disk.bloodglass.title": "BLOODGLASS SURVIVAL NOTES" + ,"guide.antarchy.disk.vortex.title": "VORTEX CONTROL NOTES" + ,"guide.antarchy.entry.introduction.title": "SYSTEM INITIALIZED" + ,"guide.antarchy.entry.introduction.subtitle": "A machine for remembering what should have stayed forgotten." + ,"guide.antarchy.entry.introduction.description": "Insert recovered floppy disks to expand this archive. The machine remembers. The machine does not forgive." + ,"guide.antarchy.entry.chronosphere.title": "Chronosphere" + ,"guide.antarchy.entry.chronosphere.subtitle": "Temporal equipment record" + ,"guide.antarchy.entry.chronosphere.description": "A record for the Chronosphere enchantment will be expanded here. Further data is pending." + ,"guide.antarchy.entry.toreterror_arena.title": "Toreterror Arena" + ,"guide.antarchy.entry.toreterror_arena.subtitle": "Structure location fragment" + ,"guide.antarchy.entry.toreterror_arena.description": "The nearest arena is rumored to lie beyond the current horizon. Directional analysis is pending in this prototype." + ,"guide.antarchy.entry.elythia.title": "Elythia" + ,"guide.antarchy.entry.elythia.subtitle": "Dimension and portal access record" + ,"guide.antarchy.entry.elythia.description": "Elythia is reached through an Elythia portal made with a valid frame. A sacrificed Brown Ant activates the portal. The dimension contains oceans, meadows, forests, coral spikes, and other surface biomes." + ,"guide.antarchy.entry.flying_squirrel.title": "Flying Squirrel" + ,"guide.antarchy.entry.flying_squirrel.subtitle": "Elythia companion record" + ,"guide.antarchy.entry.flying_squirrel.description": "You wanna get nuts? Let’s get nuts. Flying squirrels like nuts, trees, and making a dramatic exit. Feed one to befriend it, then give it plenty of canopy to climb through. If you tell it to, it will perch on top of your head. If it falls, do not panic. It may be gliding. If you fall, you have my permission to panic." + ,"guide.antarchy.entry.cavaryn.title": "Cavaryn" + ,"guide.antarchy.entry.cavaryn.subtitle": "Dimension and portal access record" + ,"guide.antarchy.entry.cavaryn.description": "Cavaryn is reached through a Cavaryn portal made with a valid frame. A sacrificed Termite activates the portal. The dimension is a deep network of caves, including Glowcap, Biowart, Moleworm, Wormy, and Brooding Tunnel regions." + ,"guide.antarchy.entry.thoraxis.title": "Thoraxis" + ,"guide.antarchy.entry.thoraxis.subtitle": "Dimension and portal access record" + ,"guide.antarchy.entry.thoraxis.description": "Thoraxis is reached through a Thoraxis portal made with a valid frame. A sacrificed Red Ant activates the portal. Its vertical progression includes Dream Dunes, Umbral Hills, Lucid Pools, and Nadir Forest." + ,"guide.antarchy.entry.temporal_fields.title": "Temporal Fields" + ,"guide.antarchy.entry.temporal_fields.subtitle": "Time dilation and Chronosphere reference" + ,"guide.antarchy.entry.temporal_fields.description": "Time Dilation and Time Contraction alter the rate of affected entities. Chronosphere armor creates a player-centered field at 35 percent rate; higher levels expand its radius." + ,"guide.antarchy.entry.bloodglass.title": "Bloodglass" + ,"guide.antarchy.entry.bloodglass.subtitle": "Reactive protection system" + ,"guide.antarchy.entry.bloodglass.description": "Blood Crystal armor grants Bloodglass Hearts that block an incoming hit, shatter, and recharge. Blood Crystal Apples grant temporary Bloodglass Ward, and the Katana provides launch, dash, and crimson-trail mobility." + ,"guide.antarchy.entry.vortex.title": "Vortex Systems" + ,"guide.antarchy.entry.vortex.subtitle": "Vortex Lens and Eye of the Storm reference" + ,"guide.antarchy.entry.vortex.description": "Redstone power pulls entities into a Vortex Lens beam while Bluestone power blasts them away. The Eye of the Storm launches an updraft and can hurl a homing tornado that carries foes." + ,"guide.antarchy.entry.nightmare.title": "Nightmare" + ,"guide.antarchy.entry.nightmare.subtitle": "Thoraxis hostile entity record" + ,"guide.antarchy.entry.nightmare.description": "A hostile entity recorded in the deepest Thoraxis regions. The recovered model is presented in monochrome archive mode." + ,"guide.antarchy.entry.high_fructose_corn_syrup.title": "High Fructose Corn Syrup" + ,"guide.antarchy.entry.high_fructose_corn_syrup.subtitle": "Nutritional and operational notes" + ,"guide.antarchy.entry.high_fructose_corn_syrup.description": "A sweet substance of uncertain strategic value. Doctoral enthusiasm surrounding it is statistically suspicious." + ,"screen.antarchy.computer.first_use.title": "INITIAL PASSWORD SETUP" + ,"screen.antarchy.computer.first_use.prompt": "CREATE A PASSWORD TO CONTINUE" + ,"screen.antarchy.computer.first_use.confirm": "CONFIRM PASSWORD" + ,"screen.antarchy.computer.busy": "COMPUTER IN USE" + ,"screen.antarchy.computer.eject_denied": "ACCESS DENIED: SETTINGS REQUIRED" + ,"screen.antarchy.computer.ejected": "DISK EJECTED" + ,"antintosh.antarchy.desktop.archive": "ARCHIVE" + ,"antintosh.antarchy.desktop.settings": "SETTINGS" + ,"antintosh.antarchy.desktop.terminal": "TERMINAL" + ,"antintosh.antarchy.desktop.antpaint": "ANTPAINT" + ,"antintosh.antarchy.desktop.antmail": "ANTMAIL" + ,"antintosh.antarchy.desktop.text_editor": "TEXT EDITOR" + ,"antintosh.antarchy.antmail.compose": "COMPOSE MESSAGE" + ,"antintosh.antarchy.antmail.attach_text": "ATTACH TEXT FILE" + ,"antintosh.antarchy.antmail.attach_image": "ATTACH ANTPAINT IMAGE" + ,"antintosh.antarchy.antmail.save_attachment": "SAVE ATTACHMENT" + ,"antintosh.antarchy.antmail.address": "COMPUTER ADDRESS" } diff --git a/common-1.20.1/src/main/resources/assets/antarchy/lang/es_es.json b/common-1.20.1/src/main/resources/assets/antarchy/lang/es_es.json index d2ce8428..dd76c4b6 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/lang/es_es.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/lang/es_es.json @@ -90,7 +90,7 @@ "block.antarchy.pale_nyxite": "Nyxite pálido", "block.antarchy.nyxite_spike": "Púa de Nyxite", "block.antarchy.potent_nyxite": "Nyxite potente", - "block.antarchy.triffid_goo_block": "Bloque de Triffid Baba", + "block.antarchy.flytrap_goo_block": "Bloque de Flytrap Baba", "block.antarchy.elythia_portal": "Portal de Elythia", "block.antarchy.cloud_block": "Bloque de Nube", "block.antarchy.thoraxis_portal": "Portal de Thoraxis", @@ -181,7 +181,7 @@ "entity.antarchy.rainbow_ant": "Hormiga arcoíris", "entity.antarchy.diamond_minecart": "La vagoneta de diamante", "entity.antarchy.dr_trayaurus": "Dr. Trayaurus", - "entity.antarchy.cloud_shark": "Tiburón de nube", + "entity.antarchy.stratoshark": "Tiburón de nube", "entity.antarchy.kraken": "El Kraken", "entity.antarchy.missile_squid": "Calamar misil", "entity.antarchy.octopus_bomb": "Bomba pulpo", @@ -193,7 +193,7 @@ "entity.antarchy.molevore": "Molevore", "entity.antarchy.mantis": "Mantis", "entity.antarchy.alpha_mantis": "Mantis alfa", - "entity.antarchy.triffid": "Triffid", + "entity.antarchy.flytrap": "Flytrap", "entity.antarchy.toreterror": "Toreterror", "entity.antarchy.water_bomb": "Bomba de agua", "subtitles.antarchy.mantis_ambient": "Mantis hace clics", @@ -212,9 +212,9 @@ "item.antarchy.attitude_adjuster": "Ajustador de actitud", "tooltip.antarchy.attitude_adjuster.grounded": "Lanza hacia arriba a los objetivos en el suelo y estrella contra el suelo a los que están en el aire.", "tooltip.antarchy.attitude_adjuster.slam": "Haz clic derecho en el aire para realizar un golpe contra el suelo.", - "item.antarchy.cloud_shark_fin": "Aleta de Tiburón de nube", - "item.antarchy.cloud_shark_fin_soup": "Sopa de Aleta de Tiburón de nube", - "tooltip.antarchy.cloud_shark_fin_soup": "Otorga Fuerza y Caída lenta.", + "item.antarchy.stratoshark_fin": "Aleta de Tiburón de nube", + "item.antarchy.stratoshark_fin_soup": "Sopa de Aleta de Tiburón de nube", + "tooltip.antarchy.stratoshark_fin_soup": "Otorga Fuerza y Caída lenta.", "tooltip.antarchy.critter_cage.empty": "Clic derecho para lanzar", "tooltip.antarchy.critter_cage.contains": "Contiene: %s", "tooltip.antarchy.critter_cage.release": "Clic derecho para liberar", @@ -263,7 +263,7 @@ "attribute.antarchy.bloodglass_max_hearts": "Máximo de Corazones de Cristalsangre", "item.antarchy.molevore_nose": "Nariz de Molevore", "item.antarchy.moleworm": "Moleworm", - "item.antarchy.triffid_spawn_egg": "Huevo generador de Triffid", + "item.antarchy.flytrap_spawn_egg": "Huevo generador de Flytrap", "item.antarchy.infested_rooted_dirt": "Enraizada Tierra infestado", "item.antarchy.infested_coarse_dirt": "Estéril Tierra infestado", "item.antarchy.pale_nyxite": "Nyxite pálido", @@ -352,9 +352,9 @@ "tooltip.antarchy.mantis_claw.wall_cling": "Dual wield to cling to walls and jump upward.", "item.antarchy.king_scale": "Escama de Rey", "item.antarchy.queen_scale": "Escama de Reina", - "item.antarchy.jumpy_bug_leg": "Pata de Bicho saltarín", - "item.antarchy.jumpy_boots": "Botas saltarinas", - "tooltip.antarchy.jumpy_boots": "Agáchate para cargar y luego salta para impulsarte hacia arriba.", + "item.antarchy.springbug_leg": "Pata de Bicho saltarín", + "item.antarchy.springy_boots": "Botas saltarinas", + "tooltip.antarchy.springy_boots": "Agáchate para cargar y luego salta para impulsarte hacia arriba.", "item.antarchy.brutalfly_wing": "Ala de Brutalfly", "item.antarchy.brutalfly_elytra": "Élitros de Brutalfly", "tooltip.antarchy.brutalfly_elytra.flap": "Mientras vuelas, mantén %s para batir las alas", @@ -368,9 +368,9 @@ "item.antarchy.american_name": "%s americano", "item.antarchy.root_beer": "Cerveza de raíz", "item.antarchy.primordial_scute": "Escama de Primordial", - "item.antarchy.triffid_goo": "Triffid Baba", - "item.antarchy.triffid_goo_block": "Bloque de Triffid Baba", - "tooltip.antarchy.triffid_goo_block": "A gran velocidad rebotas hacia arriba; de lo contrario, te hundes.", + "item.antarchy.flytrap_goo": "Flytrap Baba", + "item.antarchy.flytrap_goo_block": "Bloque de Flytrap Baba", + "tooltip.antarchy.flytrap_goo_block": "A gran velocidad rebotas hacia arriba; de lo contrario, te hundes.", "item.antarchy.cloud_bucket": "Cubo de Nube", "tooltip.antarchy.cloud_bucket.midair": "Se puede colocar en el aire", "item.antarchy.lumen_bucket": "Cubo de Lumen", @@ -380,7 +380,7 @@ "tooltip.antarchy.scorpion_whip.snap": "Vuelve a hacer clic izquierdo sobre la presa atada para arrancar el aguijón.", "item.antarchy.fallen_king_crown": "Corona del Rey Caído", "tooltip.antarchy.fallen_king_crown.hero": "Otorga Héroe de la aldea al matar criaturas hostiles", - "item.antarchy.vortex_eye": "Ojo de Vórtice", + "item.antarchy.vortex_charge": "Vortex Charge", "item.antarchy.ultimate_helmet": "Casco definitivo", "item.antarchy.ultimate_chestplate": "Peto definitivo", "item.antarchy.ultimate_leggings": "Grebas definitivas", @@ -474,7 +474,7 @@ "item.antarchy.caterpillar_spawn_egg": "Huevo generador de Oruga", "item.antarchy.butterfly_spawn_egg": "Huevo generador de Mariposa", "item.antarchy.brutalfly_spawn_egg": "Huevo generador de Brutalfly", - "item.antarchy.cloud_shark_spawn_egg": "Huevo generador de Tiburón de nube", + "item.antarchy.stratoshark_spawn_egg": "Huevo generador de Tiburón de nube", "item.antarchy.kraken_spawn_egg": "Eh, no. No lo hagas.", "item.antarchy.missile_squid_spawn_egg": "Huevo generador de Calamar misil", "item.antarchy.octopus_bomb_spawn_egg": "Huevo generador de Bomba pulpo", @@ -512,7 +512,7 @@ "message.antarchy.termite_activated": "La termita está lista para abrir su destino.", "message.antarchy.termite_needs_reagent": "Esta termita necesita un reactivo antes de poder abrir su destino.", "death.attack.spit_bug_disrespect": "El bicho escupidor le faltó al respeto a %1$s", - "death.attack.jumpy_bug_jump": "El bicho saltarín saltó sobre %1$s", + "death.attack.springbug_jump": "El bicho saltarín saltó sobre %1$s", "death.attack.hercules_beetle_obliteration": "El escarabajo hércules aniquiló a %1$s", "message.antarchy.big_bertha.mode": "Modo de Gran Bertha: %s", "message.antarchy.big_bertha.mode.basilisk": "Basilisco", @@ -533,6 +533,8 @@ "effect.antarchy.paralyzed.description": "Impide que los objetivos se muevan.", "effect.antarchy.inverted": "Invertido", "effect.antarchy.inverted.description": "Invierte la gravedad del objetivo.", + "effect.antarchy.commanded.description": "Lucha por el jugador que lo comandó.", + "effect.antarchy.dilated.description": "Ralentiza el paso del tiempo para la criatura afectada.", "effect.antarchy.stinky": "Apestoso", "effect.antarchy.stinky.description": "Ahuyenta a las criaturas pasivas y neutrales, y atrae a los artrópodos.", "effect.antarchy.gooped.description": "Reduce la velocidad de movimiento y de ataque.", @@ -540,10 +542,10 @@ "effect.antarchy.growth": "Crecimiento", "effect.antarchy.bloodglass_ward": "Guardia de Cristalsangre", "effect.antarchy.bloodglass_ward.description": "Otorga corazones que se hacen añicos y absorben un golpe completo de daño. Se regeneran con el tiempo.", - "death.attack.triffid_mauling": "Una planta despedazó a %1$s", - "death.attack.triffid_mauling.player": "Una planta despedazó a %1$s", - "death.attack.triffid_swallow": "Un Triffid se tragó a %1$s", - "death.attack.triffid_swallow.player": "Un Triffid se tragó a %1$s", + "death.attack.flytrap_mauling": "Una planta despedazó a %1$s", + "death.attack.flytrap_mauling.player": "Una planta despedazó a %1$s", + "death.attack.flytrap_swallow": "Un Flytrap se tragó a %1$s", + "death.attack.flytrap_swallow.player": "Un Flytrap se tragó a %1$s", "potion.antarchy.haste": "Poción de Prisa", "potion.antarchy.strong_haste": "Poción de Prisa fuerte", "tooltip.antarchy.big_bertha.mode": "Modo: %s", @@ -660,11 +662,11 @@ "subtitles.antarchy.ant_bite": "Hormigas muerden", "subtitles.antarchy.ant_gather": "Hormigas recolectan", "subtitles.antarchy.ant_nest": "Nido de hormigas cruje", - "subtitles.antarchy.cloud_shark_bite": "Tiburón de nube muerde", - "subtitles.antarchy.cloud_shark_idle": "Tiburón de nube hace ruido", - "subtitles.antarchy.cloud_shark_hurt": "Tiburón de nube recibe daño", - "subtitles.antarchy.cloud_shark_death": "Tiburón de nube muere", - "subtitles.antarchy.cloud_shark_fly": "Tiburón de nube vuela", + "subtitles.antarchy.stratoshark_bite": "Tiburón de nube muerde", + "subtitles.antarchy.stratoshark_idle": "Tiburón de nube hace ruido", + "subtitles.antarchy.stratoshark_hurt": "Tiburón de nube recibe daño", + "subtitles.antarchy.stratoshark_death": "Tiburón de nube muere", + "subtitles.antarchy.stratoshark_fly": "Tiburón de nube vuela", "subtitles.antarchy.caterpillar_idle": "Oruga hace ruido", "subtitles.antarchy.caterpillar_hurt": "Oruga recibe daño", "subtitles.antarchy.caterpillar_crawl": "Oruga se arrastra", @@ -704,17 +706,20 @@ "subtitles.antarchy.nightmare_death": "Pesadilla muere", "subtitles.antarchy.nightmare_bite": "Pesadilla muerde", "subtitles.antarchy.nightmare_flap": "Pesadilla aletea", - "subtitles.antarchy.triffid_attack": "Triffid ataca", - "subtitles.antarchy.triffid_grab": "Triffid agarra", - "subtitles.antarchy.triffid_hurt": "Triffid recibe daño", - "subtitles.antarchy.triffid_death": "Triffid muere", - "subtitles.antarchy.triffid_hiss": "Triffid sisea", - "subtitles.antarchy.triffid_growl": "Triffid gruñe", + "subtitles.antarchy.flytrap_attack": "Flytrap ataca", + "subtitles.antarchy.flytrap_grab": "Flytrap agarra", + "subtitles.antarchy.flytrap_hurt": "Flytrap recibe daño", + "subtitles.antarchy.flytrap_death": "Flytrap muere", + "subtitles.antarchy.flytrap_hiss": "Flytrap sisea", + "subtitles.antarchy.flytrap_growl": "Flytrap gruñe", "subtitles.antarchy.gravity_gun_pickup": "Pistola gravitatoria recoge", "subtitles.antarchy.gravity_gun_drop": "Pistola gravitatoria suelta", "subtitles.antarchy.gravity_gun_hold_loop": "Pistola gravitatoria zumba", "subtitles.antarchy.gravity_gun_launch": "Pistola gravitatoria lanza", "subtitles.antarchy.gravity_gun_dryfire": "Pistola gravitatoria dispara en seco", + "subtitles.antarchy.antimetal_place": "El antimetal repica", + "subtitles.antarchy.antimetal_step": "El antimetal tintinea", + "subtitles.antarchy.antimetal_scaffold": "El andamio de antimetal traquetea", "subtitles.antarchy.bed_bug_ambient": "Chinche de cama gorjea", "subtitles.antarchy.bed_bug_hurt": "Chinche de cama recibe daño", "subtitles.antarchy.bed_bug_attack": "Chinche de cama muerde", @@ -877,23 +882,23 @@ "block.antarchy.amber_lichen": "Liquen ámbar", "block.antarchy.bile_vein": "Veta de bilis", "block.antarchy.creepvine": "Enredadera rastrera", - "block.antarchy.creeping_horror_egg": "Huevo de Horror rastrero", - "block.antarchy.lurking_terror_egg": "Huevo de Terror acechante", + "block.antarchy.crawling_blight_egg": "Huevo de Horror rastrero", + "block.antarchy.skulking_fright_egg": "Huevo de Terror acechante", "entity.antarchy.termite": "Termita", - "entity.antarchy.jumpy_bug": "Bicho saltarín", + "entity.antarchy.springbug": "Bicho saltarín", "entity.antarchy.spit_bug": "Bicho escupidor", "entity.antarchy.stink_bug": "Chinche apestosa", "entity.antarchy.rolly_polly": "Cochinilla", - "entity.antarchy.creeping_horror": "Horror rastrero", - "entity.antarchy.lurking_terror": "Terror acechante", + "entity.antarchy.crawling_blight": "Horror rastrero", + "entity.antarchy.skulking_fright": "Terror acechante", "entity.antarchy.hercules_beetle": "Escarabajo hércules", - "item.antarchy.jumpy_bug_spawn_egg": "Huevo generador de Bicho saltarín", + "item.antarchy.springbug_spawn_egg": "Huevo generador de Bicho saltarín", "item.antarchy.spit_bug_spawn_egg": "Huevo generador de Bicho escupidor", "item.antarchy.stink_bug_spawn_egg": "Huevo generador de Chinche apestosa", "item.antarchy.termite_spawn_egg": "Huevo generador de Termita", "item.antarchy.rolly_polly_spawn_egg": "Huevo generador de Cochinilla", - "item.antarchy.creeping_horror_spawn_egg": "Huevo generador de Horror rastrero", - "item.antarchy.lurking_terror_spawn_egg": "Huevo generador de Terror acechante", + "item.antarchy.crawling_blight_spawn_egg": "Huevo generador de Horror rastrero", + "item.antarchy.skulking_fright_spawn_egg": "Huevo generador de Terror acechante", "item.antarchy.hercules_beetle_spawn_egg": "Huevo generador de Escarabajo hércules", "item.antarchy.chitin": "Quitina", "block.antarchy.polished_broodstone": "Broodstone pulido", @@ -920,14 +925,14 @@ "block.antarchy.glowcap_mushroom_block": "Bloque de hongo sombrilluz", "block.antarchy.molting_vines": "Enredaderas de muda", "item.antarchy.broodfruit": "Fruto de cría", - "block.antarchy.jumpy_bug_egg": "Huevo de Bicho saltarín", - "subtitles.antarchy.creeping_horror_growl": "Horror rastrero gruñe", - "subtitles.antarchy.creeping_horror_hurt": "Horror rastrero recibe daño", - "subtitles.antarchy.creeping_horror_bite": "Horror rastrero muerde", - "subtitles.antarchy.lurking_terror_snarl": "Terror acechante gruñe", - "subtitles.antarchy.lurking_terror_hurt": "Terror acechante recibe daño", - "subtitles.antarchy.lurking_terror_bite": "Terror acechante muerde", - "subtitles.antarchy.lurking_terror_fly_loop": "Terror acechante vuela", + "block.antarchy.springbug_egg": "Huevo de Bicho saltarín", + "subtitles.antarchy.crawling_blight_growl": "Horror rastrero gruñe", + "subtitles.antarchy.crawling_blight_hurt": "Horror rastrero recibe daño", + "subtitles.antarchy.crawling_blight_bite": "Horror rastrero muerde", + "subtitles.antarchy.skulking_fright_snarl": "Terror acechante gruñe", + "subtitles.antarchy.skulking_fright_hurt": "Terror acechante recibe daño", + "subtitles.antarchy.skulking_fright_bite": "Terror acechante muerde", + "subtitles.antarchy.skulking_fright_fly_loop": "Terror acechante vuela", "subtitles.antarchy.stink_bug_fart": "Chinche apestosa se tira un pedo", "subtitles.antarchy.stink_bug_idle": "Chinche apestosa hace ruido", "subtitles.antarchy.rolly_polly_idle": "Cochinilla hace ruido", @@ -944,10 +949,10 @@ "subtitles.antarchy.jerry_hurt": "Jerry sufre daño", "subtitles.antarchy.jerry_death": "Jerry muere", "subtitles.antarchy.jerry_attack": "Jerry ataca", - "subtitles.antarchy.jumpy_bug_idle": "Bicho saltarín hace ruido", + "subtitles.antarchy.springbug_idle": "Bicho saltarín hace ruido", "subtitles.antarchy.spit_bug_idle": "Bicho escupidor hace ruido", - "subtitles.antarchy.jumpy_bug_hurt": "Bicho saltarín recibe daño", - "subtitles.antarchy.jumpy_bug_jump": "Bicho saltarín salta", + "subtitles.antarchy.springbug_hurt": "Bicho saltarín recibe daño", + "subtitles.antarchy.springbug_jump": "Bicho saltarín salta", "subtitles.antarchy.spit_bug_hurt": "Bicho escupidor recibe daño", "subtitles.antarchy.spit_bug_spit": "Bicho escupidor escupe", "subtitles.antarchy.brutalfly_spit": "Brutalfly escupe", diff --git a/common-1.20.1/src/main/resources/assets/antarchy/lang/fr_fr.json b/common-1.20.1/src/main/resources/assets/antarchy/lang/fr_fr.json index 2ce45048..1bb5b8ef 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/lang/fr_fr.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/lang/fr_fr.json @@ -90,7 +90,7 @@ "block.antarchy.pale_nyxite": "Nyxite pâle", "block.antarchy.nyxite_spike": "Pointe de Nyxite", "block.antarchy.potent_nyxite": "Nyxite puissant", - "block.antarchy.triffid_goo_block": "Bloc de Triffid Glu", + "block.antarchy.flytrap_goo_block": "Bloc de Flytrap Glu", "block.antarchy.elythia_portal": "Portail de Elythia", "block.antarchy.cloud_block": "Bloc de Nuage", "block.antarchy.thoraxis_portal": "Portail de Thoraxis", @@ -181,7 +181,7 @@ "entity.antarchy.rainbow_ant": "Fourmi arc-en-ciel", "entity.antarchy.diamond_minecart": "Le wagonnet de diamant", "entity.antarchy.dr_trayaurus": "Dr. Trayaurus", - "entity.antarchy.cloud_shark": "Requin des nuages", + "entity.antarchy.stratoshark": "Requin des nuages", "entity.antarchy.kraken": "Le Kraken", "entity.antarchy.missile_squid": "Calmar-missile", "entity.antarchy.octopus_bomb": "Bombe-pieuvre", @@ -193,7 +193,7 @@ "entity.antarchy.molevore": "Molevore", "entity.antarchy.mantis": "Mante religieuse", "entity.antarchy.alpha_mantis": "Mante alpha", - "entity.antarchy.triffid": "Triffid", + "entity.antarchy.flytrap": "Flytrap", "entity.antarchy.toreterror": "Toreterror", "entity.antarchy.water_bomb": "Bombe à eau", "subtitles.antarchy.mantis_ambient": "Mante religieuse cliquette", @@ -212,9 +212,9 @@ "item.antarchy.attitude_adjuster": "Ajusteur d’attitude", "tooltip.antarchy.attitude_adjuster.grounded": "Projette les cibles au sol vers le haut et écrase au sol celles qui sont dans les airs.", "tooltip.antarchy.attitude_adjuster.slam": "Faites un clic droit dans les airs pour vous écraser au sol.", - "item.antarchy.cloud_shark_fin": "Aileron de Requin des nuages", - "item.antarchy.cloud_shark_fin_soup": "Soupe de Aileron de Requin des nuages", - "tooltip.antarchy.cloud_shark_fin_soup": "Accorde Force et Chute lente.", + "item.antarchy.stratoshark_fin": "Aileron de Requin des nuages", + "item.antarchy.stratoshark_fin_soup": "Soupe de Aileron de Requin des nuages", + "tooltip.antarchy.stratoshark_fin_soup": "Accorde Force et Chute lente.", "tooltip.antarchy.critter_cage.empty": "Clic droit pour lancer", "tooltip.antarchy.critter_cage.contains": "Contient : %s", "tooltip.antarchy.critter_cage.release": "Clic droit pour libérer", @@ -263,7 +263,7 @@ "attribute.antarchy.bloodglass_max_hearts": "Maximum de Cœurs de verre-sang", "item.antarchy.molevore_nose": "Nez de Molevore", "item.antarchy.moleworm": "Moleworm", - "item.antarchy.triffid_spawn_egg": "Œuf d’apparition de Triffid", + "item.antarchy.flytrap_spawn_egg": "Œuf d’apparition de Flytrap", "item.antarchy.infested_rooted_dirt": "Racinée Terre infesté", "item.antarchy.infested_coarse_dirt": "Stérile Terre infesté", "item.antarchy.pale_nyxite": "Nyxite pâle", @@ -352,9 +352,9 @@ "tooltip.antarchy.mantis_claw.wall_cling": "Dual wield to cling to walls and jump upward.", "item.antarchy.king_scale": "Écaille de Roi", "item.antarchy.queen_scale": "Écaille de Reine", - "item.antarchy.jumpy_bug_leg": "Patte de Insecte sauteur", - "item.antarchy.jumpy_boots": "Bottes bondissantes", - "tooltip.antarchy.jumpy_boots": "Accroupissez-vous pour charger, puis sautez pour bondir vers le haut.", + "item.antarchy.springbug_leg": "Patte de Insecte sauteur", + "item.antarchy.springy_boots": "Bottes bondissantes", + "tooltip.antarchy.springy_boots": "Accroupissez-vous pour charger, puis sautez pour bondir vers le haut.", "item.antarchy.brutalfly_wing": "Aile de Brutalfly", "item.antarchy.brutalfly_elytra": "Élytres de Brutalfly", "tooltip.antarchy.brutalfly_elytra.flap": "En vol, maintenez %s pour battre des ailes", @@ -368,9 +368,9 @@ "item.antarchy.american_name": "%s américain", "item.antarchy.root_beer": "Racinette", "item.antarchy.primordial_scute": "Écaille de Primordial", - "item.antarchy.triffid_goo": "Triffid Glu", - "item.antarchy.triffid_goo_block": "Bloc de Triffid Glu", - "tooltip.antarchy.triffid_goo_block": "À grande vitesse, vous rebondissez vers le haut ; sinon, vous vous enfoncez dedans.", + "item.antarchy.flytrap_goo": "Flytrap Glu", + "item.antarchy.flytrap_goo_block": "Bloc de Flytrap Glu", + "tooltip.antarchy.flytrap_goo_block": "À grande vitesse, vous rebondissez vers le haut ; sinon, vous vous enfoncez dedans.", "item.antarchy.cloud_bucket": "Seau de Nuage", "tooltip.antarchy.cloud_bucket.midair": "Peut être placé dans les airs", "item.antarchy.lumen_bucket": "Seau de Lumen", @@ -380,7 +380,7 @@ "tooltip.antarchy.scorpion_whip.snap": "Frappez à nouveau la proie liée pour arracher le dard.", "item.antarchy.fallen_king_crown": "Couronne du Roi déchu", "tooltip.antarchy.fallen_king_crown.hero": "Accorde Héros du village lorsque vous tuez des créatures hostiles", - "item.antarchy.vortex_eye": "Œil de Vortex", + "item.antarchy.vortex_charge": "Vortex Charge", "item.antarchy.ultimate_helmet": "Casque ultime", "item.antarchy.ultimate_chestplate": "Plastron ultime", "item.antarchy.ultimate_leggings": "Jambières ultimes", @@ -474,7 +474,7 @@ "item.antarchy.caterpillar_spawn_egg": "Œuf d’apparition de Chenille", "item.antarchy.butterfly_spawn_egg": "Œuf d’apparition de Papillon", "item.antarchy.brutalfly_spawn_egg": "Œuf d’apparition de Brutalfly", - "item.antarchy.cloud_shark_spawn_egg": "Œuf d’apparition de Requin des nuages", + "item.antarchy.stratoshark_spawn_egg": "Œuf d’apparition de Requin des nuages", "item.antarchy.kraken_spawn_egg": "Euh, non. Ne fais pas ça.", "item.antarchy.missile_squid_spawn_egg": "Œuf d’apparition de Calmar-missile", "item.antarchy.octopus_bomb_spawn_egg": "Œuf d’apparition de Bombe-pieuvre", @@ -512,7 +512,7 @@ "message.antarchy.termite_activated": "La termite est prête à ouvrir sa destination.", "message.antarchy.termite_needs_reagent": "Cette termite a besoin d’un réactif avant de pouvoir ouvrir sa destination.", "death.attack.spit_bug_disrespect": "%1$s a été humilié par l’insecte cracheur", - "death.attack.jumpy_bug_jump": "%1$s s’est fait sauter dessus par l’insecte sauteur", + "death.attack.springbug_jump": "%1$s s’est fait sauter dessus par l’insecte sauteur", "death.attack.hercules_beetle_obliteration": "%1$s a été anéanti par le scarabée Hercule", "message.antarchy.big_bertha.mode": "Mode de Grosse Bertha : %s", "message.antarchy.big_bertha.mode.basilisk": "Basilic", @@ -533,6 +533,8 @@ "effect.antarchy.paralyzed.description": "Empêche les cibles de se déplacer.", "effect.antarchy.inverted": "Inversé", "effect.antarchy.inverted.description": "Inverse la gravité de la cible.", + "effect.antarchy.commanded.description": "Combat pour le joueur qui l’a commandé.", + "effect.antarchy.dilated.description": "Ralentit le passage du temps pour l’entité affectée.", "effect.antarchy.stinky": "Puant", "effect.antarchy.stinky.description": "Repousse les créatures passives et neutres, et attire les arthropodes.", "effect.antarchy.gooped.description": "Ralentit la vitesse de déplacement et d'attaque.", @@ -540,10 +542,10 @@ "effect.antarchy.growth": "Croissance", "effect.antarchy.bloodglass_ward": "Égide de verre-sang", "effect.antarchy.bloodglass_ward.description": "Accorde des cœurs qui se brisent et absorbent un coup entier de dégâts. Ils se régénèrent avec le temps.", - "death.attack.triffid_mauling": "%1$s a été déchiqueté par une plante", - "death.attack.triffid_mauling.player": "%1$s a été déchiqueté par une plante", - "death.attack.triffid_swallow": "%1$s a été avalé par un Triffid", - "death.attack.triffid_swallow.player": "%1$s a été avalé par un Triffid", + "death.attack.flytrap_mauling": "%1$s a été déchiqueté par une plante", + "death.attack.flytrap_mauling.player": "%1$s a été déchiqueté par une plante", + "death.attack.flytrap_swallow": "%1$s a été avalé par un Flytrap", + "death.attack.flytrap_swallow.player": "%1$s a été avalé par un Flytrap", "potion.antarchy.haste": "Potion de Célérité", "potion.antarchy.strong_haste": "Potion de Célérité puissante", "tooltip.antarchy.big_bertha.mode": "Mode : %s", @@ -660,11 +662,11 @@ "subtitles.antarchy.ant_bite": "Fourmis mordent", "subtitles.antarchy.ant_gather": "Fourmis récoltent", "subtitles.antarchy.ant_nest": "Nid de fourmis bruisse", - "subtitles.antarchy.cloud_shark_bite": "Requin des nuages mord", - "subtitles.antarchy.cloud_shark_idle": "Requin des nuages se fait entendre", - "subtitles.antarchy.cloud_shark_hurt": "Requin des nuages est blessé", - "subtitles.antarchy.cloud_shark_death": "Requin des nuages meurt", - "subtitles.antarchy.cloud_shark_fly": "Requin des nuages vole", + "subtitles.antarchy.stratoshark_bite": "Requin des nuages mord", + "subtitles.antarchy.stratoshark_idle": "Requin des nuages se fait entendre", + "subtitles.antarchy.stratoshark_hurt": "Requin des nuages est blessé", + "subtitles.antarchy.stratoshark_death": "Requin des nuages meurt", + "subtitles.antarchy.stratoshark_fly": "Requin des nuages vole", "subtitles.antarchy.caterpillar_idle": "Chenille se fait entendre", "subtitles.antarchy.caterpillar_hurt": "Chenille est blessé", "subtitles.antarchy.caterpillar_crawl": "Chenille rampe", @@ -704,17 +706,20 @@ "subtitles.antarchy.nightmare_death": "Cauchemar meurt", "subtitles.antarchy.nightmare_bite": "Cauchemar mord", "subtitles.antarchy.nightmare_flap": "Cauchemar bat des ailes", - "subtitles.antarchy.triffid_attack": "Triffid attaque", - "subtitles.antarchy.triffid_grab": "Triffid agrippe", - "subtitles.antarchy.triffid_hurt": "Triffid est blessé", - "subtitles.antarchy.triffid_death": "Triffid meurt", - "subtitles.antarchy.triffid_hiss": "Triffid siffle", - "subtitles.antarchy.triffid_growl": "Triffid gronde", + "subtitles.antarchy.flytrap_attack": "Flytrap attaque", + "subtitles.antarchy.flytrap_grab": "Flytrap agrippe", + "subtitles.antarchy.flytrap_hurt": "Flytrap est blessé", + "subtitles.antarchy.flytrap_death": "Flytrap meurt", + "subtitles.antarchy.flytrap_hiss": "Flytrap siffle", + "subtitles.antarchy.flytrap_growl": "Flytrap gronde", "subtitles.antarchy.gravity_gun_pickup": "Canon à gravité ramasse", "subtitles.antarchy.gravity_gun_drop": "Canon à gravité relâche", "subtitles.antarchy.gravity_gun_hold_loop": "Canon à gravité bourdonne", "subtitles.antarchy.gravity_gun_launch": "Canon à gravité projette", "subtitles.antarchy.gravity_gun_dryfire": "Canon à gravité tire à vide", + "subtitles.antarchy.antimetal_place": "L'antimétal résonne", + "subtitles.antarchy.antimetal_step": "L'antimétal cliquette", + "subtitles.antarchy.antimetal_scaffold": "L'échafaudage d'antimétal cliquette", "subtitles.antarchy.bed_bug_ambient": "Punaise de lit pépie", "subtitles.antarchy.bed_bug_hurt": "Punaise de lit est blessé", "subtitles.antarchy.bed_bug_attack": "Punaise de lit mord", @@ -877,23 +882,23 @@ "block.antarchy.amber_lichen": "Lichen ambré", "block.antarchy.bile_vein": "Veine de bile", "block.antarchy.creepvine": "Liane rampante", - "block.antarchy.creeping_horror_egg": "Œuf de Horreur rampante", - "block.antarchy.lurking_terror_egg": "Œuf de Terreur tapie", + "block.antarchy.crawling_blight_egg": "Œuf de Horreur rampante", + "block.antarchy.skulking_fright_egg": "Œuf de Terreur tapie", "entity.antarchy.termite": "Termite", - "entity.antarchy.jumpy_bug": "Insecte sauteur", + "entity.antarchy.springbug": "Insecte sauteur", "entity.antarchy.spit_bug": "Insecte cracheur", "entity.antarchy.stink_bug": "Punaise puante", "entity.antarchy.rolly_polly": "Cloporte", - "entity.antarchy.creeping_horror": "Horreur rampante", - "entity.antarchy.lurking_terror": "Terreur tapie", + "entity.antarchy.crawling_blight": "Horreur rampante", + "entity.antarchy.skulking_fright": "Terreur tapie", "entity.antarchy.hercules_beetle": "Scarabée Hercule", - "item.antarchy.jumpy_bug_spawn_egg": "Œuf d’apparition de Insecte sauteur", + "item.antarchy.springbug_spawn_egg": "Œuf d’apparition de Insecte sauteur", "item.antarchy.spit_bug_spawn_egg": "Œuf d’apparition de Insecte cracheur", "item.antarchy.stink_bug_spawn_egg": "Œuf d’apparition de Punaise puante", "item.antarchy.termite_spawn_egg": "Œuf d’apparition de Termite", "item.antarchy.rolly_polly_spawn_egg": "Œuf d’apparition de Cloporte", - "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.crawling_blight_spawn_egg": "Œuf d’apparition de Horreur rampante", + "item.antarchy.skulking_fright_spawn_egg": "Œuf d’apparition de Terreur tapie", "item.antarchy.hercules_beetle_spawn_egg": "Œuf d’apparition de Scarabée Hercule", "item.antarchy.chitin": "Chitine", "block.antarchy.polished_broodstone": "Broodstone poli", @@ -920,14 +925,14 @@ "block.antarchy.glowcap_mushroom_block": "Bloc de champignon lumichapeau", "block.antarchy.molting_vines": "Lianes de mue", "item.antarchy.broodfruit": "Fruit de couvée", - "block.antarchy.jumpy_bug_egg": "Œuf de Insecte sauteur", - "subtitles.antarchy.creeping_horror_growl": "Horreur rampante gronde", - "subtitles.antarchy.creeping_horror_hurt": "Horreur rampante est blessé", - "subtitles.antarchy.creeping_horror_bite": "Horreur rampante mord", - "subtitles.antarchy.lurking_terror_snarl": "Terreur tapie grogne", - "subtitles.antarchy.lurking_terror_hurt": "Terreur tapie est blessé", - "subtitles.antarchy.lurking_terror_bite": "Terreur tapie mord", - "subtitles.antarchy.lurking_terror_fly_loop": "Terreur tapie vole", + "block.antarchy.springbug_egg": "Œuf de Insecte sauteur", + "subtitles.antarchy.crawling_blight_growl": "Horreur rampante gronde", + "subtitles.antarchy.crawling_blight_hurt": "Horreur rampante est blessé", + "subtitles.antarchy.crawling_blight_bite": "Horreur rampante mord", + "subtitles.antarchy.skulking_fright_snarl": "Terreur tapie grogne", + "subtitles.antarchy.skulking_fright_hurt": "Terreur tapie est blessé", + "subtitles.antarchy.skulking_fright_bite": "Terreur tapie mord", + "subtitles.antarchy.skulking_fright_fly_loop": "Terreur tapie vole", "subtitles.antarchy.stink_bug_fart": "Punaise puante pète", "subtitles.antarchy.stink_bug_idle": "Punaise puante se fait entendre", "subtitles.antarchy.rolly_polly_idle": "Cloporte se fait entendre", @@ -944,10 +949,10 @@ "subtitles.antarchy.jerry_hurt": "Jerry souffre", "subtitles.antarchy.jerry_death": "Jerry meurt", "subtitles.antarchy.jerry_attack": "Jerry attaque", - "subtitles.antarchy.jumpy_bug_idle": "Insecte sauteur se fait entendre", + "subtitles.antarchy.springbug_idle": "Insecte sauteur se fait entendre", "subtitles.antarchy.spit_bug_idle": "Insecte cracheur se fait entendre", - "subtitles.antarchy.jumpy_bug_hurt": "Insecte sauteur est blessé", - "subtitles.antarchy.jumpy_bug_jump": "Insecte sauteur saute", + "subtitles.antarchy.springbug_hurt": "Insecte sauteur est blessé", + "subtitles.antarchy.springbug_jump": "Insecte sauteur saute", "subtitles.antarchy.spit_bug_hurt": "Insecte cracheur est blessé", "subtitles.antarchy.spit_bug_spit": "Insecte cracheur crache", "subtitles.antarchy.brutalfly_spit": "Brutalfly crache", diff --git a/common-1.20.1/src/main/resources/assets/antarchy/lang/it_it.json b/common-1.20.1/src/main/resources/assets/antarchy/lang/it_it.json index c9d3e61a..e5ceab2e 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/lang/it_it.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/lang/it_it.json @@ -90,7 +90,7 @@ "block.antarchy.pale_nyxite": "Nyxite pallido", "block.antarchy.nyxite_spike": "Spuntone di Nyxite", "block.antarchy.potent_nyxite": "Nyxite potente", - "block.antarchy.triffid_goo_block": "Blocco di Melma di Triffid", + "block.antarchy.flytrap_goo_block": "Blocco di Melma di Flytrap", "block.antarchy.elythia_portal": "Portale di Elythia", "block.antarchy.cloud_block": "Blocco di Nuvola", "block.antarchy.thoraxis_portal": "Portale di Thoraxis", @@ -181,7 +181,7 @@ "entity.antarchy.rainbow_ant": "Formica arcobaleno", "entity.antarchy.diamond_minecart": "Il carrello di diamante", "entity.antarchy.dr_trayaurus": "Dott. Trayaurus", - "entity.antarchy.cloud_shark": "Squalo delle nuvole", + "entity.antarchy.stratoshark": "Squalo delle nuvole", "entity.antarchy.kraken": "Il Kraken", "entity.antarchy.missile_squid": "Calamaro missile", "entity.antarchy.octopus_bomb": "Bomba polpo", @@ -193,7 +193,7 @@ "entity.antarchy.molevore": "Molevore", "entity.antarchy.mantis": "Mantide", "entity.antarchy.alpha_mantis": "Mantide alfa", - "entity.antarchy.triffid": "Triffid", + "entity.antarchy.flytrap": "Flytrap", "entity.antarchy.toreterror": "Toreterror", "entity.antarchy.water_bomb": "Bomba d’acqua", "subtitles.antarchy.mantis_ambient": "La mantide scatta", @@ -212,9 +212,9 @@ "item.antarchy.attitude_adjuster": "Correttore d’atteggiamento", "tooltip.antarchy.attitude_adjuster.grounded": "Scaglia in aria i bersagli a terra e schianta al suolo quelli in volo.", "tooltip.antarchy.attitude_adjuster.slam": "Fai clic destro in aria per schiantarti al suolo.", - "item.antarchy.cloud_shark_fin": "Pinna di squalo delle nuvole", - "item.antarchy.cloud_shark_fin_soup": "Zuppa di pinna di squalo delle nuvole", - "tooltip.antarchy.cloud_shark_fin_soup": "Conferisce Forza e Caduta lenta.", + "item.antarchy.stratoshark_fin": "Pinna di squalo delle nuvole", + "item.antarchy.stratoshark_fin_soup": "Zuppa di pinna di squalo delle nuvole", + "tooltip.antarchy.stratoshark_fin_soup": "Conferisce Forza e Caduta lenta.", "tooltip.antarchy.critter_cage.empty": "Fai clic destro per lanciare", "tooltip.antarchy.critter_cage.contains": "Contiene: %s", "tooltip.antarchy.critter_cage.release": "Fai clic destro per liberare", @@ -263,7 +263,7 @@ "attribute.antarchy.bloodglass_max_hearts": "Cuori di vetrosangue massimi", "item.antarchy.molevore_nose": "Naso di Molevore", "item.antarchy.moleworm": "Moleworm", - "item.antarchy.triffid_spawn_egg": "Uovo generatore di Triffid", + "item.antarchy.flytrap_spawn_egg": "Uovo generatore di Flytrap", "item.antarchy.infested_rooted_dirt": "Terra con radici infestato", "item.antarchy.infested_coarse_dirt": "Terra brulla infestato", "item.antarchy.pale_nyxite": "Nyxite pallido", @@ -352,9 +352,9 @@ "tooltip.antarchy.mantis_claw.wall_cling": "Dual wield to cling to walls and jump upward.", "item.antarchy.king_scale": "Scaglia di Re", "item.antarchy.queen_scale": "Scaglia di Regina", - "item.antarchy.jumpy_bug_leg": "Zampa di Insetto saltatore", - "item.antarchy.jumpy_boots": "Stivali saltatori", - "tooltip.antarchy.jumpy_boots": "Accovacciati per caricare, poi salta per balzare verso l’alto.", + "item.antarchy.springbug_leg": "Zampa di Insetto saltatore", + "item.antarchy.springy_boots": "Stivali saltatori", + "tooltip.antarchy.springy_boots": "Accovacciati per caricare, poi salta per balzare verso l’alto.", "item.antarchy.brutalfly_wing": "Ala di Brutalfly", "item.antarchy.brutalfly_elytra": "Elitre di Brutalfly", "tooltip.antarchy.brutalfly_elytra.flap": "Durante il volo, tieni premuto %s per battere le ali", @@ -368,9 +368,9 @@ "item.antarchy.american_name": "%s americano", "item.antarchy.root_beer": "Birra di radice", "item.antarchy.primordial_scute": "Scuto di Primordiale", - "item.antarchy.triffid_goo": "Melma di Triffid", - "item.antarchy.triffid_goo_block": "Blocco di Melma di Triffid", - "tooltip.antarchy.triffid_goo_block": "Ad alta velocità rimbalzi verso l’alto; altrimenti ci sprofondi attraverso.", + "item.antarchy.flytrap_goo": "Melma di Flytrap", + "item.antarchy.flytrap_goo_block": "Blocco di Melma di Flytrap", + "tooltip.antarchy.flytrap_goo_block": "Ad alta velocità rimbalzi verso l’alto; altrimenti ci sprofondi attraverso.", "item.antarchy.cloud_bucket": "Secchio di Nuvola", "tooltip.antarchy.cloud_bucket.midair": "Può essere posizionato a mezz’aria", "item.antarchy.lumen_bucket": "Secchio di Lumen", @@ -380,7 +380,7 @@ "tooltip.antarchy.scorpion_whip.snap": "Colpisci di nuovo la preda legata per strappare via il pungiglione.", "item.antarchy.fallen_king_crown": "Corona del Re Caduto", "tooltip.antarchy.fallen_king_crown.hero": "Conferisce Eroe del villaggio quando uccidi creature ostili", - "item.antarchy.vortex_eye": "Occhio di Vortice", + "item.antarchy.vortex_charge": "Vortex Charge", "item.antarchy.ultimate_helmet": "Elmo di Supremo", "item.antarchy.ultimate_chestplate": "Corazza di Supremo", "item.antarchy.ultimate_leggings": "Gambali di Supremo", @@ -474,7 +474,7 @@ "item.antarchy.caterpillar_spawn_egg": "Uovo generatore di Bruco", "item.antarchy.butterfly_spawn_egg": "Uovo generatore di Farfalla", "item.antarchy.brutalfly_spawn_egg": "Uovo generatore di Brutalfly", - "item.antarchy.cloud_shark_spawn_egg": "Uovo generatore di Squalo delle nuvole", + "item.antarchy.stratoshark_spawn_egg": "Uovo generatore di Squalo delle nuvole", "item.antarchy.kraken_spawn_egg": "Ehm, no. Non farlo.", "item.antarchy.missile_squid_spawn_egg": "Uovo generatore di Calamaro missile", "item.antarchy.octopus_bomb_spawn_egg": "Uovo generatore di Bomba polpo", @@ -512,7 +512,7 @@ "message.antarchy.termite_activated": "La termite è pronta ad aprire la sua destinazione.", "message.antarchy.termite_needs_reagent": "Questa termite ha bisogno di un reagente prima di poter aprire la destinazione.", "death.attack.spit_bug_disrespect": "%1$s è stato umiliato dall’Insetto sputatore", - "death.attack.jumpy_bug_jump": "%1$s è stato assalito dall’Insetto saltatore", + "death.attack.springbug_jump": "%1$s è stato assalito dall’Insetto saltatore", "death.attack.hercules_beetle_obliteration": "%1$s è stato annientato dallo Scarabeo Ercole", "message.antarchy.big_bertha.mode": "Modalità Big Bertha: %s", "message.antarchy.big_bertha.mode.basilisk": "Basilisco", @@ -533,6 +533,8 @@ "effect.antarchy.paralyzed.description": "Impedisce ai bersagli di muoversi.", "effect.antarchy.inverted": "Invertito", "effect.antarchy.inverted.description": "Inverte la gravità del bersaglio.", + "effect.antarchy.commanded.description": "Combatte per il giocatore che lo ha comandato.", + "effect.antarchy.dilated.description": "Rallenta il passare del tempo per l’entità colpita.", "effect.antarchy.stinky": "Puzzolente", "effect.antarchy.stinky.description": "Respinge le creature passive e neutrali e attira gli artropodi.", "effect.antarchy.gooped.description": "Riduce la velocità di movimento e di attacco.", @@ -540,10 +542,10 @@ "effect.antarchy.growth": "Crescita", "effect.antarchy.bloodglass_ward": "Protezione di vetrosangue", "effect.antarchy.bloodglass_ward.description": "Conferisce cuori che si frantumano assorbendo un colpo intero di danno. Si rigenerano col tempo.", - "death.attack.triffid_mauling": "%1$s è stato sbranato a morte da una pianta", - "death.attack.triffid_mauling.player": "%1$s è stato sbranato a morte da una pianta", - "death.attack.triffid_swallow": "%1$s è stato inghiottito da un Triffid", - "death.attack.triffid_swallow.player": "%1$s è stato inghiottito da un Triffid", + "death.attack.flytrap_mauling": "%1$s è stato sbranato a morte da una pianta", + "death.attack.flytrap_mauling.player": "%1$s è stato sbranato a morte da una pianta", + "death.attack.flytrap_swallow": "%1$s è stato inghiottito da un Flytrap", + "death.attack.flytrap_swallow.player": "%1$s è stato inghiottito da un Flytrap", "potion.antarchy.haste": "Pozione di Rapidità", "potion.antarchy.strong_haste": "Pozione forte di Rapidità", "tooltip.antarchy.big_bertha.mode": "Modalità: %s", @@ -660,11 +662,11 @@ "subtitles.antarchy.ant_bite": "Le formiche mordono", "subtitles.antarchy.ant_gather": "Le formiche raccolgono", "subtitles.antarchy.ant_nest": "Il formicaio fruscia", - "subtitles.antarchy.cloud_shark_bite": "Lo squalo delle nuvole morde", - "subtitles.antarchy.cloud_shark_idle": "Lo squalo delle nuvole emette un verso", - "subtitles.antarchy.cloud_shark_hurt": "Lo squalo delle nuvole si ferisce", - "subtitles.antarchy.cloud_shark_death": "Lo squalo delle nuvole muore", - "subtitles.antarchy.cloud_shark_fly": "Lo squalo delle nuvole vola", + "subtitles.antarchy.stratoshark_bite": "Lo squalo delle nuvole morde", + "subtitles.antarchy.stratoshark_idle": "Lo squalo delle nuvole emette un verso", + "subtitles.antarchy.stratoshark_hurt": "Lo squalo delle nuvole si ferisce", + "subtitles.antarchy.stratoshark_death": "Lo squalo delle nuvole muore", + "subtitles.antarchy.stratoshark_fly": "Lo squalo delle nuvole vola", "subtitles.antarchy.caterpillar_idle": "Il bruco emette un verso", "subtitles.antarchy.caterpillar_hurt": "Il bruco si ferisce", "subtitles.antarchy.caterpillar_crawl": "Il bruco striscia", @@ -704,17 +706,20 @@ "subtitles.antarchy.nightmare_death": "L’Incubo muore", "subtitles.antarchy.nightmare_bite": "L’Incubo morde", "subtitles.antarchy.nightmare_flap": "L’Incubo batte le ali", - "subtitles.antarchy.triffid_attack": "Il Triffid attacca", - "subtitles.antarchy.triffid_grab": "Il Triffid afferra", - "subtitles.antarchy.triffid_hurt": "Il Triffid si ferisce", - "subtitles.antarchy.triffid_death": "Il Triffid muore", - "subtitles.antarchy.triffid_hiss": "Il Triffid sibila", - "subtitles.antarchy.triffid_growl": "Il Triffid ringhia", + "subtitles.antarchy.flytrap_attack": "Il Flytrap attacca", + "subtitles.antarchy.flytrap_grab": "Il Flytrap afferra", + "subtitles.antarchy.flytrap_hurt": "Il Flytrap si ferisce", + "subtitles.antarchy.flytrap_death": "Il Flytrap muore", + "subtitles.antarchy.flytrap_hiss": "Il Flytrap sibila", + "subtitles.antarchy.flytrap_growl": "Il Flytrap ringhia", "subtitles.antarchy.gravity_gun_pickup": "Il cannone gravitazionale solleva", "subtitles.antarchy.gravity_gun_drop": "Il cannone gravitazionale lascia cadere", "subtitles.antarchy.gravity_gun_hold_loop": "Il cannone gravitazionale ronza", "subtitles.antarchy.gravity_gun_launch": "Il cannone gravitazionale lancia", "subtitles.antarchy.gravity_gun_dryfire": "Il cannone gravitazionale scatta a vuoto", + "subtitles.antarchy.antimetal_place": "L'antimetallo rimbomba", + "subtitles.antarchy.antimetal_step": "L'antimetallo tintinna", + "subtitles.antarchy.antimetal_scaffold": "L'impalcatura di antimetallo sferraglia", "subtitles.antarchy.bed_bug_ambient": "La cimice dei letti cinguetta", "subtitles.antarchy.bed_bug_hurt": "La cimice dei letti si ferisce", "subtitles.antarchy.bed_bug_attack": "La cimice dei letti morde", @@ -868,8 +873,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.chitin_spike": "Spuntone di Chitin", - "block.antarchy.chitin_block": "Blocco di Chitin", + "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", @@ -877,25 +882,25 @@ "block.antarchy.amber_lichen": "Lichene ambrato", "block.antarchy.bile_vein": "Vena di bile", "block.antarchy.creepvine": "Creepvine", - "block.antarchy.creeping_horror_egg": "Uovo di Orrore strisciante", - "block.antarchy.lurking_terror_egg": "Uovo di Terrore in agguato", + "block.antarchy.crawling_blight_egg": "Uovo di Orrore strisciante", + "block.antarchy.skulking_fright_egg": "Uovo di Terrore in agguato", "entity.antarchy.termite": "Termite", - "entity.antarchy.jumpy_bug": "Insetto saltatore", + "entity.antarchy.springbug": "Insetto saltatore", "entity.antarchy.spit_bug": "Insetto sputatore", "entity.antarchy.stink_bug": "Cimice puzzolente", "entity.antarchy.rolly_polly": "Porcellino di terra", - "entity.antarchy.creeping_horror": "Orrore strisciante", - "entity.antarchy.lurking_terror": "Terrore in agguato", + "entity.antarchy.crawling_blight": "Orrore strisciante", + "entity.antarchy.skulking_fright": "Terrore in agguato", "entity.antarchy.hercules_beetle": "Scarabeo Ercole", - "item.antarchy.jumpy_bug_spawn_egg": "Uovo generatore di Insetto saltatore", + "item.antarchy.springbug_spawn_egg": "Uovo generatore di Insetto saltatore", "item.antarchy.spit_bug_spawn_egg": "Uovo generatore di Insetto sputatore", "item.antarchy.stink_bug_spawn_egg": "Uovo generatore di Cimice puzzolente", "item.antarchy.termite_spawn_egg": "Uovo generatore di Termite", "item.antarchy.rolly_polly_spawn_egg": "Uovo generatore di Porcellino di terra", - "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.crawling_blight_spawn_egg": "Uovo generatore di Orrore strisciante", + "item.antarchy.skulking_fright_spawn_egg": "Uovo generatore di Terrore in agguato", "item.antarchy.hercules_beetle_spawn_egg": "Uovo generatore di Scarabeo Ercole", - "item.antarchy.chitin": "Chitin", + "item.antarchy.chitin": "Chiten", "block.antarchy.polished_broodstone": "Broodstone levigato", "block.antarchy.chiseled_broodstone": "Broodstone cesellato", "block.antarchy.broodstone_bricks": "Mattoni di Broodstone", @@ -920,14 +925,14 @@ "block.antarchy.glowcap_mushroom_block": "Blocco di fungo Glowcap", "block.antarchy.molting_vines": "Rampicanti della muta", "item.antarchy.broodfruit": "Broodfruit", - "block.antarchy.jumpy_bug_egg": "Uovo di Insetto saltatore", - "subtitles.antarchy.creeping_horror_growl": "L’orrore strisciante ringhia", - "subtitles.antarchy.creeping_horror_hurt": "L’orrore strisciante si ferisce", - "subtitles.antarchy.creeping_horror_bite": "L’orrore strisciante morde", - "subtitles.antarchy.lurking_terror_snarl": "Il terrore in agguato ringhia", - "subtitles.antarchy.lurking_terror_hurt": "Il terrore in agguato si ferisce", - "subtitles.antarchy.lurking_terror_bite": "Il terrore in agguato morde", - "subtitles.antarchy.lurking_terror_fly_loop": "Il terrore in agguato vola", + "block.antarchy.springbug_egg": "Uovo di Insetto saltatore", + "subtitles.antarchy.crawling_blight_growl": "L’orrore strisciante ringhia", + "subtitles.antarchy.crawling_blight_hurt": "L’orrore strisciante si ferisce", + "subtitles.antarchy.crawling_blight_bite": "L’orrore strisciante morde", + "subtitles.antarchy.skulking_fright_snarl": "Il terrore in agguato ringhia", + "subtitles.antarchy.skulking_fright_hurt": "Il terrore in agguato si ferisce", + "subtitles.antarchy.skulking_fright_bite": "Il terrore in agguato morde", + "subtitles.antarchy.skulking_fright_fly_loop": "Il terrore in agguato vola", "subtitles.antarchy.stink_bug_fart": "La cimice puzzolente scoreggia", "subtitles.antarchy.stink_bug_idle": "La cimice puzzolente emette un verso", "subtitles.antarchy.rolly_polly_idle": "Il porcellino di terra emette un verso", @@ -944,10 +949,10 @@ "subtitles.antarchy.jerry_hurt": "Jerry soffre", "subtitles.antarchy.jerry_death": "Jerry muore", "subtitles.antarchy.jerry_attack": "Jerry attacca", - "subtitles.antarchy.jumpy_bug_idle": "L’insetto saltatore emette un verso", + "subtitles.antarchy.springbug_idle": "L’insetto saltatore emette un verso", "subtitles.antarchy.spit_bug_idle": "L’insetto sputatore emette un verso", - "subtitles.antarchy.jumpy_bug_hurt": "L’insetto saltatore si ferisce", - "subtitles.antarchy.jumpy_bug_jump": "L’insetto saltatore salta", + "subtitles.antarchy.springbug_hurt": "L’insetto saltatore si ferisce", + "subtitles.antarchy.springbug_jump": "L’insetto saltatore salta", "subtitles.antarchy.spit_bug_hurt": "L’insetto sputatore si ferisce", "subtitles.antarchy.spit_bug_spit": "L’insetto sputatore sputa", "subtitles.antarchy.brutalfly_spit": "La Brutalfly sputa", diff --git a/common-1.20.1/src/main/resources/assets/antarchy/lang/ja_jp.json b/common-1.20.1/src/main/resources/assets/antarchy/lang/ja_jp.json index 0367c4c7..664b7767 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/lang/ja_jp.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/lang/ja_jp.json @@ -90,7 +90,7 @@ "block.antarchy.pale_nyxite": "淡いニクサイト", "block.antarchy.nyxite_spike": "ニクサイトのトゲ", "block.antarchy.potent_nyxite": "強力なニクサイト", - "block.antarchy.triffid_goo_block": "トリフィド 粘液のブロック", + "block.antarchy.flytrap_goo_block": "トリフィド 粘液のブロック", "block.antarchy.elythia_portal": "エリーティアのポータル", "block.antarchy.cloud_block": "雲のブロック", "block.antarchy.thoraxis_portal": "ソーアクシスのポータル", @@ -181,7 +181,7 @@ "entity.antarchy.rainbow_ant": "虹色のアリ", "entity.antarchy.diamond_minecart": "ダイヤモンドのトロッコ", "entity.antarchy.dr_trayaurus": "トレイオーラス博士", - "entity.antarchy.cloud_shark": "雲ザメ", + "entity.antarchy.stratoshark": "雲ザメ", "entity.antarchy.kraken": "クラーケン", "entity.antarchy.missile_squid": "ミサイルイカ", "entity.antarchy.octopus_bomb": "タコ爆弾", @@ -193,7 +193,7 @@ "entity.antarchy.molevore": "モールヴォア", "entity.antarchy.mantis": "カマキリ", "entity.antarchy.alpha_mantis": "アルファカマキリ", - "entity.antarchy.triffid": "トリフィド", + "entity.antarchy.flytrap": "トリフィド", "entity.antarchy.toreterror": "トアテラー", "entity.antarchy.water_bomb": "水爆弾", "subtitles.antarchy.mantis_ambient": "カマキリがカチカチ鳴く", @@ -212,9 +212,9 @@ "item.antarchy.attitude_adjuster": "態度調整ハンマー", "tooltip.antarchy.attitude_adjuster.grounded": "地上の対象を上空へ吹き飛ばし、空中の対象を地面へ叩きつけます。", "tooltip.antarchy.attitude_adjuster.slam": "空中で右クリックすると地面へ急降下します。", - "item.antarchy.cloud_shark_fin": "雲ザメのヒレ", - "item.antarchy.cloud_shark_fin_soup": "雲ザメのヒレのスープ", - "tooltip.antarchy.cloud_shark_fin_soup": "攻撃力上昇と低速落下を付与します。", + "item.antarchy.stratoshark_fin": "雲ザメのヒレ", + "item.antarchy.stratoshark_fin_soup": "雲ザメのヒレのスープ", + "tooltip.antarchy.stratoshark_fin_soup": "攻撃力上昇と低速落下を付与します。", "tooltip.antarchy.critter_cage.empty": "右クリックで投げる", "tooltip.antarchy.critter_cage.contains": "中身:%s", "tooltip.antarchy.critter_cage.release": "右クリックで解放", @@ -263,7 +263,7 @@ "attribute.antarchy.bloodglass_max_hearts": "血晶のハート上限", "item.antarchy.molevore_nose": "モールヴォアの鼻", "item.antarchy.moleworm": "モールワーム", - "item.antarchy.triffid_spawn_egg": "トリフィドのスポーンエッグ", + "item.antarchy.flytrap_spawn_egg": "トリフィドのスポーンエッグ", "item.antarchy.infested_rooted_dirt": "虫食いの根付いた 土", "item.antarchy.infested_coarse_dirt": "虫食いの粗い 土", "item.antarchy.pale_nyxite": "淡いニクサイト", @@ -352,9 +352,9 @@ "tooltip.antarchy.mantis_claw.wall_cling": "Dual wield to cling to walls and jump upward.", "item.antarchy.king_scale": "王の鱗", "item.antarchy.queen_scale": "女王の鱗", - "item.antarchy.jumpy_bug_leg": "ジャンピーバグの脚", - "item.antarchy.jumpy_boots": "ジャンプブーツ", - "tooltip.antarchy.jumpy_boots": "スニークで溜めてからジャンプすると高く跳び上がります。", + "item.antarchy.springbug_leg": "ジャンピーバグの脚", + "item.antarchy.springy_boots": "ジャンプブーツ", + "tooltip.antarchy.springy_boots": "スニークで溜めてからジャンプすると高く跳び上がります。", "item.antarchy.brutalfly_wing": "ブルータルフライの翼", "item.antarchy.brutalfly_elytra": "ブルータルフライのエリトラ", "tooltip.antarchy.brutalfly_elytra.flap": "飛行中に%sを長押しして羽ばたきます", @@ -368,9 +368,9 @@ "item.antarchy.american_name": "アメリカン%s", "item.antarchy.root_beer": "ルートビア", "item.antarchy.primordial_scute": "原初のの甲板", - "item.antarchy.triffid_goo": "トリフィド 粘液", - "item.antarchy.triffid_goo_block": "トリフィド 粘液のブロック", - "tooltip.antarchy.triffid_goo_block": "高速で触れると上へ跳ね返り、それ以外では沈み込みます。", + "item.antarchy.flytrap_goo": "トリフィド 粘液", + "item.antarchy.flytrap_goo_block": "トリフィド 粘液のブロック", + "tooltip.antarchy.flytrap_goo_block": "高速で触れると上へ跳ね返り、それ以外では沈み込みます。", "item.antarchy.cloud_bucket": "雲のバケツ", "tooltip.antarchy.cloud_bucket.midair": "空中に設置できます", "item.antarchy.lumen_bucket": "ルーメンのバケツ", @@ -380,7 +380,7 @@ "tooltip.antarchy.scorpion_whip.snap": "つながれた獲物をもう一度左クリックすると針を引き抜きます。", "item.antarchy.fallen_king_crown": "亡き王の王冠", "tooltip.antarchy.fallen_king_crown.hero": "敵対モブを倒すと村の英雄を付与します", - "item.antarchy.vortex_eye": "渦の目", + "item.antarchy.vortex_charge": "Vortex Charge", "item.antarchy.ultimate_helmet": "究極のヘルメット", "item.antarchy.ultimate_chestplate": "究極のチェストプレート", "item.antarchy.ultimate_leggings": "究極のレギンス", @@ -474,7 +474,7 @@ "item.antarchy.caterpillar_spawn_egg": "イモムシのスポーンエッグ", "item.antarchy.butterfly_spawn_egg": "チョウのスポーンエッグ", "item.antarchy.brutalfly_spawn_egg": "ブルータルフライのスポーンエッグ", - "item.antarchy.cloud_shark_spawn_egg": "雲ザメのスポーンエッグ", + "item.antarchy.stratoshark_spawn_egg": "雲ザメのスポーンエッグ", "item.antarchy.kraken_spawn_egg": "いや、やめて。", "item.antarchy.missile_squid_spawn_egg": "ミサイルイカのスポーンエッグ", "item.antarchy.octopus_bomb_spawn_egg": "タコ爆弾のスポーンエッグ", @@ -512,7 +512,7 @@ "message.antarchy.termite_activated": "シロアリは行き先を開く準備ができています。", "message.antarchy.termite_needs_reagent": "このシロアリが行き先を開くには試薬が必要です。", "death.attack.spit_bug_disrespect": "%1$sはスピットバグに無礼を働かれた", - "death.attack.jumpy_bug_jump": "%1$sはジャンピーバグに飛びかかられた", + "death.attack.springbug_jump": "%1$sはジャンピーバグに飛びかかられた", "death.attack.hercules_beetle_obliteration": "%1$sはヘラクレスオオカブトに消し飛ばされた", "message.antarchy.big_bertha.mode": "ビッグ・バーサのモード:%s", "message.antarchy.big_bertha.mode.basilisk": "バジリスク", @@ -533,6 +533,8 @@ "effect.antarchy.paralyzed.description": "対象が動けなくなります。", "effect.antarchy.inverted": "重力反転", "effect.antarchy.inverted.description": "対象の重力を反転させます。", + "effect.antarchy.commanded.description": "命令したプレイヤーのために戦います。", + "effect.antarchy.dilated.description": "影響を受けたエンティティの時間の流れを遅くします。", "effect.antarchy.stinky": "悪臭", "effect.antarchy.stinky.description": "友好的および中立のMobを遠ざけ、節足動物を引き寄せます。", "effect.antarchy.gooped.description": "移動速度と攻撃速度を低下させます。", @@ -540,10 +542,10 @@ "effect.antarchy.growth": "成長", "effect.antarchy.bloodglass_ward": "血晶の守護", "effect.antarchy.bloodglass_ward.description": "砕けるハートを与え、1回分のダメージを丸ごと吸収します。時間経過で再生します。", - "death.attack.triffid_mauling": "%1$sは植物に噛み殺された", - "death.attack.triffid_mauling.player": "%1$sは植物に噛み殺された", - "death.attack.triffid_swallow": "%1$sはトリフィドに飲み込まれた", - "death.attack.triffid_swallow.player": "%1$sはトリフィドに飲み込まれた", + "death.attack.flytrap_mauling": "%1$sは植物に噛み殺された", + "death.attack.flytrap_mauling.player": "%1$sは植物に噛み殺された", + "death.attack.flytrap_swallow": "%1$sはトリフィドに飲み込まれた", + "death.attack.flytrap_swallow.player": "%1$sはトリフィドに飲み込まれた", "potion.antarchy.haste": "採掘速度上昇のポーション", "potion.antarchy.strong_haste": "採掘速度上昇 Ⅱのポーション", "tooltip.antarchy.big_bertha.mode": "モード:%s", @@ -660,11 +662,11 @@ "subtitles.antarchy.ant_bite": "アリが噛む", "subtitles.antarchy.ant_gather": "アリが集める", "subtitles.antarchy.ant_nest": "アリの巣がざわめく", - "subtitles.antarchy.cloud_shark_bite": "雲ザメが噛む", - "subtitles.antarchy.cloud_shark_idle": "雲ザメが鳴く", - "subtitles.antarchy.cloud_shark_hurt": "雲ザメが傷つく", - "subtitles.antarchy.cloud_shark_death": "雲ザメが倒れる", - "subtitles.antarchy.cloud_shark_fly": "雲ザメが飛ぶ", + "subtitles.antarchy.stratoshark_bite": "雲ザメが噛む", + "subtitles.antarchy.stratoshark_idle": "雲ザメが鳴く", + "subtitles.antarchy.stratoshark_hurt": "雲ザメが傷つく", + "subtitles.antarchy.stratoshark_death": "雲ザメが倒れる", + "subtitles.antarchy.stratoshark_fly": "雲ザメが飛ぶ", "subtitles.antarchy.caterpillar_idle": "イモムシが鳴く", "subtitles.antarchy.caterpillar_hurt": "イモムシが傷つく", "subtitles.antarchy.caterpillar_crawl": "イモムシが這う", @@ -704,17 +706,20 @@ "subtitles.antarchy.nightmare_death": "ナイトメアが倒れる", "subtitles.antarchy.nightmare_bite": "ナイトメアが噛む", "subtitles.antarchy.nightmare_flap": "ナイトメアが羽ばたく", - "subtitles.antarchy.triffid_attack": "トリフィドが攻撃する", - "subtitles.antarchy.triffid_grab": "トリフィドが掴む", - "subtitles.antarchy.triffid_hurt": "トリフィドが傷つく", - "subtitles.antarchy.triffid_death": "トリフィドが倒れる", - "subtitles.antarchy.triffid_hiss": "トリフィドがシューッと鳴る", - "subtitles.antarchy.triffid_growl": "トリフィドが唸る", + "subtitles.antarchy.flytrap_attack": "トリフィドが攻撃する", + "subtitles.antarchy.flytrap_grab": "トリフィドが掴む", + "subtitles.antarchy.flytrap_hurt": "トリフィドが傷つく", + "subtitles.antarchy.flytrap_death": "トリフィドが倒れる", + "subtitles.antarchy.flytrap_hiss": "トリフィドがシューッと鳴る", + "subtitles.antarchy.flytrap_growl": "トリフィドが唸る", "subtitles.antarchy.gravity_gun_pickup": "重力銃が持ち上げる", "subtitles.antarchy.gravity_gun_drop": "重力銃が放す", "subtitles.antarchy.gravity_gun_hold_loop": "重力銃が低く唸る", "subtitles.antarchy.gravity_gun_launch": "重力銃が発射する", "subtitles.antarchy.gravity_gun_dryfire": "重力銃が空撃ちする", + "subtitles.antarchy.antimetal_place": "アンチメタルが鳴る", + "subtitles.antarchy.antimetal_step": "アンチメタルがカチカチ鳴る", + "subtitles.antarchy.antimetal_scaffold": "アンチメタル足場ががたつく", "subtitles.antarchy.bed_bug_ambient": "トコジラミがさえずる", "subtitles.antarchy.bed_bug_hurt": "トコジラミが傷つく", "subtitles.antarchy.bed_bug_attack": "トコジラミが噛む", @@ -877,23 +882,23 @@ "block.antarchy.amber_lichen": "琥珀色の地衣類", "block.antarchy.bile_vein": "胆汁脈", "block.antarchy.creepvine": "クリープヴァイン", - "block.antarchy.creeping_horror_egg": "這い寄る恐怖の卵", - "block.antarchy.lurking_terror_egg": "潜む恐怖の卵", + "block.antarchy.crawling_blight_egg": "這い寄る恐怖の卵", + "block.antarchy.skulking_fright_egg": "潜む恐怖の卵", "entity.antarchy.termite": "シロアリ", - "entity.antarchy.jumpy_bug": "ジャンピーバグ", + "entity.antarchy.springbug": "ジャンピーバグ", "entity.antarchy.spit_bug": "スピットバグ", "entity.antarchy.stink_bug": "カメムシ", "entity.antarchy.rolly_polly": "ダンゴムシ", - "entity.antarchy.creeping_horror": "這い寄る恐怖", - "entity.antarchy.lurking_terror": "潜む恐怖", + "entity.antarchy.crawling_blight": "這い寄る恐怖", + "entity.antarchy.skulking_fright": "潜む恐怖", "entity.antarchy.hercules_beetle": "ヘラクレスオオカブト", - "item.antarchy.jumpy_bug_spawn_egg": "ジャンピーバグのスポーンエッグ", + "item.antarchy.springbug_spawn_egg": "ジャンピーバグのスポーンエッグ", "item.antarchy.spit_bug_spawn_egg": "スピットバグのスポーンエッグ", "item.antarchy.stink_bug_spawn_egg": "カメムシのスポーンエッグ", "item.antarchy.termite_spawn_egg": "シロアリのスポーンエッグ", "item.antarchy.rolly_polly_spawn_egg": "ダンゴムシのスポーンエッグ", - "item.antarchy.creeping_horror_spawn_egg": "這い寄る恐怖のスポーンエッグ", - "item.antarchy.lurking_terror_spawn_egg": "潜む恐怖のスポーンエッグ", + "item.antarchy.crawling_blight_spawn_egg": "這い寄る恐怖のスポーンエッグ", + "item.antarchy.skulking_fright_spawn_egg": "潜む恐怖のスポーンエッグ", "item.antarchy.hercules_beetle_spawn_egg": "ヘラクレスオオカブトのスポーンエッグ", "item.antarchy.chitin": "キチン", "block.antarchy.polished_broodstone": "磨かれたブルードストーン", @@ -920,14 +925,14 @@ "block.antarchy.glowcap_mushroom_block": "グロウキャップキノコブロック", "block.antarchy.molting_vines": "脱皮のツタ", "item.antarchy.broodfruit": "ブルードフルーツ", - "block.antarchy.jumpy_bug_egg": "ジャンピーバグの卵", - "subtitles.antarchy.creeping_horror_growl": "這い寄る恐怖が唸る", - "subtitles.antarchy.creeping_horror_hurt": "這い寄る恐怖が傷つく", - "subtitles.antarchy.creeping_horror_bite": "這い寄る恐怖が噛む", - "subtitles.antarchy.lurking_terror_snarl": "潜む恐怖が唸る", - "subtitles.antarchy.lurking_terror_hurt": "潜む恐怖が傷つく", - "subtitles.antarchy.lurking_terror_bite": "潜む恐怖が噛む", - "subtitles.antarchy.lurking_terror_fly_loop": "潜む恐怖が飛ぶ", + "block.antarchy.springbug_egg": "ジャンピーバグの卵", + "subtitles.antarchy.crawling_blight_growl": "這い寄る恐怖が唸る", + "subtitles.antarchy.crawling_blight_hurt": "這い寄る恐怖が傷つく", + "subtitles.antarchy.crawling_blight_bite": "這い寄る恐怖が噛む", + "subtitles.antarchy.skulking_fright_snarl": "潜む恐怖が唸る", + "subtitles.antarchy.skulking_fright_hurt": "潜む恐怖が傷つく", + "subtitles.antarchy.skulking_fright_bite": "潜む恐怖が噛む", + "subtitles.antarchy.skulking_fright_fly_loop": "潜む恐怖が飛ぶ", "subtitles.antarchy.stink_bug_fart": "カメムシが屁をする", "subtitles.antarchy.stink_bug_idle": "カメムシが鳴く", "subtitles.antarchy.rolly_polly_idle": "ダンゴムシが鳴く", @@ -944,10 +949,10 @@ "subtitles.antarchy.jerry_hurt": "ジェリーが傷つく", "subtitles.antarchy.jerry_death": "ジェリーが死ぬ", "subtitles.antarchy.jerry_attack": "ジェリーが攻撃する", - "subtitles.antarchy.jumpy_bug_idle": "ジャンピーバグが鳴く", + "subtitles.antarchy.springbug_idle": "ジャンピーバグが鳴く", "subtitles.antarchy.spit_bug_idle": "スピットバグが鳴く", - "subtitles.antarchy.jumpy_bug_hurt": "ジャンピーバグが傷つく", - "subtitles.antarchy.jumpy_bug_jump": "ジャンピーバグが跳ぶ", + "subtitles.antarchy.springbug_hurt": "ジャンピーバグが傷つく", + "subtitles.antarchy.springbug_jump": "ジャンピーバグが跳ぶ", "subtitles.antarchy.spit_bug_hurt": "スピットバグが傷つく", "subtitles.antarchy.spit_bug_spit": "スピットバグが吐き出す", "subtitles.antarchy.brutalfly_spit": "ブルータルフライが吐き出す", diff --git a/common-1.20.1/src/main/resources/assets/antarchy/lang/ko_kr.json b/common-1.20.1/src/main/resources/assets/antarchy/lang/ko_kr.json index 9b72989d..4d74cf03 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/lang/ko_kr.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/lang/ko_kr.json @@ -90,7 +90,7 @@ "block.antarchy.pale_nyxite": "창백한 닉사이트", "block.antarchy.nyxite_spike": "닉사이트 가시", "block.antarchy.potent_nyxite": "강력한 닉사이트", - "block.antarchy.triffid_goo_block": "트리피드 점액 블록", + "block.antarchy.flytrap_goo_block": "트리피드 점액 블록", "block.antarchy.elythia_portal": "엘리티아 차원문", "block.antarchy.cloud_block": "구름 블록", "block.antarchy.thoraxis_portal": "토랙시스 차원문", @@ -181,7 +181,7 @@ "entity.antarchy.rainbow_ant": "무지개 개미", "entity.antarchy.diamond_minecart": "다이아몬드 광산 수레", "entity.antarchy.dr_trayaurus": "트레이오러스 박사", - "entity.antarchy.cloud_shark": "구름 상어", + "entity.antarchy.stratoshark": "구름 상어", "entity.antarchy.kraken": "크라켄", "entity.antarchy.missile_squid": "미사일 오징어", "entity.antarchy.octopus_bomb": "문어 폭탄", @@ -193,7 +193,7 @@ "entity.antarchy.molevore": "몰보어", "entity.antarchy.mantis": "사마귀", "entity.antarchy.alpha_mantis": "알파 사마귀", - "entity.antarchy.triffid": "트리피드", + "entity.antarchy.flytrap": "트리피드", "entity.antarchy.toreterror": "토어테러", "entity.antarchy.water_bomb": "물 폭탄", "subtitles.antarchy.mantis_ambient": "사마귀 딸깍거립니다", @@ -212,9 +212,9 @@ "item.antarchy.attitude_adjuster": "태도 교정기", "tooltip.antarchy.attitude_adjuster.grounded": "지상의 대상을 위로 날리고, 공중의 대상을 땅으로 내리꽂습니다.", "tooltip.antarchy.attitude_adjuster.slam": "공중에서 우클릭하면 지면 강타를 합니다.", - "item.antarchy.cloud_shark_fin": "구름 상어 지느러미", - "item.antarchy.cloud_shark_fin_soup": "구름 상어 지느러미 수프", - "tooltip.antarchy.cloud_shark_fin_soup": "힘과 느린 낙하를 부여합니다.", + "item.antarchy.stratoshark_fin": "구름 상어 지느러미", + "item.antarchy.stratoshark_fin_soup": "구름 상어 지느러미 수프", + "tooltip.antarchy.stratoshark_fin_soup": "힘과 느린 낙하를 부여합니다.", "tooltip.antarchy.critter_cage.empty": "우클릭하여 던지기", "tooltip.antarchy.critter_cage.contains": "들어 있음: %s", "tooltip.antarchy.critter_cage.release": "우클릭하여 풀어주기", @@ -263,7 +263,7 @@ "attribute.antarchy.bloodglass_max_hearts": "최대 혈유리 심장", "item.antarchy.molevore_nose": "몰보어 코", "item.antarchy.moleworm": "몰웜", - "item.antarchy.triffid_spawn_egg": "트리피드 생성 알", + "item.antarchy.flytrap_spawn_egg": "트리피드 생성 알", "item.antarchy.infested_rooted_dirt": "감염된 뿌리내린 흙", "item.antarchy.infested_coarse_dirt": "감염된 거친 흙", "item.antarchy.pale_nyxite": "창백한 닉사이트", @@ -352,9 +352,9 @@ "tooltip.antarchy.mantis_claw.wall_cling": "Dual wield to cling to walls and jump upward.", "item.antarchy.king_scale": "왕 비늘", "item.antarchy.queen_scale": "여왕 비늘", - "item.antarchy.jumpy_bug_leg": "점피 벌레 다리", - "item.antarchy.jumpy_boots": "점피 부츠", - "tooltip.antarchy.jumpy_boots": "웅크려 충전한 뒤 점프하면 위로 튀어 오릅니다.", + "item.antarchy.springbug_leg": "점피 벌레 다리", + "item.antarchy.springy_boots": "점피 부츠", + "tooltip.antarchy.springy_boots": "웅크려 충전한 뒤 점프하면 위로 튀어 오릅니다.", "item.antarchy.brutalfly_wing": "브루털플라이 날개", "item.antarchy.brutalfly_elytra": "브루털플라이 겉날개", "tooltip.antarchy.brutalfly_elytra.flap": "비행 중 %s을 길게 눌러 날갯짓합니다", @@ -368,9 +368,9 @@ "item.antarchy.american_name": "미국식 %s", "item.antarchy.root_beer": "루트 비어", "item.antarchy.primordial_scute": "태고의 등딱지 조각", - "item.antarchy.triffid_goo": "트리피드 점액", - "item.antarchy.triffid_goo_block": "트리피드 점액 블록", - "tooltip.antarchy.triffid_goo_block": "빠르게 부딪히면 튀어 오르고, 아니면 안으로 가라앉습니다.", + "item.antarchy.flytrap_goo": "트리피드 점액", + "item.antarchy.flytrap_goo_block": "트리피드 점액 블록", + "tooltip.antarchy.flytrap_goo_block": "빠르게 부딪히면 튀어 오르고, 아니면 안으로 가라앉습니다.", "item.antarchy.cloud_bucket": "구름 양동이", "tooltip.antarchy.cloud_bucket.midair": "공중에 설치할 수 있습니다", "item.antarchy.lumen_bucket": "루멘 양동이", @@ -380,7 +380,7 @@ "tooltip.antarchy.scorpion_whip.snap": "연결된 먹잇감을 다시 좌클릭하여 독침을 뽑습니다.", "item.antarchy.fallen_king_crown": "몰락한 왕의 왕관", "tooltip.antarchy.fallen_king_crown.hero": "적대적 생물을 처치하면 마을의 영웅을 부여합니다", - "item.antarchy.vortex_eye": "소용돌이 눈", + "item.antarchy.vortex_charge": "Vortex Charge", "item.antarchy.ultimate_helmet": "궁극 투구", "item.antarchy.ultimate_chestplate": "궁극 흉갑", "item.antarchy.ultimate_leggings": "궁극 레깅스", @@ -474,7 +474,7 @@ "item.antarchy.caterpillar_spawn_egg": "애벌레 생성 알", "item.antarchy.butterfly_spawn_egg": "나비 생성 알", "item.antarchy.brutalfly_spawn_egg": "브루털플라이 생성 알", - "item.antarchy.cloud_shark_spawn_egg": "구름 상어 생성 알", + "item.antarchy.stratoshark_spawn_egg": "구름 상어 생성 알", "item.antarchy.kraken_spawn_egg": "어, 안 돼. 하지 마.", "item.antarchy.missile_squid_spawn_egg": "미사일 오징어 생성 알", "item.antarchy.octopus_bomb_spawn_egg": "문어 폭탄 생성 알", @@ -512,7 +512,7 @@ "message.antarchy.termite_activated": "흰개미가 목적지를 열 준비가 되었습니다.", "message.antarchy.termite_needs_reagent": "이 흰개미가 목적지를 열려면 시약이 필요합니다.", "death.attack.spit_bug_disrespect": "%1$s이(가) 스핏 벌레에게 무시당했습니다", - "death.attack.jumpy_bug_jump": "%1$s이(가) 점피 벌레에게 덮쳐졌습니다", + "death.attack.springbug_jump": "%1$s이(가) 점피 벌레에게 덮쳐졌습니다", "death.attack.hercules_beetle_obliteration": "%1$s이(가) 헤라클레스장수풍뎅이에게 소멸당했습니다", "message.antarchy.big_bertha.mode": "빅 버사 모드: %s", "message.antarchy.big_bertha.mode.basilisk": "바실리스크", @@ -533,6 +533,8 @@ "effect.antarchy.paralyzed.description": "대상이 움직이지 못하게 합니다.", "effect.antarchy.inverted": "반전", "effect.antarchy.inverted.description": "대상의 중력을 반전시킵니다.", + "effect.antarchy.commanded.description": "명령한 플레이어를 위해 싸웁니다.", + "effect.antarchy.dilated.description": "영향받은 개체의 시간 흐름을 늦춥니다.", "effect.antarchy.stinky": "악취", "effect.antarchy.stinky.description": "수동적 및 중립적 몹을 쫓아내고 절지동물을 끌어들입니다.", "effect.antarchy.gooped.description": "이동 속도와 공격 속도를 늦춥니다.", @@ -540,10 +542,10 @@ "effect.antarchy.growth": "성장", "effect.antarchy.bloodglass_ward": "혈유리 수호", "effect.antarchy.bloodglass_ward.description": "산산이 부서지는 하트를 부여해 피해 한 번을 통째로 흡수합니다. 시간이 지나면 다시 재생됩니다.", - "death.attack.triffid_mauling": "%1$s이(가) 식물에게 물어뜯겨 죽었습니다", - "death.attack.triffid_mauling.player": "%1$s이(가) 식물에게 물어뜯겨 죽었습니다", - "death.attack.triffid_swallow": "%1$s이(가) 트리피드에게 삼켜졌습니다", - "death.attack.triffid_swallow.player": "%1$s이(가) 트리피드에게 삼켜졌습니다", + "death.attack.flytrap_mauling": "%1$s이(가) 식물에게 물어뜯겨 죽었습니다", + "death.attack.flytrap_mauling.player": "%1$s이(가) 식물에게 물어뜯겨 죽었습니다", + "death.attack.flytrap_swallow": "%1$s이(가) 트리피드에게 삼켜졌습니다", + "death.attack.flytrap_swallow.player": "%1$s이(가) 트리피드에게 삼켜졌습니다", "potion.antarchy.haste": "성급함의 물약", "potion.antarchy.strong_haste": "강한 성급함의 물약", "tooltip.antarchy.big_bertha.mode": "모드: %s", @@ -660,11 +662,11 @@ "subtitles.antarchy.ant_bite": "개미 뭅니다", "subtitles.antarchy.ant_gather": "개미 모읍니다", "subtitles.antarchy.ant_nest": "개미 둥지가 바스락거립니다", - "subtitles.antarchy.cloud_shark_bite": "구름 상어 뭅니다", - "subtitles.antarchy.cloud_shark_idle": "구름 상어 소리를 냅니다", - "subtitles.antarchy.cloud_shark_hurt": "구름 상어 다칩니다", - "subtitles.antarchy.cloud_shark_death": "구름 상어 죽습니다", - "subtitles.antarchy.cloud_shark_fly": "구름 상어 납니다", + "subtitles.antarchy.stratoshark_bite": "구름 상어 뭅니다", + "subtitles.antarchy.stratoshark_idle": "구름 상어 소리를 냅니다", + "subtitles.antarchy.stratoshark_hurt": "구름 상어 다칩니다", + "subtitles.antarchy.stratoshark_death": "구름 상어 죽습니다", + "subtitles.antarchy.stratoshark_fly": "구름 상어 납니다", "subtitles.antarchy.caterpillar_idle": "애벌레 소리를 냅니다", "subtitles.antarchy.caterpillar_hurt": "애벌레 다칩니다", "subtitles.antarchy.caterpillar_crawl": "애벌레 기어갑니다", @@ -704,17 +706,20 @@ "subtitles.antarchy.nightmare_death": "악몽 죽습니다", "subtitles.antarchy.nightmare_bite": "악몽 뭅니다", "subtitles.antarchy.nightmare_flap": "악몽 날갯짓합니다", - "subtitles.antarchy.triffid_attack": "트리피드 공격합니다", - "subtitles.antarchy.triffid_grab": "트리피드 붙잡습니다", - "subtitles.antarchy.triffid_hurt": "트리피드 다칩니다", - "subtitles.antarchy.triffid_death": "트리피드 죽습니다", - "subtitles.antarchy.triffid_hiss": "트리피드 쉬익거립니다", - "subtitles.antarchy.triffid_growl": "트리피드 그르렁거립니다", + "subtitles.antarchy.flytrap_attack": "트리피드 공격합니다", + "subtitles.antarchy.flytrap_grab": "트리피드 붙잡습니다", + "subtitles.antarchy.flytrap_hurt": "트리피드 다칩니다", + "subtitles.antarchy.flytrap_death": "트리피드 죽습니다", + "subtitles.antarchy.flytrap_hiss": "트리피드 쉬익거립니다", + "subtitles.antarchy.flytrap_growl": "트리피드 그르렁거립니다", "subtitles.antarchy.gravity_gun_pickup": "중력총 들어 올립니다", "subtitles.antarchy.gravity_gun_drop": "중력총 내려놓습니다", "subtitles.antarchy.gravity_gun_hold_loop": "중력총 웅웅거립니다", "subtitles.antarchy.gravity_gun_launch": "중력총 발사합니다", "subtitles.antarchy.gravity_gun_dryfire": "중력총 헛발사됩니다", + "subtitles.antarchy.antimetal_place": "안티메탈이 쨍그랑거립니다", + "subtitles.antarchy.antimetal_step": "안티메탈이 딸깍거립니다", + "subtitles.antarchy.antimetal_scaffold": "안티메탈 비계가 덜컹거립니다", "subtitles.antarchy.bed_bug_ambient": "빈대 짹짹거립니다", "subtitles.antarchy.bed_bug_hurt": "빈대 다칩니다", "subtitles.antarchy.bed_bug_attack": "빈대 뭅니다", @@ -877,23 +882,23 @@ "block.antarchy.amber_lichen": "호박색 지의류", "block.antarchy.bile_vein": "담즙 광맥", "block.antarchy.creepvine": "크리프바인", - "block.antarchy.creeping_horror_egg": "기어오는 공포 알", - "block.antarchy.lurking_terror_egg": "도사린 공포 알", + "block.antarchy.crawling_blight_egg": "기어오는 공포 알", + "block.antarchy.skulking_fright_egg": "도사린 공포 알", "entity.antarchy.termite": "흰개미", - "entity.antarchy.jumpy_bug": "점피 벌레", + "entity.antarchy.springbug": "점피 벌레", "entity.antarchy.spit_bug": "스핏 벌레", "entity.antarchy.stink_bug": "노린재", "entity.antarchy.rolly_polly": "공벌레", - "entity.antarchy.creeping_horror": "기어오는 공포", - "entity.antarchy.lurking_terror": "도사린 공포", + "entity.antarchy.crawling_blight": "기어오는 공포", + "entity.antarchy.skulking_fright": "도사린 공포", "entity.antarchy.hercules_beetle": "헤라클레스장수풍뎅이", - "item.antarchy.jumpy_bug_spawn_egg": "점피 벌레 생성 알", + "item.antarchy.springbug_spawn_egg": "점피 벌레 생성 알", "item.antarchy.spit_bug_spawn_egg": "스핏 벌레 생성 알", "item.antarchy.stink_bug_spawn_egg": "노린재 생성 알", "item.antarchy.termite_spawn_egg": "흰개미 생성 알", "item.antarchy.rolly_polly_spawn_egg": "공벌레 생성 알", - "item.antarchy.creeping_horror_spawn_egg": "기어오는 공포 생성 알", - "item.antarchy.lurking_terror_spawn_egg": "도사린 공포 생성 알", + "item.antarchy.crawling_blight_spawn_egg": "기어오는 공포 생성 알", + "item.antarchy.skulking_fright_spawn_egg": "도사린 공포 생성 알", "item.antarchy.hercules_beetle_spawn_egg": "헤라클레스장수풍뎅이 생성 알", "item.antarchy.chitin": "치텐", "block.antarchy.polished_broodstone": "윤나는 브루드스톤", @@ -920,14 +925,14 @@ "block.antarchy.glowcap_mushroom_block": "글로우캡 버섯 블록", "block.antarchy.molting_vines": "탈피 덩굴", "item.antarchy.broodfruit": "브루드프루트", - "block.antarchy.jumpy_bug_egg": "점피 벌레 알", - "subtitles.antarchy.creeping_horror_growl": "기어오는 공포 그르렁거립니다", - "subtitles.antarchy.creeping_horror_hurt": "기어오는 공포 다칩니다", - "subtitles.antarchy.creeping_horror_bite": "기어오는 공포 뭅니다", - "subtitles.antarchy.lurking_terror_snarl": "도사린 공포 으르렁거립니다", - "subtitles.antarchy.lurking_terror_hurt": "도사린 공포 다칩니다", - "subtitles.antarchy.lurking_terror_bite": "도사린 공포 뭅니다", - "subtitles.antarchy.lurking_terror_fly_loop": "도사린 공포 납니다", + "block.antarchy.springbug_egg": "점피 벌레 알", + "subtitles.antarchy.crawling_blight_growl": "기어오는 공포 그르렁거립니다", + "subtitles.antarchy.crawling_blight_hurt": "기어오는 공포 다칩니다", + "subtitles.antarchy.crawling_blight_bite": "기어오는 공포 뭅니다", + "subtitles.antarchy.skulking_fright_snarl": "도사린 공포 으르렁거립니다", + "subtitles.antarchy.skulking_fright_hurt": "도사린 공포 다칩니다", + "subtitles.antarchy.skulking_fright_bite": "도사린 공포 뭅니다", + "subtitles.antarchy.skulking_fright_fly_loop": "도사린 공포 납니다", "subtitles.antarchy.stink_bug_fart": "노린재 방귀를 뀝니다", "subtitles.antarchy.stink_bug_idle": "노린재 소리를 냅니다", "subtitles.antarchy.rolly_polly_idle": "공벌레 소리를 냅니다", @@ -944,10 +949,10 @@ "subtitles.antarchy.jerry_hurt": "제리가 다칩니다", "subtitles.antarchy.jerry_death": "제리가 죽습니다", "subtitles.antarchy.jerry_attack": "제리가 공격합니다", - "subtitles.antarchy.jumpy_bug_idle": "점피 벌레 소리를 냅니다", + "subtitles.antarchy.springbug_idle": "점피 벌레 소리를 냅니다", "subtitles.antarchy.spit_bug_idle": "스핏 벌레 소리를 냅니다", - "subtitles.antarchy.jumpy_bug_hurt": "점피 벌레 다칩니다", - "subtitles.antarchy.jumpy_bug_jump": "점피 벌레 뜁니다", + "subtitles.antarchy.springbug_hurt": "점피 벌레 다칩니다", + "subtitles.antarchy.springbug_jump": "점피 벌레 뜁니다", "subtitles.antarchy.spit_bug_hurt": "스핏 벌레 다칩니다", "subtitles.antarchy.spit_bug_spit": "스핏 벌레 뱉습니다", "subtitles.antarchy.brutalfly_spit": "브루털플라이 뱉습니다", diff --git a/common-1.20.1/src/main/resources/assets/antarchy/lang/pt_br.json b/common-1.20.1/src/main/resources/assets/antarchy/lang/pt_br.json index 5cbb150e..55cf70c9 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/lang/pt_br.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/lang/pt_br.json @@ -90,7 +90,7 @@ "block.antarchy.pale_nyxite": "Nyxite pálido", "block.antarchy.nyxite_spike": "Espinho de Nyxite", "block.antarchy.potent_nyxite": "Nyxite potente", - "block.antarchy.triffid_goo_block": "Bloco de Triffid Gosma", + "block.antarchy.flytrap_goo_block": "Bloco de Flytrap Gosma", "block.antarchy.elythia_portal": "Portal de Elythia", "block.antarchy.cloud_block": "Bloco de Nuvem", "block.antarchy.thoraxis_portal": "Portal de Thoraxis", @@ -181,7 +181,7 @@ "entity.antarchy.rainbow_ant": "Formiga Arco-íris", "entity.antarchy.diamond_minecart": "O Carrinho de Diamante", "entity.antarchy.dr_trayaurus": "Dr. Trayaurus", - "entity.antarchy.cloud_shark": "Tubarão das Nuvens", + "entity.antarchy.stratoshark": "Tubarão das Nuvens", "entity.antarchy.kraken": "O Kraken", "entity.antarchy.missile_squid": "Lula-Míssil", "entity.antarchy.octopus_bomb": "Bomba-Polvo", @@ -193,7 +193,7 @@ "entity.antarchy.molevore": "Molevore", "entity.antarchy.mantis": "Louva-a-deus", "entity.antarchy.alpha_mantis": "Louva-a-deus Alfa", - "entity.antarchy.triffid": "Triffid", + "entity.antarchy.flytrap": "Flytrap", "entity.antarchy.toreterror": "Toreterror", "entity.antarchy.water_bomb": "Bomba d’Água", "subtitles.antarchy.mantis_ambient": "Louva-a-deus estala", @@ -212,9 +212,9 @@ "item.antarchy.attitude_adjuster": "Ajustador de Atitude", "tooltip.antarchy.attitude_adjuster.grounded": "Arremessa alvos no chão para cima e lança alvos no ar contra o chão.", "tooltip.antarchy.attitude_adjuster.slam": "Clique com o botão direito no ar para golpear o chão.", - "item.antarchy.cloud_shark_fin": "Barbatana de Tubarão das Nuvens", - "item.antarchy.cloud_shark_fin_soup": "Sopa de Barbatana de Tubarão das Nuvens", - "tooltip.antarchy.cloud_shark_fin_soup": "Concede Força e Queda Lenta.", + "item.antarchy.stratoshark_fin": "Barbatana de Tubarão das Nuvens", + "item.antarchy.stratoshark_fin_soup": "Sopa de Barbatana de Tubarão das Nuvens", + "tooltip.antarchy.stratoshark_fin_soup": "Concede Força e Queda Lenta.", "tooltip.antarchy.critter_cage.empty": "Clique com o botão direito para arremessar", "tooltip.antarchy.critter_cage.contains": "Contém: %s", "tooltip.antarchy.critter_cage.release": "Clique com o botão direito para soltar", @@ -263,7 +263,7 @@ "attribute.antarchy.bloodglass_max_hearts": "Máximo de Corações de Vidro de Sangue", "item.antarchy.molevore_nose": "Nariz de Molevore", "item.antarchy.moleworm": "Moleworm", - "item.antarchy.triffid_spawn_egg": "Ovo Gerador de Triffid", + "item.antarchy.flytrap_spawn_egg": "Ovo Gerador de Flytrap", "item.antarchy.infested_rooted_dirt": "Enraizada Terra infestado", "item.antarchy.infested_coarse_dirt": "Estéril Terra infestado", "item.antarchy.pale_nyxite": "Nyxite pálido", @@ -352,9 +352,9 @@ "tooltip.antarchy.mantis_claw.wall_cling": "Dual wield to cling to walls and jump upward.", "item.antarchy.king_scale": "Escama de Rei", "item.antarchy.queen_scale": "Escama de Rainha", - "item.antarchy.jumpy_bug_leg": "Perna de Inseto Saltador", - "item.antarchy.jumpy_boots": "Botas Saltadoras", - "tooltip.antarchy.jumpy_boots": "Agache-se para carregar e depois pule para saltar para cima.", + "item.antarchy.springbug_leg": "Perna de Inseto Saltador", + "item.antarchy.springy_boots": "Botas Saltadoras", + "tooltip.antarchy.springy_boots": "Agache-se para carregar e depois pule para saltar para cima.", "item.antarchy.brutalfly_wing": "Asa de Brutalfly", "item.antarchy.brutalfly_elytra": "Élitros de Brutalfly", "tooltip.antarchy.brutalfly_elytra.flap": "Enquanto voa, segure %s para bater as asas", @@ -368,9 +368,9 @@ "item.antarchy.american_name": "%s Americano", "item.antarchy.root_beer": "Root Beer", "item.antarchy.primordial_scute": "Escama de Primordial", - "item.antarchy.triffid_goo": "Triffid Gosma", - "item.antarchy.triffid_goo_block": "Bloco de Triffid Gosma", - "tooltip.antarchy.triffid_goo_block": "Em alta velocidade, você quica para cima; caso contrário, afunda.", + "item.antarchy.flytrap_goo": "Flytrap Gosma", + "item.antarchy.flytrap_goo_block": "Bloco de Flytrap Gosma", + "tooltip.antarchy.flytrap_goo_block": "Em alta velocidade, você quica para cima; caso contrário, afunda.", "item.antarchy.cloud_bucket": "Balde de Nuvem", "tooltip.antarchy.cloud_bucket.midair": "Pode ser colocado no ar", "item.antarchy.lumen_bucket": "Balde de Lumen", @@ -380,7 +380,7 @@ "tooltip.antarchy.scorpion_whip.snap": "Clique com o botão esquerdo novamente na presa presa para arrancar o ferrão.", "item.antarchy.fallen_king_crown": "Coroa do Rei Caído", "tooltip.antarchy.fallen_king_crown.hero": "Concede Herói da Vila ao matar criaturas hostis", - "item.antarchy.vortex_eye": "Olho de Vórtice", + "item.antarchy.vortex_charge": "Vortex Charge", "item.antarchy.ultimate_helmet": "Capacete Supremo", "item.antarchy.ultimate_chestplate": "Peitoral Supremo", "item.antarchy.ultimate_leggings": "Calças Supremas", @@ -474,7 +474,7 @@ "item.antarchy.caterpillar_spawn_egg": "Ovo Gerador de Lagarta", "item.antarchy.butterfly_spawn_egg": "Ovo Gerador de Borboleta", "item.antarchy.brutalfly_spawn_egg": "Ovo Gerador de Brutalfly", - "item.antarchy.cloud_shark_spawn_egg": "Ovo Gerador de Tubarão das Nuvens", + "item.antarchy.stratoshark_spawn_egg": "Ovo Gerador de Tubarão das Nuvens", "item.antarchy.kraken_spawn_egg": "Ah, não. Não faça isso.", "item.antarchy.missile_squid_spawn_egg": "Ovo Gerador de Lula-Míssil", "item.antarchy.octopus_bomb_spawn_egg": "Ovo Gerador de Bomba-Polvo", @@ -512,7 +512,7 @@ "message.antarchy.termite_activated": "O cupim está pronto para abrir seu destino.", "message.antarchy.termite_needs_reagent": "Este cupim precisa de um reagente antes de abrir seu destino.", "death.attack.spit_bug_disrespect": "%1$s foi desrespeitado pelo Inseto Cuspidor", - "death.attack.jumpy_bug_jump": "%1$s foi atacado de salto pelo Inseto Saltador", + "death.attack.springbug_jump": "%1$s foi atacado de salto pelo Inseto Saltador", "death.attack.hercules_beetle_obliteration": "%1$s foi obliterado pelo Besouro-hércules", "message.antarchy.big_bertha.mode": "Modo da Big Bertha: %s", "message.antarchy.big_bertha.mode.basilisk": "Basilisco", @@ -533,6 +533,8 @@ "effect.antarchy.paralyzed.description": "Impede que os alvos se movam.", "effect.antarchy.inverted": "Invertido", "effect.antarchy.inverted.description": "Inverte a gravidade do alvo.", + "effect.antarchy.commanded.description": "Luta pelo jogador que o comandou.", + "effect.antarchy.dilated.description": "Diminui a passagem do tempo para a entidade afetada.", "effect.antarchy.stinky": "Fedido", "effect.antarchy.stinky.description": "Afasta mobs passivos e neutros e atrai artrópodes.", "effect.antarchy.gooped.description": "Reduz a velocidade de movimento e de ataque.", @@ -540,10 +542,10 @@ "effect.antarchy.growth": "Crescimento", "effect.antarchy.bloodglass_ward": "Guarda de Vidro de Sangue", "effect.antarchy.bloodglass_ward.description": "Concede corações que se estilhaçam, absorvendo um golpe inteiro de dano. Eles se regeneram com o tempo.", - "death.attack.triffid_mauling": "%1$s foi dilacerado até a morte por uma planta", - "death.attack.triffid_mauling.player": "%1$s foi dilacerado até a morte por uma planta", - "death.attack.triffid_swallow": "%1$s foi engolido por um Triffid", - "death.attack.triffid_swallow.player": "%1$s foi engolido por um Triffid", + "death.attack.flytrap_mauling": "%1$s foi dilacerado até a morte por uma planta", + "death.attack.flytrap_mauling.player": "%1$s foi dilacerado até a morte por uma planta", + "death.attack.flytrap_swallow": "%1$s foi engolido por um Flytrap", + "death.attack.flytrap_swallow.player": "%1$s foi engolido por um Flytrap", "potion.antarchy.haste": "Poção de Pressa", "potion.antarchy.strong_haste": "Poção Forte de Pressa", "tooltip.antarchy.big_bertha.mode": "Modo: %s", @@ -660,11 +662,11 @@ "subtitles.antarchy.ant_bite": "Formigas mordem", "subtitles.antarchy.ant_gather": "Formigas coletam", "subtitles.antarchy.ant_nest": "Ninho de formigas farfalha", - "subtitles.antarchy.cloud_shark_bite": "Tubarão das Nuvens morde", - "subtitles.antarchy.cloud_shark_idle": "Tubarão das Nuvens faz barulho", - "subtitles.antarchy.cloud_shark_hurt": "Tubarão das Nuvens se machuca", - "subtitles.antarchy.cloud_shark_death": "Tubarão das Nuvens morre", - "subtitles.antarchy.cloud_shark_fly": "Tubarão das Nuvens voa", + "subtitles.antarchy.stratoshark_bite": "Tubarão das Nuvens morde", + "subtitles.antarchy.stratoshark_idle": "Tubarão das Nuvens faz barulho", + "subtitles.antarchy.stratoshark_hurt": "Tubarão das Nuvens se machuca", + "subtitles.antarchy.stratoshark_death": "Tubarão das Nuvens morre", + "subtitles.antarchy.stratoshark_fly": "Tubarão das Nuvens voa", "subtitles.antarchy.caterpillar_idle": "Lagarta faz barulho", "subtitles.antarchy.caterpillar_hurt": "Lagarta se machuca", "subtitles.antarchy.caterpillar_crawl": "Lagarta rasteja", @@ -704,17 +706,20 @@ "subtitles.antarchy.nightmare_death": "Pesadelo morre", "subtitles.antarchy.nightmare_bite": "Pesadelo morde", "subtitles.antarchy.nightmare_flap": "Pesadelo bate as asas", - "subtitles.antarchy.triffid_attack": "Triffid ataca", - "subtitles.antarchy.triffid_grab": "Triffid agarra", - "subtitles.antarchy.triffid_hurt": "Triffid se machuca", - "subtitles.antarchy.triffid_death": "Triffid morre", - "subtitles.antarchy.triffid_hiss": "Triffid sibila", - "subtitles.antarchy.triffid_growl": "Triffid rosna", + "subtitles.antarchy.flytrap_attack": "Flytrap ataca", + "subtitles.antarchy.flytrap_grab": "Flytrap agarra", + "subtitles.antarchy.flytrap_hurt": "Flytrap se machuca", + "subtitles.antarchy.flytrap_death": "Flytrap morre", + "subtitles.antarchy.flytrap_hiss": "Flytrap sibila", + "subtitles.antarchy.flytrap_growl": "Flytrap rosna", "subtitles.antarchy.gravity_gun_pickup": "Arma Gravitacional pega", "subtitles.antarchy.gravity_gun_drop": "Arma Gravitacional solta", "subtitles.antarchy.gravity_gun_hold_loop": "Arma Gravitacional zune", "subtitles.antarchy.gravity_gun_launch": "Arma Gravitacional lança", "subtitles.antarchy.gravity_gun_dryfire": "Arma Gravitacional dispara em seco", + "subtitles.antarchy.antimetal_place": "Antimetal retine", + "subtitles.antarchy.antimetal_step": "Antimetal tilinta", + "subtitles.antarchy.antimetal_scaffold": "Andaime de antimetal chacoalha", "subtitles.antarchy.bed_bug_ambient": "Percevejo-de-cama chilreia", "subtitles.antarchy.bed_bug_hurt": "Percevejo-de-cama se machuca", "subtitles.antarchy.bed_bug_attack": "Percevejo-de-cama morde", @@ -877,23 +882,23 @@ "block.antarchy.amber_lichen": "Líquen Âmbar", "block.antarchy.bile_vein": "Veio de Bile", "block.antarchy.creepvine": "Trepadeira Rastejante", - "block.antarchy.creeping_horror_egg": "Ovo de Horror Rastejante", - "block.antarchy.lurking_terror_egg": "Ovo de Terror à Espreita", + "block.antarchy.crawling_blight_egg": "Ovo de Horror Rastejante", + "block.antarchy.skulking_fright_egg": "Ovo de Terror à Espreita", "entity.antarchy.termite": "Cupim", - "entity.antarchy.jumpy_bug": "Inseto Saltador", + "entity.antarchy.springbug": "Inseto Saltador", "entity.antarchy.spit_bug": "Inseto Cuspidor", "entity.antarchy.stink_bug": "Percevejo-fedorento", "entity.antarchy.rolly_polly": "Tatuzinho-de-jardim", - "entity.antarchy.creeping_horror": "Horror Rastejante", - "entity.antarchy.lurking_terror": "Terror à Espreita", + "entity.antarchy.crawling_blight": "Horror Rastejante", + "entity.antarchy.skulking_fright": "Terror à Espreita", "entity.antarchy.hercules_beetle": "Besouro-hércules", - "item.antarchy.jumpy_bug_spawn_egg": "Ovo Gerador de Inseto Saltador", + "item.antarchy.springbug_spawn_egg": "Ovo Gerador de Inseto Saltador", "item.antarchy.spit_bug_spawn_egg": "Ovo Gerador de Inseto Cuspidor", "item.antarchy.stink_bug_spawn_egg": "Ovo Gerador de Percevejo-fedorento", "item.antarchy.termite_spawn_egg": "Ovo Gerador de Cupim", "item.antarchy.rolly_polly_spawn_egg": "Ovo Gerador de Tatuzinho-de-jardim", - "item.antarchy.creeping_horror_spawn_egg": "Ovo Gerador de Horror Rastejante", - "item.antarchy.lurking_terror_spawn_egg": "Ovo Gerador de Terror à Espreita", + "item.antarchy.crawling_blight_spawn_egg": "Ovo Gerador de Horror Rastejante", + "item.antarchy.skulking_fright_spawn_egg": "Ovo Gerador de Terror à Espreita", "item.antarchy.hercules_beetle_spawn_egg": "Ovo Gerador de Besouro-hércules", "item.antarchy.chitin": "Quitina", "block.antarchy.polished_broodstone": "Broodstone polido", @@ -920,14 +925,14 @@ "block.antarchy.glowcap_mushroom_block": "Bloco de Cogumelo Brilhachapéu", "block.antarchy.molting_vines": "Trepadeiras de Muda", "item.antarchy.broodfruit": "Fruto da Ninhada", - "block.antarchy.jumpy_bug_egg": "Ovo de Inseto Saltador", - "subtitles.antarchy.creeping_horror_growl": "Horror Rastejante rosna", - "subtitles.antarchy.creeping_horror_hurt": "Horror Rastejante se machuca", - "subtitles.antarchy.creeping_horror_bite": "Horror Rastejante morde", - "subtitles.antarchy.lurking_terror_snarl": "Terror à Espreita rosna", - "subtitles.antarchy.lurking_terror_hurt": "Terror à Espreita se machuca", - "subtitles.antarchy.lurking_terror_bite": "Terror à Espreita morde", - "subtitles.antarchy.lurking_terror_fly_loop": "Terror à Espreita voa", + "block.antarchy.springbug_egg": "Ovo de Inseto Saltador", + "subtitles.antarchy.crawling_blight_growl": "Horror Rastejante rosna", + "subtitles.antarchy.crawling_blight_hurt": "Horror Rastejante se machuca", + "subtitles.antarchy.crawling_blight_bite": "Horror Rastejante morde", + "subtitles.antarchy.skulking_fright_snarl": "Terror à Espreita rosna", + "subtitles.antarchy.skulking_fright_hurt": "Terror à Espreita se machuca", + "subtitles.antarchy.skulking_fright_bite": "Terror à Espreita morde", + "subtitles.antarchy.skulking_fright_fly_loop": "Terror à Espreita voa", "subtitles.antarchy.stink_bug_fart": "Percevejo-fedorento solta pum", "subtitles.antarchy.stink_bug_idle": "Percevejo-fedorento faz barulho", "subtitles.antarchy.rolly_polly_idle": "Tatuzinho-de-jardim faz barulho", @@ -944,10 +949,10 @@ "subtitles.antarchy.jerry_hurt": "Jerry se machuca", "subtitles.antarchy.jerry_death": "Jerry morre", "subtitles.antarchy.jerry_attack": "Jerry ataca", - "subtitles.antarchy.jumpy_bug_idle": "Inseto Saltador faz barulho", + "subtitles.antarchy.springbug_idle": "Inseto Saltador faz barulho", "subtitles.antarchy.spit_bug_idle": "Inseto Cuspidor faz barulho", - "subtitles.antarchy.jumpy_bug_hurt": "Inseto Saltador se machuca", - "subtitles.antarchy.jumpy_bug_jump": "Inseto Saltador salta", + "subtitles.antarchy.springbug_hurt": "Inseto Saltador se machuca", + "subtitles.antarchy.springbug_jump": "Inseto Saltador salta", "subtitles.antarchy.spit_bug_hurt": "Inseto Cuspidor se machuca", "subtitles.antarchy.spit_bug_spit": "Inseto Cuspidor cospe", "subtitles.antarchy.brutalfly_spit": "Brutalfly cospe", diff --git a/common-1.20.1/src/main/resources/assets/antarchy/lang/ru_ru.json b/common-1.20.1/src/main/resources/assets/antarchy/lang/ru_ru.json index 06b5d4fe..1bc3167c 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/lang/ru_ru.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/lang/ru_ru.json @@ -84,7 +84,7 @@ "block.antarchy.pale_nyxite": "Бледный никсит", "block.antarchy.nyxite_spike": "Никситовый шип", "block.antarchy.potent_nyxite": "Насыщенный никсит", - "block.antarchy.triffid_goo_block": "Блок слизи триффида", + "block.antarchy.flytrap_goo_block": "Блок слизи триффида", "block.antarchy.elythia_portal": "Портал в Элитию", "block.antarchy.cloud_block": "Облачный блок", "block.antarchy.thoraxis_portal": "Портал в Тораксис", @@ -170,7 +170,7 @@ "entity.antarchy.rainbow_ant": "Радужный муравей", "entity.antarchy.diamond_minecart": "Алмазная вагонетка", "entity.antarchy.dr_trayaurus": "Доктор Траяурус", - "entity.antarchy.cloud_shark": "Облачная акула", + "entity.antarchy.stratoshark": "Облачная акула", "entity.antarchy.kraken": "Кракен", "entity.antarchy.missile_squid": "Кальмар-ракета", "entity.antarchy.octopus_bomb": "Осьминог-бомба", @@ -182,7 +182,7 @@ "entity.antarchy.molevore": "Кротожор", "entity.antarchy.mantis": "Богомол", "entity.antarchy.alpha_mantis": "Альфа-богомол", - "entity.antarchy.triffid": "Триффид", + "entity.antarchy.flytrap": "Триффид", "entity.antarchy.toreterror": "Тортеррор", "entity.antarchy.water_bomb": "Водяная бомба", "subtitles.antarchy.mantis_ambient": "Богомол щёлкает", @@ -198,9 +198,9 @@ "item.antarchy.big_bertha_handle": "Рукоять Большой Берты", "item.antarchy.big_bertha_hilt": "Эфес Большой Берты", "item.antarchy.battle_axe": "Боевой топор", - "item.antarchy.cloud_shark_fin": "Плавник облачной акулы", - "item.antarchy.cloud_shark_fin_soup": "Суп из плавников облачной акулы", - "tooltip.antarchy.cloud_shark_fin_soup": "Даёт Силу и Плавное падение.", + "item.antarchy.stratoshark_fin": "Плавник облачной акулы", + "item.antarchy.stratoshark_fin_soup": "Суп из плавников облачной акулы", + "tooltip.antarchy.stratoshark_fin_soup": "Даёт Силу и Плавное падение.", "item.antarchy.kraken_tooth": "Зуб кракена", "item.antarchy.basilisk_fang": "Клык василиска", "item.antarchy.basilisk_dagger": "Кинжал василиска", @@ -240,7 +240,7 @@ "attribute.antarchy.bloodglass_max_hearts": "Макс. сердец кровавого стекла", "item.antarchy.molevore_nose": "Нос кротожора", "item.antarchy.moleworm": "Кроточервь", - "item.antarchy.triffid_spawn_egg": "Яйцо призыва триффида", + "item.antarchy.flytrap_spawn_egg": "Яйцо призыва триффида", "item.antarchy.infested_rooted_dirt": "Заражённая корнями земля", "item.antarchy.infested_coarse_dirt": "Заражённая каменистая земля", "item.antarchy.pale_nyxite": "Бледный никсит", @@ -329,9 +329,9 @@ "tooltip.antarchy.mantis_claw.wall_cling": "Dual wield to cling to walls and jump upward.", "item.antarchy.king_scale": "Чешуйка короля", "item.antarchy.queen_scale": "Чешуйка королевы", - "item.antarchy.jumpy_bug_leg": "Ножка прыгучего жука", - "item.antarchy.jumpy_boots": "Прыгучие ботинки", - "tooltip.antarchy.jumpy_boots": "Зажмите Shift, чтобы зарядить, затем прыгните, чтобы взмыть вверх.", + "item.antarchy.springbug_leg": "Ножка прыгучего жука", + "item.antarchy.springy_boots": "Прыгучие ботинки", + "tooltip.antarchy.springy_boots": "Зажмите Shift, чтобы зарядить, затем прыгните, чтобы взмыть вверх.", "item.antarchy.brutalfly_wing": "Крыло жестококрыла", "item.antarchy.brutalfly_elytra": "Элитры жестококрыла", "tooltip.antarchy.brutalfly_elytra.flap": "Во время полёта зажмите %s, чтобы махать крыльями", @@ -345,9 +345,9 @@ "item.antarchy.american_name": "Американский %s", "item.antarchy.root_beer": "Рутбир", "item.antarchy.primordial_scute": "Первобытный щиток", - "item.antarchy.triffid_goo": "Слизь триффида", - "item.antarchy.triffid_goo_block": "Блок слизи триффида", - "tooltip.antarchy.triffid_goo_block": "При высокой скорости отталкивает вверх, иначе засасывает.", + "item.antarchy.flytrap_goo": "Слизь триффида", + "item.antarchy.flytrap_goo_block": "Блок слизи триффида", + "tooltip.antarchy.flytrap_goo_block": "При высокой скорости отталкивает вверх, иначе засасывает.", "item.antarchy.cloud_bucket": "Ведро облаков", "tooltip.antarchy.cloud_bucket.midair": "Можно разместить прямо в воздухе", "item.antarchy.lumen_bucket": "Ведро люмена", @@ -357,7 +357,7 @@ "tooltip.antarchy.scorpion_whip.snap": "Нажмите ЛКМ по привязанной добыче, чтобы вырвать жало.", "item.antarchy.fallen_king_crown": "Корона павшего короля", "tooltip.antarchy.fallen_king_crown.hero": "Даёт эффект «Герой деревни» при убийстве враждебных мобов", - "item.antarchy.vortex_eye": "Око вихря", + "item.antarchy.vortex_charge": "Vortex Charge", "item.antarchy.ultimate_helmet": "Ультимативный шлем", "item.antarchy.ultimate_chestplate": "Ультимативный нагрудник", "item.antarchy.ultimate_leggings": "Ультимативные поножи", @@ -450,7 +450,7 @@ "item.antarchy.caterpillar_spawn_egg": "Яйцо призыва гусеницы", "item.antarchy.butterfly_spawn_egg": "Яйцо призыва бабочки", "item.antarchy.brutalfly_spawn_egg": "Яйцо призыва жестококрыла", - "item.antarchy.cloud_shark_spawn_egg": "Яйцо призыва облачной акулы", + "item.antarchy.stratoshark_spawn_egg": "Яйцо призыва облачной акулы", "item.antarchy.kraken_spawn_egg": "Ох, нет. Не стоит.", "item.antarchy.missile_squid_spawn_egg": "Яйцо призыва кальмара-ракеты", "item.antarchy.octopus_bomb_spawn_egg": "Яйцо призыва осьминога-бомбы", @@ -504,6 +504,8 @@ "effect.antarchy.paralyzed.description": "Не дает целям двигаться.", "effect.antarchy.inverted": "Инверсия", "effect.antarchy.inverted.description": "Инвертирует гравитацию цели.", + "effect.antarchy.commanded.description": "Сражается за игрока, который им командует.", + "effect.antarchy.dilated.description": "Замедляет течение времени для существа под действием эффекта.", "effect.antarchy.stinky": "Вонючесть", "effect.antarchy.stinky.description": "Отпугивает мирных и нейтральных мобов, но притягивает членистоногих.", "effect.antarchy.gooped.description": "Замедляет движение и скорость атаки.", @@ -511,10 +513,10 @@ "effect.antarchy.growth": "Увеличение", "effect.antarchy.bloodglass_ward": "Защита кровавого стекла", "effect.antarchy.bloodglass_ward.description": "Дает сердца, которые разбиваются и полностью поглощают один удар. Со временем они восстанавливаются.", - "death.attack.triffid_mauling": "%1$s был растерзан растением", - "death.attack.triffid_mauling.player": "%1$s был растерзан растением", - "death.attack.triffid_swallow": "%1$s был проглочен триффидом", - "death.attack.triffid_swallow.player": "%1$s был проглочен триффидом", + "death.attack.flytrap_mauling": "%1$s был растерзан растением", + "death.attack.flytrap_mauling.player": "%1$s был растерзан растением", + "death.attack.flytrap_swallow": "%1$s был проглочен триффидом", + "death.attack.flytrap_swallow.player": "%1$s был проглочен триффидом", "potion.antarchy.haste": "Зелье спешки", "potion.antarchy.strong_haste": "Мощное зелье спешки", "tooltip.antarchy.big_bertha.mode": "Режим: %s", @@ -629,11 +631,11 @@ "subtitles.antarchy.ant_bite": "Муравьи кусают", "subtitles.antarchy.ant_gather": "Муравьи собираются", "subtitles.antarchy.ant_nest": "Муравейник шуршит", - "subtitles.antarchy.cloud_shark_bite": "Облачная акула кусает", - "subtitles.antarchy.cloud_shark_idle": "Облачная акула парит", - "subtitles.antarchy.cloud_shark_hurt": "Облачной акуле больно", - "subtitles.antarchy.cloud_shark_death": "Облачная акула умирает", - "subtitles.antarchy.cloud_shark_fly": "Облачная акула летит", + "subtitles.antarchy.stratoshark_bite": "Облачная акула кусает", + "subtitles.antarchy.stratoshark_idle": "Облачная акула парит", + "subtitles.antarchy.stratoshark_hurt": "Облачной акуле больно", + "subtitles.antarchy.stratoshark_death": "Облачная акула умирает", + "subtitles.antarchy.stratoshark_fly": "Облачная акула летит", "subtitles.antarchy.caterpillar_idle": "Гусеница шевелится", "subtitles.antarchy.caterpillar_hurt": "Гусенице больно", "subtitles.antarchy.caterpillar_crawl": "Гусеница ползёт", @@ -673,17 +675,20 @@ "subtitles.antarchy.nightmare_death": "Кошмар умирает", "subtitles.antarchy.nightmare_bite": "Кошмар кусает", "subtitles.antarchy.nightmare_flap": "Кошмар машет крыльями", - "subtitles.antarchy.triffid_attack": "Триффид атакует", - "subtitles.antarchy.triffid_grab": "Триффид хватает", - "subtitles.antarchy.triffid_hurt": "Триффиду больно", - "subtitles.antarchy.triffid_death": "Триффид умирает", - "subtitles.antarchy.triffid_hiss": "Триффид шипит", - "subtitles.antarchy.triffid_growl": "Триффид урчит", + "subtitles.antarchy.flytrap_attack": "Триффид атакует", + "subtitles.antarchy.flytrap_grab": "Триффид хватает", + "subtitles.antarchy.flytrap_hurt": "Триффиду больно", + "subtitles.antarchy.flytrap_death": "Триффид умирает", + "subtitles.antarchy.flytrap_hiss": "Триффид шипит", + "subtitles.antarchy.flytrap_growl": "Триффид урчит", "subtitles.antarchy.gravity_gun_pickup": "Пушка притягивает", "subtitles.antarchy.gravity_gun_drop": "Пушка отпускает", "subtitles.antarchy.gravity_gun_hold_loop": "Пушка гудит", "subtitles.antarchy.gravity_gun_launch": "Пушка стреляет", "subtitles.antarchy.gravity_gun_dryfire": "Осечка пушки", + "subtitles.antarchy.antimetal_place": "Антиметалл звенит", + "subtitles.antarchy.antimetal_step": "Антиметалл щёлкает", + "subtitles.antarchy.antimetal_scaffold": "Антиметаллические леса гремят", "subtitles.antarchy.bed_bug_ambient": "Постельный клоп стрекочет", "subtitles.antarchy.bed_bug_hurt": "Постельному клопу больно", "subtitles.antarchy.bed_bug_attack": "Постельный клоп кусает", diff --git a/common-1.20.1/src/main/resources/assets/antarchy/lang/zh_cn.json b/common-1.20.1/src/main/resources/assets/antarchy/lang/zh_cn.json index 36d52d16..bde52c13 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/lang/zh_cn.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/lang/zh_cn.json @@ -90,7 +90,7 @@ "block.antarchy.pale_nyxite": "苍白尼克赛特", "block.antarchy.nyxite_spike": "尼克赛特尖刺", "block.antarchy.potent_nyxite": "强效尼克赛特", - "block.antarchy.triffid_goo_block": "特里菲德 黏液块", + "block.antarchy.flytrap_goo_block": "特里菲德 黏液块", "block.antarchy.elythia_portal": "艾莉提娅传送门", "block.antarchy.cloud_block": "云块", "block.antarchy.thoraxis_portal": "索尔阿克西斯传送门", @@ -181,7 +181,7 @@ "entity.antarchy.rainbow_ant": "彩虹蚂蚁", "entity.antarchy.diamond_minecart": "钻石矿车", "entity.antarchy.dr_trayaurus": "特雷奥勒斯博士", - "entity.antarchy.cloud_shark": "云鲨", + "entity.antarchy.stratoshark": "云鲨", "entity.antarchy.kraken": "克拉肯", "entity.antarchy.missile_squid": "导弹鱿鱼", "entity.antarchy.octopus_bomb": "章鱼炸弹", @@ -193,7 +193,7 @@ "entity.antarchy.molevore": "莫尔沃尔", "entity.antarchy.mantis": "螳螂", "entity.antarchy.alpha_mantis": "阿尔法螳螂", - "entity.antarchy.triffid": "特里菲德", + "entity.antarchy.flytrap": "特里菲德", "entity.antarchy.toreterror": "托尔泰罗尔", "entity.antarchy.water_bomb": "水炸弹", "subtitles.antarchy.mantis_ambient": "螳螂发出咔嗒声", @@ -212,9 +212,9 @@ "item.antarchy.attitude_adjuster": "态度调整锤", "tooltip.antarchy.attitude_adjuster.grounded": "将地面上的目标击飞,并把空中的目标砸向地面。", "tooltip.antarchy.attitude_adjuster.slam": "在空中右键可发动落地重击。", - "item.antarchy.cloud_shark_fin": "云鲨鳍", - "item.antarchy.cloud_shark_fin_soup": "云鲨鳍汤", - "tooltip.antarchy.cloud_shark_fin_soup": "获得力量与缓降。", + "item.antarchy.stratoshark_fin": "云鲨鳍", + "item.antarchy.stratoshark_fin_soup": "云鲨鳍汤", + "tooltip.antarchy.stratoshark_fin_soup": "获得力量与缓降。", "tooltip.antarchy.critter_cage.empty": "右键投掷", "tooltip.antarchy.critter_cage.contains": "装有:%s", "tooltip.antarchy.critter_cage.release": "右键释放", @@ -263,7 +263,7 @@ "attribute.antarchy.bloodglass_max_hearts": "血晶之心上限", "item.antarchy.molevore_nose": "莫尔沃尔鼻子", "item.antarchy.moleworm": "莫尔沃姆", - "item.antarchy.triffid_spawn_egg": "特里菲德刷怪蛋", + "item.antarchy.flytrap_spawn_egg": "特里菲德刷怪蛋", "item.antarchy.infested_rooted_dirt": "虫蚀缠根 泥土", "item.antarchy.infested_coarse_dirt": "虫蚀砂土 泥土", "item.antarchy.pale_nyxite": "苍白尼克赛特", @@ -352,9 +352,9 @@ "tooltip.antarchy.mantis_claw.wall_cling": "Dual wield to cling to walls and jump upward.", "item.antarchy.king_scale": "国王鳞片", "item.antarchy.queen_scale": "女王鳞片", - "item.antarchy.jumpy_bug_leg": "跳跳虫腿", - "item.antarchy.jumpy_boots": "弹跳靴", - "tooltip.antarchy.jumpy_boots": "潜行蓄力,然后跳跃即可向上弹射。", + "item.antarchy.springbug_leg": "跳跳虫腿", + "item.antarchy.springy_boots": "弹跳靴", + "tooltip.antarchy.springy_boots": "潜行蓄力,然后跳跃即可向上弹射。", "item.antarchy.brutalfly_wing": "布鲁塔尔弗莱翼", "item.antarchy.brutalfly_elytra": "布鲁塔尔弗莱鞘翅", "tooltip.antarchy.brutalfly_elytra.flap": "飞行时按住%s拍动翅膀", @@ -368,9 +368,9 @@ "item.antarchy.american_name": "美式%s", "item.antarchy.root_beer": "根汁汽水", "item.antarchy.primordial_scute": "原初甲片", - "item.antarchy.triffid_goo": "特里菲德 黏液", - "item.antarchy.triffid_goo_block": "特里菲德 黏液块", - "tooltip.antarchy.triffid_goo_block": "高速接触时会向上弹起,否则会沉入其中。", + "item.antarchy.flytrap_goo": "特里菲德 黏液", + "item.antarchy.flytrap_goo_block": "特里菲德 黏液块", + "tooltip.antarchy.flytrap_goo_block": "高速接触时会向上弹起,否则会沉入其中。", "item.antarchy.cloud_bucket": "云桶", "tooltip.antarchy.cloud_bucket.midair": "可放置在空中", "item.antarchy.lumen_bucket": "卢门桶", @@ -380,7 +380,7 @@ "tooltip.antarchy.scorpion_whip.snap": "再次左键被牵住的猎物可扯出毒刺。", "item.antarchy.fallen_king_crown": "陨落之王的王冠", "tooltip.antarchy.fallen_king_crown.hero": "击杀敌对生物时获得村庄英雄", - "item.antarchy.vortex_eye": "漩涡之眼", + "item.antarchy.vortex_charge": "Vortex Charge", "item.antarchy.ultimate_helmet": "终极头盔", "item.antarchy.ultimate_chestplate": "终极胸甲", "item.antarchy.ultimate_leggings": "终极护腿", @@ -474,7 +474,7 @@ "item.antarchy.caterpillar_spawn_egg": "毛毛虫刷怪蛋", "item.antarchy.butterfly_spawn_egg": "蝴蝶刷怪蛋", "item.antarchy.brutalfly_spawn_egg": "布鲁塔尔弗莱刷怪蛋", - "item.antarchy.cloud_shark_spawn_egg": "云鲨刷怪蛋", + "item.antarchy.stratoshark_spawn_egg": "云鲨刷怪蛋", "item.antarchy.kraken_spawn_egg": "呃,不。别这样。", "item.antarchy.missile_squid_spawn_egg": "导弹鱿鱼刷怪蛋", "item.antarchy.octopus_bomb_spawn_egg": "章鱼炸弹刷怪蛋", @@ -512,7 +512,7 @@ "message.antarchy.termite_activated": "白蚁已准备好开启目的地。", "message.antarchy.termite_needs_reagent": "这只白蚁需要试剂才能开启目的地。", "death.attack.spit_bug_disrespect": "%1$s遭到了喷吐虫的羞辱", - "death.attack.jumpy_bug_jump": "%1$s被跳跳虫扑倒了", + "death.attack.springbug_jump": "%1$s被跳跳虫扑倒了", "death.attack.hercules_beetle_obliteration": "%1$s被赫拉克勒斯甲虫彻底摧毁", "message.antarchy.big_bertha.mode": "大贝莎模式:%s", "message.antarchy.big_bertha.mode.basilisk": "蛇怪", @@ -533,6 +533,8 @@ "effect.antarchy.paralyzed.description": "阻止目标移动。", "effect.antarchy.inverted": "反转", "effect.antarchy.inverted.description": "反转目标的重力。", + "effect.antarchy.commanded.description": "为命令它的玩家而战。", + "effect.antarchy.dilated.description": "减缓受影响生物的时间流逝。", "effect.antarchy.stinky": "臭气", "effect.antarchy.stinky.description": "驱赶被动和中立生物,吸引节肢生物。", "effect.antarchy.gooped.description": "减缓移动速度和攻击速度。", @@ -540,10 +542,10 @@ "effect.antarchy.growth": "生长", "effect.antarchy.bloodglass_ward": "血晶守护", "effect.antarchy.bloodglass_ward.description": "给予会破碎的心,能吸收整整一次伤害。它们会随时间恢复。", - "death.attack.triffid_mauling": "%1$s被一株植物撕咬致死", - "death.attack.triffid_mauling.player": "%1$s被一株植物撕咬致死", - "death.attack.triffid_swallow": "%1$s被特里菲德吞下了", - "death.attack.triffid_swallow.player": "%1$s被特里菲德吞下了", + "death.attack.flytrap_mauling": "%1$s被一株植物撕咬致死", + "death.attack.flytrap_mauling.player": "%1$s被一株植物撕咬致死", + "death.attack.flytrap_swallow": "%1$s被特里菲德吞下了", + "death.attack.flytrap_swallow.player": "%1$s被特里菲德吞下了", "potion.antarchy.haste": "急迫药水", "potion.antarchy.strong_haste": "强效急迫药水", "tooltip.antarchy.big_bertha.mode": "模式:%s", @@ -660,11 +662,11 @@ "subtitles.antarchy.ant_bite": "蚂蚁啃咬", "subtitles.antarchy.ant_gather": "蚂蚁采集", "subtitles.antarchy.ant_nest": "蚁巢沙沙作响", - "subtitles.antarchy.cloud_shark_bite": "云鲨啃咬", - "subtitles.antarchy.cloud_shark_idle": "云鲨发出动静", - "subtitles.antarchy.cloud_shark_hurt": "云鲨受伤", - "subtitles.antarchy.cloud_shark_death": "云鲨死亡", - "subtitles.antarchy.cloud_shark_fly": "云鲨飞行", + "subtitles.antarchy.stratoshark_bite": "云鲨啃咬", + "subtitles.antarchy.stratoshark_idle": "云鲨发出动静", + "subtitles.antarchy.stratoshark_hurt": "云鲨受伤", + "subtitles.antarchy.stratoshark_death": "云鲨死亡", + "subtitles.antarchy.stratoshark_fly": "云鲨飞行", "subtitles.antarchy.caterpillar_idle": "毛毛虫发出动静", "subtitles.antarchy.caterpillar_hurt": "毛毛虫受伤", "subtitles.antarchy.caterpillar_crawl": "毛毛虫爬行", @@ -704,17 +706,20 @@ "subtitles.antarchy.nightmare_death": "梦魇死亡", "subtitles.antarchy.nightmare_bite": "梦魇啃咬", "subtitles.antarchy.nightmare_flap": "梦魇振翅", - "subtitles.antarchy.triffid_attack": "特里菲德攻击", - "subtitles.antarchy.triffid_grab": "特里菲德抓取", - "subtitles.antarchy.triffid_hurt": "特里菲德受伤", - "subtitles.antarchy.triffid_death": "特里菲德死亡", - "subtitles.antarchy.triffid_hiss": "特里菲德嘶嘶作响", - "subtitles.antarchy.triffid_growl": "特里菲德咆哮", + "subtitles.antarchy.flytrap_attack": "特里菲德攻击", + "subtitles.antarchy.flytrap_grab": "特里菲德抓取", + "subtitles.antarchy.flytrap_hurt": "特里菲德受伤", + "subtitles.antarchy.flytrap_death": "特里菲德死亡", + "subtitles.antarchy.flytrap_hiss": "特里菲德嘶嘶作响", + "subtitles.antarchy.flytrap_growl": "特里菲德咆哮", "subtitles.antarchy.gravity_gun_pickup": "重力枪拾取", "subtitles.antarchy.gravity_gun_drop": "重力枪放下", "subtitles.antarchy.gravity_gun_hold_loop": "重力枪嗡鸣", "subtitles.antarchy.gravity_gun_launch": "重力枪发射", "subtitles.antarchy.gravity_gun_dryfire": "重力枪空击", + "subtitles.antarchy.antimetal_place": "反金属发出撞击声", + "subtitles.antarchy.antimetal_step": "反金属发出叮当声", + "subtitles.antarchy.antimetal_scaffold": "反金属脚手架咯吱作响", "subtitles.antarchy.bed_bug_ambient": "臭虫唧唧叫", "subtitles.antarchy.bed_bug_hurt": "臭虫受伤", "subtitles.antarchy.bed_bug_attack": "臭虫啃咬", @@ -877,23 +882,23 @@ "block.antarchy.amber_lichen": "琥珀地衣", "block.antarchy.bile_vein": "胆汁矿脉", "block.antarchy.creepvine": "爬藤", - "block.antarchy.creeping_horror_egg": "爬行恐魔蛋", - "block.antarchy.lurking_terror_egg": "潜伏恐魔蛋", + "block.antarchy.crawling_blight_egg": "爬行恐魔蛋", + "block.antarchy.skulking_fright_egg": "潜伏恐魔蛋", "entity.antarchy.termite": "白蚁", - "entity.antarchy.jumpy_bug": "跳跳虫", + "entity.antarchy.springbug": "跳跳虫", "entity.antarchy.spit_bug": "喷吐虫", "entity.antarchy.stink_bug": "臭屁虫", "entity.antarchy.rolly_polly": "鼠妇", - "entity.antarchy.creeping_horror": "爬行恐魔", - "entity.antarchy.lurking_terror": "潜伏恐魔", + "entity.antarchy.crawling_blight": "爬行恐魔", + "entity.antarchy.skulking_fright": "潜伏恐魔", "entity.antarchy.hercules_beetle": "赫拉克勒斯甲虫", - "item.antarchy.jumpy_bug_spawn_egg": "跳跳虫刷怪蛋", + "item.antarchy.springbug_spawn_egg": "跳跳虫刷怪蛋", "item.antarchy.spit_bug_spawn_egg": "喷吐虫刷怪蛋", "item.antarchy.stink_bug_spawn_egg": "臭屁虫刷怪蛋", "item.antarchy.termite_spawn_egg": "白蚁刷怪蛋", "item.antarchy.rolly_polly_spawn_egg": "鼠妇刷怪蛋", - "item.antarchy.creeping_horror_spawn_egg": "爬行恐魔刷怪蛋", - "item.antarchy.lurking_terror_spawn_egg": "潜伏恐魔刷怪蛋", + "item.antarchy.crawling_blight_spawn_egg": "爬行恐魔刷怪蛋", + "item.antarchy.skulking_fright_spawn_egg": "潜伏恐魔刷怪蛋", "item.antarchy.hercules_beetle_spawn_egg": "赫拉克勒斯甲虫刷怪蛋", "item.antarchy.chitin": "甲壳素", "block.antarchy.polished_broodstone": "磨制布鲁德斯通", @@ -920,14 +925,14 @@ "block.antarchy.glowcap_mushroom_block": "荧光菌盖蘑菇块", "block.antarchy.molting_vines": "蜕皮藤蔓", "item.antarchy.broodfruit": "育巢果", - "block.antarchy.jumpy_bug_egg": "跳跳虫蛋", - "subtitles.antarchy.creeping_horror_growl": "爬行恐魔咆哮", - "subtitles.antarchy.creeping_horror_hurt": "爬行恐魔受伤", - "subtitles.antarchy.creeping_horror_bite": "爬行恐魔啃咬", - "subtitles.antarchy.lurking_terror_snarl": "潜伏恐魔低吼", - "subtitles.antarchy.lurking_terror_hurt": "潜伏恐魔受伤", - "subtitles.antarchy.lurking_terror_bite": "潜伏恐魔啃咬", - "subtitles.antarchy.lurking_terror_fly_loop": "潜伏恐魔飞行", + "block.antarchy.springbug_egg": "跳跳虫蛋", + "subtitles.antarchy.crawling_blight_growl": "爬行恐魔咆哮", + "subtitles.antarchy.crawling_blight_hurt": "爬行恐魔受伤", + "subtitles.antarchy.crawling_blight_bite": "爬行恐魔啃咬", + "subtitles.antarchy.skulking_fright_snarl": "潜伏恐魔低吼", + "subtitles.antarchy.skulking_fright_hurt": "潜伏恐魔受伤", + "subtitles.antarchy.skulking_fright_bite": "潜伏恐魔啃咬", + "subtitles.antarchy.skulking_fright_fly_loop": "潜伏恐魔飞行", "subtitles.antarchy.stink_bug_fart": "臭屁虫放屁", "subtitles.antarchy.stink_bug_idle": "臭屁虫发出动静", "subtitles.antarchy.rolly_polly_idle": "鼠妇发出动静", @@ -944,10 +949,10 @@ "subtitles.antarchy.jerry_hurt": "杰瑞受伤", "subtitles.antarchy.jerry_death": "杰瑞死亡", "subtitles.antarchy.jerry_attack": "杰瑞攻击", - "subtitles.antarchy.jumpy_bug_idle": "跳跳虫发出动静", + "subtitles.antarchy.springbug_idle": "跳跳虫发出动静", "subtitles.antarchy.spit_bug_idle": "喷吐虫发出动静", - "subtitles.antarchy.jumpy_bug_hurt": "跳跳虫受伤", - "subtitles.antarchy.jumpy_bug_jump": "跳跳虫跳跃", + "subtitles.antarchy.springbug_hurt": "跳跳虫受伤", + "subtitles.antarchy.springbug_jump": "跳跳虫跳跃", "subtitles.antarchy.spit_bug_hurt": "喷吐虫受伤", "subtitles.antarchy.spit_bug_spit": "喷吐虫喷吐", "subtitles.antarchy.brutalfly_spit": "布鲁塔尔弗莱喷吐", diff --git a/common-1.20.1/src/main/resources/assets/antarchy/lang/zh_tw.json b/common-1.20.1/src/main/resources/assets/antarchy/lang/zh_tw.json index e64db662..2c3a6435 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/lang/zh_tw.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/lang/zh_tw.json @@ -90,7 +90,7 @@ "block.antarchy.pale_nyxite": "蒼白尼克賽特", "block.antarchy.nyxite_spike": "尼克賽特尖刺", "block.antarchy.potent_nyxite": "強效尼克賽特", - "block.antarchy.triffid_goo_block": "特里菲德 黏液塊", + "block.antarchy.flytrap_goo_block": "特里菲德 黏液塊", "block.antarchy.elythia_portal": "艾莉提婭傳送門", "block.antarchy.cloud_block": "雲塊", "block.antarchy.thoraxis_portal": "索爾阿克西斯傳送門", @@ -181,7 +181,7 @@ "entity.antarchy.rainbow_ant": "彩虹螞蟻", "entity.antarchy.diamond_minecart": "鑽石礦車", "entity.antarchy.dr_trayaurus": "特雷奧勒斯博士", - "entity.antarchy.cloud_shark": "雲鯊", + "entity.antarchy.stratoshark": "雲鯊", "entity.antarchy.kraken": "克拉肯", "entity.antarchy.missile_squid": "導彈魷魚", "entity.antarchy.octopus_bomb": "章魚炸彈", @@ -193,7 +193,7 @@ "entity.antarchy.molevore": "莫爾沃爾", "entity.antarchy.mantis": "螳螂", "entity.antarchy.alpha_mantis": "阿爾法螳螂", - "entity.antarchy.triffid": "特里菲德", + "entity.antarchy.flytrap": "特里菲德", "entity.antarchy.toreterror": "托爾泰羅爾", "entity.antarchy.water_bomb": "水炸彈", "subtitles.antarchy.mantis_ambient": "螳螂發出咔嗒聲", @@ -212,9 +212,9 @@ "item.antarchy.attitude_adjuster": "態度調整錘", "tooltip.antarchy.attitude_adjuster.grounded": "將地面上的目標擊飛,並把空中的目標砸向地面。", "tooltip.antarchy.attitude_adjuster.slam": "在空中右鍵可發動落地重擊。", - "item.antarchy.cloud_shark_fin": "雲鯊鰭", - "item.antarchy.cloud_shark_fin_soup": "雲鯊鰭湯", - "tooltip.antarchy.cloud_shark_fin_soup": "獲得力量與緩降。", + "item.antarchy.stratoshark_fin": "雲鯊鰭", + "item.antarchy.stratoshark_fin_soup": "雲鯊鰭湯", + "tooltip.antarchy.stratoshark_fin_soup": "獲得力量與緩降。", "tooltip.antarchy.critter_cage.empty": "右鍵投擲", "tooltip.antarchy.critter_cage.contains": "裝有:%s", "tooltip.antarchy.critter_cage.release": "右鍵釋放", @@ -263,7 +263,7 @@ "attribute.antarchy.bloodglass_max_hearts": "血晶之心上限", "item.antarchy.molevore_nose": "莫爾沃爾鼻子", "item.antarchy.moleworm": "莫爾沃姆", - "item.antarchy.triffid_spawn_egg": "特里菲德刷怪蛋", + "item.antarchy.flytrap_spawn_egg": "特里菲德刷怪蛋", "item.antarchy.infested_rooted_dirt": "蟲蝕纏根 泥土", "item.antarchy.infested_coarse_dirt": "蟲蝕砂土 泥土", "item.antarchy.pale_nyxite": "蒼白尼克賽特", @@ -352,9 +352,9 @@ "tooltip.antarchy.mantis_claw.wall_cling": "Dual wield to cling to walls and jump upward.", "item.antarchy.king_scale": "國王鱗片", "item.antarchy.queen_scale": "女王鱗片", - "item.antarchy.jumpy_bug_leg": "跳跳蟲腿", - "item.antarchy.jumpy_boots": "彈跳靴", - "tooltip.antarchy.jumpy_boots": "潛行蓄力,然後跳躍即可向上彈射。", + "item.antarchy.springbug_leg": "跳跳蟲腿", + "item.antarchy.springy_boots": "彈跳靴", + "tooltip.antarchy.springy_boots": "潛行蓄力,然後跳躍即可向上彈射。", "item.antarchy.brutalfly_wing": "布魯塔爾弗萊翼", "item.antarchy.brutalfly_elytra": "布魯塔爾弗萊鞘翅", "tooltip.antarchy.brutalfly_elytra.flap": "飛行時按住%s拍動翅膀", @@ -368,9 +368,9 @@ "item.antarchy.american_name": "美式%s", "item.antarchy.root_beer": "根汁汽水", "item.antarchy.primordial_scute": "原初甲片", - "item.antarchy.triffid_goo": "特里菲德 黏液", - "item.antarchy.triffid_goo_block": "特里菲德 黏液塊", - "tooltip.antarchy.triffid_goo_block": "高速接觸時會向上彈起,否則會沉入其中。", + "item.antarchy.flytrap_goo": "特里菲德 黏液", + "item.antarchy.flytrap_goo_block": "特里菲德 黏液塊", + "tooltip.antarchy.flytrap_goo_block": "高速接觸時會向上彈起,否則會沉入其中。", "item.antarchy.cloud_bucket": "雲桶", "tooltip.antarchy.cloud_bucket.midair": "可放置在空中", "item.antarchy.lumen_bucket": "盧門桶", @@ -380,7 +380,7 @@ "tooltip.antarchy.scorpion_whip.snap": "再次左鍵被牽住的獵物可扯出毒刺。", "item.antarchy.fallen_king_crown": "隕落之王的王冠", "tooltip.antarchy.fallen_king_crown.hero": "擊殺敵對生物時獲得村莊英雄", - "item.antarchy.vortex_eye": "漩渦之眼", + "item.antarchy.vortex_charge": "Vortex Charge", "item.antarchy.ultimate_helmet": "終極頭盔", "item.antarchy.ultimate_chestplate": "終極胸甲", "item.antarchy.ultimate_leggings": "終極護腿", @@ -474,7 +474,7 @@ "item.antarchy.caterpillar_spawn_egg": "毛毛蟲刷怪蛋", "item.antarchy.butterfly_spawn_egg": "蝴蝶刷怪蛋", "item.antarchy.brutalfly_spawn_egg": "布魯塔爾弗萊刷怪蛋", - "item.antarchy.cloud_shark_spawn_egg": "雲鯊刷怪蛋", + "item.antarchy.stratoshark_spawn_egg": "雲鯊刷怪蛋", "item.antarchy.kraken_spawn_egg": "呃,不。別這樣。", "item.antarchy.missile_squid_spawn_egg": "導彈魷魚刷怪蛋", "item.antarchy.octopus_bomb_spawn_egg": "章魚炸彈刷怪蛋", @@ -512,7 +512,7 @@ "message.antarchy.termite_activated": "白蟻已準備好開啟目的地。", "message.antarchy.termite_needs_reagent": "這隻白蟻需要試劑才能開啟目的地。", "death.attack.spit_bug_disrespect": "%1$s遭到了噴吐蟲的羞辱", - "death.attack.jumpy_bug_jump": "%1$s被跳跳蟲撲倒了", + "death.attack.springbug_jump": "%1$s被跳跳蟲撲倒了", "death.attack.hercules_beetle_obliteration": "%1$s被赫拉克勒斯甲蟲徹底摧毀", "message.antarchy.big_bertha.mode": "大貝莎模式:%s", "message.antarchy.big_bertha.mode.basilisk": "蛇怪", @@ -533,6 +533,8 @@ "effect.antarchy.paralyzed.description": "阻止目標移動。", "effect.antarchy.inverted": "反轉", "effect.antarchy.inverted.description": "反轉目標的重力。", + "effect.antarchy.commanded.description": "為命令它的玩家而戰。", + "effect.antarchy.dilated.description": "減緩受影響生物的時間流逝。", "effect.antarchy.stinky": "臭氣", "effect.antarchy.stinky.description": "驅趕被動與中立生物,吸引節肢生物。", "effect.antarchy.gooped.description": "降低移動速度與攻擊速度。", @@ -540,10 +542,10 @@ "effect.antarchy.growth": "生長", "effect.antarchy.bloodglass_ward": "血晶守護", "effect.antarchy.bloodglass_ward.description": "給予會破碎的心,能吸收完整一次傷害。它們會隨時間恢復。", - "death.attack.triffid_mauling": "%1$s被一株植物撕咬致死", - "death.attack.triffid_mauling.player": "%1$s被一株植物撕咬致死", - "death.attack.triffid_swallow": "%1$s被特里菲德吞下了", - "death.attack.triffid_swallow.player": "%1$s被特里菲德吞下了", + "death.attack.flytrap_mauling": "%1$s被一株植物撕咬致死", + "death.attack.flytrap_mauling.player": "%1$s被一株植物撕咬致死", + "death.attack.flytrap_swallow": "%1$s被特里菲德吞下了", + "death.attack.flytrap_swallow.player": "%1$s被特里菲德吞下了", "potion.antarchy.haste": "急迫藥水", "potion.antarchy.strong_haste": "強效急迫藥水", "tooltip.antarchy.big_bertha.mode": "模式:%s", @@ -660,11 +662,11 @@ "subtitles.antarchy.ant_bite": "螞蟻啃咬", "subtitles.antarchy.ant_gather": "螞蟻採集", "subtitles.antarchy.ant_nest": "蟻巢沙沙作響", - "subtitles.antarchy.cloud_shark_bite": "雲鯊啃咬", - "subtitles.antarchy.cloud_shark_idle": "雲鯊發出動靜", - "subtitles.antarchy.cloud_shark_hurt": "雲鯊受傷", - "subtitles.antarchy.cloud_shark_death": "雲鯊死亡", - "subtitles.antarchy.cloud_shark_fly": "雲鯊飛行", + "subtitles.antarchy.stratoshark_bite": "雲鯊啃咬", + "subtitles.antarchy.stratoshark_idle": "雲鯊發出動靜", + "subtitles.antarchy.stratoshark_hurt": "雲鯊受傷", + "subtitles.antarchy.stratoshark_death": "雲鯊死亡", + "subtitles.antarchy.stratoshark_fly": "雲鯊飛行", "subtitles.antarchy.caterpillar_idle": "毛毛蟲發出動靜", "subtitles.antarchy.caterpillar_hurt": "毛毛蟲受傷", "subtitles.antarchy.caterpillar_crawl": "毛毛蟲爬行", @@ -704,17 +706,20 @@ "subtitles.antarchy.nightmare_death": "夢魘死亡", "subtitles.antarchy.nightmare_bite": "夢魘啃咬", "subtitles.antarchy.nightmare_flap": "夢魘振翅", - "subtitles.antarchy.triffid_attack": "特里菲德攻擊", - "subtitles.antarchy.triffid_grab": "特里菲德抓取", - "subtitles.antarchy.triffid_hurt": "特里菲德受傷", - "subtitles.antarchy.triffid_death": "特里菲德死亡", - "subtitles.antarchy.triffid_hiss": "特里菲德嘶嘶作響", - "subtitles.antarchy.triffid_growl": "特里菲德咆哮", + "subtitles.antarchy.flytrap_attack": "特里菲德攻擊", + "subtitles.antarchy.flytrap_grab": "特里菲德抓取", + "subtitles.antarchy.flytrap_hurt": "特里菲德受傷", + "subtitles.antarchy.flytrap_death": "特里菲德死亡", + "subtitles.antarchy.flytrap_hiss": "特里菲德嘶嘶作響", + "subtitles.antarchy.flytrap_growl": "特里菲德咆哮", "subtitles.antarchy.gravity_gun_pickup": "重力槍拾取", "subtitles.antarchy.gravity_gun_drop": "重力槍放下", "subtitles.antarchy.gravity_gun_hold_loop": "重力槍嗡鳴", "subtitles.antarchy.gravity_gun_launch": "重力槍發射", "subtitles.antarchy.gravity_gun_dryfire": "重力槍空擊", + "subtitles.antarchy.antimetal_place": "反金屬發出撞擊聲", + "subtitles.antarchy.antimetal_step": "反金屬發出叮噹聲", + "subtitles.antarchy.antimetal_scaffold": "反金屬鷹架嘎吱作響", "subtitles.antarchy.bed_bug_ambient": "臭蟲唧唧叫", "subtitles.antarchy.bed_bug_hurt": "臭蟲受傷", "subtitles.antarchy.bed_bug_attack": "臭蟲啃咬", @@ -877,23 +882,23 @@ "block.antarchy.amber_lichen": "琥珀地衣", "block.antarchy.bile_vein": "膽汁礦脈", "block.antarchy.creepvine": "爬藤", - "block.antarchy.creeping_horror_egg": "爬行恐魔蛋", - "block.antarchy.lurking_terror_egg": "潛伏恐魔蛋", + "block.antarchy.crawling_blight_egg": "爬行恐魔蛋", + "block.antarchy.skulking_fright_egg": "潛伏恐魔蛋", "entity.antarchy.termite": "白蟻", - "entity.antarchy.jumpy_bug": "跳跳蟲", + "entity.antarchy.springbug": "跳跳蟲", "entity.antarchy.spit_bug": "噴吐蟲", "entity.antarchy.stink_bug": "臭屁蟲", "entity.antarchy.rolly_polly": "鼠婦", - "entity.antarchy.creeping_horror": "爬行恐魔", - "entity.antarchy.lurking_terror": "潛伏恐魔", + "entity.antarchy.crawling_blight": "爬行恐魔", + "entity.antarchy.skulking_fright": "潛伏恐魔", "entity.antarchy.hercules_beetle": "赫拉克勒斯甲蟲", - "item.antarchy.jumpy_bug_spawn_egg": "跳跳蟲刷怪蛋", + "item.antarchy.springbug_spawn_egg": "跳跳蟲刷怪蛋", "item.antarchy.spit_bug_spawn_egg": "噴吐蟲刷怪蛋", "item.antarchy.stink_bug_spawn_egg": "臭屁蟲刷怪蛋", "item.antarchy.termite_spawn_egg": "白蟻刷怪蛋", "item.antarchy.rolly_polly_spawn_egg": "鼠婦刷怪蛋", - "item.antarchy.creeping_horror_spawn_egg": "爬行恐魔刷怪蛋", - "item.antarchy.lurking_terror_spawn_egg": "潛伏恐魔刷怪蛋", + "item.antarchy.crawling_blight_spawn_egg": "爬行恐魔刷怪蛋", + "item.antarchy.skulking_fright_spawn_egg": "潛伏恐魔刷怪蛋", "item.antarchy.hercules_beetle_spawn_egg": "赫拉克勒斯甲蟲刷怪蛋", "item.antarchy.chitin": "甲殼素", "block.antarchy.polished_broodstone": "磨製布魯德斯通", @@ -920,14 +925,14 @@ "block.antarchy.glowcap_mushroom_block": "熒光菌蓋蘑菇塊", "block.antarchy.molting_vines": "蛻皮藤蔓", "item.antarchy.broodfruit": "育巢果", - "block.antarchy.jumpy_bug_egg": "跳跳蟲蛋", - "subtitles.antarchy.creeping_horror_growl": "爬行恐魔咆哮", - "subtitles.antarchy.creeping_horror_hurt": "爬行恐魔受傷", - "subtitles.antarchy.creeping_horror_bite": "爬行恐魔啃咬", - "subtitles.antarchy.lurking_terror_snarl": "潛伏恐魔低吼", - "subtitles.antarchy.lurking_terror_hurt": "潛伏恐魔受傷", - "subtitles.antarchy.lurking_terror_bite": "潛伏恐魔啃咬", - "subtitles.antarchy.lurking_terror_fly_loop": "潛伏恐魔飛行", + "block.antarchy.springbug_egg": "跳跳蟲蛋", + "subtitles.antarchy.crawling_blight_growl": "爬行恐魔咆哮", + "subtitles.antarchy.crawling_blight_hurt": "爬行恐魔受傷", + "subtitles.antarchy.crawling_blight_bite": "爬行恐魔啃咬", + "subtitles.antarchy.skulking_fright_snarl": "潛伏恐魔低吼", + "subtitles.antarchy.skulking_fright_hurt": "潛伏恐魔受傷", + "subtitles.antarchy.skulking_fright_bite": "潛伏恐魔啃咬", + "subtitles.antarchy.skulking_fright_fly_loop": "潛伏恐魔飛行", "subtitles.antarchy.stink_bug_fart": "臭屁蟲放屁", "subtitles.antarchy.stink_bug_idle": "臭屁蟲發出動靜", "subtitles.antarchy.rolly_polly_idle": "鼠婦發出動靜", @@ -944,10 +949,10 @@ "subtitles.antarchy.jerry_hurt": "傑瑞受傷", "subtitles.antarchy.jerry_death": "傑瑞死亡", "subtitles.antarchy.jerry_attack": "傑瑞攻擊", - "subtitles.antarchy.jumpy_bug_idle": "跳跳蟲發出動靜", + "subtitles.antarchy.springbug_idle": "跳跳蟲發出動靜", "subtitles.antarchy.spit_bug_idle": "噴吐蟲發出動靜", - "subtitles.antarchy.jumpy_bug_hurt": "跳跳蟲受傷", - "subtitles.antarchy.jumpy_bug_jump": "跳跳蟲跳躍", + "subtitles.antarchy.springbug_hurt": "跳跳蟲受傷", + "subtitles.antarchy.springbug_jump": "跳跳蟲跳躍", "subtitles.antarchy.spit_bug_hurt": "噴吐蟲受傷", "subtitles.antarchy.spit_bug_spit": "噴吐蟲噴吐", "subtitles.antarchy.brutalfly_spit": "布魯塔爾弗萊噴吐", diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/crawling_blight_egg_1.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/crawling_blight_egg_1.json new file mode 100644 index 00000000..5300e011 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/crawling_blight_egg_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_turtle_egg", + "textures": { + "all": "antarchy:block/crawling_blight_egg/crawling_blight_egg" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/crawling_blight_egg_2.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/crawling_blight_egg_2.json new file mode 100644 index 00000000..40f07140 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/crawling_blight_egg_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_two_turtle_eggs", + "textures": { + "all": "antarchy:block/crawling_blight_egg/crawling_blight_egg" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/crawling_blight_egg_3.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/crawling_blight_egg_3.json new file mode 100644 index 00000000..d92eaec9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/crawling_blight_egg_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_three_turtle_eggs", + "textures": { + "all": "antarchy:block/crawling_blight_egg/crawling_blight_egg" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/crawling_blight_egg_4.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/crawling_blight_egg_4.json new file mode 100644 index 00000000..51b989ff --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/crawling_blight_egg_4.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_four_turtle_eggs", + "textures": { + "all": "antarchy:block/crawling_blight_egg/crawling_blight_egg", + "particle": "antarchy:block/crawling_blight_egg/crawling_blight_egg" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/flytrap_goo_block.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/flytrap_goo_block.json new file mode 100644 index 00000000..cbe7b9fc --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/flytrap_goo_block.json @@ -0,0 +1,71 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/flytrap_goo_block", + "outer": "antarchy:block/flytrap_goo_block", + "inner": "antarchy:block/flytrap_goo_block" + }, + "display": { + "gui": { + "rotation": [30, 225, 0], + "translation": [0, 0, 0], + "scale": [0.625, 0.625, 0.625] + }, + "ground": { + "rotation": [0, 0, 0], + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "fixed": { + "rotation": [0, 0, 0], + "translation": [0, 0, 0], + "scale": [0.5, 0.5, 0.5] + }, + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "translation": [0, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "translation": [0, 0, 0], + "scale": [0.4, 0.4, 0.4] + } + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "down": { "texture": "#outer" }, + "up": { "texture": "#outer" }, + "north": { "texture": "#outer" }, + "south": { "texture": "#outer" }, + "west": { "texture": "#outer" }, + "east": { "texture": "#outer" } + } + }, + { + "from": [2, 2, 2], + "to": [14, 14, 14], + "faces": { + "down": { "texture": "#inner" }, + "up": { "texture": "#inner" }, + "north": { "texture": "#inner" }, + "south": { "texture": "#inner" }, + "west": { "texture": "#inner" }, + "east": { "texture": "#inner" } + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/skulking_fright_egg_1.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/skulking_fright_egg_1.json new file mode 100644 index 00000000..343736ae --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/skulking_fright_egg_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_turtle_egg", + "textures": { + "all": "antarchy:block/skulking_fright_egg/skulking_fright_egg" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/skulking_fright_egg_2.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/skulking_fright_egg_2.json new file mode 100644 index 00000000..df0c28df --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/skulking_fright_egg_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_two_turtle_eggs", + "textures": { + "all": "antarchy:block/skulking_fright_egg/skulking_fright_egg" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/skulking_fright_egg_3.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/skulking_fright_egg_3.json new file mode 100644 index 00000000..f376f18a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/skulking_fright_egg_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_three_turtle_eggs", + "textures": { + "all": "antarchy:block/skulking_fright_egg/skulking_fright_egg" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/skulking_fright_egg_4.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/skulking_fright_egg_4.json new file mode 100644 index 00000000..d2e42d6d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/skulking_fright_egg_4.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_four_turtle_eggs", + "textures": { + "all": "antarchy:block/skulking_fright_egg/skulking_fright_egg", + "particle": "antarchy:block/skulking_fright_egg/skulking_fright_egg" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_crawling_blight_egg_1.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_crawling_blight_egg_1.json new file mode 100644 index 00000000..8dc1380c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_crawling_blight_egg_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_turtle_egg", + "textures": { + "all": "antarchy:block/crawling_blight_egg/crawling_blight_egg_slightly_cracked" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_crawling_blight_egg_2.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_crawling_blight_egg_2.json new file mode 100644 index 00000000..71482300 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_crawling_blight_egg_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_two_turtle_eggs", + "textures": { + "all": "antarchy:block/crawling_blight_egg/crawling_blight_egg_slightly_cracked" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_crawling_blight_egg_3.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_crawling_blight_egg_3.json new file mode 100644 index 00000000..641a5f43 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_crawling_blight_egg_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_three_turtle_eggs", + "textures": { + "all": "antarchy:block/crawling_blight_egg/crawling_blight_egg_slightly_cracked" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_crawling_blight_egg_4.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_crawling_blight_egg_4.json new file mode 100644 index 00000000..7367e40b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_crawling_blight_egg_4.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_four_turtle_eggs", + "textures": { + "all": "antarchy:block/crawling_blight_egg/crawling_blight_egg_slightly_cracked", + "particle": "antarchy:block/crawling_blight_egg/crawling_blight_egg_slightly_cracked" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_skulking_fright_egg_1.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_skulking_fright_egg_1.json new file mode 100644 index 00000000..12a38039 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_skulking_fright_egg_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_turtle_egg", + "textures": { + "all": "antarchy:block/skulking_fright_egg/skulking_fright_egg_slightly_cracked" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_skulking_fright_egg_2.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_skulking_fright_egg_2.json new file mode 100644 index 00000000..03427ec6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_skulking_fright_egg_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_two_turtle_eggs", + "textures": { + "all": "antarchy:block/skulking_fright_egg/skulking_fright_egg_slightly_cracked" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_skulking_fright_egg_3.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_skulking_fright_egg_3.json new file mode 100644 index 00000000..3ef9a637 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_skulking_fright_egg_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_three_turtle_eggs", + "textures": { + "all": "antarchy:block/skulking_fright_egg/skulking_fright_egg_slightly_cracked" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_skulking_fright_egg_4.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_skulking_fright_egg_4.json new file mode 100644 index 00000000..91e89eee --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/slightly_cracked_skulking_fright_egg_4.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_four_turtle_eggs", + "textures": { + "all": "antarchy:block/skulking_fright_egg/skulking_fright_egg_slightly_cracked", + "particle": "antarchy:block/skulking_fright_egg/skulking_fright_egg_slightly_cracked" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/spit_bug_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/spit_bug_egg.json index 92ae529b..366970d0 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/models/block/spit_bug_egg.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/spit_bug_egg.json @@ -66,7 +66,7 @@ }, "groups": [ { - "name": "jumpy_bug_egg", + "name": "springbug_egg", "origin": [0, 0.1, 0], "scope": 0, "color": 0, diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/springbug_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/springbug_egg.json new file mode 100644 index 00000000..9fa8d7ab --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/springbug_egg.json @@ -0,0 +1,85 @@ +{ + "format_version": "1.21.11", + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "0": "antarchy:block/springbug_egg", + "particle": "antarchy:block/springbug_egg" + }, + "elements": [ + { + "from": [1, 0, 2], + "to": [15, 16, 14], + "faces": { + "north": {"uv": [0, 0, 3.5, 4], "texture": "#0"}, + "east": {"uv": [0, 4, 3, 8], "texture": "#0"}, + "south": {"uv": [0, 0, 3.5, 4], "texture": "#0"}, + "west": {"uv": [0, 4, 3, 8], "texture": "#0"}, + "up": {"uv": [9.5, 7, 6, 4], "texture": "#0", "cullface": "up"}, + "down": {"uv": [10.5, 0, 7, 3], "texture": "#0", "cullface": "down"} + } + }, + { + "from": [2, 0.1, 3], + "to": [14, 14.1, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 0.1, 0]}, + "faces": { + "north": {"uv": [0, 8, 3, 11.5], "texture": "#0"}, + "east": {"uv": [3, 8, 5.5, 11.5], "texture": "#0"}, + "south": {"uv": [0, 8, 3, 11.5], "texture": "#0"}, + "west": {"uv": [3, 8, 5.5, 11.5], "texture": "#0"}, + "up": {"uv": [12.5, 5.5, 9.5, 3], "texture": "#0", "cullface": "up"}, + "down": {"uv": [13.5, 0, 10.5, 2.5], "texture": "#0", "cullface": "down"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [0, 90, -55], + "translation": [0, 4, 0.5], + "scale": [0.85, 0.85, 0.85] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, -135, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, -135, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "springbug_egg", + "origin": [0, 0.1, 0], + "scope": 0, + "color": 0, + "children": [ + 0, + { + "name": "inside", + "origin": [0, 0.1, 0], + "scope": 0, + "color": 0, + "children": [1] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/undertrial_spawner_active.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/undertrial_spawner_active.json new file mode 100644 index 00000000..1d20d342 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/undertrial_spawner_active.json @@ -0,0 +1 @@ +{"parent":"antarchy:block/undervault_inner_faces","render_type":"cutout","textures":{"bottom":"antarchy:block/undertrial_spawner/undertrial_spawner_bottom","side":"antarchy:block/undertrial_spawner/undertrial_spawner_side_active","top":"antarchy:block/undertrial_spawner/undertrial_spawner_top_active","front":"antarchy:block/undertrial_spawner/undertrial_spawner_side_active"}} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/undertrial_spawner_ejecting_reward.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/undertrial_spawner_ejecting_reward.json new file mode 100644 index 00000000..904435b6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/undertrial_spawner_ejecting_reward.json @@ -0,0 +1 @@ +{"parent":"antarchy:block/undervault_inner_faces","render_type":"cutout","textures":{"bottom":"antarchy:block/undertrial_spawner/undertrial_spawner_bottom","side":"antarchy:block/undertrial_spawner/undertrial_spawner_side_active","top":"antarchy:block/undertrial_spawner/undertrial_spawner_top_ejecting_reward","front":"antarchy:block/undertrial_spawner/undertrial_spawner_side_active"}} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/undertrial_spawner_inactive.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/undertrial_spawner_inactive.json new file mode 100644 index 00000000..461ba592 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/undertrial_spawner_inactive.json @@ -0,0 +1 @@ +{"parent":"antarchy:block/undervault_inner_faces","render_type":"cutout","textures":{"bottom":"antarchy:block/undertrial_spawner/undertrial_spawner_bottom","side":"antarchy:block/undertrial_spawner/undertrial_spawner_side_inactive","top":"antarchy:block/undertrial_spawner/undertrial_spawner_top_inactive","front":"antarchy:block/undertrial_spawner/undertrial_spawner_side_inactive"}} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/undervault_ejecting.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/undervault_ejecting.json new file mode 100644 index 00000000..c8c5e4a8 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/undervault_ejecting.json @@ -0,0 +1 @@ +{"parent":"antarchy:block/undervault_inner_faces","render_type":"cutout","textures":{"bottom":"antarchy:block/undervault/undervault_bottom","side":"antarchy:block/undervault/undervault_side_on","top":"antarchy:block/undervault/undervault_top_ejecting","front":"antarchy:block/undervault/undervault_front_ejecting"}} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/undervault_inner_faces.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/undervault_inner_faces.json new file mode 100644 index 00000000..dadfc9e0 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/undervault_inner_faces.json @@ -0,0 +1,30 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "render_type": "cutout", + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#front", "cullface": "north"}, + "east": {"uv": [0, 0, 16, 16], "texture": "#side", "cullface": "east"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#side", "cullface": "south"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#side", "cullface": "west"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#top", "cullface": "up"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#bottom", "cullface": "down"} + } + }, + { + "from": [15.998, 0.002, 0.002], + "to": [0.002, 15.998, 15.998], + "faces": { + "north": {"uv": [16, 0, 0, 16], "texture": "#front"}, + "east": {"uv": [16, 0, 0, 16], "texture": "#side"}, + "south": {"uv": [16, 0, 0, 16], "texture": "#side"}, + "west": {"uv": [16, 0, 0, 16], "texture": "#side"}, + "up": {"uv": [16, 0, 0, 16], "texture": "#top"}, + "down": {"uv": [16, 0, 0, 16], "texture": "#bottom"} + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/undervault_off.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/undervault_off.json new file mode 100644 index 00000000..d28393c6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/undervault_off.json @@ -0,0 +1 @@ +{"parent":"antarchy:block/undervault_inner_faces","render_type":"cutout","textures":{"bottom":"antarchy:block/undervault/undervault_bottom","side":"antarchy:block/undervault/undervault_side_off","top":"antarchy:block/undervault/undervault_top","front":"antarchy:block/undervault/undervault_front_off"}} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/undervault_on.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/undervault_on.json new file mode 100644 index 00000000..16f1c6a4 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/undervault_on.json @@ -0,0 +1 @@ +{"parent":"antarchy:block/undervault_inner_faces","render_type":"cutout","textures":{"bottom":"antarchy:block/undervault/undervault_bottom","side":"antarchy:block/undervault/undervault_side_on","top":"antarchy:block/undervault/undervault_top","front":"antarchy:block/undervault/undervault_front_on"}} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_crawling_blight_egg_1.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_crawling_blight_egg_1.json new file mode 100644 index 00000000..7a19163c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_crawling_blight_egg_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_turtle_egg", + "textures": { + "all": "antarchy:block/crawling_blight_egg/crawling_blight_egg_very_cracked" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_crawling_blight_egg_2.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_crawling_blight_egg_2.json new file mode 100644 index 00000000..ce78c22d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_crawling_blight_egg_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_two_turtle_eggs", + "textures": { + "all": "antarchy:block/crawling_blight_egg/crawling_blight_egg_very_cracked" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_crawling_blight_egg_3.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_crawling_blight_egg_3.json new file mode 100644 index 00000000..393dc9ad --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_crawling_blight_egg_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_three_turtle_eggs", + "textures": { + "all": "antarchy:block/crawling_blight_egg/crawling_blight_egg_very_cracked" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_crawling_blight_egg_4.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_crawling_blight_egg_4.json new file mode 100644 index 00000000..7495f66c --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_crawling_blight_egg_4.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_four_turtle_eggs", + "textures": { + "all": "antarchy:block/crawling_blight_egg/crawling_blight_egg_very_cracked", + "particle": "antarchy:block/crawling_blight_egg/crawling_blight_egg_very_cracked" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_skulking_fright_egg_1.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_skulking_fright_egg_1.json new file mode 100644 index 00000000..fbe98dc1 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_skulking_fright_egg_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_turtle_egg", + "textures": { + "all": "antarchy:block/skulking_fright_egg/skulking_fright_egg_very_cracked" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_skulking_fright_egg_2.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_skulking_fright_egg_2.json new file mode 100644 index 00000000..170949d6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_skulking_fright_egg_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_two_turtle_eggs", + "textures": { + "all": "antarchy:block/skulking_fright_egg/skulking_fright_egg_very_cracked" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_skulking_fright_egg_3.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_skulking_fright_egg_3.json new file mode 100644 index 00000000..9064645a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_skulking_fright_egg_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_three_turtle_eggs", + "textures": { + "all": "antarchy:block/skulking_fright_egg/skulking_fright_egg_very_cracked" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_skulking_fright_egg_4.json b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_skulking_fright_egg_4.json new file mode 100644 index 00000000..59b8677e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/block/very_cracked_skulking_fright_egg_4.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_four_turtle_eggs", + "textures": { + "all": "antarchy:block/skulking_fright_egg/skulking_fright_egg_very_cracked", + "particle": "antarchy:block/skulking_fright_egg/skulking_fright_egg_very_cracked" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/crawling_blight_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/crawling_blight_egg.json new file mode 100644 index 00000000..ebb8caab --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/crawling_blight_egg.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/crawling_blight_egg" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/crawling_blight_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/crawling_blight_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/crawling_blight_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/flytrap_goo.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/flytrap_goo.json new file mode 100644 index 00000000..5674520f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/flytrap_goo.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/flytrap_goo" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/flytrap_goo_block.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/flytrap_goo_block.json new file mode 100644 index 00000000..7cb5ec7e --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/flytrap_goo_block.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/flytrap_goo_block" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/flytrap_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/flytrap_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/flytrap_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/skulking_fright_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/skulking_fright_egg.json new file mode 100644 index 00000000..7becb37d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/skulking_fright_egg.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/skulking_fright_egg" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/skulking_fright_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/skulking_fright_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/skulking_fright_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/springbug_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/springbug_egg.json new file mode 100644 index 00000000..61960ce9 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/springbug_egg.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/springbug_egg_item" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/springbug_leg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/springbug_leg.json new file mode 100644 index 00000000..94f1a894 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/springbug_leg.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/springbug_leg" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/springbug_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/springbug_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/springbug_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/springy_boots.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/springy_boots.json new file mode 100644 index 00000000..451aa419 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/springy_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/springy_boots" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/stratoshark_fin.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/stratoshark_fin.json new file mode 100644 index 00000000..1497486a --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/stratoshark_fin.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/stratoshark_fin" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/stratoshark_fin_soup.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/stratoshark_fin_soup.json new file mode 100644 index 00000000..66950e5f --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/stratoshark_fin_soup.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/stratoshark_fin_soup" + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/stratoshark_spawn_egg.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/stratoshark_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/stratoshark_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/undertrial_key.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/undertrial_key.json new file mode 100644 index 00000000..8107010b --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/undertrial_key.json @@ -0,0 +1 @@ +{"parent":"minecraft:item/generated","textures":{"layer0":"antarchy:item/undertrial_key"}} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/undertrial_spawner.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/undertrial_spawner.json new file mode 100644 index 00000000..4567ce52 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/undertrial_spawner.json @@ -0,0 +1 @@ +{"parent":"antarchy:block/undertrial_spawner_inactive"} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/models/item/undervault.json b/common-1.20.1/src/main/resources/assets/antarchy/models/item/undervault.json new file mode 100644 index 00000000..363acc4d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/models/item/undervault.json @@ -0,0 +1 @@ +{"parent":"antarchy:block/undervault_off"} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/particles/undertrial_omen.json b/common-1.20.1/src/main/resources/assets/antarchy/particles/undertrial_omen.json new file mode 100644 index 00000000..179ca66d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/particles/undertrial_omen.json @@ -0,0 +1,3 @@ +{ + "textures": ["antarchy:undertrial/undertrial_omen"] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/particles/undertrial_spawner_detection.json b/common-1.20.1/src/main/resources/assets/antarchy/particles/undertrial_spawner_detection.json new file mode 100644 index 00000000..3f1e11f6 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/particles/undertrial_spawner_detection.json @@ -0,0 +1,9 @@ +{ + "textures": [ + "antarchy:undertrial/undertrial_spawner_detection_0", + "antarchy:undertrial/undertrial_spawner_detection_1", + "antarchy:undertrial/undertrial_spawner_detection_2", + "antarchy:undertrial/undertrial_spawner_detection_3", + "antarchy:undertrial/undertrial_spawner_detection_4" + ] +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/particles/undervault_connection.json b/common-1.20.1/src/main/resources/assets/antarchy/particles/undervault_connection.json new file mode 100644 index 00000000..bd901a9d --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/particles/undervault_connection.json @@ -0,0 +1 @@ +{"textures":["antarchy:undertrial/undervault_connection"]} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds.json b/common-1.20.1/src/main/resources/assets/antarchy/sounds.json index 3b9c5815..dd7b67a2 100644 --- a/common-1.20.1/src/main/resources/assets/antarchy/sounds.json +++ b/common-1.20.1/src/main/resources/assets/antarchy/sounds.json @@ -1,33 +1,4 @@ { - "ambient.elythia.ouranwood_forest": { - "subtitle": "subtitles.antarchy.ambient_elythia_ouranwood_forest", - "sounds": [ - { - "name": "antarchy:ambient/elythia/ouranwood_forest/ouranwoodforest1", - "stream": true - }, - { - "name": "antarchy:ambient/elythia/ouranwood_forest/ouranwoodforest2", - "stream": true - }, - { - "name": "antarchy:ambient/elythia/ouranwood_forest/ouranwoodforest3", - "stream": true - }, - { - "name": "antarchy:ambient/elythia/ouranwood_forest/ouranwoodforest4", - "stream": true - }, - { - "name": "antarchy:ambient/elythia/ouranwood_forest/ouranwoodforest5", - "stream": true - }, - { - "name": "antarchy:ambient/elythia/ouranwood_forest/ouranwoodforest6", - "stream": true - } - ] - }, "thoraxis_nightmare_wastes_biome_additions": { "sounds": [ { "name": "antarchy:thoraxis_nightmare_wastes_ambient", "type": "event", "weight": 5 }, @@ -50,40 +21,92 @@ "subtitle": "subtitles.antarchy.squidzooka_fire", "sounds": [ { - "name": "antarchy:squidzooka/squizooka1" + "name": "antarchy:item/squidzooka/squizooka1" }, { - "name": "antarchy:squidzooka/squizooka2" + "name": "antarchy:item/squidzooka/squizooka2" }, { - "name": "antarchy:squidzooka/squizooka3" + "name": "antarchy:item/squidzooka/squizooka3" }, { - "name": "antarchy:squidzooka/squizooka4" + "name": "antarchy:item/squidzooka/squizooka4" } ] }, - "shrink_ray": { - "subtitle": "subtitles.antarchy.shrink_ray", - "sounds": [ - { - "name": "antarchy:size_ray/shrink_ray" - } - ] - }, - "growth_ray": { - "subtitle": "subtitles.antarchy.growth_ray", - "sounds": [ - { - "name": "antarchy:size_ray/growth_ray" - } - ] - }, - "size_ray_charge": { + "shrink_ray_charge": { "subtitle": "subtitles.antarchy.size_ray_charge", "sounds": [ { - "name": "antarchy:size_ray/size_ray_charge" + "name": "antarchy:item/size_ray/shrinkraycharge" + } + ] + }, + "shrink_ray_loop": { + "subtitle": "subtitles.antarchy.size_ray_charge", + "sounds": [ + { + "name": "antarchy:item/size_ray/shrinkrayloop", + "stream": true + } + ] + }, + "growth_ray_charge": { + "subtitle": "subtitles.antarchy.size_ray_charge", + "sounds": [ + { + "name": "antarchy:item/size_ray/growraycharge" + } + ] + }, + "growth_ray_loop": { + "subtitle": "subtitles.antarchy.size_ray_charge", + "sounds": [ + { + "name": "antarchy:item/size_ray/growrayloop", + "stream": true + } + ] + }, + "size_ray_weakshot": { + "subtitle": "subtitles.antarchy.size_ray_fire", + "sounds": [ + { + "name": "antarchy:item/size_ray/weakshot1" + }, + { + "name": "antarchy:item/size_ray/weakshot2" + }, + { + "name": "antarchy:item/size_ray/weakshot3" + } + ] + }, + "size_ray_mediumshot": { + "subtitle": "subtitles.antarchy.size_ray_fire", + "sounds": [ + { + "name": "antarchy:item/size_ray/mediumshot1" + }, + { + "name": "antarchy:item/size_ray/mediumshot2" + }, + { + "name": "antarchy:item/size_ray/mediumshot3" + } + ] + }, + "size_ray_critshot": { + "subtitle": "subtitles.antarchy.size_ray_fire", + "sounds": [ + { + "name": "antarchy:item/size_ray/critshot1" + }, + { + "name": "antarchy:item/size_ray/critshot2" + }, + { + "name": "antarchy:item/size_ray/critshot3" } ] }, @@ -153,52 +176,52 @@ } ] }, - "cloud_shark_bite": { - "subtitle": "subtitles.antarchy.cloud_shark_bite", + "stratoshark_bite": { + "subtitle": "subtitles.antarchy.stratoshark_bite", "sounds": [ { - "name": "antarchy:mob/cloud_shark/cloud_shark_bite" + "name": "antarchy:mob/stratoshark/stratoshark_bite" } ] }, - "cloud_shark_idle": { - "subtitle": "subtitles.antarchy.cloud_shark_idle", + "stratoshark_idle": { + "subtitle": "subtitles.antarchy.stratoshark_idle", "sounds": [ { - "name": "antarchy:mob/cloud_shark/cloud_shark_idle1" + "name": "antarchy:mob/stratoshark/stratoshark_idle1" }, { - "name": "antarchy:mob/cloud_shark/cloud_shark_idle2" + "name": "antarchy:mob/stratoshark/stratoshark_idle2" }, { - "name": "antarchy:mob/cloud_shark/cloud_shark_idle3" + "name": "antarchy:mob/stratoshark/stratoshark_idle3" }, { - "name": "antarchy:mob/cloud_shark/cloud_shark_idle4" + "name": "antarchy:mob/stratoshark/stratoshark_idle4" } ] }, - "cloud_shark_hurt": { - "subtitle": "subtitles.antarchy.cloud_shark_hurt", + "stratoshark_hurt": { + "subtitle": "subtitles.antarchy.stratoshark_hurt", "sounds": [ { - "name": "antarchy:mob/cloud_shark/cloud_shark_hurt" + "name": "antarchy:mob/stratoshark/stratoshark_hurt" } ] }, - "cloud_shark_death": { - "subtitle": "subtitles.antarchy.cloud_shark_death", + "stratoshark_death": { + "subtitle": "subtitles.antarchy.stratoshark_death", "sounds": [ { - "name": "antarchy:mob/cloud_shark/cloud_shark_death" + "name": "antarchy:mob/stratoshark/stratoshark_death" } ] }, - "cloud_shark_fly": { - "subtitle": "subtitles.antarchy.cloud_shark_fly", + "stratoshark_fly": { + "subtitle": "subtitles.antarchy.stratoshark_fly", "sounds": [ { - "name": "antarchy:mob/cloud_shark/cloud_shark_fly1" + "name": "antarchy:mob/stratoshark/stratoshark_fly1" } ] }, @@ -963,6 +986,198 @@ } ] }, + "worm_hook_flying": { + "subtitle": "subtitles.antarchy.worm_hook_flying", + "sounds": [ + { + "name": "entity.player.elytra.flying", + "type": "event" + } + ] + }, + "blood_crystal_katana_dash": { + "subtitle": "subtitles.antarchy.blood_crystal_katana_dash", + "sounds": [ + { + "name": "antarchy:item/blood_crystal_katana/dash1" + }, + { + "name": "antarchy:item/blood_crystal_katana/dash2" + }, + { + "name": "antarchy:item/blood_crystal_katana/dash3" + }, + { + "name": "antarchy:item/blood_crystal_katana/dash4" + } + ] + }, + "blood_crystal_armor_equip": { + "subtitle": "subtitles.antarchy.blood_crystal_armor_equip", + "sounds": [ + { "name": "antarchy:item/armor/blood_crystal_equip1" }, + { "name": "antarchy:item/armor/blood_crystal_equip2" }, + { "name": "antarchy:item/armor/blood_crystal_equip3" }, + { "name": "antarchy:item/armor/blood_crystal_equip4" }, + { "name": "antarchy:item/armor/blood_crystal_equip5" }, + { "name": "antarchy:item/armor/blood_crystal_equip6" } + ] + }, + "bloodglass_ward_heart_break": { + "subtitle": "subtitles.antarchy.bloodglass_ward_heart_break", + "sounds": [ + { "name": "antarchy:event/mob_effects/bloodglass_ward/heart_break1" }, + { "name": "antarchy:event/mob_effects/bloodglass_ward/heart_break2" }, + { "name": "antarchy:event/mob_effects/bloodglass_ward/heart_break3" }, + { "name": "antarchy:event/mob_effects/bloodglass_ward/heart_break4" }, + { "name": "antarchy:event/mob_effects/bloodglass_ward/heart_break5" }, + { "name": "antarchy:event/mob_effects/bloodglass_ward/heart_break6" } + ] + }, + "bloodglass_ward_heart_regen": { + "subtitle": "subtitles.antarchy.bloodglass_ward_heart_regen", + "sounds": [ + { "name": "antarchy:event/mob_effects/bloodglass_ward/regen_heart1" }, + { "name": "antarchy:event/mob_effects/bloodglass_ward/regen_heart2" }, + { "name": "antarchy:event/mob_effects/bloodglass_ward/regen_heart3" }, + { "name": "antarchy:event/mob_effects/bloodglass_ward/regen_heart4" }, + { "name": "antarchy:event/mob_effects/bloodglass_ward/regen_heart5" }, + { "name": "antarchy:event/mob_effects/bloodglass_ward/regen_heart6" } + ] + }, + "music_disc_underside": { + "sounds": [ + { + "name": "antarchy:records/underside", + "stream": true + } + ] + }, + "lucid_lullaby": { + "sounds": [ + { + "name": "antarchy:music/game/thoraxis/lucid_lullaby", + "stream": true + } + ] + }, + "whistling_void": { + "sounds": [ + { + "name": "antarchy:music/game/thoraxis/whistling_void", + "stream": true + } + ] + }, + "haywire": { + "sounds": [ + { + "name": "antarchy:music/game/thoraxis/haywire", + "stream": true + } + ] + }, + "inversion_layer": { + "sounds": [ + { + "name": "antarchy:music/game/thoraxis/inversion_layer", + "stream": true + } + ] + }, + "music.game.thoraxis": { + "sounds": [ + { + "name": "antarchy:lucid_lullaby", + "type": "event", + "stream": true + }, + { + "name": "antarchy:whistling_void", + "type": "event", + "stream": true + }, + { + "name": "antarchy:haywire", + "type": "event", + "stream": true + }, + { + "name": "antarchy:inversion_layer", + "type": "event", + "stream": true + }, + { + "name": "antarchy:music/game/thoraxis/assimilation", + "stream": true + } + ] + }, + "dimensional_tear_open": { + "subtitle": "subtitles.antarchy.dimensional_tear_open", + "sounds": [ + { "name": "antarchy:mob/dimensional_tear/tear_open" } + ] + }, + "dimensional_tear_idle": { + "subtitle": "subtitles.antarchy.dimensional_tear_idle", + "sounds": [ + { "name": "antarchy:mob/dimensional_tear/tear_idle" } + ] + }, + "dimensional_tear_creature_leaves": { + "subtitle": "subtitles.antarchy.dimensional_tear_creature_leaves", + "sounds": [ + { "name": "antarchy:mob/dimensional_tear/tear_creature_leaves" } + ] + }, + "dimensional_tear_close": { + "subtitle": "subtitles.antarchy.dimensional_tear_close", + "sounds": [ + { "name": "antarchy:mob/dimensional_tear/tear_close" } + ] + }, + "venenatus": { + "sounds": [ + { + "name": "antarchy:music/game/cavaryn/venenatus", + "stream": true + } + ] + }, + "music.game.cavaryn": { + "sounds": [ + { + "name": "antarchy:venenatus", + "type": "event", + "stream": true + } + ] + }, + "wistful_wanderings": { + "sounds": [ + { + "name": "antarchy:music/game/elythia/wistful_wanderings", + "stream": true + } + ] + }, + "music.game.elythia": { + "sounds": [ + { + "name": "antarchy:wistful_wanderings", + "type": "event", + "stream": true, + "weight": 3 + }, + { + "name": "minecraft:music.game", + "type": "event", + "stream": true, + "weight": 2 + } + ] + }, "lucid_ambient": { "subtitle": "subtitles.antarchy.lucid_ambient", "sounds": [ @@ -1268,6 +1483,39 @@ } ] }, + "manticore_idle": { + "subtitle": "subtitles.antarchy.manticore_idle", + "sounds": [ + { "name": "antarchy:mob/manticore/idle1" }, + { "name": "antarchy:mob/manticore/idle2" } + ] + }, + "manticore_walk": { + "subtitle": "subtitles.antarchy.manticore_walk", + "sounds": [ + { "name": "antarchy:mob/manticore/walk1" }, + { "name": "antarchy:mob/manticore/walk2" }, + { "name": "antarchy:mob/manticore/walk3" }, + { "name": "antarchy:mob/manticore/walk4" }, + { "name": "antarchy:mob/manticore/walk5" } + ] + }, + "manticore_fly": { + "subtitle": "subtitles.antarchy.manticore_fly", + "sounds": [ + { "name": "antarchy:mob/manticore/fly1" }, + { "name": "antarchy:mob/manticore/fly2" }, + { "name": "antarchy:mob/manticore/fly3" }, + { "name": "antarchy:mob/manticore/fly4" }, + { "name": "antarchy:mob/manticore/fly5" } + ] + }, + "manticore_bite": { + "subtitle": "subtitles.antarchy.manticore_bite", + "sounds": [ + { "name": "antarchy:mob/manticore/bite1" } + ] + }, "mantis_ambient": { "subtitle": "subtitles.antarchy.mantis_ambient", "sounds": [ @@ -1338,7 +1586,16 @@ "subtitle": "subtitles.antarchy.gravity_gun_pickup", "sounds": [ { - "name": "antarchy:gravity_gun/gravity_gun_pickup" + "name": "antarchy:item/gravity_gun/pickup1", + "volume": 1.5 + }, + { + "name": "antarchy:item/gravity_gun/pickup2", + "volume": 1.5 + }, + { + "name": "antarchy:item/gravity_gun/pickup3", + "volume": 1.5 } ] }, @@ -1346,7 +1603,16 @@ "subtitle": "subtitles.antarchy.gravity_gun_drop", "sounds": [ { - "name": "antarchy:gravity_gun/gravity_gun_drop" + "name": "antarchy:item/gravity_gun/drop1", + "volume": 1.5 + }, + { + "name": "antarchy:item/gravity_gun/drop2", + "volume": 1.5 + }, + { + "name": "antarchy:item/gravity_gun/drop3", + "volume": 1.5 } ] }, @@ -1354,7 +1620,8 @@ "subtitle": "subtitles.antarchy.gravity_gun_hold_loop", "sounds": [ { - "name": "antarchy:gravity_gun/gravity_gun_hold_loop" + "name": "antarchy:item/gravity_gun/hold_loop", + "volume": 1.5 } ] }, @@ -1362,16 +1629,16 @@ "subtitle": "subtitles.antarchy.gravity_gun_launch", "sounds": [ { - "name": "antarchy:gravity_gun/gravity_gun_launch1" + "name": "antarchy:item/gravity_gun/launch1", + "volume": 1.5 }, { - "name": "antarchy:gravity_gun/gravity_gun_launch2" + "name": "antarchy:item/gravity_gun/launch2", + "volume": 1.5 }, { - "name": "antarchy:gravity_gun/gravity_gun_launch3" - }, - { - "name": "antarchy:gravity_gun/gravity_gun_launch4" + "name": "antarchy:item/gravity_gun/launch3", + "volume": 1.5 } ] }, @@ -1379,7 +1646,175 @@ "subtitle": "subtitles.antarchy.gravity_gun_dryfire", "sounds": [ { - "name": "antarchy:gravity_gun/gravity_gun_dryfire" + "name": "antarchy:item/gravity_gun/dryfire1", + "volume": 1.5 + }, + { + "name": "antarchy:item/gravity_gun/dryfire2", + "volume": 1.5 + }, + { + "name": "antarchy:item/gravity_gun/dryfire3", + "volume": 1.5 + } + ] + }, + "antimetal_place": { + "subtitle": "subtitles.antarchy.antimetal_place", + "sounds": [ + { + "name": "antarchy:block/antimetal/place1" + }, + { + "name": "antarchy:block/antimetal/place2" + }, + { + "name": "antarchy:block/antimetal/place3" + }, + { + "name": "antarchy:block/antimetal/place4" + } + ] + }, + "antimetal_step": { + "subtitle": "subtitles.antarchy.antimetal_step", + "sounds": [ + { + "name": "antarchy:block/antimetal/step1" + }, + { + "name": "antarchy:block/antimetal/step2" + }, + { + "name": "antarchy:block/antimetal/step3" + }, + { + "name": "antarchy:block/antimetal/step4" + } + ] + }, + "antimetal_scaffold": { + "subtitle": "subtitles.antarchy.antimetal_scaffold", + "sounds": [ + { + "name": "antarchy:block/antimetal/scafold1" + }, + { + "name": "antarchy:block/antimetal/scafold2" + }, + { + "name": "antarchy:block/antimetal/scafold3" + }, + { + "name": "antarchy:block/antimetal/scafold4" + } + ] + }, + "portal_gun_fire_blue": { + "subtitle": "subtitles.antarchy.portal_gun_fire_blue", + "sounds": [ + { + "name": "antarchy:item/portalgun/wpn_portal_gun_fire_blue_01" + }, + { + "name": "antarchy:item/portalgun/wpn_portal_gun_fire_blue_02" + }, + { + "name": "antarchy:item/portalgun/wpn_portal_gun_fire_blue_03" + } + ] + }, + "portal_gun_fire_orange": { + "subtitle": "subtitles.antarchy.portal_gun_fire_orange", + "sounds": [ + { + "name": "antarchy:item/portalgun/wpn_portal_gun_fire_red_01" + }, + { + "name": "antarchy:item/portalgun/wpn_portal_gun_fire_red_02" + }, + { + "name": "antarchy:item/portalgun/wpn_portal_gun_fire_red_03" + } + ] + }, + "portal_gun_invalid_surface": { + "subtitle": "subtitles.antarchy.portal_gun_invalid_surface", + "sounds": [ + { + "name": "antarchy:item/portalgun/portal_invalid_surface_swt_01" + }, + { + "name": "antarchy:portal/portal_invalid_surface_01" + }, + { + "name": "antarchy:portal/portal_invalid_surface_02" + }, + { + "name": "antarchy:portal/portal_invalid_surface_03" + }, + { + "name": "antarchy:portal/portal_invalid_surface_04" + } + ] + }, + "portal_open_blue": { + "subtitle": "subtitles.antarchy.portal_open_blue", + "sounds": [ + { + "name": "antarchy:portal/portal_open_blue_01" + } + ] + }, + "portal_open_orange": { + "subtitle": "subtitles.antarchy.portal_open_orange", + "sounds": [ + { + "name": "antarchy:portal/portal_open_red_01" + } + ] + }, + "portal_fizzle": { + "subtitle": "subtitles.antarchy.portal_fizzle", + "sounds": [ + { + "name": "antarchy:portal/portal_fizzle_01" + }, + { + "name": "antarchy:portal/portal_fizzle_02" + } + ] + }, + "portal_enter": { + "subtitle": "subtitles.antarchy.portal_enter", + "sounds": [ + { + "name": "antarchy:portal/portal_enter_01" + }, + { + "name": "antarchy:portal/portal_enter_02" + }, + { + "name": "antarchy:portal/portal_enter_03" + } + ] + }, + "portal_exit": { + "subtitle": "subtitles.antarchy.portal_exit", + "sounds": [ + { + "name": "antarchy:portal/portal_exit_01" + }, + { + "name": "antarchy:portal/portal_exit_02" + } + ] + }, + "portal_ambient": { + "subtitle": "subtitles.antarchy.portal_ambient", + "sounds": [ + { + "name": "antarchy:portal/wpn_portal_ambient_lp_01" } ] }, @@ -1877,6 +2312,35 @@ } ] }, + "ambient.elythia.ouranwood_forest": { + "subtitle": "subtitles.antarchy.ambient_elythia_ouranwood_forest", + "sounds": [ + { + "name": "antarchy:ambient/elythia/ouranwood_forest/ouranwoodforest1", + "stream": false + }, + { + "name": "antarchy:ambient/elythia/ouranwood_forest/ouranwoodforest2", + "stream": false + }, + { + "name": "antarchy:ambient/elythia/ouranwood_forest/ouranwoodforest3", + "stream": false + }, + { + "name": "antarchy:ambient/elythia/ouranwood_forest/ouranwoodforest4", + "stream": false + }, + { + "name": "antarchy:ambient/elythia/ouranwood_forest/ouranwoodforest5", + "stream": false + }, + { + "name": "antarchy:ambient/elythia/ouranwood_forest/ouranwoodforest6", + "stream": false + } + ] + }, "cavaryn_heartbeat": { "subtitle": "subtitles.antarchy.cavaryn_heartbeat", "sounds": [ @@ -1885,137 +2349,137 @@ } ] }, - "triffid_attack": { - "subtitle": "subtitles.antarchy.triffid_attack", + "flytrap_attack": { + "subtitle": "subtitles.antarchy.flytrap_attack", "sounds": [ { - "name": "antarchy:mob/triffid/triffid_attack1" + "name": "antarchy:mob/flytrap/flytrap_attack1" } ] }, - "triffid_grab": { - "subtitle": "subtitles.antarchy.triffid_grab", + "flytrap_grab": { + "subtitle": "subtitles.antarchy.flytrap_grab", "sounds": [ { - "name": "antarchy:mob/triffid/triffid_grab1" + "name": "antarchy:mob/flytrap/flytrap_grab1" } ] }, - "triffid_hurt": { - "subtitle": "subtitles.antarchy.triffid_hurt", + "flytrap_hurt": { + "subtitle": "subtitles.antarchy.flytrap_hurt", "sounds": [ { - "name": "antarchy:mob/triffid/triffid_hurt1" + "name": "antarchy:mob/flytrap/flytrap_hurt1" }, { - "name": "antarchy:mob/triffid/triffid_hurt2" + "name": "antarchy:mob/flytrap/flytrap_hurt2" }, { - "name": "antarchy:mob/triffid/triffid_hurt3" + "name": "antarchy:mob/flytrap/flytrap_hurt3" } ] }, - "triffid_death": { - "subtitle": "subtitles.antarchy.triffid_death", + "flytrap_death": { + "subtitle": "subtitles.antarchy.flytrap_death", "sounds": [ { - "name": "antarchy:mob/triffid/triffid_hurt3" + "name": "antarchy:mob/flytrap/flytrap_hurt3" } ] }, - "triffid_hiss": { - "subtitle": "subtitles.antarchy.triffid_hiss", + "flytrap_hiss": { + "subtitle": "subtitles.antarchy.flytrap_hiss", "sounds": [ { - "name": "antarchy:mob/triffid/triffid_hiss1" + "name": "antarchy:mob/flytrap/flytrap_hiss1" } ] }, - "triffid_growl": { - "subtitle": "subtitles.antarchy.triffid_growl", + "flytrap_growl": { + "subtitle": "subtitles.antarchy.flytrap_growl", "sounds": [ { - "name": "antarchy:mob/triffid/triffid_growl1" + "name": "antarchy:mob/flytrap/flytrap_growl1" }, { - "name": "antarchy:mob/triffid/triffid_growl2" + "name": "antarchy:mob/flytrap/flytrap_growl2" } ] }, - "creeping_horror_bite": { - "subtitle": "subtitles.antarchy.creeping_horror_bite", + "crawling_blight_bite": { + "subtitle": "subtitles.antarchy.crawling_blight_bite", "sounds": [ { - "name": "antarchy:mob/creeping_horror/creeping_horror_bite1" + "name": "antarchy:mob/crawling_blight/crawling_blight_bite1" }, { - "name": "antarchy:mob/creeping_horror/creeping_horror_bite2" + "name": "antarchy:mob/crawling_blight/crawling_blight_bite2" }, { - "name": "antarchy:mob/creeping_horror/creeping_horror_bite3" + "name": "antarchy:mob/crawling_blight/crawling_blight_bite3" }, { - "name": "antarchy:mob/creeping_horror/creeping_horror_bite4" + "name": "antarchy:mob/crawling_blight/crawling_blight_bite4" } ] }, - "creeping_horror_growl": { - "subtitle": "subtitles.antarchy.creeping_horror_growl", + "crawling_blight_growl": { + "subtitle": "subtitles.antarchy.crawling_blight_growl", "sounds": [ { - "name": "antarchy:mob/creeping_horror/creeping_horror_growl1" + "name": "antarchy:mob/crawling_blight/crawling_blight_growl1" }, { - "name": "antarchy:mob/creeping_horror/creeping_horror_growl2" + "name": "antarchy:mob/crawling_blight/crawling_blight_growl2" } ] }, - "creeping_horror_hurt": { - "subtitle": "subtitles.antarchy.creeping_horror_hurt", + "crawling_blight_hurt": { + "subtitle": "subtitles.antarchy.crawling_blight_hurt", "sounds": [ { - "name": "antarchy:mob/creeping_horror/creeping_horror_hurt1" + "name": "antarchy:mob/crawling_blight/crawling_blight_hurt1" }, { - "name": "antarchy:mob/creeping_horror/creeping_horror_hurt2" + "name": "antarchy:mob/crawling_blight/crawling_blight_hurt2" } ] }, - "lurking_terror_bite": { - "subtitle": "subtitles.antarchy.lurking_terror_bite", + "skulking_fright_bite": { + "subtitle": "subtitles.antarchy.skulking_fright_bite", "sounds": [ { - "name": "antarchy:mob/lurking_terror/lurking_terror_bite1" + "name": "antarchy:mob/skulking_fright/skulking_fright_bite1" } ] }, - "lurking_terror_fly_loop": { - "subtitle": "subtitles.antarchy.lurking_terror_fly_loop", + "skulking_fright_fly_loop": { + "subtitle": "subtitles.antarchy.skulking_fright_fly_loop", "sounds": [ { - "name": "antarchy:mob/lurking_terror/lurking_terror_fly_loop" + "name": "antarchy:mob/skulking_fright/skulking_fright_fly_loop" } ] }, - "lurking_terror_hurt": { - "subtitle": "subtitles.antarchy.lurking_terror_hurt", + "skulking_fright_hurt": { + "subtitle": "subtitles.antarchy.skulking_fright_hurt", "sounds": [ { - "name": "antarchy:mob/lurking_terror/lurking_terror_hurt1" + "name": "antarchy:mob/skulking_fright/skulking_fright_hurt1" }, { - "name": "antarchy:mob/lurking_terror/lurking_terror_hurt2" + "name": "antarchy:mob/skulking_fright/skulking_fright_hurt2" } ] }, - "lurking_terror_snarl": { - "subtitle": "subtitles.antarchy.lurking_terror_snarl", + "skulking_fright_snarl": { + "subtitle": "subtitles.antarchy.skulking_fright_snarl", "sounds": [ { - "name": "antarchy:mob/lurking_terror/lurking_terror_snarl1" + "name": "antarchy:mob/skulking_fright/skulking_fright_snarl1" }, { - "name": "antarchy:mob/lurking_terror/lurking_terror_snarl2" + "name": "antarchy:mob/skulking_fright/skulking_fright_snarl2" } ] }, @@ -2085,20 +2549,20 @@ } ] }, - "jumpy_bug_idle": { - "subtitle": "subtitles.antarchy.jumpy_bug_idle", + "springbug_idle": { + "subtitle": "subtitles.antarchy.springbug_idle", "sounds": [ { - "name": "antarchy:mob/jumpy_bug/idle1" + "name": "antarchy:mob/springbug/idle1" }, { - "name": "antarchy:mob/jumpy_bug/idle2" + "name": "antarchy:mob/springbug/idle2" }, { - "name": "antarchy:mob/jumpy_bug/idle3" + "name": "antarchy:mob/springbug/idle3" }, { - "name": "antarchy:mob/jumpy_bug/idle4" + "name": "antarchy:mob/springbug/idle4" } ] }, @@ -2113,28 +2577,28 @@ } ] }, - "jumpy_bug_hurt": { - "subtitle": "subtitles.antarchy.jumpy_bug_hurt", + "springbug_hurt": { + "subtitle": "subtitles.antarchy.springbug_hurt", "sounds": [ { - "name": "antarchy:mob/jumpy_bug/hurt1" + "name": "antarchy:mob/springbug/hurt1" }, { - "name": "antarchy:mob/jumpy_bug/hurt2" + "name": "antarchy:mob/springbug/hurt2" } ] }, - "jumpy_bug_jump": { - "subtitle": "subtitles.antarchy.jumpy_bug_jump", + "springbug_jump": { + "subtitle": "subtitles.antarchy.springbug_jump", "sounds": [ { - "name": "antarchy:mob/jumpy_bug/jump1" + "name": "antarchy:mob/springbug/jump1" }, { - "name": "antarchy:mob/jumpy_bug/jump2" + "name": "antarchy:mob/springbug/jump2" }, { - "name": "antarchy:mob/jumpy_bug/jump3" + "name": "antarchy:mob/springbug/jump3" } ] }, @@ -2273,5 +2737,379 @@ "name": "antarchy:mob/jerry/adult_attack3" } ] + }, + "king_idle": { + "subtitle": "subtitles.antarchy.king_idle", + "sounds": [ + { + "name": "antarchy:mob/king/idle_1" + }, + { + "name": "antarchy:mob/king/idle_2" + }, + { + "name": "antarchy:mob/king/idle_3" + } + ] + }, + "king_walk": { + "subtitle": "subtitles.antarchy.king_walk", + "sounds": [ + { + "name": "antarchy:mob/king/walk_1" + }, + { + "name": "antarchy:mob/king/walk_2" + }, + { + "name": "antarchy:mob/king/walk_3" + } + ] + }, + "king_fly_loop": { + "subtitle": "subtitles.antarchy.king_fly_loop", + "sounds": [ + { + "name": "antarchy:mob/king/fly_loop_1" + }, + { + "name": "antarchy:mob/king/fly_loop_2" + } + ] + }, + "king_wing_flap": { + "subtitle": "subtitles.antarchy.king_wing_flap", + "sounds": [ + { + "name": "antarchy:mob/king/wing_flap" + } + ] + }, + "king_bite": { + "subtitle": "subtitles.antarchy.king_bite", + "sounds": [ + { + "name": "antarchy:mob/king/bite_1" + }, + { + "name": "antarchy:mob/king/bite_2" + } + ] + }, + "king_stomp": { + "subtitle": "subtitles.antarchy.king_stomp", + "sounds": [ + { + "name": "antarchy:mob/king/stomp" + } + ] + }, + "king_roar": { + "subtitle": "subtitles.antarchy.king_roar", + "sounds": [ + { + "name": "antarchy:mob/king/roar" + } + ] + }, + "king_hurt": { + "subtitle": "subtitles.antarchy.king_hurt", + "sounds": [ + { + "name": "antarchy:mob/king/hurt_1" + }, + { + "name": "antarchy:mob/king/hurt_2" + }, + { + "name": "antarchy:mob/king/hurt_3" + } + ] + }, + "king_death": { + "subtitle": "subtitles.antarchy.king_death", + "sounds": [ + { + "name": "antarchy:mob/king/death" + } + ] + }, + "king_beam_shoot": { + "subtitle": "subtitles.antarchy.king_beam_shoot", + "sounds": [ + { + "name": "antarchy:mob/king/laser_shoot" + } + ] + }, + "king_fireball_shoot": { + "subtitle": "subtitles.antarchy.king_fireball_shoot", + "sounds": [ + { + "name": "antarchy:mob/king/fireball_shoot" + } + ] + }, + "king_ice_spikes": { + "subtitle": "subtitles.antarchy.king_ice_spikes", + "sounds": [ + { + "name": "antarchy:mob/king/ice_spikes" + } + ] + }, + "king_decree_cast": { + "subtitle": "subtitles.antarchy.king_decree_cast", + "sounds": [ + { + "name": "antarchy:mob/king/black_hole_shoot" + } + ] + }, + "king_decree": { + "subtitle": "subtitles.antarchy.king_decree", + "sounds": [ + { + "name": "antarchy:mob/king/decree" + } + ] + }, + "king_success": { + "subtitle": "subtitles.antarchy.king_success", + "sounds": [ + { + "name": "antarchy:mob/king/success" + } + ] + }, + "king_judgement": { + "subtitle": "subtitles.antarchy.king_judgement", + "sounds": [ + { + "name": "antarchy:mob/king/judgement" + } + ] + }, + "queen_idle": { + "subtitle": "subtitles.antarchy.queen_idle", + "sounds": [ + { + "name": "antarchy:mob/queen/idle_1" + }, + { + "name": "antarchy:mob/queen/idle_2" + }, + { + "name": "antarchy:mob/queen/idle_3" + } + ] + }, + "queen_walk": { + "subtitle": "subtitles.antarchy.queen_walk", + "sounds": [ + { + "name": "antarchy:mob/queen/walk_1" + }, + { + "name": "antarchy:mob/queen/walk_2" + }, + { + "name": "antarchy:mob/queen/walk_3" + } + ] + }, + "queen_fly_loop": { + "subtitle": "subtitles.antarchy.queen_fly_loop", + "sounds": [ + { + "name": "antarchy:mob/queen/fly_loop_1" + }, + { + "name": "antarchy:mob/queen/fly_loop_2" + } + ] + }, + "queen_wing_flap": { + "subtitle": "subtitles.antarchy.queen_wing_flap", + "sounds": [ + { + "name": "antarchy:mob/queen/wing_flap" + } + ] + }, + "queen_bite": { + "subtitle": "subtitles.antarchy.queen_bite", + "sounds": [ + { + "name": "antarchy:mob/queen/bite_1" + }, + { + "name": "antarchy:mob/queen/bite_2" + } + ] + }, + "queen_stomp": { + "subtitle": "subtitles.antarchy.queen_stomp", + "sounds": [ + { + "name": "antarchy:mob/queen/stomp" + } + ] + }, + "queen_roar": { + "subtitle": "subtitles.antarchy.queen_roar", + "sounds": [ + { + "name": "antarchy:mob/queen/roar" + } + ] + }, + "queen_hurt": { + "subtitle": "subtitles.antarchy.queen_hurt", + "sounds": [ + { + "name": "antarchy:mob/queen/hurt_1" + }, + { + "name": "antarchy:mob/queen/hurt_2" + }, + { + "name": "antarchy:mob/queen/hurt_3" + } + ] + }, + "queen_death": { + "subtitle": "subtitles.antarchy.queen_death", + "sounds": [ + { + "name": "antarchy:mob/queen/death" + } + ] + }, + "queen_beam_shoot": { + "subtitle": "subtitles.antarchy.queen_beam_shoot", + "sounds": [ + { + "name": "antarchy:mob/queen/laser_shoot" + } + ] + }, + "queen_beam_start": { + "subtitle": "subtitles.antarchy.queen_beam_start", + "sounds": [ + { + "name": "antarchy:mob/queen/queen_beam_start" + } + ] + }, + "queen_beam_loop": { + "subtitle": "subtitles.antarchy.queen_beam_loop", + "sounds": [ + { + "name": "antarchy:mob/queen/queen_beam_loop" + } + ] + }, + "queen_beam_end": { + "subtitle": "subtitles.antarchy.queen_beam_end", + "sounds": [ + { + "name": "antarchy:mob/queen/queen_beam_end" + } + ] + }, + "queen_black_hole_shoot": { + "subtitle": "subtitles.antarchy.queen_black_hole_shoot", + "sounds": [ + { + "name": "antarchy:mob/queen/black_hole_shoot" + } + ] + }, + "queen_cast_shoot": { + "subtitle": "subtitles.antarchy.queen_cast_shoot", + "sounds": [ + { + "name": "antarchy:mob/queen/fireball_shoot" + } + ] + }, + "prince_idle": { + "subtitle": "subtitles.antarchy.prince_idle", + "sounds": [ + { "name": "antarchy:mob/prince/idle1" }, + { "name": "antarchy:mob/prince/idle2" } + ] + }, + "prince_bite": { + "subtitle": "subtitles.antarchy.prince_bite", + "sounds": [ + { "name": "antarchy:mob/prince/bite1" } + ] + }, + "prince_shoot": { + "subtitle": "subtitles.antarchy.prince_shoot", + "sounds": [ + { "name": "antarchy:mob/prince/shoot1" } + ] + }, + "prince_fly": { + "subtitle": "subtitles.antarchy.prince_fly", + "sounds": [ + { "name": "antarchy:mob/prince/flt4" }, + { "name": "antarchy:mob/prince/fly1" }, + { "name": "antarchy:mob/prince/fly2" }, + { "name": "antarchy:mob/prince/fly3" }, + { "name": "antarchy:mob/prince/fly5" }, + { "name": "antarchy:mob/prince/fly6" } + ] + }, + "prince_step": { + "subtitle": "subtitles.antarchy.prince_step", + "sounds": [ + { "name": "antarchy:mob/prince/walk1" }, + { "name": "antarchy:mob/prince/walk2" }, + { "name": "antarchy:mob/prince/walk3" }, + { "name": "antarchy:mob/prince/walk4" } + ] + }, + "princess_idle": { + "subtitle": "subtitles.antarchy.princess_idle", + "sounds": [ + { "name": "antarchy:mob/princess/idle1" }, + { "name": "antarchy:mob/princess/idle2" } + ] + }, + "princess_bite": { + "subtitle": "subtitles.antarchy.princess_bite", + "sounds": [ + { "name": "antarchy:mob/princess/bite1" } + ] + }, + "princess_shoot": { + "subtitle": "subtitles.antarchy.princess_shoot", + "sounds": [ + { "name": "antarchy:mob/princess/shoot1" } + ] + }, + "princess_fly": { + "subtitle": "subtitles.antarchy.princess_fly", + "sounds": [ + { "name": "antarchy:mob/princess/flt4" }, + { "name": "antarchy:mob/princess/fly1" }, + { "name": "antarchy:mob/princess/fly2" }, + { "name": "antarchy:mob/princess/fly3" }, + { "name": "antarchy:mob/princess/fly5" }, + { "name": "antarchy:mob/princess/fly6" } + ] + }, + "princess_step": { + "subtitle": "subtitles.antarchy.princess_step", + "sounds": [ + { "name": "antarchy:mob/princess/walk1" }, + { "name": "antarchy:mob/princess/walk2" }, + { "name": "antarchy:mob/princess/walk3" }, + { "name": "antarchy:mob/princess/walk4" } + ] } } diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/crawling_blight/crawling_blight_bite1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/crawling_blight/crawling_blight_bite1.ogg new file mode 100644 index 00000000..fd89b048 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/crawling_blight/crawling_blight_bite1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/crawling_blight/crawling_blight_bite2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/crawling_blight/crawling_blight_bite2.ogg new file mode 100644 index 00000000..1993fb69 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/crawling_blight/crawling_blight_bite2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/crawling_blight/crawling_blight_bite3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/crawling_blight/crawling_blight_bite3.ogg new file mode 100644 index 00000000..1f44cc93 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/crawling_blight/crawling_blight_bite3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/crawling_blight/crawling_blight_bite4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/crawling_blight/crawling_blight_bite4.ogg new file mode 100644 index 00000000..3fa77eaa Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/crawling_blight/crawling_blight_bite4.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/crawling_blight/crawling_blight_growl1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/crawling_blight/crawling_blight_growl1.ogg new file mode 100644 index 00000000..746f4f3a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/crawling_blight/crawling_blight_growl1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/crawling_blight/crawling_blight_growl2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/crawling_blight/crawling_blight_growl2.ogg new file mode 100644 index 00000000..a60677ea Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/crawling_blight/crawling_blight_growl2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/crawling_blight/crawling_blight_hurt1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/crawling_blight/crawling_blight_hurt1.ogg new file mode 100644 index 00000000..1ad6f0ec Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/crawling_blight/crawling_blight_hurt1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/crawling_blight/crawling_blight_hurt2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/crawling_blight/crawling_blight_hurt2.ogg new file mode 100644 index 00000000..e1f10239 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/crawling_blight/crawling_blight_hurt2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/flytrap/flytrap_attack1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/flytrap/flytrap_attack1.ogg new file mode 100644 index 00000000..6674f8ef Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/flytrap/flytrap_attack1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/flytrap/flytrap_grab1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/flytrap/flytrap_grab1.ogg new file mode 100644 index 00000000..b18d0e34 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/flytrap/flytrap_grab1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/flytrap/flytrap_growl1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/flytrap/flytrap_growl1.ogg new file mode 100644 index 00000000..ba078a20 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/flytrap/flytrap_growl1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/flytrap/flytrap_growl2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/flytrap/flytrap_growl2.ogg new file mode 100644 index 00000000..4191a285 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/flytrap/flytrap_growl2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/flytrap/flytrap_hiss1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/flytrap/flytrap_hiss1.ogg new file mode 100644 index 00000000..0cdeb61d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/flytrap/flytrap_hiss1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/flytrap/flytrap_hurt1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/flytrap/flytrap_hurt1.ogg new file mode 100644 index 00000000..f5a311d8 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/flytrap/flytrap_hurt1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/flytrap/flytrap_hurt2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/flytrap/flytrap_hurt2.ogg new file mode 100644 index 00000000..3b823754 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/flytrap/flytrap_hurt2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/flytrap/flytrap_hurt3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/flytrap/flytrap_hurt3.ogg new file mode 100644 index 00000000..0b347842 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/flytrap/flytrap_hurt3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/king/ice_spikes.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/king/ice_spikes.ogg new file mode 100644 index 00000000..9b027e40 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/king/ice_spikes.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/bite1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/bite1.ogg new file mode 100644 index 00000000..519a2128 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/bite1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/fly1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/fly1.ogg new file mode 100644 index 00000000..5d026f88 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/fly1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/fly2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/fly2.ogg new file mode 100644 index 00000000..9f76a7bb Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/fly2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/fly3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/fly3.ogg new file mode 100644 index 00000000..7d515875 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/fly3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/fly4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/fly4.ogg new file mode 100644 index 00000000..4529bd8c Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/fly4.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/fly5.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/fly5.ogg new file mode 100644 index 00000000..76454a8e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/fly5.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/idle1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/idle1.ogg new file mode 100644 index 00000000..12c3b8ad Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/idle1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/idle2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/idle2.ogg new file mode 100644 index 00000000..1ebac1aa Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/idle2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/walk1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/walk1.ogg new file mode 100644 index 00000000..7bc70f91 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/walk1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/walk2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/walk2.ogg new file mode 100644 index 00000000..74db83fc Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/walk2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/walk3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/walk3.ogg new file mode 100644 index 00000000..0e293955 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/walk3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/walk4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/walk4.ogg new file mode 100644 index 00000000..0ebc48b5 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/walk4.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/walk5.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/walk5.ogg new file mode 100644 index 00000000..cf6c899a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/manticore/walk5.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/skulking_fright/skulking_fright_bite1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/skulking_fright/skulking_fright_bite1.ogg new file mode 100644 index 00000000..a72b530e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/skulking_fright/skulking_fright_bite1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/skulking_fright/skulking_fright_fly_loop.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/skulking_fright/skulking_fright_fly_loop.ogg new file mode 100644 index 00000000..7204c176 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/skulking_fright/skulking_fright_fly_loop.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/skulking_fright/skulking_fright_hurt1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/skulking_fright/skulking_fright_hurt1.ogg new file mode 100644 index 00000000..1ad6f0ec Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/skulking_fright/skulking_fright_hurt1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/skulking_fright/skulking_fright_hurt2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/skulking_fright/skulking_fright_hurt2.ogg new file mode 100644 index 00000000..e1f10239 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/skulking_fright/skulking_fright_hurt2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/skulking_fright/skulking_fright_snarl1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/skulking_fright/skulking_fright_snarl1.ogg new file mode 100644 index 00000000..669bbdc8 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/skulking_fright/skulking_fright_snarl1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/skulking_fright/skulking_fright_snarl2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/skulking_fright/skulking_fright_snarl2.ogg new file mode 100644 index 00000000..1305bb04 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/skulking_fright/skulking_fright_snarl2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/springbug/hurt1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/springbug/hurt1.ogg new file mode 100644 index 00000000..1ad6f0ec Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/springbug/hurt1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/springbug/hurt2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/springbug/hurt2.ogg new file mode 100644 index 00000000..e1f10239 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/springbug/hurt2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/springbug/idle1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/springbug/idle1.ogg new file mode 100644 index 00000000..4bfd3c19 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/springbug/idle1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/springbug/idle2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/springbug/idle2.ogg new file mode 100644 index 00000000..6585e6a3 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/springbug/idle2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/springbug/idle3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/springbug/idle3.ogg new file mode 100644 index 00000000..1e110266 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/springbug/idle3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/springbug/idle4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/springbug/idle4.ogg new file mode 100644 index 00000000..95df5d7f Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/springbug/idle4.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/springbug/jump1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/springbug/jump1.ogg new file mode 100644 index 00000000..168605ab Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/springbug/jump1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/springbug/jump2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/springbug/jump2.ogg new file mode 100644 index 00000000..5e130d7e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/springbug/jump2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/springbug/jump3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/springbug/jump3.ogg new file mode 100644 index 00000000..12d986e3 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/springbug/jump3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stratoshark/stratoshark_bite.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stratoshark/stratoshark_bite.ogg new file mode 100644 index 00000000..c8857578 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stratoshark/stratoshark_bite.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stratoshark/stratoshark_death.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stratoshark/stratoshark_death.ogg new file mode 100644 index 00000000..569c17de Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stratoshark/stratoshark_death.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stratoshark/stratoshark_fly1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stratoshark/stratoshark_fly1.ogg new file mode 100644 index 00000000..76920276 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stratoshark/stratoshark_fly1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stratoshark/stratoshark_hurt.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stratoshark/stratoshark_hurt.ogg new file mode 100644 index 00000000..7afa99cf Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stratoshark/stratoshark_hurt.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stratoshark/stratoshark_idle1.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stratoshark/stratoshark_idle1.ogg new file mode 100644 index 00000000..7c97457d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stratoshark/stratoshark_idle1.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stratoshark/stratoshark_idle2.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stratoshark/stratoshark_idle2.ogg new file mode 100644 index 00000000..c6f6ea1d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stratoshark/stratoshark_idle2.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stratoshark/stratoshark_idle3.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stratoshark/stratoshark_idle3.ogg new file mode 100644 index 00000000..381b77c3 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stratoshark/stratoshark_idle3.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stratoshark/stratoshark_idle4.ogg b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stratoshark/stratoshark_idle4.ogg new file mode 100644 index 00000000..e4896b6b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/sounds/mob/stratoshark/stratoshark_idle4.ogg differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/crawling_blight_egg/crawling_blight_egg.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/crawling_blight_egg/crawling_blight_egg.png new file mode 100644 index 00000000..905c49c9 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/crawling_blight_egg/crawling_blight_egg.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/crawling_blight_egg/crawling_blight_egg_slightly_cracked.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/crawling_blight_egg/crawling_blight_egg_slightly_cracked.png new file mode 100644 index 00000000..0a4765be Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/crawling_blight_egg/crawling_blight_egg_slightly_cracked.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/crawling_blight_egg/crawling_blight_egg_very_cracked.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/crawling_blight_egg/crawling_blight_egg_very_cracked.png new file mode 100644 index 00000000..9040f255 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/crawling_blight_egg/crawling_blight_egg_very_cracked.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/flytrap_goo_block.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/flytrap_goo_block.png new file mode 100644 index 00000000..1b40756a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/flytrap_goo_block.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/skulking_fright_egg/skulking_fright_egg.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/skulking_fright_egg/skulking_fright_egg.png new file mode 100644 index 00000000..10089a41 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/skulking_fright_egg/skulking_fright_egg.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/skulking_fright_egg/skulking_fright_egg_slightly_cracked.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/skulking_fright_egg/skulking_fright_egg_slightly_cracked.png new file mode 100644 index 00000000..ac965ebb Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/skulking_fright_egg/skulking_fright_egg_slightly_cracked.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/skulking_fright_egg/skulking_fright_egg_very_cracked.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/skulking_fright_egg/skulking_fright_egg_very_cracked.png new file mode 100644 index 00000000..10cf9dd9 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/skulking_fright_egg/skulking_fright_egg_very_cracked.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/springbug_egg.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/springbug_egg.png new file mode 100644 index 00000000..18f0f294 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/springbug_egg.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/springbug_egg.png.mcmeta b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/springbug_egg.png.mcmeta new file mode 100644 index 00000000..4a8bdc48 --- /dev/null +++ b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/springbug_egg.png.mcmeta @@ -0,0 +1,12 @@ +{ + "animation": { + "frametime": 140, + "interpolate": true, + "frames": [ + 0, + 1, + 0, + 2 + ] + } +} diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undertrial_spawner/undertrial_spawner_bottom.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undertrial_spawner/undertrial_spawner_bottom.png new file mode 100644 index 00000000..a237c760 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undertrial_spawner/undertrial_spawner_bottom.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undertrial_spawner/undertrial_spawner_side_active.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undertrial_spawner/undertrial_spawner_side_active.png new file mode 100644 index 00000000..4d12b978 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undertrial_spawner/undertrial_spawner_side_active.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undertrial_spawner/undertrial_spawner_side_inactive.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undertrial_spawner/undertrial_spawner_side_inactive.png new file mode 100644 index 00000000..2113de32 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undertrial_spawner/undertrial_spawner_side_inactive.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undertrial_spawner/undertrial_spawner_top_active.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undertrial_spawner/undertrial_spawner_top_active.png new file mode 100644 index 00000000..66180ec3 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undertrial_spawner/undertrial_spawner_top_active.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undertrial_spawner/undertrial_spawner_top_ejecting_reward.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undertrial_spawner/undertrial_spawner_top_ejecting_reward.png new file mode 100644 index 00000000..29fbe5f8 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undertrial_spawner/undertrial_spawner_top_ejecting_reward.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undertrial_spawner/undertrial_spawner_top_inactive.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undertrial_spawner/undertrial_spawner_top_inactive.png new file mode 100644 index 00000000..322af278 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undertrial_spawner/undertrial_spawner_top_inactive.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undervault/undervault_bottom.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undervault/undervault_bottom.png new file mode 100644 index 00000000..2aa6ba52 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undervault/undervault_bottom.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undervault/undervault_front_ejecting.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undervault/undervault_front_ejecting.png new file mode 100644 index 00000000..ad847ffa Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undervault/undervault_front_ejecting.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undervault/undervault_front_off.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undervault/undervault_front_off.png new file mode 100644 index 00000000..94d1fcd0 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undervault/undervault_front_off.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undervault/undervault_front_on.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undervault/undervault_front_on.png new file mode 100644 index 00000000..90eac173 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undervault/undervault_front_on.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undervault/undervault_side_off.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undervault/undervault_side_off.png new file mode 100644 index 00000000..10e264c6 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undervault/undervault_side_off.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undervault/undervault_side_on.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undervault/undervault_side_on.png new file mode 100644 index 00000000..ed524a41 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undervault/undervault_side_on.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undervault/undervault_top.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undervault/undervault_top.png new file mode 100644 index 00000000..c477f330 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undervault/undervault_top.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undervault/undervault_top_ejecting.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undervault/undervault_top_ejecting.png new file mode 100644 index 00000000..69883345 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/block/undervault/undervault_top_ejecting.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/crawling_blight.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/crawling_blight.png new file mode 100644 index 00000000..60c1aeea Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/crawling_blight.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/crawling_blight_emissive.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/crawling_blight_emissive.png new file mode 100644 index 00000000..b905c937 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/crawling_blight_emissive.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/flytrap.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/flytrap.png new file mode 100644 index 00000000..00ee04a0 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/flytrap.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/skulking_fright.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/skulking_fright.png new file mode 100644 index 00000000..ce78a925 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/skulking_fright.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/skulking_fright_emissive.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/skulking_fright_emissive.png new file mode 100644 index 00000000..e17f59df Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/skulking_fright_emissive.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/springbug.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/springbug.png new file mode 100644 index 00000000..1f33c503 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/springbug.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/springbug_emissive.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/springbug_emissive.png new file mode 100644 index 00000000..0fdb420d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/springbug_emissive.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/stratoshark/stratoshark.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/stratoshark/stratoshark.png new file mode 100644 index 00000000..45f4ba5a Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/stratoshark/stratoshark.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/stratoshark/stratoshark_emissive.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/stratoshark/stratoshark_emissive.png new file mode 100644 index 00000000..3b8c88e8 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/entity/stratoshark/stratoshark_emissive.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/crawling_blight_egg.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/crawling_blight_egg.png new file mode 100644 index 00000000..3f83ab76 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/crawling_blight_egg.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/flytrap_goo.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/flytrap_goo.png new file mode 100644 index 00000000..c815e500 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/flytrap_goo.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/skulking_fright_egg.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/skulking_fright_egg.png new file mode 100644 index 00000000..6a372140 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/skulking_fright_egg.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/springbug_egg_item.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/springbug_egg_item.png new file mode 100644 index 00000000..820c86db Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/springbug_egg_item.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/springbug_leg.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/springbug_leg.png new file mode 100644 index 00000000..f517ba33 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/springbug_leg.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/springy_boots.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/springy_boots.png new file mode 100644 index 00000000..8a3fd730 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/springy_boots.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/stratoshark_fin.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/stratoshark_fin.png new file mode 100644 index 00000000..e8f50269 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/stratoshark_fin.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/stratoshark_fin_soup.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/stratoshark_fin_soup.png new file mode 100644 index 00000000..2cba050e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/stratoshark_fin_soup.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/item/undertrial_key.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/undertrial_key.png new file mode 100644 index 00000000..893d05c8 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/item/undertrial_key.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/springy_boots_layer_1.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/springy_boots_layer_1.png new file mode 100644 index 00000000..81496667 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/models/armor/springy_boots_layer_1.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/undertrial/undertrial_omen.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/undertrial/undertrial_omen.png new file mode 100644 index 00000000..de1ae001 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/undertrial/undertrial_omen.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/undertrial/undertrial_spawner_detection_0.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/undertrial/undertrial_spawner_detection_0.png new file mode 100644 index 00000000..2af95fbf Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/undertrial/undertrial_spawner_detection_0.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/undertrial/undertrial_spawner_detection_1.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/undertrial/undertrial_spawner_detection_1.png new file mode 100644 index 00000000..ec02cf35 Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/undertrial/undertrial_spawner_detection_1.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/undertrial/undertrial_spawner_detection_2.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/undertrial/undertrial_spawner_detection_2.png new file mode 100644 index 00000000..978f2b8b Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/undertrial/undertrial_spawner_detection_2.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/undertrial/undertrial_spawner_detection_3.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/undertrial/undertrial_spawner_detection_3.png new file mode 100644 index 00000000..1c57c69d Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/undertrial/undertrial_spawner_detection_3.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/undertrial/undertrial_spawner_detection_4.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/undertrial/undertrial_spawner_detection_4.png new file mode 100644 index 00000000..57ff96db Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/undertrial/undertrial_spawner_detection_4.png differ diff --git a/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/undertrial/undervault_connection.png b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/undertrial/undervault_connection.png new file mode 100644 index 00000000..b513a52e Binary files /dev/null and b/common-1.20.1/src/main/resources/assets/antarchy/textures/particle/undertrial/undervault_connection.png differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/anger_the_hive_mind.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/anger_the_hive_mind.json index b7bf748b..8f6700dd 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/anger_the_hive_mind.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancement/anger_the_hive_mind.json @@ -31,7 +31,7 @@ "frame": "task", "icon": { "count": 1, - "id": "antarchy:creeping_horror_spawn_egg" + "id": "antarchy:crawling_blight_spawn_egg" }, "show_toast": true, "title": { diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/shark_weak.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/shark_weak.json index 66b5ab4c..11c3275f 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/shark_weak.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancement/shark_weak.json @@ -1,10 +1,10 @@ { "parent": "antarchy:visit_elythia", "criteria": { - "kill_cloud_shark": { + "kill_stratoshark": { "conditions": { "entity": { - "type": "antarchy:cloud_shark" + "type": "antarchy:stratoshark" } }, "trigger": "minecraft:player_killed_entity" @@ -18,7 +18,7 @@ "frame": "task", "icon": { "count": 1, - "id": "antarchy:cloud_shark_fin" + "id": "antarchy:stratoshark_fin" }, "show_toast": true, "title": { @@ -27,7 +27,7 @@ }, "requirements": [ [ - "kill_cloud_shark" + "kill_stratoshark" ] ], "sends_telemetry_event": true diff --git a/common-1.20.1/src/main/resources/data/antarchy/advancement/soups_up.json b/common-1.20.1/src/main/resources/data/antarchy/advancement/soups_up.json index 1ca68d32..a4cd4c5d 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/advancement/soups_up.json +++ b/common-1.20.1/src/main/resources/data/antarchy/advancement/soups_up.json @@ -5,7 +5,7 @@ "conditions": { "item": { "items": [ - "antarchy:cloud_shark_fin_soup" + "antarchy:stratoshark_fin_soup" ] } }, @@ -20,7 +20,7 @@ "frame": "task", "icon": { "count": 1, - "id": "antarchy:cloud_shark_fin_soup" + "id": "antarchy:stratoshark_fin_soup" }, "show_toast": true, "title": { diff --git a/common-1.20.1/src/main/resources/data/antarchy/damage_type/flytrap_mauling.json b/common-1.20.1/src/main/resources/data/antarchy/damage_type/flytrap_mauling.json new file mode 100644 index 00000000..cbd46d4f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_type/flytrap_mauling.json @@ -0,0 +1,7 @@ +{ + "message_id": "flytrap_mauling", + "scaling": "when_caused_by_living_non_player", + "exhaustion": 0.1, + "effects": "hurt", + "death_message_type": "default" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/damage_type/flytrap_swallow.json b/common-1.20.1/src/main/resources/data/antarchy/damage_type/flytrap_swallow.json new file mode 100644 index 00000000..6569b464 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_type/flytrap_swallow.json @@ -0,0 +1,7 @@ +{ + "message_id": "flytrap_swallow", + "scaling": "when_caused_by_living_non_player", + "exhaustion": 0.1, + "effects": "hurt", + "death_message_type": "default" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/damage_type/springbug_jump.json b/common-1.20.1/src/main/resources/data/antarchy/damage_type/springbug_jump.json new file mode 100644 index 00000000..ebd3b2e0 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/damage_type/springbug_jump.json @@ -0,0 +1,7 @@ +{ + "message_id": "springbug_jump", + "scaling": "when_caused_by_living_non_player", + "exhaustion": 0.1, + "effects": "hurt", + "death_message_type": "default" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/enchantment/chronosphere.json b/common-1.20.1/src/main/resources/data/antarchy/enchantment/chronosphere.json new file mode 100644 index 00000000..61c8b34d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/enchantment/chronosphere.json @@ -0,0 +1,22 @@ +{ + "anvil_cost": 8, + "description": { + "translate": "enchantment.antarchy.chronosphere" + }, + "effects": {}, + "max_cost": { + "base": 55, + "per_level_above_first": 15 + }, + "max_level": 3, + "min_cost": { + "base": 30, + "per_level_above_first": 15 + }, + "primary_items": "#minecraft:enchantable/chest_armor", + "slots": [ + "chest" + ], + "supported_items": "#minecraft:enchantable/chest_armor", + "weight": 1 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/enchantment/feather_rising.json b/common-1.20.1/src/main/resources/data/antarchy/enchantment/feather_rising.json new file mode 100644 index 00000000..b81459c2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/enchantment/feather_rising.json @@ -0,0 +1,22 @@ +{ + "anvil_cost": 4, + "description": { + "translate": "enchantment.antarchy.feather_rising" + }, + "effects": {}, + "max_cost": { + "base": 45, + "per_level_above_first": 0 + }, + "max_level": 1, + "min_cost": { + "base": 25, + "per_level_above_first": 0 + }, + "primary_items": "#minecraft:enchantable/foot_armor", + "slots": [ + "feet" + ], + "supported_items": "#minecraft:enchantable/foot_armor", + "weight": 2 +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/crawling_blight_egg.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/crawling_blight_egg.json new file mode 100644 index 00000000..800dd9b0 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/crawling_blight_egg.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:crawling_blight_egg", + "functions": [ + { + "function": "minecraft:explosion_decay" + } + ] + } + ] + } + ], + "random_sequence": "minecraft:blocks/turtle_egg" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/crawling_blight_eggs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/crawling_blight_eggs.json new file mode 100644 index 00000000..ee8223b7 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/crawling_blight_eggs.json @@ -0,0 +1 @@ +{"type":"minecraft:block","pools":[]} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/flytrap_goo_block.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/flytrap_goo_block.json new file mode 100644 index 00000000..b1a37c0f --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/flytrap_goo_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:flytrap_goo_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ], + "random_sequence": "antarchy:blocks/flytrap_goo_block" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/skulking_fright_egg.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/skulking_fright_egg.json new file mode 100644 index 00000000..a12a34cc --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/skulking_fright_egg.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:skulking_fright_egg", + "functions": [ + { + "function": "minecraft:explosion_decay" + } + ] + } + ] + } + ], + "random_sequence": "minecraft:blocks/turtle_egg" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/skulking_fright_eggs.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/skulking_fright_eggs.json new file mode 100644 index 00000000..ee8223b7 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/skulking_fright_eggs.json @@ -0,0 +1 @@ +{"type":"minecraft:block","pools":[]} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/springbug_egg.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/springbug_egg.json new file mode 100644 index 00000000..ec4d8398 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_table/blocks/springbug_egg.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:springbug_egg" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ], + "random_sequence": "antarchy:blocks/springbug_egg" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/tigers_eye_shrine/treasure.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/tigers_eye_shrine/treasure.json new file mode 100644 index 00000000..d975eaf6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/tigers_eye_shrine/treasure.json @@ -0,0 +1,162 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:uranium_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + } + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:tigers_eye", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:titanium_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 6 + } + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:bone", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:string", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:coal", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:torch", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:rotten_flesh", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:arrow", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 8 + } + } + ] + } + ] + } + ], + "random_sequence": "antarchy:chests/tigers_eye_shrine/treasure" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/undertrial_vault.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/undertrial_vault.json new file mode 100644 index 00000000..e13a824e --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_table/chests/undertrial_vault.json @@ -0,0 +1,135 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 4, + "max": 6 + }, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:ultimate_helmet", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:ultimate_chestplate", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:ultimate_leggings", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:ultimate_boots", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:ultimate_sword", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:ultimate_pickaxe", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:ultimate_axe", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:ultimate_shovel", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:ultimate_hoe", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:ultimate_bow", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "antarchy:ultimate_crossbow", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_potion", + "id": "antarchy:time_contraction" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_potion", + "id": "antarchy:time_dilation" + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:book", + "weight": 4, + "functions": [ + { + "function": "minecraft:enchant_randomly", + "options": [ + "antarchy:chronosphere" + ] + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:queen_scale", + "weight": 1 + }, + { + "type": "minecraft:item", + "name": "minecraft:netherite_scrap", + "weight": 4, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:titanium_block", + "weight": 3 + }, + { + "type": "minecraft:item", + "name": "antarchy:uranium_block", + "weight": 3 + } + ] + } + ], + "random_sequence": "antarchy:chests/undertrial_vault" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/crawling_blight.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/crawling_blight.json new file mode 100644 index 00000000..563a90a5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/crawling_blight.json @@ -0,0 +1,72 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:chitin", + "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" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:raw_bug_meat", + "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" + } + ] + } + ], + "random_sequence": "antarchy:entities/crawling_blight" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/flytrap.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/flytrap.json new file mode 100644 index 00000000..2171a9cc --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/flytrap.json @@ -0,0 +1,39 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:flytrap_goo" + } + ], + "conditions": [ + { + "condition": "minecraft:killed_by_player" + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2.0, + "max": 5.0 + } + }, + { + "function": "minecraft:enchanted_count_increase", + "enchantment": "minecraft:looting", + "count": { + "type": "minecraft:uniform", + "min": 0.0, + "max": 1.0 + } + } + ] + } + ], + "random_sequence": "antarchy:entities/flytrap" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/skulking_fright.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/skulking_fright.json new file mode 100644 index 00000000..ec5d81ff --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/skulking_fright.json @@ -0,0 +1,72 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:chitin", + "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" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:raw_bug_meat", + "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" + } + ] + } + ], + "random_sequence": "antarchy:entities/skulking_fright" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/springbug.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/springbug.json new file mode 100644 index 00000000..4b982ad4 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/springbug.json @@ -0,0 +1,94 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:springbug_leg", + "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 + } + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:chitin", + "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" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:raw_bug_meat", + "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 + } + } + ] + } + ] + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/stratoshark.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/stratoshark.json new file mode 100644 index 00000000..0b515fcb --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_table/entities/stratoshark.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:stratoshark_fin" + } + ], + "conditions": [ + { + "condition": "minecraft:killed_by_player" + } + ] + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/undertrial.json b/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/undertrial.json new file mode 100644 index 00000000..6e105225 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/loot_table/spawners/undertrial.json @@ -0,0 +1,76 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:undertrial_key", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "minecraft:potion", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_potion", + "id": "antarchy:time_dilation" + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:cornea_ear", + "weight": 8, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "antarchy:bluestone", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:diamond", + "weight": 4, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + } + } + ] + } + ] + } + ], + "random_sequence": "antarchy:spawners/undertrial" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/big_bertha_blade.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/big_bertha_blade.json index a571bd07..9593727f 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/big_bertha_blade.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipe/big_bertha_blade.json @@ -20,7 +20,7 @@ "item": "antarchy:ultimate_sword" }, "E": { - "item": "antarchy:cloud_shark_fin" + "item": "antarchy:stratoshark_fin" }, "F": { "item": "antarchy:vortex_charge" diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/big_bertha_hilt.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/big_bertha_hilt.json index 244414ed..eb198b6e 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/big_bertha_hilt.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipe/big_bertha_hilt.json @@ -14,7 +14,7 @@ "item": "antarchy:molevore_nose" }, "C": { - "item": "antarchy:jumpy_bug_leg" + "item": "antarchy:springbug_leg" }, "D": { "item": "antarchy:jerry_nucleus" @@ -29,7 +29,7 @@ "item": "antarchy:hercules_horn" }, "H": { - "item": "antarchy:triffid_goo" + "item": "antarchy:flytrap_goo" } }, "result": { diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/flytrap_goo_block.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/flytrap_goo_block.json new file mode 100644 index 00000000..fb572722 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipe/flytrap_goo_block.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:flytrap_goo" + } + }, + "pattern": [ + "###", + "###", + "###" + ], + "result": { + "id": "antarchy:flytrap_goo_block" + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/jumpy_boots.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/springy_boots.json similarity index 75% rename from common-1.20.1/src/main/resources/data/antarchy/recipe/jumpy_boots.json rename to common-1.20.1/src/main/resources/data/antarchy/recipe/springy_boots.json index ab820d6c..8c0f2e4f 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipe/jumpy_boots.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipe/springy_boots.json @@ -7,14 +7,14 @@ ], "key": { "J": { - "item": "antarchy:jumpy_bug_leg" + "item": "antarchy:springbug_leg" }, "B": { "item": "minecraft:netherite_boots" } }, "result": { - "id": "antarchy:jumpy_boots", + "id": "antarchy:springy_boots", "count": 1 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipe/stratoshark_fin_soup.json b/common-1.20.1/src/main/resources/data/antarchy/recipe/stratoshark_fin_soup.json new file mode 100644 index 00000000..3b9fb7ac --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/recipe/stratoshark_fin_soup.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "food", + "ingredients": [ + { + "item": "antarchy:stratoshark_fin" + }, + { + "item": "minecraft:bowl" + } + ], + "result": { + "id": "antarchy:stratoshark_fin_soup", + "count": 1 + } +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/recipes/jumpy_boots.json b/common-1.20.1/src/main/resources/data/antarchy/recipes/springy_boots.json similarity index 75% rename from common-1.20.1/src/main/resources/data/antarchy/recipes/jumpy_boots.json rename to common-1.20.1/src/main/resources/data/antarchy/recipes/springy_boots.json index fb28dc20..dd43598d 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/recipes/jumpy_boots.json +++ b/common-1.20.1/src/main/resources/data/antarchy/recipes/springy_boots.json @@ -7,14 +7,14 @@ ], "key": { "J": { - "item": "antarchy:jumpy_bug_leg" + "item": "antarchy:springbug_leg" }, "B": { "item": "minecraft:netherite_boots" } }, "result": { - "item": "antarchy:jumpy_boots", + "item": "antarchy:springy_boots", "count": 1 } } diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/tigers_eye_shrine/tigers_eye_shrine.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/tigers_eye_shrine/tigers_eye_shrine.nbt new file mode 100644 index 00000000..dd2c9b17 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structure/tigers_eye_shrine/tigers_eye_shrine.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_castle/underside_castle1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_castle/underside_castle1.nbt new file mode 100644 index 00000000..744c57f8 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_castle/underside_castle1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_castle/underside_castle2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_castle/underside_castle2.nbt new file mode 100644 index 00000000..a479d68e Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_castle/underside_castle2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_castle/underside_castle3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_castle/underside_castle3.nbt new file mode 100644 index 00000000..d306cb1c Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_castle/underside_castle3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_castle/underside_castle4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_castle/underside_castle4.nbt new file mode 100644 index 00000000..6c7ce256 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_castle/underside_castle4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins1.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins1.nbt new file mode 100644 index 00000000..af7af582 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins1.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins2.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins2.nbt new file mode 100644 index 00000000..b135357f Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins2.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins3.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins3.nbt new file mode 100644 index 00000000..aac127dd Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins3.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins4.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins4.nbt new file mode 100644 index 00000000..2af8c37d Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins4.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins5.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins5.nbt new file mode 100644 index 00000000..e5567a22 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins5.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins6.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins6.nbt new file mode 100644 index 00000000..88af2955 Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins6.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins7.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins7.nbt new file mode 100644 index 00000000..82e4c41c Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins7.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins8.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins8.nbt new file mode 100644 index 00000000..9c40094a Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins8.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins9.nbt b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins9.nbt new file mode 100644 index 00000000..5e3eee4f Binary files /dev/null and b/common-1.20.1/src/main/resources/data/antarchy/structure/underside_ruins/underside_ruins9.nbt differ diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/dread_hallucination_mobs.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/dread_hallucination_mobs.json index c3129700..5f5b3a37 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/dread_hallucination_mobs.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/dread_hallucination_mobs.json @@ -11,7 +11,7 @@ "minecraft:skeleton", "minecraft:spider", "antarchy:toreterror", - "antarchy:creeping_horror", - "antarchy:lurking_terror" + "antarchy:crawling_blight", + "antarchy:skulking_fright" ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/flytrap_prey.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/flytrap_prey.json new file mode 100644 index 00000000..c6fb3f7c --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/flytrap_prey.json @@ -0,0 +1,12 @@ +{ + "replace": false, + "values": [ + "antarchy:flying_squirrel", + "antarchy:caterpillar", + "antarchy:butterfly", + "minecraft:chicken", + "minecraft:rabbit", + "minecraft:frog", + "minecraft:parrot" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/horde_common.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/horde_common.json index 3cc117aa..fb7759ba 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/horde_common.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/horde_common.json @@ -1,6 +1,6 @@ { "values": [ - "antarchy:creeping_horror", - "antarchy:lurking_terror" + "antarchy:crawling_blight", + "antarchy:skulking_fright" ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/horde_jumpers.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/horde_jumpers.json index 298fd78a..aaf442db 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/horde_jumpers.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/horde_jumpers.json @@ -1,5 +1,5 @@ { "values": [ - "antarchy:jumpy_bug" + "antarchy:springbug" ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/inverted_immune.json b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/inverted_immune.json index c6e6097f..472cb199 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/inverted_immune.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/entity_type/inverted_immune.json @@ -5,7 +5,7 @@ "antarchy:kraken", "antarchy:reverie", "antarchy:lucid", - "antarchy:triffid", + "antarchy:flytrap", "antarchy:king" ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/item/big_bertha_ingredient.json b/common-1.20.1/src/main/resources/data/antarchy/tags/item/big_bertha_ingredient.json index e46cf9ad..935bc10b 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/item/big_bertha_ingredient.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/item/big_bertha_ingredient.json @@ -8,7 +8,7 @@ "antarchy:basilisk_fang", "antarchy:emperor_scorpion_stinger", "antarchy:ultimate_sword", - "antarchy:cloud_shark_fin", + "antarchy:stratoshark_fin", "antarchy:vortex_charge", "antarchy:kraken_tooth", "antarchy:mantis_claw", @@ -18,11 +18,11 @@ "antarchy:gravity_gun", "antarchy:nightmare_scale", "antarchy:molevore_nose", - "antarchy:jumpy_bug_leg", + "antarchy:springbug_leg", "antarchy:jerry_nucleus", "antarchy:primordial_scute", "antarchy:worm_tooth", "antarchy:hercules_horn", - "antarchy:triffid_goo" + "antarchy:flytrap_goo" ] } diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/sound_event/dread_hallucination_sounds.json b/common-1.20.1/src/main/resources/data/antarchy/tags/sound_event/dread_hallucination_sounds.json index b578f58d..34f98e79 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/tags/sound_event/dread_hallucination_sounds.json +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/sound_event/dread_hallucination_sounds.json @@ -16,8 +16,8 @@ "antarchy:bed_bug_attack", "antarchy:scorpion_ambient", "antarchy:scorpion_attack", - "antarchy:cloud_shark_idle", - "antarchy:cloud_shark_bite", + "antarchy:stratoshark_idle", + "antarchy:stratoshark_bite", "antarchy:nightmare_idle", "antarchy:nightmare_hurt", "antarchy:nightmare_roar", diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/tigers_eye_shrine_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/tigers_eye_shrine_biomes.json new file mode 100644 index 00000000..f719dc79 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/tigers_eye_shrine_biomes.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "#antarchy:is_cavaryn" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/underside_castle_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/underside_castle_biomes.json new file mode 100644 index 00000000..144a3162 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/underside_castle_biomes.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:dream_dunes" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/underside_ruins_biomes.json b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/underside_ruins_biomes.json new file mode 100644 index 00000000..144a3162 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/underside_ruins_biomes.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:dream_dunes" + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/brooding_tunnels.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/brooding_tunnels.json index c9b515a3..fdaf9a4a 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/brooding_tunnels.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/brooding_tunnels.json @@ -20,17 +20,15 @@ "options": { "type": "antarchy:orange_ash" } + }, + "music": { + "sound": "antarchy:music.game.cavaryn", + "min_delay": 600, + "max_delay": 1800, + "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": [], @@ -58,32 +56,26 @@ "antarchy:brooding_tunnels_hanging_creeproots", "antarchy:molting_vines", "antarchy:ground_molting_vines", - "antarchy:jumpy_bug_egg_ceiling", + "antarchy:springbug_egg_ceiling", "antarchy:spit_bug_egg_patch" ] ], - "creature_spawn_probability": 0.12, + "creature_spawn_probability": 0.98, "spawners": { "monster": [ - { - "type": "antarchy:jumpy_bug", - "weight": 95, - "minCount": 1, - "maxCount": 3 - } ], "creature": [ { "type": "antarchy:rolly_polly", - "weight": 25, - "minCount": 1, - "maxCount": 3 + "weight": 300, + "minCount": 4, + "maxCount": 8 }, { "type": "antarchy:stink_bug", - "weight": 35, - "minCount": 2, - "maxCount": 4 + "weight": 450, + "minCount": 4, + "maxCount": 8 }], "ambient": [ ], diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/cloud_sea.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/cloud_sea.json index 11160712..4568e4ce 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/cloud_sea.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/cloud_sea.json @@ -18,13 +18,13 @@ }, "music": { "sound": "antarchy:music.game.elythia", - "min_delay": 12000, - "max_delay": 24000, + "min_delay": 600, + "max_delay": 1800, "replace_current_music": true } }, "spawn_costs": { - "antarchy:cloud_shark": { + "antarchy:stratoshark": { "energy_budget": 0.15, "charge": 22 } @@ -54,7 +54,7 @@ "ambient": [], "monster": [ { - "type": "antarchy:cloud_shark", + "type": "antarchy:stratoshark", "weight": 10, "minCount": 1, "maxCount": 2 diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/ouranwood_forest.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/ouranwood_forest.json index 5a399930..c8b8a736 100644 --- a/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/ouranwood_forest.json +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/biome/ouranwood_forest.json @@ -25,6 +25,12 @@ "tick_delay": 6000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "antarchy:music.game.elythia", + "min_delay": 600, + "max_delay": 1800, + "replace_current_music": true } }, "spawn_costs": { @@ -59,6 +65,7 @@ "minecraft:ore_redstone", "minecraft:ore_redstone_lower", "minecraft:ore_diamond", + "minecraft:ore_diamond_medium", "minecraft:ore_diamond_large", "minecraft:ore_diamond_buried", "minecraft:ore_lapis", @@ -78,7 +85,7 @@ "antarchy:elythia_rainbow_ant_nests" ], [ - "antarchy:triffid_patch" + "antarchy:flytrap_patch" ] ], "creature_spawn_probability": 0.07, diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/flytrap_patch.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/flytrap_patch.json new file mode 100644 index 00000000..c8353cdd --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/flytrap_patch.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:flytrap_patch", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/queen_havoc_trail.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/queen_havoc_trail.json new file mode 100644 index 00000000..824aca66 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/queen_havoc_trail.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:queen_havoc_trail", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/springbug_egg_ceiling.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/springbug_egg_ceiling.json new file mode 100644 index 00000000..b301c183 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/springbug_egg_ceiling.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:springbug_egg_ceiling", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/thoraxis_transition_throat.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/thoraxis_transition_throat.json new file mode 100644 index 00000000..e82cb683 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/configured_feature/thoraxis_transition_throat.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:thoraxis_transition_throat", + "config": {} +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/flytrap_patch.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/flytrap_patch.json new file mode 100644 index 00000000..8d03f532 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/flytrap_patch.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:flytrap_patch", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 160 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "WORLD_SURFACE_WG" + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/queen_havoc_trail.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/queen_havoc_trail.json new file mode 100644 index 00000000..53b84287 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/queen_havoc_trail.json @@ -0,0 +1,4 @@ +{ + "feature": "antarchy:queen_havoc_trail", + "placement": [] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/springbug_egg_ceiling.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/springbug_egg_ceiling.json new file mode 100644 index 00000000..6d37e55a --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/springbug_egg_ceiling.json @@ -0,0 +1,31 @@ +{ + "feature": "antarchy:springbug_egg_ceiling", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "minecraft:uniform", + "min_inclusive": 1, + "max_inclusive": 2 + } + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "absolute": 5 + }, + "max_inclusive": { + "absolute": 190 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/thoraxis_transition_throat.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/thoraxis_transition_throat.json new file mode 100644 index 00000000..fc182af6 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/placed_feature/thoraxis_transition_throat.json @@ -0,0 +1,24 @@ +{ + "feature": "antarchy:thoraxis_transition_throat", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 128 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:constant", + "value": { + "absolute": 0 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/tigers_eye_shrine.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/tigers_eye_shrine.json new file mode 100644 index 00000000..847e8bfc --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/tigers_eye_shrine.json @@ -0,0 +1,22 @@ +{ + "type": "integrated_api:generic_structure", + "start_pool": "antarchy:tigers_eye_shrine/tigers_eye_shrine", + "size": 1, + "terrain_height_radius_check": 4, + "allowed_terrain_height_range": 14, + "valid_biome_radius_check": 1, + "biomes": "#antarchy:has_structure/tigers_eye_shrine_biomes", + "step": "surface_structures", + "enhanced_terrain_adaptation": { + "type": "integrated_api:none" + }, + "project_start_to_heightmap": "WORLD_SURFACE_WG", + "start_height": { + "type": "minecraft:constant", + "value": { + "absolute": 0 + } + }, + "spawn_overrides": {}, + "liquid_settings": "ignore_waterlogging" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/underside_castle.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/underside_castle.json new file mode 100644 index 00000000..b58b7c96 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/underside_castle.json @@ -0,0 +1,32 @@ +{ + "type": "integrated_api:ceiling_structure", + "start_pool": "antarchy:underside_castle/underside_castle", + "size": 1, + "y_allowance": { + "min_y_allowed": -256, + "max_y_allowed": 24 + }, + "valid_biome_radius_check": 1, + "biomes": "#antarchy:has_structure/underside_castle_biomes", + "step": "underground_structures", + "enhanced_terrain_adaptation": { + "type": "integrated_api:custom", + "carves": true, + "beards": true, + "kernel_size": 35, + "kernel_distance": 35, + "direction": "up" + }, + "start_height": { + "type": "minecraft:constant", + "value": { + "absolute": -128 + } + }, + "max_roof_search_distance": 256, + "min_roof_thickness": 3, + "min_open_space_below": 16, + "ceiling_offset": 0, + "spawn_overrides": {}, + "liquid_settings": "ignore_waterlogging" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/underside_ruins.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/underside_ruins.json new file mode 100644 index 00000000..a2a448d5 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/structure/underside_ruins.json @@ -0,0 +1,32 @@ +{ + "type": "integrated_api:ceiling_structure", + "start_pool": "antarchy:underside_ruins/underside_ruins", + "size": 1, + "y_allowance": { + "min_y_allowed": -256, + "max_y_allowed": 24 + }, + "valid_biome_radius_check": 1, + "biomes": "#antarchy:has_structure/underside_ruins_biomes", + "step": "underground_structures", + "enhanced_terrain_adaptation": { + "type": "integrated_api:custom", + "carves": true, + "beards": true, + "kernel_size": 35, + "kernel_distance": 35, + "direction": "up" + }, + "start_height": { + "type": "minecraft:constant", + "value": { + "absolute": -128 + } + }, + "max_roof_search_distance": 256, + "min_roof_thickness": 3, + "min_open_space_below": 16, + "ceiling_offset": 0, + "spawn_overrides": {}, + "liquid_settings": "ignore_waterlogging" +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/tigers_eye_shrine/tigers_eye_shrine.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/tigers_eye_shrine/tigers_eye_shrine.json new file mode 100644 index 00000000..bea82d8d --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/tigers_eye_shrine/tigers_eye_shrine.json @@ -0,0 +1,22 @@ +{ + "name": "antarchy:tigers_eye_shrine/tigers_eye_shrine", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:tigers_eye_shrine/tigers_eye_shrine", + "processors": "antarchy:generic_processor", + "projection": "rigid", + "enhanced_terrain_adaptation": { + "type": "integrated_api:custom", + "carves": true, + "beards": true, + "kernel_size": 35, + "kernel_distance": 35 + }, + "element_type": "integrated_api:integrated_api_single_pool_element" + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/underside_castle/underside_castle.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/underside_castle/underside_castle.json new file mode 100644 index 00000000..0fefe6d2 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/underside_castle/underside_castle.json @@ -0,0 +1,42 @@ +{ + "name": "antarchy:underside_castle/underside_castle", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:underside_castle/underside_castle1", + "processors": "antarchy:generic_processor", + "projection": "rigid", + "element_type": "integrated_api:integrated_api_single_pool_element" + } + }, + { + "weight": 1, + "element": { + "location": "antarchy:underside_castle/underside_castle2", + "processors": "antarchy:generic_processor", + "projection": "rigid", + "element_type": "integrated_api:integrated_api_single_pool_element" + } + }, + { + "weight": 1, + "element": { + "location": "antarchy:underside_castle/underside_castle3", + "processors": "antarchy:generic_processor", + "projection": "rigid", + "element_type": "integrated_api:integrated_api_single_pool_element" + } + }, + { + "weight": 1, + "element": { + "location": "antarchy:underside_castle/underside_castle4", + "processors": "antarchy:generic_processor", + "projection": "rigid", + "element_type": "integrated_api:integrated_api_single_pool_element" + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/underside_ruins/underside_ruins.json b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/underside_ruins/underside_ruins.json new file mode 100644 index 00000000..4bccd686 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/antarchy/worldgen/template_pool/underside_ruins/underside_ruins.json @@ -0,0 +1,87 @@ +{ + "name": "antarchy:underside_ruins/underside_ruins", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:underside_ruins/underside_ruins1", + "processors": "antarchy:generic_processor", + "projection": "rigid", + "element_type": "integrated_api:integrated_api_single_pool_element" + } + }, + { + "weight": 1, + "element": { + "location": "antarchy:underside_ruins/underside_ruins2", + "processors": "antarchy:generic_processor", + "projection": "rigid", + "element_type": "integrated_api:integrated_api_single_pool_element" + } + }, + { + "weight": 1, + "element": { + "location": "antarchy:underside_ruins/underside_ruins3", + "processors": "antarchy:generic_processor", + "projection": "rigid", + "element_type": "integrated_api:integrated_api_single_pool_element" + } + }, + { + "weight": 1, + "element": { + "location": "antarchy:underside_ruins/underside_ruins4", + "processors": "antarchy:generic_processor", + "projection": "rigid", + "element_type": "integrated_api:integrated_api_single_pool_element" + } + }, + { + "weight": 1, + "element": { + "location": "antarchy:underside_ruins/underside_ruins5", + "processors": "antarchy:generic_processor", + "projection": "rigid", + "element_type": "integrated_api:integrated_api_single_pool_element" + } + }, + { + "weight": 1, + "element": { + "location": "antarchy:underside_ruins/underside_ruins6", + "processors": "antarchy:generic_processor", + "projection": "rigid", + "element_type": "integrated_api:integrated_api_single_pool_element" + } + }, + { + "weight": 1, + "element": { + "location": "antarchy:underside_ruins/underside_ruins7", + "processors": "antarchy:generic_processor", + "projection": "rigid", + "element_type": "integrated_api:integrated_api_single_pool_element" + } + }, + { + "weight": 1, + "element": { + "location": "antarchy:underside_ruins/underside_ruins8", + "processors": "antarchy:generic_processor", + "projection": "rigid", + "element_type": "integrated_api:integrated_api_single_pool_element" + } + }, + { + "weight": 1, + "element": { + "location": "antarchy:underside_ruins/underside_ruins9", + "processors": "antarchy:generic_processor", + "projection": "rigid", + "element_type": "integrated_api:integrated_api_single_pool_element" + } + } + ] +} diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/boots.json b/common-1.20.1/src/main/resources/data/c/tags/item/boots.json index 8a5ef992..781ec3cb 100644 --- a/common-1.20.1/src/main/resources/data/c/tags/item/boots.json +++ b/common-1.20.1/src/main/resources/data/c/tags/item/boots.json @@ -5,7 +5,7 @@ "antarchy:nightmare_boots", "antarchy:blood_crystal_boots", "antarchy:primordial_boots", - "antarchy:jumpy_boots", + "antarchy:springy_boots", "antarchy:royal_guardian_boots", "antarchy:royal_assailant_boots" ] diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/enchantables.json b/common-1.20.1/src/main/resources/data/c/tags/item/enchantables.json index 4c2a9e67..6fb5716b 100644 --- a/common-1.20.1/src/main/resources/data/c/tags/item/enchantables.json +++ b/common-1.20.1/src/main/resources/data/c/tags/item/enchantables.json @@ -1,7 +1,7 @@ { "replace": false, "values": [ - "antarchy:jumpy_boots", + "antarchy:springy_boots", "antarchy:royal_guardian_shield", "antarchy:royal_assailant_staff" ] diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/foods/soup.json b/common-1.20.1/src/main/resources/data/c/tags/item/foods/soup.json index 0e21e13e..79d431f7 100644 --- a/common-1.20.1/src/main/resources/data/c/tags/item/foods/soup.json +++ b/common-1.20.1/src/main/resources/data/c/tags/item/foods/soup.json @@ -1,6 +1,6 @@ { "replace": false, "values": [ - "antarchy:cloud_shark_fin_soup" + "antarchy:stratoshark_fin_soup" ] } diff --git a/common-1.20.1/src/main/resources/data/c/tags/item/slime_balls.json b/common-1.20.1/src/main/resources/data/c/tags/item/slime_balls.json index 74e34e54..21acb8ee 100644 --- a/common-1.20.1/src/main/resources/data/c/tags/item/slime_balls.json +++ b/common-1.20.1/src/main/resources/data/c/tags/item/slime_balls.json @@ -2,6 +2,6 @@ "replace": false, "values": [ "minecraft:slime_ball", - "antarchy:triffid_goo" + "antarchy:flytrap_goo" ] } diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/boots.json b/common-1.20.1/src/main/resources/data/c/tags/items/boots.json index f04449ad..8f7897a9 100644 --- a/common-1.20.1/src/main/resources/data/c/tags/items/boots.json +++ b/common-1.20.1/src/main/resources/data/c/tags/items/boots.json @@ -5,6 +5,6 @@ "antarchy:nightmare_boots", "antarchy:blood_crystal_boots", "antarchy:primordial_boots", - "antarchy:jumpy_boots" + "antarchy:springy_boots" ] } diff --git a/common-1.20.1/src/main/resources/data/c/tags/items/enchantables.json b/common-1.20.1/src/main/resources/data/c/tags/items/enchantables.json index a8b524a7..a6582f60 100644 --- a/common-1.20.1/src/main/resources/data/c/tags/items/enchantables.json +++ b/common-1.20.1/src/main/resources/data/c/tags/items/enchantables.json @@ -1,6 +1,6 @@ { "replace": false, "values": [ - "antarchy:jumpy_boots" + "antarchy:springy_boots" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/enchantment/treasure.json b/common-1.20.1/src/main/resources/data/minecraft/tags/enchantment/treasure.json new file mode 100644 index 00000000..7ba3f616 --- /dev/null +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/enchantment/treasure.json @@ -0,0 +1,6 @@ +{ + "values": [ + "antarchy:feather_rising", + "antarchy:chronosphere" + ] +} diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/entity_type/arthropod.json b/common-1.20.1/src/main/resources/data/minecraft/tags/entity_type/arthropod.json index 042bce23..164f337d 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/entity_type/arthropod.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/entity_type/arthropod.json @@ -9,12 +9,12 @@ "antarchy:bed_bug", "antarchy:mantis", "antarchy:alpha_mantis", - "antarchy:jumpy_bug", + "antarchy:springbug", "antarchy:spit_bug", "antarchy:stink_bug", "antarchy:hercules_beetle", - "antarchy:creeping_horror", - "antarchy:lurking_terror", + "antarchy:crawling_blight", + "antarchy:skulking_fright", "antarchy:rolly_polly", "antarchy:scorpion", "antarchy:emperor_scorpion", diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/durability.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/durability.json index c6bc0cba..65b1799d 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/durability.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/durability.json @@ -29,7 +29,7 @@ "antarchy:blood_crystal_chestplate", "antarchy:blood_crystal_leggings", "antarchy:blood_crystal_boots", - "antarchy:jumpy_boots", + "antarchy:springy_boots", "antarchy:fallen_king_crown", "antarchy:water_cannon", "antarchy:manticore_wings", diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/equippable.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/equippable.json index 11c3af02..82295b97 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/equippable.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/equippable.json @@ -5,7 +5,7 @@ "antarchy:ultimate_bow", "antarchy:ultimate_crossbow", "antarchy:brutalfly_elytra", - "antarchy:jumpy_boots", + "antarchy:springy_boots", "antarchy:manticore_wings", "antarchy:royal_assailant_battleaxe" ] diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/vanishing.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/vanishing.json index 4c2a9e67..6fb5716b 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/vanishing.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/item/enchantable/vanishing.json @@ -1,7 +1,7 @@ { "replace": false, "values": [ - "antarchy:jumpy_boots", + "antarchy:springy_boots", "antarchy:royal_guardian_shield", "antarchy:royal_assailant_staff" ] diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/foot_armor.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/foot_armor.json index 8a5ef992..781ec3cb 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/foot_armor.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/item/foot_armor.json @@ -5,7 +5,7 @@ "antarchy:nightmare_boots", "antarchy:blood_crystal_boots", "antarchy:primordial_boots", - "antarchy:jumpy_boots", + "antarchy:springy_boots", "antarchy:royal_guardian_boots", "antarchy:royal_assailant_boots" ] diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/slime_balls.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/slime_balls.json index 1c54cc36..9d466faa 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/slime_balls.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/item/slime_balls.json @@ -1,6 +1,6 @@ { "replace": false, "values": [ - "antarchy:triffid_goo" + "antarchy:flytrap_goo" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/item/trimmable_armor.json b/common-1.20.1/src/main/resources/data/minecraft/tags/item/trimmable_armor.json index e100789d..1e349f4d 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/item/trimmable_armor.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/item/trimmable_armor.json @@ -15,7 +15,7 @@ "antarchy:nightmare_helmet", "antarchy:primordial_helmet", "antarchy:blood_crystal_helmet", - "antarchy:jumpy_boots", + "antarchy:springy_boots", "antarchy:tigers_eye_helmet", "antarchy:tigers_eye_chestplate", "antarchy:tigers_eye_leggings", diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/durability.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/durability.json index e5ba50fc..a548fa26 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/durability.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/durability.json @@ -29,7 +29,7 @@ "antarchy:blood_crystal_chestplate", "antarchy:blood_crystal_leggings", "antarchy:blood_crystal_boots", - "antarchy:jumpy_boots", + "antarchy:springy_boots", "antarchy:fallen_king_crown", "antarchy:water_cannon" ] diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/equippable.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/equippable.json index 864900e5..6ea500f8 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/equippable.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/equippable.json @@ -5,6 +5,6 @@ "antarchy:ultimate_bow", "antarchy:ultimate_crossbow", "antarchy:brutalfly_elytra", - "antarchy:jumpy_boots" + "antarchy:springy_boots" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/vanishing.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/vanishing.json index a8b524a7..a6582f60 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/vanishing.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/enchantable/vanishing.json @@ -1,6 +1,6 @@ { "replace": false, "values": [ - "antarchy:jumpy_boots" + "antarchy:springy_boots" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/foot_armor.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/foot_armor.json index f04449ad..8f7897a9 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/foot_armor.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/foot_armor.json @@ -5,6 +5,6 @@ "antarchy:nightmare_boots", "antarchy:blood_crystal_boots", "antarchy:primordial_boots", - "antarchy:jumpy_boots" + "antarchy:springy_boots" ] } diff --git a/common-1.20.1/src/main/resources/data/minecraft/tags/items/trimmable_armor.json b/common-1.20.1/src/main/resources/data/minecraft/tags/items/trimmable_armor.json index 62754ec1..575979e7 100644 --- a/common-1.20.1/src/main/resources/data/minecraft/tags/items/trimmable_armor.json +++ b/common-1.20.1/src/main/resources/data/minecraft/tags/items/trimmable_armor.json @@ -15,6 +15,6 @@ "antarchy:nightmare_helmet", "antarchy:primordial_helmet", "antarchy:blood_crystal_helmet", - "antarchy:jumpy_boots" + "antarchy:springy_boots" ] } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/Antarchy.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/Antarchy.java index e62cdde1..79a67ad2 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/Antarchy.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/Antarchy.java @@ -1,6 +1,7 @@ package com.craisinlord.antarchy; import com.craisinlord.antarchy.content.util.AttributeRangeInit; +import com.craisinlord.antarchy.content.worldgen.VillagePoolAdditions; import com.craisinlord.integrated_api.events.lifecycle.ServerGoingToStartEvent; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -16,5 +17,6 @@ public class Antarchy { ServerGoingToStartEvent.EVENT.addListener(Antarchy::serverAboutToStart); } private static void serverAboutToStart(final ServerGoingToStartEvent event) { + VillagePoolAdditions.apply(event.getServer()); } } 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 1933c01c..0b80bcbe 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 @@ -247,8 +247,8 @@ public final class AntarchySettings { private static double princessArmor = 8.0D; private static double princessKnockbackResistance = 0.5D; private static double princessFollowRange = 48.0D; - private static double kingHealth = 6000.0D; - private static double queenHealth = 6000.0D; + private static double kingHealth = 3400.0D; + private static double queenHealth = 4300.0D; private static double kingAttackDamage = 50.0D; private static double queenAttackDamage = 45.0D; private static double royalBossSoundVolume = 4.5D; @@ -256,10 +256,6 @@ public final class AntarchySettings { private static int queenBlackHoleActiveTicks = 120; private static double queenBlackHolePullStrength = 0.16D; private static int queenBlackHoleBlockSuctionCap = 160; - private static double queenFinalTimeFieldRadius = 20.0D; - private static double queenFinalTimeFieldRate = 0.05D; - private static int queenFinalTimeFieldDurationTicks = 45; - private static int queenFinalTimeFieldCooldownTicks = 80; private static double kingFireballDamage = 32.0D; private static double kingFireballRadius = 4.5D; private static int kingFireballCooldownTicks = 150; @@ -270,6 +266,7 @@ public final class AntarchySettings { private static int kingIceSpikeCooldownTicks = 240; private static int kingElementalTerrainCap = 256; private static double royalBossArmor = 20.0D; + private static double kingArmor = 30.0D; private static double royalBossFollowRange = 128.0D; private static double royalBossMovementSpeed = 0.22D; private static double royalBossKnockbackResistance = 1.0D; @@ -278,6 +275,13 @@ public final class AntarchySettings { private static double royalBossBiteReach = 12.0D; private static double royalBossBiteDamageMultiplier = 1.6D; private static int royalBossBiteCooldownTicks = 45; + private static boolean royalBossMultiplayerScalingEnabled = true; + private static int royalBossScalingMaxPlayers = 4; + private static double royalBossHealthPerAdditionalPlayer = 0.35D; + private static double royalBossDamagePerAdditionalPlayer = 0.10D; + private static double royalBoundaryRadius = 192.0D; + private static double royalBoundaryWarningRadius = 160.0D; + private static int royalBoundaryGraceTicks = 60; private static boolean basiliskPetrifyingGazeEnabled = true; private static int basiliskSpawnMaxLightLevel = 5; private static double basiliskHealth = 320.0D; @@ -546,7 +550,7 @@ public final class AntarchySettings { private static double manticoreHealth = 40.0D; private static double manticoreAttackDamage = 7.0D; private static int manticoreStingPoisonTicks = 100; - private static int queenManticoreCap = 6; + private static int queenManticoreCap = 15; private static int queenManticoreSummonCooldownTicks = 800; private static int queenManticoreSummonCount = 2; private static double queenManticoreSummonRange = 24.0D; @@ -2067,14 +2071,6 @@ public final class AntarchySettings { public static void setQueenBlackHolePullStrength(double v) { queenBlackHolePullStrength = v; } public static int queenBlackHoleBlockSuctionCap() { return queenBlackHoleBlockSuctionCap; } public static void setQueenBlackHoleBlockSuctionCap(int v) { queenBlackHoleBlockSuctionCap = v; } - public static double queenFinalTimeFieldRadius() { return queenFinalTimeFieldRadius; } - public static void setQueenFinalTimeFieldRadius(double v) { queenFinalTimeFieldRadius = v; } - public static double queenFinalTimeFieldRate() { return queenFinalTimeFieldRate; } - public static void setQueenFinalTimeFieldRate(double v) { queenFinalTimeFieldRate = v; } - public static int queenFinalTimeFieldDurationTicks() { return queenFinalTimeFieldDurationTicks; } - public static void setQueenFinalTimeFieldDurationTicks(int v) { queenFinalTimeFieldDurationTicks = v; } - public static int queenFinalTimeFieldCooldownTicks() { return queenFinalTimeFieldCooldownTicks; } - public static void setQueenFinalTimeFieldCooldownTicks(int v) { queenFinalTimeFieldCooldownTicks = v; } public static double kingFireballDamage() { return kingFireballDamage; } public static void setKingFireballDamage(double v) { kingFireballDamage = v; } public static double kingFireballRadius() { return kingFireballRadius; } @@ -2096,6 +2092,8 @@ public final class AntarchySettings { public static double royalBossArmor() { return royalBossArmor; } public static void setRoyalBossArmor(double v) { royalBossArmor = v; } + public static double kingArmor() { return kingArmor; } + public static void setKingArmor(double v) { kingArmor = v; } public static double royalBossFollowRange() { return royalBossFollowRange; } public static void setRoyalBossFollowRange(double v) { royalBossFollowRange = v; } @@ -2120,6 +2118,20 @@ public final class AntarchySettings { public static int royalBossBiteCooldownTicks() { return royalBossBiteCooldownTicks; } public static void setRoyalBossBiteCooldownTicks(int v) { royalBossBiteCooldownTicks = v; } + public static boolean royalBossMultiplayerScalingEnabled() { return royalBossMultiplayerScalingEnabled; } + public static void setRoyalBossMultiplayerScalingEnabled(boolean v) { royalBossMultiplayerScalingEnabled = v; } + public static int royalBossScalingMaxPlayers() { return royalBossScalingMaxPlayers; } + public static void setRoyalBossScalingMaxPlayers(int v) { royalBossScalingMaxPlayers = v; } + public static double royalBossHealthPerAdditionalPlayer() { return royalBossHealthPerAdditionalPlayer; } + public static void setRoyalBossHealthPerAdditionalPlayer(double v) { royalBossHealthPerAdditionalPlayer = v; } + public static double royalBossDamagePerAdditionalPlayer() { return royalBossDamagePerAdditionalPlayer; } + public static void setRoyalBossDamagePerAdditionalPlayer(double v) { royalBossDamagePerAdditionalPlayer = v; } + public static double royalBoundaryRadius() { return royalBoundaryRadius; } + public static void setRoyalBoundaryRadius(double v) { royalBoundaryRadius = v; } + public static double royalBoundaryWarningRadius() { return royalBoundaryWarningRadius; } + public static void setRoyalBoundaryWarningRadius(double v) { royalBoundaryWarningRadius = v; } + public static int royalBoundaryGraceTicks() { return royalBoundaryGraceTicks; } + public static void setRoyalBoundaryGraceTicks(int v) { royalBoundaryGraceTicks = v; } public static double nightmareSwordBaseDamage() { return nightmareSwordBaseDamage; } public static void setNightmareSwordBaseDamage(double v) { nightmareSwordBaseDamage = v; } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/antmail/AntmailEventData.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/antmail/AntmailEventData.java new file mode 100644 index 00000000..688605c9 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/antmail/AntmailEventData.java @@ -0,0 +1,102 @@ +package com.craisinlord.antarchy.content.antmail; + +import com.google.gson.JsonElement; +import com.google.gson.JsonParser; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.packs.resources.ResourceManager; +import net.minecraft.server.packs.resources.SimplePreparableReloadListener; +import net.minecraft.util.profiling.ProfilerFiller; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.advancements.AdvancementHolder; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public final class AntmailEventData extends SimplePreparableReloadListener> { + private static final AntmailEventData INSTANCE = new AntmailEventData(); + private static volatile Map definitions = Map.of(); + private AntmailEventData() { + } + + public static AntmailEventData instance() { + return INSTANCE; + } + + public static void onTick(MinecraftServer server) { + long dayTime = server.overworld().getDayTime(); + long day = dayTime / 24000L; + if (dayTime % 24000L >= 20L) return; + AntmailServerData data = AntmailServerData.access(server); + if (!data.beginRandomMailDay(day)) return; + for (AntmailAddress address : data.registeredAddresses()) { + for (Map.Entry entry : definitions.entrySet()) { + Definition definition = entry.getValue(); + if (definition.trigger().type().equals("random") && server.overworld().random.nextDouble() < definition.trigger().chance()) deliver(server, address, entry.getKey(), definition, false); + } + } + } + + public static void onAdvancement(ServerPlayer player, AdvancementHolder advancement) { + AntmailServerData data = AntmailServerData.access(player.server); + AntmailAddress address = data.lastUsedAddress(player); + if (address == null) return; + for (Map.Entry entry : definitions.entrySet()) { + Trigger trigger = entry.getValue().trigger(); + if (trigger.type().equals("advancement") && trigger.value().equals(advancement.id().toString())) deliver(player.server, address, entry.getKey(), entry.getValue(), true); + } + } + + private static void deliver(MinecraftServer server, AntmailAddress recipient, ResourceLocation id, Definition definition, boolean permanentClaim) { + AntmailServerData data = AntmailServerData.access(server); + try { + AntmailAddress sender = AntmailAddress.parse(definition.sender()); + AntmailMessage message = AntmailMessage.create(sender, recipient, definition.subject(), definition.body(), server.overworld().getGameTime(), List.of()); + AntmailDeliveryResult result = data.deliver(server, message); + if (permanentClaim && result.status() != AntmailDeliveryResult.Status.MAILBOX_FULL + && result.status() != AntmailDeliveryResult.Status.FAILED + && result.status() != AntmailDeliveryResult.Status.ADDRESS_NOT_FOUND) { + data.claimTrigger(recipient, id); + } + } catch (IllegalArgumentException ignored) { + } + } + + @Override + protected Map prepare(ResourceManager manager, ProfilerFiller profiler) { + Map loaded = new HashMap<>(); + for (Map.Entry resource : manager.listResources("antmail/message", path -> path.getPath().endsWith(".json")).entrySet()) { + try { + JsonElement element = JsonParser.parseReader(resource.getValue().openAsReader()); + if (!element.isJsonObject()) continue; + var object = element.getAsJsonObject(); + var trigger = object.getAsJsonObject("trigger"); + String type = trigger.get("type").getAsString(); + String value = trigger.has("value") ? trigger.get("value").getAsString() : String.valueOf(trigger.get("day").getAsInt()); + ResourceLocation id = ResourceLocation.fromNamespaceAndPath(resource.getKey().getNamespace(), resource.getKey().getPath().substring("antmail/message/".length(), resource.getKey().getPath().length() - 5)); + loaded.put(id, new Definition(object.get("sender").getAsString(), object.get("subject").getAsString(), object.get("body").getAsString(), new Trigger(type, value))); + } catch (Exception ignored) { + } + } + return Map.copyOf(loaded); + } + + @Override + protected void apply(Map loaded, ResourceManager manager, ProfilerFiller profiler) { + definitions = loaded; + } + + public record Definition(String sender, String subject, String body, Trigger trigger) { + } + + public record Trigger(String type, String value) { + double chance() { + try { + return Math.max(0.0D, Math.min(1.0D, Double.parseDouble(value))); + } catch (NumberFormatException ignored) { + return 0.0D; + } + } + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/antmail/AntmailMailbox.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/antmail/AntmailMailbox.java index 0b1450e4..af60e400 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/antmail/AntmailMailbox.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/antmail/AntmailMailbox.java @@ -8,10 +8,12 @@ import java.util.List; import java.util.UUID; public final class AntmailMailbox { + public static final int PAGE_SIZE = 20; private final AntmailAddress address; private final List inbox = new ArrayList<>(); private final List sent = new ArrayList<>(); private final List drafts = new ArrayList<>(); + private int reportedUnreadCount = -1; public AntmailMailbox(AntmailAddress address) { this.address = address; @@ -21,7 +23,7 @@ public final class AntmailMailbox { public List inbox() { return List.copyOf(inbox); } public List sent() { return List.copyOf(sent); } public List drafts() { return List.copyOf(drafts); } - public int unreadCount() { return (int) inbox.stream().filter(message -> !message.read()).count(); } + public int unreadCount() { return reportedUnreadCount >= 0 ? reportedUnreadCount : (int) inbox.stream().filter(message -> !message.read()).count(); } public boolean addIncoming(AntmailMessage message) { if (!address.equals(message.recipient()) || inbox.size() >= AntmailValidation.MAX_MAILBOX_MESSAGES || contains(inbox, message.id())) return false; @@ -45,6 +47,8 @@ public final class AntmailMailbox { public boolean removeDraft(UUID id) { return drafts.removeIf(draft -> draft.id().equals(id)); } public boolean removeInbox(UUID id) { return inbox.removeIf(message -> message.id().equals(id)); } public boolean removeSent(UUID id) { return sent.removeIf(message -> message.id().equals(id)); } + public AntmailMessage findSent(UUID id) { return sent.stream().filter(message -> message.id().equals(id)).findFirst().orElse(null); } + public AntmailMessage findInbox(UUID id) { return inbox.stream().filter(message -> message.id().equals(id)).findFirst().orElse(null); } public boolean markRead(UUID id) { for (AntmailMessage message : inbox) if (message.id().equals(id)) { message.markRead(); return true; } @@ -54,18 +58,47 @@ public final class AntmailMailbox { public AntmailDraft findDraft(UUID id) { return drafts.stream().filter(draft -> draft.id().equals(id)).findFirst().orElse(null); } public CompoundTag toTag() { + return toTag(true); + } + + public CompoundTag toTag(boolean includeMessageAttachments) { CompoundTag tag = new CompoundTag(); tag.putString("Address", address.fullAddress()); - tag.put("Inbox", messagesToTag(inbox)); - tag.put("Sent", messagesToTag(sent)); + tag.put("Inbox", messagesToTag(inbox, includeMessageAttachments)); + tag.put("Sent", messagesToTag(sent, includeMessageAttachments)); ListTag draftTags = new ListTag(); for (AntmailDraft draft : drafts) draftTags.add(draft.toTag()); tag.put("Drafts", draftTags); return tag; } + public CompoundTag toPageTag(int folder, int page) { + int safePage = Math.max(0, page); + int start = safePage * PAGE_SIZE; + CompoundTag tag = new CompoundTag(); + tag.putString("Address", address.fullAddress()); + tag.putInt("Folder", folder); + tag.putInt("Page", safePage); + tag.putInt("PageSize", PAGE_SIZE); + tag.putInt("TotalInbox", inbox.size()); + tag.putInt("TotalSent", sent.size()); + tag.putInt("UnreadCount", (int) inbox.stream().filter(message -> !message.read()).count()); + tag.put("Inbox", folder == 0 ? messagesToTag(page(inbox, start), false) : new ListTag()); + tag.put("Sent", folder == 1 ? messagesToTag(page(sent, start), false) : new ListTag()); + ListTag draftTags = new ListTag(); + for (AntmailDraft draft : drafts) draftTags.add(draft.toTag()); + tag.put("Drafts", draftTags); + return tag; + } + + private static List page(List values, int start) { + if (start >= values.size()) return List.of(); + return values.subList(start, Math.min(start + PAGE_SIZE, values.size())); + } + public static AntmailMailbox fromTag(CompoundTag tag) { AntmailMailbox mailbox = new AntmailMailbox(AntmailAddress.parse(tag.getString("Address"))); + if (tag.contains("UnreadCount")) mailbox.reportedUnreadCount = Math.max(0, tag.getInt("UnreadCount")); readMessages(tag.getList("Inbox", 10), mailbox.inbox); readMessages(tag.getList("Sent", 10), mailbox.sent); ListTag draftTags = tag.getList("Drafts", 10); @@ -75,9 +108,9 @@ public final class AntmailMailbox { return mailbox; } - private static ListTag messagesToTag(List messages) { + private static ListTag messagesToTag(List messages, boolean includeMessageAttachments) { ListTag tags = new ListTag(); - for (AntmailMessage message : messages) tags.add(message.toTag()); + for (AntmailMessage message : messages) tags.add(message.toTag(includeMessageAttachments)); return tags; } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/antmail/AntmailMessage.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/antmail/AntmailMessage.java index 43d375f5..74e9751b 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/antmail/AntmailMessage.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/antmail/AntmailMessage.java @@ -16,6 +16,7 @@ public final class AntmailMessage { private static final String CREATED_TAG = "Created"; private static final String READ_TAG = "Read"; private static final String ATTACHMENTS_TAG = "Attachments"; + private static final String DELIVERY_STATUS_TAG = "DeliveryStatus"; private final UUID id; private final AntmailAddress sender; @@ -25,6 +26,7 @@ public final class AntmailMessage { private final long createdAt; private final List attachments; private boolean read; + private String deliveryStatus = "DELIVERED"; public AntmailMessage(UUID id, AntmailAddress sender, AntmailAddress recipient, String subject, String body, long createdAt, List attachments, boolean read) { AntmailValidation.Result result = AntmailValidation.validateMessage(sender, recipient, subject, body, attachments); @@ -53,10 +55,16 @@ public final class AntmailMessage { public long createdAt() { return createdAt; } public List attachments() { return attachments; } public boolean read() { return read; } + public String deliveryStatus() { return deliveryStatus; } + public void setDeliveryStatus(String status) { deliveryStatus = status == null || status.isBlank() ? "DELIVERED" : status; } public void markRead() { read = true; } public void markUnread() { read = false; } public CompoundTag toTag() { + return toTag(true); + } + + public CompoundTag toTag(boolean includeAttachments) { CompoundTag tag = new CompoundTag(); tag.putString(ID_TAG, id.toString()); tag.putString(FROM_TAG, sender.fullAddress()); @@ -65,9 +73,12 @@ public final class AntmailMessage { tag.putString(BODY_TAG, body); tag.putLong(CREATED_TAG, createdAt); tag.putBoolean(READ_TAG, read); - ListTag attachmentTags = new ListTag(); - for (AntmailAttachment attachment : attachments) attachmentTags.add(attachment.toTag()); - tag.put(ATTACHMENTS_TAG, attachmentTags); + tag.putString(DELIVERY_STATUS_TAG, deliveryStatus); + if (includeAttachments) { + ListTag attachmentTags = new ListTag(); + for (AntmailAttachment attachment : attachments) attachmentTags.add(attachment.toTag()); + tag.put(ATTACHMENTS_TAG, attachmentTags); + } return tag; } @@ -75,6 +86,8 @@ public final class AntmailMessage { List attachments = new ArrayList<>(); ListTag attachmentTags = tag.getList(ATTACHMENTS_TAG, 10); for (int index = 0; index < attachmentTags.size(); index++) attachments.add(AntmailAttachment.fromTag(attachmentTags.getCompound(index))); - return new AntmailMessage(UUID.fromString(tag.getString(ID_TAG)), AntmailAddress.parse(tag.getString(FROM_TAG)), AntmailAddress.parse(tag.getString(TO_TAG)), tag.getString(SUBJECT_TAG), tag.getString(BODY_TAG), tag.getLong(CREATED_TAG), attachments, tag.getBoolean(READ_TAG)); + AntmailMessage message = new AntmailMessage(UUID.fromString(tag.getString(ID_TAG)), AntmailAddress.parse(tag.getString(FROM_TAG)), AntmailAddress.parse(tag.getString(TO_TAG)), tag.getString(SUBJECT_TAG), tag.getString(BODY_TAG), tag.getLong(CREATED_TAG), attachments, tag.getBoolean(READ_TAG)); + message.setDeliveryStatus(tag.getString(DELIVERY_STATUS_TAG)); + return message; } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/antmail/AntmailServerData.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/antmail/AntmailServerData.java index e0ce6938..494ce7c6 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/antmail/AntmailServerData.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/antmail/AntmailServerData.java @@ -7,18 +7,27 @@ import net.minecraft.nbt.ListTag; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import com.craisinlord.antarchy.content.block.entity.ComputerBlockEntity; import net.minecraft.world.level.saveddata.SavedData; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.UUID; public final class AntmailServerData extends SavedData { private static final String ID = "antarchy_antmail"; + private static final int MAX_PENDING_MESSAGES = AntmailValidation.MAX_MAILBOX_MESSAGES; private final Map endpoints = new LinkedHashMap<>(); private final AntmailMailboxStore mailboxes = new AntmailMailboxStore(); private final List pending = new ArrayList<>(); + private final Map> triggered = new LinkedHashMap<>(); + private final Map mailboxVersions = new LinkedHashMap<>(); + private final Map lastUsedAddresses = new LinkedHashMap<>(); + private long randomMailDay = Long.MIN_VALUE; + private int retryTicks; public static AntmailServerData create() { return new AntmailServerData(); @@ -48,6 +57,35 @@ public final class AntmailServerData extends SavedData { } catch (RuntimeException ignored) { } } + ListTag triggeredTags = tag.getList("Triggered", 10); + for (int i = 0; i < triggeredTags.size(); i++) { + CompoundTag triggeredTag = triggeredTags.getCompound(i); + try { + AntmailAddress address = AntmailAddress.parse(triggeredTag.getString("Address")); + java.util.Set ids = new java.util.LinkedHashSet<>(); + ListTag idsTag = triggeredTag.getList("Ids", 8); + for (int j = 0; j < idsTag.size(); j++) ids.add(ResourceLocation.parse(idsTag.getString(j))); + data.triggered.put(address, ids); + } catch (RuntimeException ignored) { + } + } + ListTag lastUsedTags = tag.getList("LastUsedAddresses", 10); + for (int i = 0; i < lastUsedTags.size(); i++) { + try { + CompoundTag lastUsedTag = lastUsedTags.getCompound(i); + data.lastUsedAddresses.put(UUID.fromString(lastUsedTag.getString("Player")), AntmailAddress.parse(lastUsedTag.getString("Address"))); + } catch (RuntimeException ignored) { + } + } + data.randomMailDay = tag.contains("RandomMailDay") ? tag.getLong("RandomMailDay") : Long.MIN_VALUE; + ListTag versionTags = tag.getList("MailboxVersions", 10); + for (int i = 0; i < versionTags.size(); i++) { + try { + CompoundTag versionTag = versionTags.getCompound(i); + data.mailboxVersions.put(AntmailAddress.parse(versionTag.getString("Address")), Math.max(1L, versionTag.getLong("Version"))); + } catch (RuntimeException ignored) { + } + } return loaded; } @@ -71,6 +109,33 @@ public final class AntmailServerData extends SavedData { pendingTags.add(pendingTag); } tag.put("Pending", pendingTags); + ListTag triggeredTags = new ListTag(); + for (Map.Entry> entry : triggered.entrySet()) { + CompoundTag triggeredTag = new CompoundTag(); + triggeredTag.putString("Address", entry.getKey().fullAddress()); + ListTag idsTag = new ListTag(); + for (ResourceLocation id : entry.getValue()) idsTag.add(net.minecraft.nbt.StringTag.valueOf(id.toString())); + triggeredTag.put("Ids", idsTag); + triggeredTags.add(triggeredTag); + } + tag.put("Triggered", triggeredTags); + ListTag lastUsedTags = new ListTag(); + for (Map.Entry entry : lastUsedAddresses.entrySet()) { + CompoundTag lastUsedTag = new CompoundTag(); + lastUsedTag.putString("Player", entry.getKey().toString()); + lastUsedTag.putString("Address", entry.getValue().fullAddress()); + lastUsedTags.add(lastUsedTag); + } + tag.put("LastUsedAddresses", lastUsedTags); + tag.putLong("RandomMailDay", randomMailDay); + ListTag versionTags = new ListTag(); + for (Map.Entry entry : mailboxVersions.entrySet()) { + CompoundTag versionTag = new CompoundTag(); + versionTag.putString("Address", entry.getKey().fullAddress()); + versionTag.putLong("Version", entry.getValue()); + versionTags.add(versionTag); + } + tag.put("MailboxVersions", versionTags); return tag; } @@ -123,6 +188,40 @@ public final class AntmailServerData extends SavedData { return endpoints.get(address); } + public synchronized List registeredAddresses() { + return List.copyOf(endpoints.keySet()); + } + + public synchronized AntmailAddress addressFor(ServerPlayer player) { + AntmailAddress address = lastUsedAddresses.get(player.getUUID()); + return address != null && endpoints.containsKey(address) ? address : null; + } + + public synchronized AntmailAddress lastUsedAddress(ServerPlayer player) { + AntmailAddress address = lastUsedAddresses.get(player.getUUID()); + return address != null && endpoints.containsKey(address) ? address : null; + } + + public synchronized void setLastUsedAddress(ServerPlayer player, AntmailAddress address) { + if (address == null) return; + lastUsedAddresses.put(player.getUUID(), address); + setDirty(); + } + + public synchronized boolean claimTrigger(AntmailAddress address, ResourceLocation triggerId) { + java.util.Set ids = triggered.computeIfAbsent(address, ignored -> new java.util.LinkedHashSet<>()); + if (!ids.add(triggerId)) return false; + setDirty(); + return true; + } + + public synchronized boolean beginRandomMailDay(long day) { + if (randomMailDay == day) return false; + randomMailDay = day; + setDirty(); + return true; + } + public synchronized AntmailMailbox mailbox(AntmailAddress address) { return mailboxes.get(address); } @@ -133,34 +232,93 @@ public final class AntmailServerData extends SavedData { return mailbox; } + public synchronized long mailboxVersion(AntmailAddress address) { + return mailboxVersions.getOrDefault(address, 1L); + } + + public synchronized void touchMailbox(AntmailAddress address) { + if (address == null) return; + mailboxVersions.put(address, mailboxVersion(address) + 1L); + setDirty(); + } + + public synchronized void drainAddress(MinecraftServer server, ServerLevel level, BlockPos position) { + AntmailAddress address = addressAt(level.dimension().location(), position); + if (address != null) drain(server, address); + } + + public synchronized void drainAvailable(MinecraftServer server) { + if (pending.isEmpty() || ++retryTicks < 20) return; + retryTicks = 0; + List available = new ArrayList<>(); + for (Map.Entry entry : endpoints.entrySet()) { + Endpoint endpoint = entry.getValue(); + ServerLevel level = server.getLevel(net.minecraft.resources.ResourceKey.create(net.minecraft.core.registries.Registries.DIMENSION, ResourceLocation.parse(endpoint.dimension()))); + if (level != null && level.hasChunkAt(BlockPos.of(endpoint.position()))) available.add(entry.getKey()); + } + for (AntmailAddress address : available) drain(server, address); + } + public synchronized AntmailDeliveryResult deliver(MinecraftServer server, AntmailMessage message) { - if (endpoint(message.recipient()) == null) return AntmailDeliveryResult.failed(AntmailDeliveryResult.Status.ADDRESS_NOT_FOUND, message, "address_not_found"); + if (message == null) return AntmailDeliveryResult.failed(AntmailDeliveryResult.Status.MESSAGE_INVALID, null, "missing_message"); + if (endpoint(message.recipient()) == null) return failedAndRecorded(message, AntmailDeliveryResult.Status.ADDRESS_NOT_FOUND, "address_not_found"); AntmailMailbox destination = mailboxes.getOrCreate(message.recipient()); - if (destination.inbox().size() >= AntmailValidation.MAX_MAILBOX_MESSAGES) return AntmailDeliveryResult.failed(AntmailDeliveryResult.Status.MAILBOX_FULL, message, "mailbox_full"); + if (destination.inbox().size() >= AntmailValidation.MAX_MAILBOX_MESSAGES) return failedAndRecorded(message, AntmailDeliveryResult.Status.MAILBOX_FULL, "mailbox_full"); Endpoint target = endpoint(message.recipient()); ServerLevel level = server.getLevel(net.minecraft.resources.ResourceKey.create(net.minecraft.core.registries.Registries.DIMENSION, ResourceLocation.parse(target.dimension()))); if (level == null || !level.hasChunkAt(BlockPos.of(target.position()))) { + if (pending.stream().anyMatch(item -> item.message().id().equals(message.id()))) { + return AntmailDeliveryResult.failed(AntmailDeliveryResult.Status.DUPLICATE, message, "already_pending"); + } + if (pending.size() >= MAX_PENDING_MESSAGES) { + return failedAndRecorded(message, AntmailDeliveryResult.Status.FAILED, "pending_queue_full"); + } + message.setDeliveryStatus("QUEUED"); pending.add(new PendingMessage(message.recipient(), message)); mailboxes.getOrCreate(message.sender()).addSent(message); + touchMailbox(message.recipient()); + touchMailbox(message.sender()); setDirty(); return AntmailDeliveryResult.queued(message); } + message.setDeliveryStatus("DELIVERED"); destination.addIncoming(message); mailboxes.getOrCreate(message.sender()).addSent(message); + touchMailbox(message.recipient()); + touchMailbox(message.sender()); setDirty(); return AntmailDeliveryResult.delivered(message); } + private AntmailDeliveryResult failedAndRecorded(AntmailMessage message, AntmailDeliveryResult.Status status, String detail) { + message.setDeliveryStatus("FAILED // " + detail.toUpperCase()); + mailboxes.getOrCreate(message.sender()).addSent(message); + touchMailbox(message.sender()); + setDirty(); + return AntmailDeliveryResult.failed(status, message, detail); + } + public synchronized void drain(MinecraftServer server, AntmailAddress address) { AntmailMailbox mailbox = mailboxes.getOrCreate(address); + final boolean[] delivered = {false}; pending.removeIf(pendingMessage -> { if (!pendingMessage.recipient().equals(address) || mailbox.inbox().size() >= AntmailValidation.MAX_MAILBOX_MESSAGES) return false; - mailbox.addIncoming(pendingMessage.message()); + if (!mailbox.addIncoming(pendingMessage.message())) return false; + pendingMessage.message().setDeliveryStatus("DELIVERED"); + delivered[0] = true; return true; }); + if (delivered[0]) touchMailbox(address); setDirty(); } + public synchronized AntmailDeliveryResult retry(MinecraftServer server, AntmailAddress sender, UUID messageId) { + AntmailMessage message = mailboxes.getOrCreate(sender).findSent(messageId); + if (message == null) return null; + pending.removeIf(item -> item.message().id().equals(messageId)); + return deliver(server, message); + } + public record Endpoint(String dimension, long position) { } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/ComputerBlock.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/ComputerBlock.java index 40f34539..c69141b9 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/ComputerBlock.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/ComputerBlock.java @@ -2,6 +2,7 @@ package com.craisinlord.antarchy.content.block; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.block.entity.ComputerBlockEntity; +import com.craisinlord.antarchy.content.antmail.AntmailServerData; import com.craisinlord.antarchy.content.client.AntarchyClientHooks; import com.mojang.serialization.MapCodec; import net.minecraft.core.BlockPos; @@ -99,6 +100,9 @@ public final class ComputerBlock extends BaseEntityBlock { protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { if (!state.is(newState.getBlock()) && level.getBlockEntity(pos) instanceof ComputerBlockEntity computer) { computer.dropDisks(level, pos); + if (level instanceof net.minecraft.server.level.ServerLevel serverLevel) { + AntmailServerData.access(serverLevel.getServer()).unregister(serverLevel.dimension().location(), pos); + } } super.onRemove(state, level, pos, newState, movedByPiston); } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/ComputerBlockEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/ComputerBlockEntity.java index 9adee0ce..ed8b291d 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/ComputerBlockEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/ComputerBlockEntity.java @@ -41,6 +41,12 @@ public final class ComputerBlockEntity extends BlockEntity implements GeoBlockEn private static final String AUTHENTICATED_TAG = "Authenticated"; private static final String AUTHENTICATED_UNTIL_TAG = "AuthenticatedUntil"; private static final String DESKTOP_TAG = "Desktop"; + private static final String BASILISK_SCORE_TAG = "BasiliskScore"; + private static final String BASILISK_HIGH_SCORE_TAG = "BasiliskHighScore"; + private static final String ANTMAN_SCORE_TAG = "AntmanScore"; + private static final String ANTMAN_HIGH_SCORE_TAG = "AntmanHighScore"; + private static final String BLOCKLE_DAY_TAG = "BlockleDay"; + private static final String BLOCKLE_GUESSES_TAG = "BlockleGuesses"; private static final long AUTHENTICATION_TIMEOUT = 6000L; private final Set physicalDiskIds = new LinkedHashSet<>(); private final ComputerFileSystem fileSystem = new ComputerFileSystem(); @@ -56,6 +62,12 @@ public final class ComputerBlockEntity extends BlockEntity implements GeoBlockEn private long authenticatedUntil; private java.util.UUID activeUser; private boolean lastActive; + private int basiliskScore; + private int basiliskHighScore; + private int antmanScore; + private int antmanHighScore; + private long blockleDay = -1L; + private final List blockleGuesses = new ArrayList<>(); public ComputerBlockEntity(BlockPos pos, BlockState state, Supplier> type) { super(type.get(), pos, state); @@ -256,6 +268,50 @@ public final class ComputerBlockEntity extends BlockEntity implements GeoBlockEn return desktopState; } + public int basiliskScore() { + return basiliskScore; + } + + public int basiliskHighScore() { + return basiliskHighScore; + } + + public void setBasiliskScore(int score) { + basiliskScore = Math.max(0, score); + basiliskHighScore = Math.max(basiliskHighScore, basiliskScore); + setChanged(); + } + + public int antmanScore() { return antmanScore; } + public int antmanHighScore() { return antmanHighScore; } + public void setAntmanScore(int score) { + antmanScore = Math.max(0, score); + antmanHighScore = Math.max(antmanHighScore, antmanScore); + setChanged(); + } + + public long blockleDay() { + return blockleDay; + } + + public List blockleGuesses() { + return List.copyOf(blockleGuesses); + } + + public void resetBlockle(long day) { + if (blockleDay == day) return; + blockleDay = day; + blockleGuesses.clear(); + setChanged(); + } + + public boolean addBlockleGuess(String guess) { + if (blockleGuesses.size() >= 6) return false; + blockleGuesses.add(guess); + setChanged(); + return true; + } + public boolean unlockWallpaper(ResourceLocation id) { return serverDesktopMutation(() -> desktopState.unlockWallpaper(id)); } @@ -346,6 +402,17 @@ public final class ComputerBlockEntity extends BlockEntity implements GeoBlockEn password = tag.getString(PASSWORD_TAG); fileSystem.load(tag, registries); desktopState.load(tag.getCompound(DESKTOP_TAG)); + basiliskScore = tag.getInt(BASILISK_SCORE_TAG); + basiliskHighScore = tag.getInt(BASILISK_HIGH_SCORE_TAG); + antmanScore = tag.getInt(ANTMAN_SCORE_TAG); + antmanHighScore = tag.getInt(ANTMAN_HIGH_SCORE_TAG); + blockleDay = tag.contains(BLOCKLE_DAY_TAG) ? tag.getLong(BLOCKLE_DAY_TAG) : -1L; + blockleGuesses.clear(); + ListTag blockle = tag.getList(BLOCKLE_GUESSES_TAG, 8); + for (int index = 0; index < blockle.size(); index++) { + String guess = blockle.getString(index); + if (guess.length() == 5 && !blockleGuesses.contains(guess) && blockleGuesses.size() < 6) blockleGuesses.add(guess); + } authenticated = false; authenticatedUntil = 0L; activeUser = null; @@ -363,6 +430,14 @@ public final class ComputerBlockEntity extends BlockEntity implements GeoBlockEn tag.putString(PASSWORD_TAG, password); fileSystem.save(tag, registries); tag.put(DESKTOP_TAG, desktopState.save()); + tag.putInt(BASILISK_SCORE_TAG, basiliskScore); + tag.putInt(BASILISK_HIGH_SCORE_TAG, basiliskHighScore); + tag.putInt(ANTMAN_SCORE_TAG, antmanScore); + tag.putInt(ANTMAN_HIGH_SCORE_TAG, antmanHighScore); + tag.putLong(BLOCKLE_DAY_TAG, blockleDay); + ListTag blockle = new ListTag(); + for (String guess : blockleGuesses) blockle.add(StringTag.valueOf(guess)); + tag.put(BLOCKLE_GUESSES_TAG, blockle); } @Override @@ -370,6 +445,9 @@ public final class ComputerBlockEntity extends BlockEntity implements GeoBlockEn CompoundTag tag = new CompoundTag(); tag.putBoolean("HasPassword", hasPassword()); tag.putBoolean(AUTHENTICATED_TAG, isAuthenticated()); + ListTag disks = new ListTag(); + for (ResourceLocation diskId : physicalDiskIds) disks.add(StringTag.valueOf(diskId.toString())); + tag.put(DISKS_TAG, disks); return tag; } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/UnderVaultBlockEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/UnderVaultBlockEntity.java index 274b4154..841b0871 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/UnderVaultBlockEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/UnderVaultBlockEntity.java @@ -1,6 +1,7 @@ package com.craisinlord.antarchy.content.block.entity; import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.block.UnderVaultBlock; import net.minecraft.core.BlockPos; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.particles.SimpleParticleType; @@ -22,6 +23,7 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.world.entity.player.Player; import net.minecraft.world.phys.Vec3; +import net.minecraft.world.phys.AABB; import java.util.Optional; import java.util.function.Supplier; @@ -44,6 +46,14 @@ public final class UnderVaultBlockEntity extends BlockEntity { public static void serverTick(ServerLevel level, BlockPos pos, BlockState state, UnderVaultBlockEntity blockEntity) { blockEntity.vaultData.setLevel(level); + // The vanilla vault detector can miss this ceiling-mounted wrapper because its + // block state has a separate render-facing property. Keep the state synchronized + // with the same four-block activation range before running vanilla's state machine. + if (state.getValue(UnderVaultBlock.STATE) == VaultState.INACTIVE + && !level.getEntitiesOfClass(Player.class, new AABB(pos).inflate(4.0D), player -> !player.isSpectator()).isEmpty()) { + state = state.setValue(UnderVaultBlock.STATE, VaultState.ACTIVE); + level.setBlockAndUpdate(pos, state); + } VaultBlockEntity.Server.tick(level, pos, state, blockEntity.vaultData.getConfig(), blockEntity.vaultData.getServerData(), blockEntity.vaultData.getSharedData()); } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/UndertrialSpawnerBlockEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/UndertrialSpawnerBlockEntity.java index 1a7b8d53..ef33bce9 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/UndertrialSpawnerBlockEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/UndertrialSpawnerBlockEntity.java @@ -40,6 +40,7 @@ import java.util.function.Supplier; public final class UndertrialSpawnerBlockEntity extends BlockEntity implements TrialSpawner.StateAccessor { private static final String SPAWNER_TAG = "trial_spawner"; + private static final int DEFAULT_TARGET_COOLDOWN_LENGTH = 36000; private static final int EFFECT_DURATION = 3600; private TrialSpawner trialSpawner; private TrialSpawnerState previousClientState; @@ -194,12 +195,17 @@ public final class UndertrialSpawnerBlockEntity extends BlockEntity implements T private TrialSpawner createRewardlessSpawner(TrialSpawner source) { TrialSpawner rewardless = new TrialSpawner(withoutLootTables(source.getNormalConfig()), withoutLootTables(source.getOminousConfig()), - source.getData(), source.getRequiredPlayerRange(), source.getTargetCooldownLength(), this, + source.getData(), source.getRequiredPlayerRange(), targetCooldownLength(source), this, source.getPlayerDetector(), source.getEntitySelector()); rewardless.overridePeacefulAndMobSpawnRule(); return rewardless; } + private static int targetCooldownLength(TrialSpawner source) { + int targetCooldownLength = source.getTargetCooldownLength(); + return targetCooldownLength > 0 ? targetCooldownLength : DEFAULT_TARGET_COOLDOWN_LENGTH; + } + private static TrialSpawnerConfig withoutLootTables(TrialSpawnerConfig config) { return new TrialSpawnerConfig(config.spawnRange(), config.totalMobs(), config.simultaneousMobs(), config.totalMobsAddedPerPlayer(), config.simultaneousMobsAddedPerPlayer(), config.ticksBetweenSpawn(), diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/AntmailClientState.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/AntmailClientState.java index 2a94b7e8..1d829aa8 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/AntmailClientState.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/AntmailClientState.java @@ -1,22 +1,70 @@ package com.craisinlord.antarchy.content.client; import com.craisinlord.antarchy.content.network.AntmailResultPayload; +import com.craisinlord.antarchy.content.antmail.AntmailMessage; import net.minecraft.core.BlockPos; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; public final class AntmailClientState { + private static final int MAX_CACHED_DETAILS_PER_MAILBOX = 8; private static final Map RESULTS = new ConcurrentHashMap<>(); + private static final Map MAILBOXES = new ConcurrentHashMap<>(); + private static final Map VERSIONS = new ConcurrentHashMap<>(); + private static final Map> DETAILS = new ConcurrentHashMap<>(); private AntmailClientState() { } public static void update(AntmailResultPayload payload) { RESULTS.put(payload.pos(), payload); + if ("unchanged".equals(payload.detail())) { + VERSIONS.put(payload.pos(), payload.version()); + return; + } else if ("message_detail".equals(payload.detail()) && !payload.data().isBlank()) { + try { + AntmailMessage message = AntmailMessage.fromTag(com.craisinlord.antarchy.content.antmail.AntmailWire.decodeTag(payload.data())); + Map details = DETAILS.computeIfAbsent(payload.pos(), ignored -> new ConcurrentHashMap<>()); + details.put(message.id(), message); + while (details.size() > MAX_CACHED_DETAILS_PER_MAILBOX) { + java.util.UUID oldest = details.keySet().iterator().next(); + details.remove(oldest); + } + } catch (RuntimeException ignored) { + } + } else if (!payload.data().isBlank()) { + MAILBOXES.put(payload.pos(), payload); + VERSIONS.put(payload.pos(), payload.version()); + } else { + // A failed or unconfigured response is authoritative; never show a + // mailbox from a previous address/computer at this position. + MAILBOXES.remove(payload.pos()); + VERSIONS.remove(payload.pos()); + } + } + + public static void clear(BlockPos pos) { + RESULTS.remove(pos); + MAILBOXES.remove(pos); + VERSIONS.remove(pos); + DETAILS.remove(pos); } public static AntmailResultPayload get(BlockPos pos) { return RESULTS.get(pos); } + + public static AntmailResultPayload getMailbox(BlockPos pos) { + return MAILBOXES.get(pos); + } + + public static long getVersion(BlockPos pos) { + return VERSIONS.getOrDefault(pos, 0L); + } + + public static AntmailMessage getMessage(BlockPos pos, java.util.UUID id) { + Map details = DETAILS.get(pos); + return details == null ? null : details.get(id); + } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/BlockleClientState.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/BlockleClientState.java new file mode 100644 index 00000000..a11c902a --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/BlockleClientState.java @@ -0,0 +1,26 @@ +package com.craisinlord.antarchy.content.client; + +import com.craisinlord.antarchy.content.network.ComputerAccessResultPayload; +import net.minecraft.core.BlockPos; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +public final class BlockleClientState { + private static final Map RESULTS = new ConcurrentHashMap<>(); + + private BlockleClientState() { + } + + public static void update(ComputerAccessResultPayload result) { + RESULTS.put(result.pos(), result); + } + + public static ComputerAccessResultPayload get(BlockPos pos) { + return RESULTS.get(pos); + } + + public static void clear(BlockPos pos) { + RESULTS.remove(pos); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/ComputerAccessClientState.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/ComputerAccessClientState.java index 1c640fdb..f826ee01 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/ComputerAccessClientState.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/ComputerAccessClientState.java @@ -13,10 +13,19 @@ public final class ComputerAccessClientState { } public static void update(ComputerAccessResultPayload result) { - RESULTS.put(result.pos(), result); + if (result.data().startsWith("18\u0000") || result.data().startsWith("19\u0000")) { + BlockleClientState.update(result); + } + // File, terminal, desktop, and wallpaper responses carry their own operation + // status. They must not replace the last authoritative login state. + if (result.data().isBlank()) RESULTS.put(result.pos(), result); ComputerFileSystemClientState.update(result); } + public static void clear(BlockPos pos) { + RESULTS.remove(pos); + } + public static ComputerAccessResultPayload get(BlockPos pos) { return RESULTS.get(pos); } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/ComputerFileSystemClientState.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/ComputerFileSystemClientState.java index 00e6a51f..2ca89adb 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/ComputerFileSystemClientState.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/ComputerFileSystemClientState.java @@ -29,6 +29,13 @@ public final class ComputerFileSystemClientState { state.success = payload.result() == ComputerAccessResultPayload.SUCCESS; state.error = envelope[1]; if (state.success) state.error = ""; + if (action == ComputerAccessPayload.FILE_CREATE || action == ComputerAccessPayload.FILE_SAVE + || action == ComputerAccessPayload.FILE_DELETE || action == ComputerAccessPayload.FILE_MOVE) { + state.lastMutationAction = action; + state.lastMutationPath = envelope[2]; + state.lastMutationSuccess = state.success; + state.lastMutationError = envelope[1]; + } if (action == ComputerAccessPayload.FILE_LIST) { state.files = new ArrayList<>(); if (state.success && !envelope[2].isEmpty()) state.files.addAll(List.of(envelope[2].split("\\n"))); @@ -59,11 +66,19 @@ public final class ComputerFileSystemClientState { private String openedContents = ""; private String error = ""; private boolean success; + private int lastMutationAction = -1; + private String lastMutationPath = ""; + private boolean lastMutationSuccess; + private String lastMutationError = ""; public List files() { return List.copyOf(files); } public String openedPath() { return openedPath; } public String openedContents() { return openedContents; } public String error() { return error; } public boolean success() { return success; } + public int lastMutationAction() { return lastMutationAction; } + public String lastMutationPath() { return lastMutationPath; } + public boolean lastMutationSuccess() { return lastMutationSuccess; } + public String lastMutationError() { return lastMutationError; } } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/AntFarmGame.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/AntFarmGame.java deleted file mode 100644 index 19b9059b..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/AntFarmGame.java +++ /dev/null @@ -1,168 +0,0 @@ -package com.craisinlord.antarchy.content.client.game; - -import java.util.ArrayList; -import java.util.List; - -public final class AntFarmGame { - public enum Phase { READY, PLAYING, WON, LOST } - public enum Direction { - UP(0, -1), DOWN(0, 1), LEFT(-1, 0), RIGHT(1, 0), NONE(0, 0); - - private final int dx; - private final int dy; - - Direction(int dx, int dy) { - this.dx = dx; - this.dy = dy; - } - } - - private static final String[] MAP = { - "###################", - "#.................#", - "#.###.#####.#####.#", - "#.................#", - "#.#####.###.#####.#", - "#.................#", - "#.#####.###.#####.#", - "#.................#", - "#.#####.###.#####.#", - "#.................#", - "###################" - }; - private static final int TICKS_PER_TILE = 4; - private static final int PLAYER_START_X = 1; - private static final int PLAYER_START_Y = 1; - private static final int ENEMY_START_X = 17; - private static final int ENEMY_START_Y = 9; - - private final boolean[][] pellets = new boolean[MAP.length][MAP[0].length()]; - private Phase phase = Phase.READY; - private Direction playerDirection = Direction.NONE; - private Direction requestedDirection = Direction.NONE; - private Direction enemyDirection = Direction.LEFT; - private int playerX; - private int playerY; - private int enemyX; - private int enemyY; - private int movementTicks; - private int score; - private int remainingFood; - - public AntFarmGame() { - reset(); - } - - public void reset() { - phase = Phase.READY; - playerDirection = Direction.NONE; - requestedDirection = Direction.NONE; - enemyDirection = Direction.LEFT; - playerX = PLAYER_START_X; - playerY = PLAYER_START_Y; - enemyX = ENEMY_START_X; - enemyY = ENEMY_START_Y; - movementTicks = 0; - score = 0; - remainingFood = 0; - for (int y = 0; y < MAP.length; y++) { - for (int x = 0; x < MAP[y].length(); x++) { - pellets[y][x] = MAP[y].charAt(x) == '.'; - if (pellets[y][x]) remainingFood++; - } - } - } - - public void start() { - if (phase == Phase.READY) phase = Phase.PLAYING; - } - - public void tick() { - if (phase != Phase.PLAYING) return; - movementTicks++; - if (movementTicks < TICKS_PER_TILE) return; - movementTicks = 0; - movePlayer(); - if (phase != Phase.PLAYING) return; - moveEnemy(); - if (playerX == enemyX && playerY == enemyY) phase = Phase.LOST; - } - - public void setRequestedDirection(Direction direction) { - if (direction != null && direction != Direction.NONE) requestedDirection = direction; - } - - public Phase phase() { return phase; } - public int score() { return score; } - public int remainingFood() { return remainingFood; } - public int width() { return MAP[0].length(); } - public int height() { return MAP.length; } - public int playerX() { return playerX; } - public int playerY() { return playerY; } - public int enemyX() { return enemyX; } - public int enemyY() { return enemyY; } - public boolean hasPellet(int x, int y) { return pellets[y][x]; } - public boolean isWall(int x, int y) { return MAP[y].charAt(x) == '#'; } - - private void movePlayer() { - if (canMove(playerX, playerY, requestedDirection)) playerDirection = requestedDirection; - if (canMove(playerX, playerY, playerDirection)) { - playerX += playerDirection.dx; - playerY += playerDirection.dy; - } - if (pellets[playerY][playerX]) { - pellets[playerY][playerX] = false; - remainingFood--; - score += 10; - if (remainingFood == 0) phase = Phase.WON; - } - } - - private void moveEnemy() { - List directions = legalDirections(enemyX, enemyY); - if (directions.isEmpty()) return; - Direction reverse = opposite(enemyDirection); - if (directions.size() > 1) directions.remove(reverse); - Direction best = directions.get(0); - int bestDistance = distanceAfter(best, playerX, playerY, enemyX, enemyY); - for (Direction direction : directions) { - int distance = distanceAfter(direction, playerX, playerY, enemyX, enemyY); - if (distance < bestDistance) { - best = direction; - bestDistance = distance; - } - } - enemyDirection = best; - enemyX += best.dx; - enemyY += best.dy; - } - - private int distanceAfter(Direction direction, int targetX, int targetY, int originX, int originY) { - return Math.abs(originX + direction.dx - targetX) + Math.abs(originY + direction.dy - targetY); - } - - private List legalDirections(int x, int y) { - List result = new ArrayList<>(4); - for (Direction direction : new Direction[]{Direction.UP, Direction.DOWN, Direction.LEFT, Direction.RIGHT}) { - if (canMove(x, y, direction)) result.add(direction); - } - return result; - } - - private boolean canMove(int x, int y, Direction direction) { - if (direction == Direction.NONE) return false; - int nextX = x + direction.dx; - int nextY = y + direction.dy; - return nextY >= 0 && nextY < MAP.length && nextX >= 0 && nextX < MAP[nextY].length() && !isWall(nextX, nextY); - } - - private Direction opposite(Direction direction) { - return switch (direction) { - case UP -> Direction.DOWN; - case DOWN -> Direction.UP; - case LEFT -> Direction.RIGHT; - case RIGHT -> Direction.LEFT; - case NONE -> Direction.NONE; - }; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/AntFarmInput.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/AntFarmInput.java deleted file mode 100644 index 1e3f47eb..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/AntFarmInput.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.craisinlord.antarchy.content.client.game; - -import org.lwjgl.glfw.GLFW; - -public final class AntFarmInput { - private AntFarmInput() { - } - - public static AntFarmGame.Direction directionForKey(int keyCode) { - return switch (keyCode) { - case GLFW.GLFW_KEY_W, GLFW.GLFW_KEY_UP -> AntFarmGame.Direction.UP; - case GLFW.GLFW_KEY_S, GLFW.GLFW_KEY_DOWN -> AntFarmGame.Direction.DOWN; - case GLFW.GLFW_KEY_A, GLFW.GLFW_KEY_LEFT -> AntFarmGame.Direction.LEFT; - case GLFW.GLFW_KEY_D, GLFW.GLFW_KEY_RIGHT -> AntFarmGame.Direction.RIGHT; - default -> AntFarmGame.Direction.NONE; - }; - } - - public static boolean isStartOrRetry(int keyCode) { - return keyCode == GLFW.GLFW_KEY_ENTER || keyCode == GLFW.GLFW_KEY_KP_ENTER; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/AntFarmProgram.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/AntFarmProgram.java deleted file mode 100644 index 1a42f278..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/AntFarmProgram.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.craisinlord.antarchy.content.client.game; - -import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.GuiGraphics; - -public final class AntFarmProgram { - private final AntFarmGame game = new AntFarmGame(); - private boolean gameInstalled; - - public AntFarmProgram(boolean gameInstalled) { - this.gameInstalled = gameInstalled; - } - - public void setGameInstalled(boolean gameInstalled) { - this.gameInstalled = gameInstalled; - if (!gameInstalled) game.reset(); - } - - public boolean isGameInstalled() { return gameInstalled; } - public AntFarmGame game() { return game; } - - public void tick() { - if (gameInstalled) game.tick(); - } - - public boolean keyPressed(int keyCode) { - if (!gameInstalled) return false; - AntFarmGame.Direction direction = AntFarmInput.directionForKey(keyCode); - if (direction != AntFarmGame.Direction.NONE) { - if (game.phase() == AntFarmGame.Phase.READY) game.start(); - game.setRequestedDirection(direction); - return true; - } - if (AntFarmInput.isStartOrRetry(keyCode)) { - if (game.phase() == AntFarmGame.Phase.READY) game.start(); - else if (game.phase() == AntFarmGame.Phase.WON || game.phase() == AntFarmGame.Phase.LOST) { - game.reset(); - game.start(); - } - return true; - } - return false; - } - - public void render(GuiGraphics graphics, Font font, int x, int y, int width, int height) { - if (!gameInstalled) { - graphics.fill(x, y, x + width, y + height, 0xFF020602); - graphics.drawString(font, "ANT FARM NOT INSTALLED", x + 12, y + height / 2, 0xFF65FF65, false); - return; - } - AntFarmRenderer.render(graphics, font, game, x, y, width, height); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/AntFarmRenderer.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/AntFarmRenderer.java deleted file mode 100644 index b38542f1..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/AntFarmRenderer.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.craisinlord.antarchy.content.client.game; - -import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.network.chat.Component; - -public final class AntFarmRenderer { - private static final int BLACK = 0xFF020602; - private static final int DARK_GREEN = 0xFF123012; - private static final int GREEN = 0xFF65FF65; - private static final int PALE_GREEN = 0xFFB8FFB8; - - private AntFarmRenderer() { - } - - public static void render(GuiGraphics graphics, Font font, AntFarmGame game, int x, int y, int width, int height) { - graphics.fill(x, y, x + width, y + height, BLACK); - int hudHeight = 18; - int boardX = x + 5; - int boardY = y + hudHeight + 4; - int boardWidth = width - 10; - int boardHeight = height - hudHeight - 9; - int tileSize = Math.max(1, Math.min(boardWidth / game.width(), boardHeight / game.height())); - int mazeWidth = tileSize * game.width(); - int mazeHeight = tileSize * game.height(); - int mazeX = boardX + Math.max(0, (boardWidth - mazeWidth) / 2); - int mazeY = boardY + Math.max(0, (boardHeight - mazeHeight) / 2); - graphics.drawString(font, Component.literal("SCORE " + String.format("%06d", game.score())), x + 6, y + 4, GREEN, false); - graphics.drawString(font, Component.literal("FOOD " + String.format("%03d", game.remainingFood())), x + width - 76, y + 4, PALE_GREEN, false); - for (int gridY = 0; gridY < game.height(); gridY++) { - for (int gridX = 0; gridX < game.width(); gridX++) { - int cellX = mazeX + gridX * tileSize; - int cellY = mazeY + gridY * tileSize; - if (game.isWall(gridX, gridY)) { - graphics.fill(cellX, cellY, cellX + tileSize, cellY + tileSize, DARK_GREEN); - } else if (game.hasPellet(gridX, gridY)) { - int pelletSize = Math.max(1, tileSize / 4); - int offset = (tileSize - pelletSize) / 2; - graphics.fill(cellX + offset, cellY + offset, cellX + offset + pelletSize, cellY + offset + pelletSize, PALE_GREEN); - } - } - } - drawAnt(graphics, mazeX + game.playerX() * tileSize, mazeY + game.playerY() * tileSize, tileSize, GREEN); - drawAnt(graphics, mazeX + game.enemyX() * tileSize, mazeY + game.enemyY() * tileSize, tileSize, PALE_GREEN); - if (game.phase() != AntFarmGame.Phase.PLAYING) { - String message = switch (game.phase()) { - case READY -> "ANT FARM // PRESS ENTER TO START"; - case WON -> "COLONY FED // ENTER TO PLAY AGAIN"; - case LOST -> "COLONY COMPROMISED // ENTER TO RETRY"; - case PLAYING -> ""; - }; - int messageWidth = font.width(message); - graphics.fill(x + 8, y + height / 2 - 12, x + width - 8, y + height / 2 + 12, BLACK); - graphics.drawString(font, Component.literal(message), x + Math.max(8, (width - messageWidth) / 2), y + height / 2 - 4, GREEN, false); - } - } - - private static void drawAnt(GuiGraphics graphics, int x, int y, int tileSize, int color) { - int inset = Math.max(1, tileSize / 4); - int center = x + tileSize / 2; - graphics.fill(center - inset, y + inset, center + inset + 1, y + tileSize - inset, color); - graphics.fill(x + inset, y + tileSize / 2 - inset, x + tileSize - inset, y + tileSize / 2 + inset + 1, color); - if (tileSize >= 5) graphics.fill(center - inset, y + inset, center + inset + 1, y + inset + 1, BLACK); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/AntmanGame.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/AntmanGame.java new file mode 100644 index 00000000..2788448c --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/AntmanGame.java @@ -0,0 +1,233 @@ +package com.craisinlord.antarchy.content.client.game; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Random; + +public final class AntmanGame { + public enum Phase { READY, PLAYING, LOST } + public enum Direction { UP(0, -1), DOWN(0, 1), LEFT(-1, 0), RIGHT(1, 0); + final int dx; + final int dy; + Direction(int dx, int dy) { this.dx = dx; this.dy = dy; } + Direction opposite() { return switch (this) { case UP -> DOWN; case DOWN -> UP; case LEFT -> RIGHT; case RIGHT -> LEFT; }; } + } + public enum EnemyKind { CREEPER, ZOMBIE } + public record Enemy(EnemyKind kind, double x, double y, Direction direction) { } + + private static final int WIDTH = 28; + private static final int HEIGHT = 20; + private static final double SPEED = 0.075D; + private final Random random = new Random(); + private final boolean[][] walls = new boolean[HEIGHT][WIDTH]; + private final List enemies = new ArrayList<>(); + private Direction direction = Direction.RIGHT; + private Direction requested = Direction.RIGHT; + private Phase phase = Phase.READY; + private double playerX; + private double playerY; + private int diamondX; + private int diamondY; + private int cornDogX; + private int cornDogY; + private int cornDogTicks; + private int cornDogSpawnTicks; + private int score; + private int highScore; + private int lives = 3; + private int ticks; + private boolean collectedDiamond; + + public AntmanGame(int highScore, int score) { + this.highScore = Math.max(0, highScore); + reset(score); + } + + public void reset() { reset(0); } + + public void reset(int currentScore) { + generateMaze(); + playerX = 1.5D; + playerY = 1.5D; + direction = Direction.RIGHT; + requested = Direction.RIGHT; + phase = Phase.READY; + score = Math.max(0, currentScore); + lives = 3; + ticks = 0; + cornDogTicks = 0; + cornDogSpawnTicks = 0; + placeDiamond(); + cornDogX = -1; + cornDogY = -1; + enemies.clear(); + enemies.add(new Enemy(EnemyKind.CREEPER, WIDTH - 2.5D, HEIGHT - 2.5D, Direction.LEFT)); + enemies.add(new Enemy(EnemyKind.ZOMBIE, WIDTH - 2.5D, 1.5D, Direction.DOWN)); + } + + public void start() { if (phase == Phase.READY) phase = Phase.PLAYING; } + + public boolean tick() { + collectedDiamond = false; + if (phase != Phase.PLAYING) return false; + ticks++; + if (cornDogTicks > 0) cornDogTicks--; + if (cornDogX < 0 && ++cornDogSpawnTicks >= 240) { + placeCornDog(); + cornDogSpawnTicks = 0; + } + updatePlayer(); + updateEnemies(); + if (near(playerX, playerY, diamondX + 0.5D, diamondY + 0.5D)) { + score += 10; + highScore = Math.max(highScore, score); + collectedDiamond = true; + placeDiamond(); + } + if (cornDogX >= 0 && near(playerX, playerY, cornDogX + 0.5D, cornDogY + 0.5D)) { + cornDogTicks = 200; + cornDogX = -1; + cornDogY = -1; + cornDogSpawnTicks = 0; + } + for (int index = 0; index < enemies.size(); index++) { + Enemy enemy = enemies.get(index); + if (!near(playerX, playerY, enemy.x(), enemy.y())) continue; + if (cornDogTicks > 0) { + score += 100; + highScore = Math.max(highScore, score); + enemies.set(index, new Enemy(enemy.kind(), WIDTH - 2.5D, enemy.kind() == EnemyKind.CREEPER ? HEIGHT - 2.5D : 1.5D, Direction.LEFT)); + } else { + lives--; + if (lives <= 0) phase = Phase.LOST; + else { + playerX = 1.5D; + playerY = 1.5D; + direction = Direction.RIGHT; + requested = Direction.RIGHT; + } + } + } + return true; + } + + public void setDirection(Direction direction) { if (direction != null) requested = direction; } + public Phase phase() { return phase; } + public int score() { return score; } + public int highScore() { return highScore; } + public int lives() { return lives; } + public int width() { return WIDTH; } + public int height() { return HEIGHT; } + public double playerX() { return playerX; } + public double playerY() { return playerY; } + public int diamondX() { return diamondX; } + public int diamondY() { return diamondY; } + public int cornDogX() { return cornDogX; } + public int cornDogY() { return cornDogY; } + public int cornDogTicks() { return cornDogTicks; } + public int animationFrame() { return (ticks / 5) % 2; } + public Direction direction() { return direction; } + public List enemies() { return Collections.unmodifiableList(enemies); } + public boolean collectedDiamond() { return collectedDiamond; } + public boolean isWall(int x, int y) { return x < 0 || y < 0 || x >= WIDTH || y >= HEIGHT || walls[y][x]; } + + private void updatePlayer() { + if (atCenter(playerX) && atCenter(playerY) && canMove(playerX, playerY, requested)) { + playerX = Math.round(playerX - 0.5D) + 0.5D; + playerY = Math.round(playerY - 0.5D) + 0.5D; + direction = requested; + } + double nextX = playerX + direction.dx * SPEED; + double nextY = playerY + direction.dy * SPEED; + if (canMove(nextX, nextY, direction)) { playerX = nextX; playerY = nextY; } + else { playerX = Math.round(playerX - 0.5D) + 0.5D; playerY = Math.round(playerY - 0.5D) + 0.5D; } + } + + private void updateEnemies() { + for (int index = 0; index < enemies.size(); index++) { + Enemy enemy = enemies.get(index); + Direction next = enemy.direction(); + if (atCenter(enemy.x()) && atCenter(enemy.y())) next = enemy.kind() == EnemyKind.CREEPER ? chaseDirection(enemy.x(), enemy.y(), next) : zombieDirection(enemy.x(), enemy.y(), next); + double nextX = enemy.x() + next.dx * (enemy.kind() == EnemyKind.CREEPER ? 0.06D : 0.05D); + double nextY = enemy.y() + next.dy * (enemy.kind() == EnemyKind.CREEPER ? 0.06D : 0.05D); + if (!canMove(nextX, nextY, next)) { next = randomDirection(enemy.x(), enemy.y(), next); nextX = enemy.x() + next.dx * 0.05D; nextY = enemy.y() + next.dy * 0.05D; } + if (canMove(nextX, nextY, next)) enemies.set(index, new Enemy(enemy.kind(), nextX, nextY, next)); + } + } + + private Direction chaseDirection(double x, double y, Direction current) { + Direction best = current; + double distance = Double.MAX_VALUE; + for (Direction direction : Direction.values()) { + if (isOpposite(direction, current) || !canMove(x, y, direction)) continue; + double nx = x + direction.dx; + double ny = y + direction.dy; + double value = Math.abs(playerX - nx) + Math.abs(playerY - ny); + if (value < distance) { distance = value; best = direction; } + } + if (distance == Double.MAX_VALUE && canMove(x, y, current.opposite())) best = current.opposite(); + return best; + } + + private Direction zombieDirection(double x, double y, Direction current) { + if (random.nextInt(4) != 0 && canMove(x, y, current)) return current; + return randomDirection(x, y, current); + } + + private Direction randomDirection(double x, double y, Direction current) { + List options = new ArrayList<>(); + for (Direction direction : Direction.values()) if (!isOpposite(direction, current) && canMove(x, y, direction)) options.add(direction); + if (options.isEmpty() && canMove(x, y, current.opposite())) return current.opposite(); + if (options.isEmpty()) return current; + return options.get(random.nextInt(options.size())); + } + + private boolean canMove(double x, double y, Direction direction) { + double nx = x + direction.dx * SPEED; + double ny = y + direction.dy * SPEED; + return !isWall((int) Math.floor(nx), (int) Math.floor(ny)); + } + + private boolean atCenter(double value) { return Math.abs((value - 0.5D) - Math.rint(value - 0.5D)) < 0.07D; } + private boolean near(double firstX, double firstY, double secondX, double secondY) { return Math.abs(firstX - secondX) < 0.45D && Math.abs(firstY - secondY) < 0.45D; } + private boolean isOpposite(Direction first, Direction second) { return first.dx + second.dx == 0 && first.dy + second.dy == 0; } + + private void generateMaze() { + for (int y = 0; y < HEIGHT; y++) for (int x = 0; x < WIDTH; x++) walls[y][x] = true; + carve(1, 1); + } + + private void carve(int x, int y) { + walls[y][x] = false; + List directions = new ArrayList<>(List.of(Direction.UP, Direction.DOWN, Direction.LEFT, Direction.RIGHT)); + Collections.shuffle(directions, random); + for (Direction direction : directions) { + int nx = x + direction.dx * 2; + int ny = y + direction.dy * 2; + if (nx > 0 && ny > 0 && nx < WIDTH - 1 && ny < HEIGHT - 1 && walls[ny][nx]) { + walls[y + direction.dy][x + direction.dx] = false; + carve(nx, ny); + } + } + } + + private void placeDiamond() { + int[] cell = randomOpenCell(); + diamondX = cell[0]; + diamondY = cell[1]; + } + + private void placeCornDog() { + int[] cell = randomOpenCell(); + cornDogX = cell[0]; + cornDogY = cell[1]; + } + + private int[] randomOpenCell() { + int x; + int y; + do { x = random.nextInt(WIDTH); y = random.nextInt(HEIGHT); } while (isWall(x, y) || near(playerX, playerY, x + 0.5D, y + 0.5D)); + return new int[]{x, y}; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/AntmanProgram.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/AntmanProgram.java new file mode 100644 index 00000000..3966450c --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/AntmanProgram.java @@ -0,0 +1,48 @@ +package com.craisinlord.antarchy.content.client.game; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.sounds.SoundEvents; +import java.util.function.IntConsumer; + +public final class AntmanProgram { + private final AntmanGame game; + private final IntConsumer scoreSaver; + private boolean installed; + private int savedScore; + private int savedHighScore; + + public AntmanProgram(boolean installed, int highScore, int score, IntConsumer scoreSaver) { + this.installed = installed; + this.savedScore = score; + this.savedHighScore = highScore; + this.game = new AntmanGame(highScore, score); + this.scoreSaver = scoreSaver; + } + + public void setInstalled(boolean installed) { this.installed = installed; if (!installed) game.reset(); } + public boolean installed() { return installed; } + public AntmanGame game() { return game; } + public void setStoredScores(int score, int highScore) { savedScore = score; savedHighScore = highScore; game.reset(score); } + public void tick() { + if (!game.tick()) return; + if (game.collectedDiamond() && Minecraft.getInstance().player != null) Minecraft.getInstance().player.playSound(SoundEvents.AMETHYST_BLOCK_CHIME, 0.6F, 1.4F); + if (game.score() != savedScore || game.highScore() != savedHighScore) { savedScore = game.score(); savedHighScore = game.highScore(); scoreSaver.accept(savedScore); } + } + public boolean keyPressed(int keyCode) { + if (!installed) return false; + AntmanGame.Direction direction = switch (keyCode) { + case 265, 87 -> AntmanGame.Direction.UP; + case 264, 83 -> AntmanGame.Direction.DOWN; + case 263, 65 -> AntmanGame.Direction.LEFT; + case 262, 68 -> AntmanGame.Direction.RIGHT; + default -> null; + }; + if (direction != null) { game.start(); game.setDirection(direction); return true; } + if (keyCode == 257 || keyCode == 335) { if (game.phase() != AntmanGame.Phase.PLAYING) { game.reset(); game.start(); savedScore = 0; scoreSaver.accept(0); } return true; } + return false; + } + public void render(GuiGraphics graphics, Font font, int x, int y, int width, int height) { AntmanRenderer.render(graphics, font, game, x, y, width, height); } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/AntmanRenderer.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/AntmanRenderer.java new file mode 100644 index 00000000..7babb7b9 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/AntmanRenderer.java @@ -0,0 +1,100 @@ +package com.craisinlord.antarchy.content.client.game; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; + +public final class AntmanRenderer { + private static final int BLACK = 0xFF020602; + private static final int DARK_GREEN = 0xFF123012; + private static final int GREEN = 0xFF65FF65; + private static final int PALE_GREEN = 0xFFB8FFB8; + private static final int ANT_BODY = 0xFFC98A3D; + private static final int GHOST_RED = 0xFFFF4A4A; + private static final int GHOST_PINK = 0xFFFF8FD2; + private static final int GHOST_FRIGHTENED = 0xFF4A8CFF; + private static final int GHOST_EYE = 0xFFF8FFFF; + private AntmanRenderer() { } + + public static void render(GuiGraphics graphics, Font font, AntmanGame game, int x, int y, int width, int height) { + graphics.fill(x, y, x + width, y + height, BLACK); + graphics.drawString(font, "SCORE " + String.format("%04d", game.score()), x + 5, y + 4, GREEN, false); + graphics.drawString(font, "HI " + String.format("%04d", game.highScore()), x + width - 55, y + 4, PALE_GREEN, false); + graphics.drawString(font, "LIVES " + game.lives(), x + 5, y + height - 13, PALE_GREEN, false); + int tile = Math.max(1, Math.min((width - 8) / game.width(), (height - 34) / game.height())); + int boardWidth = tile * game.width(); + int boardHeight = tile * game.height(); + int boardX = x + (width - boardWidth) / 2; + int boardY = y + 20 + (height - 34 - boardHeight) / 2; + for (int cellY = 0; cellY < game.height(); cellY++) for (int cellX = 0; cellX < game.width(); cellX++) if (game.isWall(cellX, cellY)) graphics.fill(boardX + cellX * tile, boardY + cellY * tile, boardX + (cellX + 1) * tile, boardY + (cellY + 1) * tile, DARK_GREEN); + renderItem(graphics, new ItemStack(Items.DIAMOND), boardX + game.diamondX() * tile, boardY + game.diamondY() * tile, tile); + if (game.cornDogX() >= 0) renderItem(graphics, new ItemStack(AntarchyObjects.COOKED_CORNDOG.get()), boardX + game.cornDogX() * tile, boardY + game.cornDogY() * tile, tile); + int playerX = boardX + (int) (game.playerX() * tile); + int playerY = boardY + (int) (game.playerY() * tile); + drawAnt(graphics, playerX, playerY, tile, game.animationFrame(), ANT_BODY, game.direction()); + for (AntmanGame.Enemy enemy : game.enemies()) { + int enemyX = boardX + (int) (enemy.x() * tile); + int enemyY = boardY + (int) (enemy.y() * tile); + int color = game.cornDogTicks() > 0 ? GHOST_FRIGHTENED : (enemy.kind() == AntmanGame.EnemyKind.CREEPER ? GHOST_RED : GHOST_PINK); + drawGhost(graphics, enemyX, enemyY, tile, game.animationFrame(), color); + } + if (game.phase() != AntmanGame.Phase.PLAYING) { + String title = game.phase() == AntmanGame.Phase.READY ? "ANTMAN.EXE" : "GAME OVER"; + String prompt = game.phase() == AntmanGame.Phase.READY ? "ENTER TO START" : "ENTER TO RETRY"; + int centerY = y + height / 2; + graphics.fill(x + 4, centerY - 16, x + width - 4, centerY + 16, BLACK); + graphics.drawString(font, title, x + (width - font.width(title)) / 2, centerY - 12, GREEN, false); + graphics.drawString(font, prompt, x + (width - font.width(prompt)) / 2, centerY + 2, PALE_GREEN, false); + } + } + + private static void drawAnt(GuiGraphics graphics, int centerX, int centerY, int tile, int frame, int color, AntmanGame.Direction direction) { + int size = Math.max(4, tile - 1); + int left = centerX - size / 2; + int top = centerY - size / 2; + int segment = Math.max(1, size / 4); + graphics.fill(left + segment * 2, top + segment, left + segment * 3, top + segment * 3, color); + graphics.fill(left + segment, top + segment * 2, left + segment * 4, top + segment * 4, color); + graphics.fill(left + segment * 3, top + segment * 2, left + segment * 5, top + segment * 4, color); + int legOffset = frame == 0 ? 1 : -1; + graphics.fill(left + segment, top + segment * 3, left + segment * 2, top + segment * 4 + legOffset, color); + graphics.fill(left + segment * 3, top + segment * 3, left + segment * 4, top + segment * 4 - legOffset, color); + if (direction == AntmanGame.Direction.LEFT || direction == AntmanGame.Direction.RIGHT) { + int headX = direction == AntmanGame.Direction.LEFT ? left : left + segment * 4; + graphics.fill(headX, top + segment, headX + segment, top + segment * 2, BLACK); + } + } + + private static void drawGhost(GuiGraphics graphics, int centerX, int centerY, int tile, int frame, int color) { + int size = Math.max(4, tile - 1); + int left = centerX - size / 2; + int top = centerY - size / 2; + int eyeWidth = Math.max(1, size / 5); + int bodyBottom = top + size - 1; + graphics.fill(left + 1, top, left + size - 1, bodyBottom - 1, color); + graphics.fill(left, top + 2, left + size, bodyBottom - 2, color); + int wave = frame == 0 ? 0 : 1; + graphics.fill(left, bodyBottom - 1 - wave, left + size / 3, bodyBottom + 1, color); + graphics.fill(left + size / 3, bodyBottom - wave, left + size * 2 / 3, bodyBottom + 1, color); + graphics.fill(left + size * 2 / 3, bodyBottom - 1 - wave, left + size, bodyBottom + 1, color); + int eyeY = top + Math.max(1, size / 3); + graphics.fill(left + size / 3 - eyeWidth / 2, eyeY, left + size / 3 + eyeWidth, eyeY + eyeWidth + 1, GHOST_EYE); + graphics.fill(left + size * 2 / 3 - eyeWidth / 2, eyeY, left + size * 2 / 3 + eyeWidth, eyeY + eyeWidth + 1, GHOST_EYE); + graphics.fill(left + size / 3, eyeY + 1, left + size / 3 + 1, eyeY + eyeWidth + 1, BLACK); + graphics.fill(left + size * 2 / 3, eyeY + 1, left + size * 2 / 3 + 1, eyeY + eyeWidth + 1, BLACK); + } + + private static void renderItem(GuiGraphics graphics, ItemStack stack, int x, int y, int tile) { + float scale = Math.min(1.0F, Math.max(0.45F, tile / 16.0F)); + graphics.pose().pushPose(); + graphics.pose().translate(x + tile / 2.0F, y + tile / 2.0F, 0.0F); + graphics.pose().scale(scale, scale, 1.0F); + RenderSystem.setShaderColor(0.38F, 1.0F, 0.38F, 1.0F); + graphics.renderItem(stack, -8, -8); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + graphics.pose().popPose(); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/BasiliskGame.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/BasiliskGame.java new file mode 100644 index 00000000..36fedcf9 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/BasiliskGame.java @@ -0,0 +1,94 @@ +package com.craisinlord.antarchy.content.client.game; + +import java.util.ArrayDeque; +import java.util.Deque; +import java.util.Random; + +public final class BasiliskGame { + public enum Phase { READY, PLAYING, LOST } + public enum Direction { UP(0, -1), DOWN(0, 1), LEFT(-1, 0), RIGHT(1, 0); + final int dx; + final int dy; + Direction(int dx, int dy) { this.dx = dx; this.dy = dy; } + } + + private final Deque body = new ArrayDeque<>(); + private final Random random = new Random(); + private Direction direction = Direction.RIGHT; + private Direction requested = Direction.RIGHT; + private Phase phase = Phase.READY; + private int foodX; + private int foodY; + private int score; + private int highScore; + private int ticks; + + public BasiliskGame(int highScore, int score) { + this.highScore = Math.max(0, highScore); + reset(score); + } + + public void reset() { + reset(0); + } + + public void reset(int currentScore) { + body.clear(); + body.addFirst(new Part(9, 7)); + body.addLast(new Part(8, 7)); + body.addLast(new Part(7, 7)); + direction = Direction.RIGHT; + requested = Direction.RIGHT; + phase = Phase.READY; + score = Math.max(0, currentScore); + ticks = 0; + placeFood(); + } + + public void start() { if (phase == Phase.READY) phase = Phase.PLAYING; } + + public boolean tick() { + if (phase != Phase.PLAYING || ++ticks < 5) return false; + ticks = 0; + if (!isOpposite(requested, direction)) direction = requested; + Part head = body.peekFirst(); + int nextX = head.x() + direction.dx; + int nextY = head.y() + direction.dy; + if (nextX < 0 || nextX >= 20 || nextY < 0 || nextY >= 14 || body.contains(new Part(nextX, nextY))) { + phase = Phase.LOST; + return true; + } + body.addFirst(new Part(nextX, nextY)); + if (nextX == foodX && nextY == foodY) { + score += 10; + highScore = Math.max(highScore, score); + placeFood(); + } else { + body.removeLast(); + } + return true; + } + + public void setDirection(Direction direction) { if (direction != null && !isOpposite(direction, this.direction)) requested = direction; } + public Phase phase() { return phase; } + public int score() { return score; } + public int highScore() { return highScore; } + public int width() { return 20; } + public int height() { return 14; } + public int foodX() { return foodX; } + public int foodY() { return foodY; } + public Deque body() { return body; } + + private void placeFood() { + do { + foodX = random.nextInt(width()); + foodY = random.nextInt(height()); + } while (body.contains(new Part(foodX, foodY))); + } + + private boolean isOpposite(Direction first, Direction second) { + return first.dx + second.dx == 0 && first.dy + second.dy == 0; + } + + public record Part(int x, int y) { } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/BasiliskProgram.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/BasiliskProgram.java new file mode 100644 index 00000000..cf85c8d5 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/BasiliskProgram.java @@ -0,0 +1,43 @@ +package com.craisinlord.antarchy.content.client.game; + +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import java.util.function.IntConsumer; + +public final class BasiliskProgram { + private final BasiliskGame game; + private boolean installed; + private int savedScore; + private int savedHighScore; + private final IntConsumer scoreSaver; + + public BasiliskProgram(boolean installed, int highScore, int score, IntConsumer scoreSaver) { + this.installed = installed; + this.savedHighScore = highScore; + this.savedScore = score; + this.game = new BasiliskGame(highScore, score); + this.scoreSaver = scoreSaver; + } + + public void setInstalled(boolean installed) { this.installed = installed; if (!installed) game.reset(); } + public boolean installed() { return installed; } + public BasiliskGame game() { return game; } + public void setStoredScores(int score, int highScore) { savedScore = score; savedHighScore = highScore; game.reset(score); } + public void tick() { if (game.tick() && (game.score() != savedScore || game.highScore() != savedHighScore)) { if (game.score() > savedScore) Minecraft.getInstance().player.playSound(AntarchySoundEvents.BASILISK_BITE.get(), 0.5F, 1.2F); savedScore = game.score(); savedHighScore = game.highScore(); scoreSaver.accept(savedScore); } } + public boolean keyPressed(int keyCode) { + if (!installed) return false; + BasiliskGame.Direction direction = switch (keyCode) { + case 265, 87 -> BasiliskGame.Direction.UP; + case 264, 83 -> BasiliskGame.Direction.DOWN; + case 263, 65 -> BasiliskGame.Direction.LEFT; + case 262, 68 -> BasiliskGame.Direction.RIGHT; + default -> null; + }; + if (direction != null) { game.start(); game.setDirection(direction); return true; } + if (keyCode == 257 || keyCode == 335) { if (game.phase() != BasiliskGame.Phase.PLAYING) { game.reset(); game.start(); savedScore = 0; scoreSaver.accept(0); } return true; } + return false; + } + public void render(GuiGraphics graphics, Font font, int x, int y, int width, int height) { BasiliskRenderer.render(graphics, font, game, x, y, width, height); } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/BasiliskRenderer.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/BasiliskRenderer.java new file mode 100644 index 00000000..3adab6c6 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/BasiliskRenderer.java @@ -0,0 +1,39 @@ +package com.craisinlord.antarchy.content.client.game; + +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; + +public final class BasiliskRenderer { + private static final int BLACK = 0xFF020602; + private static final int DARK_GREEN = 0xFF123012; + private static final int GREEN = 0xFF65FF65; + private static final int PALE_GREEN = 0xFFB8FFB8; + private BasiliskRenderer() { } + + public static void render(GuiGraphics graphics, Font font, BasiliskGame game, int x, int y, int width, int height) { + graphics.fill(x, y, x + width, y + height, BLACK); + graphics.drawString(font, "SCORE " + String.format("%04d", game.score()), x + 6, y + 4, GREEN, false); + graphics.drawString(font, "HI " + String.format("%04d", game.highScore()), x + width - 56, y + 4, PALE_GREEN, false); + int tile = Math.max(1, Math.min((width - 10) / game.width(), (height - 28) / game.height())); + int boardWidth = tile * game.width(); + int boardHeight = tile * game.height(); + int boardX = x + (width - boardWidth) / 2; + int boardY = y + 22 + (height - 22 - boardHeight) / 2; + graphics.fill(boardX, boardY, boardX + boardWidth, boardY + boardHeight, DARK_GREEN); + graphics.fill(boardX + 1, boardY + 1, boardX + boardWidth - 1, boardY + boardHeight - 1, BLACK); + int appleX = boardX + game.foodX() * tile; + int appleY = boardY + game.foodY() * tile; + int appleInset = Math.max(1, tile / 4); + graphics.fill(appleX + appleInset, appleY + appleInset + 1, appleX + tile - appleInset, appleY + tile - appleInset, PALE_GREEN); + if (tile >= 5) graphics.fill(appleX + tile / 2, appleY + 1, appleX + tile / 2 + 1, appleY + tile / 3 + 1, GREEN); + for (BasiliskGame.Part part : game.body()) graphics.fill(boardX + part.x() * tile + 1, boardY + part.y() * tile + 1, boardX + (part.x() + 1) * tile - 1, boardY + (part.y() + 1) * tile - 1, GREEN); + if (game.phase() != BasiliskGame.Phase.PLAYING) { + String title = game.phase() == BasiliskGame.Phase.READY ? "BASILISK" : "GAME OVER"; + String prompt = game.phase() == BasiliskGame.Phase.READY ? "ENTER TO START" : "ENTER TO RETRY"; + int centerY = y + height / 2; + graphics.fill(x + 4, centerY - 16, x + width - 4, centerY + 16, BLACK); + graphics.drawString(font, title, x + (width - font.width(title)) / 2, centerY - 12, GREEN, false); + graphics.drawString(font, prompt, x + (width - font.width(prompt)) / 2, centerY + 2, PALE_GREEN, false); + } + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/BlockleProgram.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/BlockleProgram.java new file mode 100644 index 00000000..c2413431 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/BlockleProgram.java @@ -0,0 +1,141 @@ +package com.craisinlord.antarchy.content.client.game; + +import com.craisinlord.antarchy.content.client.BlockleClientState; +import com.craisinlord.antarchy.content.network.ComputerAccessResultPayload; +import com.craisinlord.antarchy.content.network.ComputerNetworking; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; + +import java.util.ArrayList; +import java.util.List; + +public final class BlockleProgram { + private final BlockPos position; + private final List guesses = new ArrayList<>(); + private final List colors = new ArrayList<>(); + private String input = ""; + private String status = "LOADING..."; + private String phase = "PLAYING"; + private String answer = ""; + private ResourceLocation answerId; + private long day = -1L; + private boolean installed; + private boolean pending; + private boolean received; + private String lastResponse = ""; + + public BlockleProgram(BlockPos position) { + this.position = position; + } + + public void setInstalled(boolean installed) { + this.installed = installed; + if (!installed) clear(); + } + + public boolean installed() { + return installed; + } + + public void requestState() { + if (installed) ComputerNetworking.requestBlockleState(position); + } + + public void tick() { + ComputerAccessResultPayload result = BlockleClientState.get(position); + if (result == null) return; + if (result.data().equals(lastResponse)) return; + lastResponse = result.data(); + String[] fields = result.data().split("\u0000", 3); + if (fields.length < 2 || (!fields[0].equals("18") && !fields[0].equals("19"))) return; + if (!fields[1].isBlank()) { + status = fields[1].toUpperCase(); + pending = false; + return; + } + if (fields.length == 3) { + parse(fields[2]); + pending = false; + input = ""; + received = true; + } + } + + public boolean keyPressed(int keyCode) { + if (!installed) return false; + if (keyCode == 259) { + if (!input.isEmpty()) input = input.substring(0, input.length() - 1); + return true; + } + if (keyCode == 257 || keyCode == 335) { + if (!received) return true; + if (input.length() == 5 && phase.equals("PLAYING") && !pending) { + ComputerNetworking.submitBlockleGuess(position, input); + pending = true; + status = "SUBMITTING"; + } + return true; + } + return false; + } + + public boolean charTyped(char codePoint) { + if (!installed || !received || phase.equals("SOLVED") || phase.equals("FAILED")) return false; + if (codePoint >= 'A' && codePoint <= 'Z') codePoint = Character.toLowerCase(codePoint); + if (codePoint >= 'a' && codePoint <= 'z' && input.length() < 5) { + input += codePoint; + status = ""; + return true; + } + return false; + } + + public void render(GuiGraphics graphics, Font font, int x, int y, int width, int height) { + BlockleRenderer.render(graphics, font, x, y, width, height, guesses, colors, input, status, phase, answerId); + } + + private void parse(String encoded) { + String[] values = encoded.split("\\|"); + if (values.length == 0) return; + try { day = Long.parseLong(values[0]); } catch (NumberFormatException ignored) { return; } + guesses.clear(); + colors.clear(); + phase = "PLAYING"; + answer = ""; + for (int index = 1; index < values.length; index++) { + String value = values[index]; + if (value.equals("PLAYING") || value.equals("SOLVED") || value.equals("FAILED")) { + phase = value; + if (index + 1 < values.length && (phase.equals("SOLVED") || phase.equals("FAILED"))) { + answer = values[index + 1]; + if (index + 2 < values.length) { + try { answerId = ResourceLocation.parse(values[index + 2]); } catch (IllegalArgumentException ignored) { answerId = null; } + } + } + break; + } + String[] guess = value.split(",", 2); + if (guess.length == 2 && guess[0].length() == 5 && guess[1].length() == 5) { + guesses.add(guess[0]); + colors.add(guess[1]); + } + } + status = phase.equals("FAILED") && !answer.isBlank() ? "ANSWER: " + answer.toUpperCase() : phase.equals("PLAYING") ? "" : phase; + } + + private void clear() { + guesses.clear(); + colors.clear(); + input = ""; + status = "LOADING..."; + phase = "PLAYING"; + answer = ""; + answerId = null; + day = -1L; + pending = false; + received = false; + lastResponse = ""; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/BlockleRenderer.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/BlockleRenderer.java new file mode 100644 index 00000000..7e27eb64 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/game/BlockleRenderer.java @@ -0,0 +1,61 @@ +package com.craisinlord.antarchy.content.client.game; + +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.network.chat.Component; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.world.item.ItemStack; +import net.minecraft.resources.ResourceLocation; + +import java.util.List; + +public final class BlockleRenderer { + private static final int EMPTY = 0xFF102010; + private static final int GREY = 0xFF3A403A; + private static final int YELLOW = 0xFFB59F3B; + private static final int GREEN = 0xFF538D4E; + private static final int PALE = 0xFFB8FFB8; + + private BlockleRenderer() { + } + + public static void render(GuiGraphics graphics, Font font, int x, int y, int width, int height, + List guesses, List colors, String input, String status, String phase, + ResourceLocation answerId) { + graphics.drawString(font, Component.literal("BLOCKLE"), x, y, 0xFF65FF65, false); + int cell = 18; + int gap = 3; + int boardX = x + Math.max(0, (width - cell * 5 - gap * 4) / 2); + int boardY = y + 18; + for (int row = 0; row < 6; row++) { + String guess = row < guesses.size() ? guesses.get(row) : row == guesses.size() ? input : ""; + String rowColors = row < colors.size() ? colors.get(row) : ""; + for (int column = 0; column < 5; column++) { + int left = boardX + column * (cell + gap); + int top = boardY + row * (cell + gap); + int fill = EMPTY; + if (column < rowColors.length()) fill = switch (rowColors.charAt(column)) { + case 'G' -> GREEN; + case 'Y' -> YELLOW; + default -> GREY; + }; + graphics.fill(left, top, left + cell, top + cell, fill); + if (column < guess.length()) { + String letter = Character.toString(Character.toUpperCase(guess.charAt(column))); + graphics.drawCenteredString(font, letter, left + cell / 2, top + 5, PALE); + } + } + } + String message = status.isBlank() ? "ENTER TO SUBMIT" : status; + if (phase.equals("PLAYING") && input.length() < 5) message = input.length() + "/5 LETTERS"; + graphics.drawString(font, Component.literal(message), x, y + 145, PALE, false); + if (!phase.equals("PLAYING") && answerId != null) { + ItemStack answerStack = BuiltInRegistries.ITEM.getOptional(answerId).map(ItemStack::new).orElse(ItemStack.EMPTY); + if (!answerStack.isEmpty()) { + graphics.setColor(0.35F, 1.0F, 0.35F, 1.0F); + graphics.renderItem(answerStack, x + width - 28, y + 137); + graphics.setColor(1.0F, 1.0F, 1.0F, 1.0F); + } + } + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/screen/ComputerScreen.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/screen/ComputerScreen.java index 8d38bd8b..7a8d688c 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/screen/ComputerScreen.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/screen/ComputerScreen.java @@ -3,6 +3,7 @@ package com.craisinlord.antarchy.content.client.screen; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.block.entity.ComputerBlockEntity; import com.craisinlord.antarchy.content.client.ComputerAccessClientState; +import com.craisinlord.antarchy.content.client.BlockleClientState; import com.craisinlord.antarchy.content.client.ComputerFileSystemClientState; import com.craisinlord.antarchy.content.client.AntmailClientState; import com.craisinlord.antarchy.content.antmail.AntmailAddress; @@ -10,6 +11,8 @@ import com.craisinlord.antarchy.content.antmail.AntmailMailbox; import com.craisinlord.antarchy.content.antmail.AntmailMessage; import com.craisinlord.antarchy.content.antmail.AntmailWire; import com.craisinlord.antarchy.content.antmail.AntmailAttachment; +import com.craisinlord.antarchy.content.antmail.AntmailAttachmentFiles; +import com.craisinlord.antarchy.content.antmail.AntmailDraft; import com.craisinlord.antarchy.content.guide.ComputerGuideData; import com.craisinlord.antarchy.content.network.ComputerAccessResultPayload; import com.craisinlord.antarchy.content.network.AntmailResultPayload; @@ -22,7 +25,9 @@ import com.craisinlord.antarchy.content.computer.paint.AntPaintFile; import com.craisinlord.antarchy.content.computer.paint.AntPaintFileCodec; import com.craisinlord.antarchy.content.computer.ComputerFileSystem; import com.craisinlord.antarchy.content.computer.ComputerDesktopState; -import com.craisinlord.antarchy.content.client.game.AntFarmProgram; +import com.craisinlord.antarchy.content.client.game.BasiliskProgram; +import com.craisinlord.antarchy.content.client.game.AntmanProgram; +import com.craisinlord.antarchy.content.client.game.BlockleProgram; import com.craisinlord.antarchy.content.computer.terminal.TerminalCommandParser; import com.craisinlord.antarchy.content.computer.terminal.TerminalResult; import org.lwjgl.glfw.GLFW; @@ -35,12 +40,16 @@ import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.world.entity.LivingEntity; import net.minecraft.client.gui.screens.inventory.InventoryScreen; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Ingredient; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Base64; +import java.util.HashSet; +import java.util.Set; import java.util.UUID; public final class ComputerScreen extends Screen { @@ -72,19 +81,34 @@ public final class ComputerScreen extends Screen { private int dragX; private int dragY; private Window activeWindow; - private final AntFarmProgram antFarm = new AntFarmProgram(false); + private final BasiliskProgram basilisk; + private final AntmanProgram antman; + private final BlockleProgram blockle; + private final Set archiveRenderLog = new HashSet<>(); public ComputerScreen(net.minecraft.core.BlockPos position) { super(Component.translatable("screen.antarchy.computer")); this.position = position; + this.basilisk = new BasiliskProgram(false, 0, 0, score -> ComputerNetworking.saveBasiliskScore(this.position, score)); + this.antman = new AntmanProgram(false, 0, 0, score -> ComputerNetworking.saveAntmanScore(this.position, score)); + this.blockle = new BlockleProgram(this.position); String dimension = Minecraft.getInstance().level == null ? "" : Minecraft.getInstance().level.dimension().location().toString(); this.sessionKey = dimension + ":" + position.asLong(); this.session = SESSIONS.computeIfAbsent(sessionKey, ignored -> new Session()); + this.session.windows.removeIf(window -> window.type.equals("GAMES") && window.gameOpen); if (this.session.bootTicks < 0) this.session.bootTicks = 80; + this.session.antmanStateRequested = false; + this.session.blockleStateRequested = false; + this.session.antmanResponse = ""; + ComputerAccessClientState.clear(position); + BlockleClientState.clear(position); ComputerNetworking.open(position); - AntmailNetworking.requestState(position); this.accessResult = ComputerAccessClientState.get(position); this.loggedIn = accessResult != null && accessResult.authenticated() && session.lastUse + SESSION_TIMEOUT > System.currentTimeMillis(); + if (loggedIn) { + requestAntmailState(); + session.antmailRefreshTicks = 40; + } if (!loggedIn) { session.authenticated = false; session.windows.clear(); @@ -113,12 +137,16 @@ public final class ComputerScreen extends Screen { } } AntmailResultPayload mailResult = AntmailClientState.get(position); + if (loggedIn && --session.antmailRefreshTicks <= 0) { + requestAntmailState(); + session.antmailRefreshTicks = 40; + } if (session.antmailRegistrationPending && mailResult != null) { String expectedAddress = session.antmailUsername + "@antmail.com"; if (mailResult.address().equalsIgnoreCase(expectedAddress)) { session.antmailStatus = "ADDRESS REGISTERED"; session.antmailRegistrationPending = false; - AntmailNetworking.requestState(position); + requestAntmailState(); } else if (mailResult.detail().startsWith("registration_failed:")) { String reason = mailResult.detail().substring("registration_failed:".length()).trim(); session.antmailStatus = "ADDRESS REGISTRATION FAILED // " + (reason.isBlank() ? "SERVER REJECTED" : reason.toUpperCase()); @@ -129,6 +157,8 @@ public final class ComputerScreen extends Screen { loggedIn = true; session.authenticated = true; session.lastUse = System.currentTimeMillis(); + session.antmailRefreshTicks = 40; + requestAntmailState(); } if (loggedIn && (session.lastUse + SESSION_TIMEOUT <= System.currentTimeMillis() || accessResult == null || !accessResult.authenticated())) { loggedIn = false; @@ -139,6 +169,18 @@ public final class ComputerScreen extends Screen { ComputerNetworking.requestDesktopState(position); session.desktopRequested = true; } + if (loggedIn && !session.basiliskStateRequested) { + ComputerNetworking.requestBasiliskState(position); + session.basiliskStateRequested = true; + } + if (loggedIn && !session.antmanStateRequested) { + ComputerNetworking.requestAntmanState(position); + session.antmanStateRequested = true; + } + if (loggedIn && !session.blockleStateRequested) { + ComputerNetworking.requestBlockleState(position); + session.blockleStateRequested = true; + } if (currentResult != null && currentResult.data().startsWith("11\u0000")) { String[] desktop = currentResult.data().split("\u0000", 3); if (desktop.length == 3 && !desktop[2].isBlank()) { @@ -169,8 +211,35 @@ public final class ComputerScreen extends Screen { session.terminalOutput.add("ERROR: CORRUPTED SERVER RESPONSE"); } } - antFarm.setGameInstalled(physicalDisks().stream().anyMatch(id -> id.getPath().equals("ant_farm"))); - if (activeWindow != null && activeWindow.type.equals("GAMES") && activeWindow.gameOpen) antFarm.tick(); + basilisk.setInstalled(physicalDisks().stream().anyMatch(id -> id.getPath().equals("basilisk_game"))); + antman.setInstalled(physicalDisks().stream().anyMatch(id -> id.getPath().equals("antman_game"))); + boolean blockleWasInstalled = blockle.installed(); + blockle.setInstalled(physicalDisks().stream().anyMatch(id -> id.getPath().equals("blockle_game"))); + if (loggedIn && blockle.installed() && !blockleWasInstalled) { + ComputerNetworking.requestBlockleState(position); + session.blockleStateRequested = true; + } + blockle.tick(); + if (currentResult != null && currentResult.data().startsWith("16\u0000") && !currentResult.data().equals(session.basiliskResponse)) { + session.basiliskResponse = currentResult.data(); + String[] scores = currentResult.data().split("\u0000", 3); + if (scores.length == 3) { + String[] values = scores[2].split("\u0000", 2); + if (values.length == 2) try { basilisk.setStoredScores(Integer.parseInt(values[0]), Integer.parseInt(values[1])); } catch (NumberFormatException ignored) { } + } + } + if (currentResult != null && currentResult.data().startsWith("17\u0000") && !currentResult.data().equals(session.antmanResponse)) { + session.antmanResponse = currentResult.data(); + String[] scores = currentResult.data().split("\u0000", 3); + if (scores.length == 3) { + String[] values = scores[2].split("\u0000", 2); + if (values.length == 2) try { antman.setStoredScores(Integer.parseInt(values[0]), Integer.parseInt(values[1])); } catch (NumberFormatException ignored) { } + } + } + if (activeWindow != null && activeWindow.type.equals("GAMES") && activeWindow.gameOpen) { + if (activeWindow.gameId.equals("antman")) antman.tick(); + else if (activeWindow.gameId.equals("basilisk")) basilisk.tick(); + } } @Override @@ -198,7 +267,7 @@ public final class ComputerScreen extends Screen { private void renderBoot(GuiGraphics g, int l, int t) { int progress = Math.min(100, (80 - session.bootTicks) * 100 / 80); int message = Math.min(BOOT_MESSAGES.length - 1, progress * BOOT_MESSAGES.length / 101); - g.drawString(font, Component.literal("ANTINTOSH OS"), l + 28, t + 78, GREEN, false); + g.drawString(font, Component.literal("ANTINTOSH OS // v" + Antarchy.MOD_VERSION), l + 28, t + 78, GREEN, false); g.drawString(font, Component.literal("INITIALIZING SYSTEM..."), l + 28, t + 105, PALE_GREEN, false); g.fill(l + 28, t + 132, l + WIDTH - 28, t + 148, BLACK); box(g, l + 28, t + 132, l + WIDTH - 28, t + 148, GREEN); @@ -208,7 +277,7 @@ public final class ComputerScreen extends Screen { } private void renderLogin(GuiGraphics g, int l, int t) { - g.drawString(font, Component.literal("ANTINTOSH OS"), l + 28, t + 25, GREEN, false); + g.drawString(font, Component.literal("ANTINTOSH OS // v" + Antarchy.MOD_VERSION), l + 28, t + 25, GREEN, false); g.drawString(font, Component.literal("BOOT SEQUENCE COMPLETE"), l + 28, t + 43, PALE_GREEN, false); g.fill(l + 28, t + 59, l + WIDTH - 28, t + 61, GREEN); ComputerBlockEntity computer = computer(); @@ -222,7 +291,7 @@ public final class ComputerScreen extends Screen { g.drawString(font, Component.literal("*".repeat((confirmingPassword ? confirmation : password).length())), formX + 6, t + 157, GREEN, false); g.drawString(font, Component.literal(setup ? (confirmingPassword ? "[ ENTER ] CONFIRM" : "[ ENTER ] CONTINUE") : "[ ENTER ] LOGIN"), formX, t + 187, GREEN, false); g.drawString(font, Component.literal("[ ESC ] POWER DOWN"), formX, t + 205, PALE_GREEN, false); - if (loginMessageTicks > 0) wrap(g, loginMessage, formX, t + 232, setup ? 220 : 165, PALE_GREEN); + if (loginMessageTicks > 0) wrapLimited(g, loginMessage, formX, t + 232, setup ? 220 : 165, t + HEIGHT - 8, PALE_GREEN); } private void renderDesktop(GuiGraphics g, int l, int t, int mouseX, int mouseY) { @@ -246,9 +315,10 @@ public final class ComputerScreen extends Screen { boolean hover = inside(x - 6, y - 6, 76, 57, mouseX, mouseY); if (hover) g.fill(x - 7, y - 7, x + 69, y + 51, 0xFF173817); icon(g, ICONS[i], x + 25, y + 2); + if (ICONS[i].equals("ANTMAIL") && antmailHasUnreadMessages()) drawNotificationBadge(g, x + 47, y - 3); g.drawString(font, Component.literal(ICONS[i]), x, y + 35, GREEN, false); } - List disks = physicalDisks(); + List disks = physicalDisks().stream().filter(id -> !id.getPath().equals("blockle_game")).toList(); for (int i = 0; i < disks.size() && i < 3; i++) { int x = l + 24 + i % 4 * 94; int y = t + 200 + i / 4 * 54; @@ -259,6 +329,19 @@ public final class ComputerScreen extends Screen { for (Window window : session.windows) if (!window.minimized) renderWindow(g, window, l, t, mouseX, mouseY); } + private boolean antmailHasUnreadMessages() { + AntmailResultPayload result = AntmailClientState.getMailbox(position); + AntmailMailbox mailbox = mailbox(result); + return mailbox != null && mailbox.unreadCount() > 0; + } + + private void drawNotificationBadge(GuiGraphics g, int x, int y) { + g.fill(x - 3, y - 1, x + 4, y + 6, PALE_GREEN); + g.fill(x - 1, y - 3, x + 2, y + 8, PALE_GREEN); + g.fill(x - 5, y + 1, x + 6, y + 4, PALE_GREEN); + g.drawString(font, Component.literal("!"), x - 1, y - 1, BLACK, false); + } + private void renderWallpaper(GuiGraphics g, int l, int t) { int left = l + 9; int top = t + 34; @@ -307,20 +390,24 @@ public final class ComputerScreen extends Screen { return; } if (type.equals("FILES")) { - g.fill(x - 12, y + 2, x + 11, y + 19, BLACK); - g.fill(x - 9, y, x + 1, y + 4, BLACK); - g.fill(x - 8, y + 3, x + 9, y + 16, GREEN); - g.fill(x - 9, y + 8, x + 9, y + 16, GREEN); - g.fill(x - 6, y + 2, x - 1, y + 4, GREEN); + // Windows-style file silhouette: the raised tab starts flush at the left edge. + g.fill(x - 11, y + 3, x + 11, y + 20, BLACK); + g.fill(x - 11, y, x - 1, y + 6, BLACK); + g.fill(x - 8, y + 6, x + 8, y + 17, GREEN); + g.fill(x - 8, y + 3, x - 2, y + 6, GREEN); return; } if (type.equals("SETTINGS")) { - g.fill(x - 5, y - 3, x + 5, y + 20, BLACK); - g.fill(x - 12, y + 5, x + 12, y + 13, BLACK); - g.fill(x - 9, y, x + 9, y + 18, BLACK); - g.fill(x - 2, y, x + 2, y + 17, GREEN); - g.fill(x - 9, y + 7, x + 9, y + 11, GREEN); - g.fill(x - 3, y + 5, x + 3, y + 13, BLACK); + // Eight-tooth gear: a solid stepped silhouette with a clearly cut-out hub. + g.fill(x - 4, y - 3, x + 4, y + 20, BLACK); + g.fill(x - 12, y + 6, x + 12, y + 13, BLACK); + g.fill(x - 9, y, x - 4, y + 5, BLACK); + g.fill(x + 4, y, x + 9, y + 5, BLACK); + g.fill(x - 9, y + 14, x - 4, y + 19, BLACK); + g.fill(x + 4, y + 14, x + 9, y + 19, BLACK); + g.fill(x - 7, y + 3, x + 7, y + 17, GREEN); + g.fill(x - 10, y + 7, x + 10, y + 12, GREEN); + g.fill(x - 3, y + 7, x + 3, y + 13, BLACK); return; } if (type.equals("TERMINAL")) { @@ -340,16 +427,19 @@ public final class ComputerScreen extends Screen { return; } if (type.equals("PAINT")) { - // Palette with a separate brush, using a stepped silhouette to keep the icon readable at desktop scale. - g.fill(x - 10, y + 2, x + 8, y + 19, BLACK); - g.fill(x - 7, y + 4, x + 6, y + 16, GREEN); - g.fill(x - 4, y + 6, x - 1, y + 9, BLACK); - g.fill(x + 1, y + 5, x + 4, y + 8, BLACK); - g.fill(x + 2, y + 11, x + 5, y + 14, BLACK); - g.fill(x + 8, y - 3, x + 11, y + 10, BLACK); - g.fill(x + 5, y + 6, x + 9, y + 9, BLACK); - g.fill(x + 8, y - 1, x + 10, y + 7, PALE_GREEN); - g.fill(x + 5, y + 7, x + 8, y + 10, PALE_GREEN); + // Paint palette first, then a stepped diagonal brush over it. + g.fill(x - 11, y + 2, x + 8, y + 19, BLACK); + g.fill(x - 8, y + 5, x + 5, y + 16, GREEN); + g.fill(x - 5, y + 7, x - 2, y + 10, BLACK); + g.fill(x, y + 6, x + 3, y + 9, BLACK); + g.fill(x + 1, y + 12, x + 4, y + 15, BLACK); + g.fill(x + 7, y - 4, x + 12, y + 3, BLACK); + g.fill(x + 5, y + 1, x + 10, y + 8, BLACK); + g.fill(x + 3, y + 6, x + 8, y + 13, BLACK); + g.fill(x + 1, y + 11, x + 6, y + 16, BLACK); + g.fill(x + 8, y - 2, x + 10, y + 2, PALE_GREEN); + g.fill(x + 6, y + 2, x + 8, y + 7, PALE_GREEN); + g.fill(x + 3, y + 8, x + 5, y + 12, PALE_GREEN); return; } if (type.equals("ANTMAIL")) { @@ -357,30 +447,32 @@ public final class ComputerScreen extends Screen { g.fill(x - 9, y + 5, x + 9, y + 14, GREEN); // Sealed envelope: the stepped black V is the closed flap. g.fill(x - 8, y + 5, x - 5, y + 7, BLACK); - g.fill(x - 6, y + 7, x - 3, y + 9, BLACK); - g.fill(x - 4, y + 9, x - 1, y + 11, BLACK); - g.fill(x - 1, y + 11, x + 2, y + 13, BLACK); - g.fill(x + 1, y + 9, x + 4, y + 11, BLACK); - g.fill(x + 3, y + 7, x + 6, y + 9, BLACK); g.fill(x + 5, y + 5, x + 8, y + 7, BLACK); + g.fill(x - 6, y + 7, x - 3, y + 9, BLACK); + g.fill(x + 3, y + 7, x + 6, y + 9, BLACK); + g.fill(x - 4, y + 9, x - 1, y + 11, BLACK); + g.fill(x + 1, y + 9, x + 4, y + 11, BLACK); + g.fill(x - 1, y + 11, x + 2, y + 13, BLACK); return; } if (type.equals("GAMES")) { - g.fill(x - 12, y + 6, x + 12, y + 15, BLACK); - g.fill(x - 9, y + 3, x + 9, y + 18, BLACK); - g.fill(x - 8, y + 6, x + 8, y + 15, GREEN); - g.fill(x - 5, y + 8, x + 1, y + 10, BLACK); - g.fill(x - 3, y + 6, x - 1, y + 12, BLACK); - g.fill(x + 4, y + 7, x + 6, y + 9, BLACK); - g.fill(x + 7, y + 10, x + 9, y + 12, BLACK); + // Simple rectangular retro controller, sized to match the other icons. + g.fill(x - 12, y + 3, x + 12, y + 18, BLACK); + g.fill(x - 9, y + 6, x + 9, y + 15, GREEN); + // Controls only: one pixel down and one pixel left; the shell stays put. + g.fill(x - 7, y + 9, x - 1, y + 11, BLACK); + g.fill(x - 5, y + 7, x - 3, y + 13, BLACK); + g.fill(x + 3, y + 8, x + 5, y + 10, BLACK); + g.fill(x + 6, y + 11, x + 8, y + 13, BLACK); return; } if (type.equals("TRASH")) { - g.fill(x - 9, y + 2, x + 9, y + 5, BLACK); - g.fill(x - 8, y + 5, x + 8, y + 19, BLACK); - g.fill(x - 5, y + 7, x + 5, y + 16, GREEN); - g.fill(x - 6, y + 3, x + 6, y + 4, GREEN); + // Paint the complete black silhouette first so every green panel sits above it. + g.fill(x - 11, y + 2, x + 11, y + 5, BLACK); + g.fill(x - 8, y + 5, x + 8, y + 20, BLACK); g.fill(x - 5, y - 1, x + 5, y + 2, BLACK); + g.fill(x - 5, y + 8, x + 5, y + 17, GREEN); + g.fill(x - 8, y + 5, x + 8, y + 7, GREEN); g.fill(x - 3, y, x + 3, y + 1, GREEN); return; } @@ -389,6 +481,13 @@ public final class ComputerScreen extends Screen { } private void renderWindow(GuiGraphics g, Window window, int l, int t, int mouseX, int mouseY) { + if (!window.maximized) { + window.x = Math.max(12, Math.min(WIDTH - window.width - 12, window.x)); + window.y = Math.max(34, Math.min(HEIGHT - window.height - 12, window.y)); + } else { + window.x = 14; + window.y = 34; + } int x = l + window.x; int y = t + window.y; int w = window.maximized ? WIDTH - 28 : window.width; @@ -398,7 +497,7 @@ public final class ComputerScreen extends Screen { g.fill(x - 2, y - 2, x + w + 2, y + h + 2, GREEN); g.fill(x, y, x + w, y + h, BLACK); g.fill(x, y, x + w, y + 19, 0xFF173817); - g.drawString(font, Component.literal(window.title), x + 7, y + 6, GREEN, false); + g.drawString(font, Component.literal(trimToWidth(window.title, Math.max(1, w - 78))), x + 7, y + 6, GREEN, false); g.drawString(font, Component.literal("_"), x + w - 39, y + 5, PALE_GREEN, false); g.drawString(font, Component.literal(window.maximized ? "❐" : "□"), x + w - 27, y + 5, PALE_GREEN, false); g.drawString(font, Component.literal("X"), x + w - 13, y + 6, GREEN, false); @@ -411,7 +510,7 @@ public final class ComputerScreen extends Screen { else if (window.type.equals("TEXT")) renderTextEditor(g, cx, cy, w - 16, h - 34); else if (window.type.equals("PAINT")) renderPaint(g, cx, cy, w - 16, h - 34); else if (window.type.equals("ANTMAIL")) renderAntmail(g, cx, cy, h - 34); - else if (window.type.equals("GAMES")) renderGames(g, cx, cy); + else if (window.type.equals("GAMES")) renderGames(g, window, cx, cy, mouseX, mouseY); else renderTrash(g, cx, cy); } @@ -429,37 +528,47 @@ public final class ComputerScreen extends Screen { g.drawString(font, Component.literal("< BACK // RECOVERED FILES"), x, y, GREEN, false); g.fill(x, y + 16, x + w, y + 18, GREEN); g.drawString(font, Component.translatable(selected.titleKey()), x, y + 27, GREEN, false); - if (!selected.subtitleKey().isBlank()) wrap(g, Component.translatable(selected.subtitleKey()), x, y + 43, w, PALE_GREEN); - int line = y + (selected.subtitleKey().isBlank() ? 43 : 59); - g.drawString(font, Component.literal(selected.type().toUpperCase() + " // " + selected.category().toUpperCase()), x, line, PALE_GREEN, false); - line += 16; - for (String descriptionKey : selected.descriptionKeys()) { - line = wrap(g, Component.translatable(descriptionKey), x, line, w, GREEN) + 3; - if (line > y + h - 36) break; - } - if (!selected.itemId().isBlank() && line < y + h - 24) { - line = wrap(g, "ITEM // " + selected.itemId(), x, line, w, PALE_GREEN) + 2; - } - if (!selected.structureId().isBlank() && line < y + h - 24) { - line = wrap(g, "STRUCTURE // " + selected.structureId(), x, line, w, PALE_GREEN) + 2; - } - if (!selected.dimensionId().isBlank() && line < y + h - 24) { - wrap(g, "DIMENSION // " + selected.dimensionId(), x, line, w, PALE_GREEN); + int contentBottom = y + h - 20; + g.enableScissor(x, y + 36, x + w, contentBottom); + int line = y + 43 - session.archiveDetailScroll * 11; + if (!selected.subtitleKey().isBlank()) line = wrap(g, Component.translatable(selected.subtitleKey()), x, line, w, PALE_GREEN) + 3; + line = wrap(g, selected.type().toUpperCase() + " // " + selected.category().toUpperCase(), x, line, w, PALE_GREEN) + 5; + if (!selected.entityId().isBlank()) line = renderArchivePreview(g, "", selected.entityId(), x, line, w) + 2; + for (String descriptionPart : selected.descriptionKeys()) { + line = renderArchiveDescriptionPart(g, descriptionPart, x, line, w); } + if (!selected.itemId().isBlank()) line = renderArchivePreview(g, selected.itemId(), "", x, line, w) + 2; + if (!selected.recipeId().isBlank()) line = renderArchiveRecipe(g, selected.recipeId(), x, line, w) + 2; + if (!selected.structureId().isBlank()) line = wrap(g, "STRUCTURE // " + selected.structureId(), x, line, w, PALE_GREEN) + 2; + if (!selected.dimensionId().isBlank()) line = wrap(g, "DIMENSION // " + selected.dimensionId(), x, line, w, PALE_GREEN); + g.disableScissor(); + session.archiveDetailMaxScroll = Math.max(0, (line + session.archiveDetailScroll * 11 - contentBottom + 10) / 11); + session.archiveDetailScroll = Math.min(session.archiveDetailScroll, session.archiveDetailMaxScroll); + if (session.archiveDetailMaxScroll > 0) g.drawString(font, Component.literal("SCROLL " + session.archiveDetailScroll + "/" + session.archiveDetailMaxScroll), x + w - 82, y + h - 12, PALE_GREEN, false); g.drawString(font, Component.literal("[ ESC ] BACK"), x, y + h - 12, PALE_GREEN, false); return; } - g.drawString(font, Component.literal("RECOVERED FILES // " + entries.size()), x, y, GREEN, false); + List filteredEntries = filterArchiveEntries(entries); + g.drawString(font, Component.literal("RECOVERED FILES // " + filteredEntries.size() + "/" + entries.size()), x, y, GREEN, false); + g.fill(x, y + 14, x + w - 8, y + 35, BLACK); + box(g, x, y + 14, x + w - 8, y + 35, session.archiveSearchFocused ? GREEN : PALE_GREEN); + String searchText = session.archiveSearch.isBlank() && !session.archiveSearchFocused ? "SEARCH TITLE / SUBTITLE" : session.archiveSearch; + g.drawString(font, Component.literal(trimToWidth(searchText + (session.archiveSearchFocused ? "_" : ""), w - 16)), x + 6, y + 20, + session.archiveSearch.isBlank() ? PALE_GREEN : GREEN, false); if (entries.isEmpty()) { g.drawString(font, Component.literal("NO ARCHIVE DATA"), x, y + 28, PALE_GREEN, false); return; } - int row = y + 18; - int visible = Math.max(1, (h - 34) / 62); - int start = Math.max(0, Math.min(session.archiveScroll, Math.max(0, entries.size() - visible))); - for (int i = start; i < entries.size() && i < start + visible; i++) { - ComputerGuideData.Entry entry = entries.get(i); + if (filteredEntries.isEmpty()) { + g.drawString(font, Component.literal("NO MATCHING ENTRIES"), x, y + 52, PALE_GREEN, false); + return; + } + int row = y + 40; + int visible = Math.max(1, (h - 56) / 62); + int start = Math.max(0, Math.min(session.archiveScroll, Math.max(0, filteredEntries.size() - visible))); + for (int i = start; i < filteredEntries.size() && i < start + visible; i++) { + ComputerGuideData.Entry entry = filteredEntries.get(i); int rowTop = row + (i - start) * 62; boolean hover = inside(x, rowTop, w - 8, 56, session.archiveMouseX, session.archiveMouseY); if (hover) g.fill(x, rowTop, x + w - 8, rowTop + 56, 0xFF173817); @@ -470,48 +579,147 @@ public final class ComputerScreen extends Screen { if (!entry.subtitleKey().isBlank()) g.drawString(font, Component.literal(trimToWidth(Component.translatable(entry.subtitleKey()).getString(), w - 78)), x + 58, rowTop + 23, PALE_GREEN, false); g.drawString(font, Component.literal(entry.type().toUpperCase() + " // " + entry.category().toUpperCase()), x + 58, rowTop + 39, PALE_GREEN, false); } - if (entries.size() > visible) g.drawString(font, Component.literal("SCROLL " + (start + 1) + "-" + Math.min(entries.size(), start + visible) + " / " + entries.size()), x, y + h - 12, PALE_GREEN, false); + if (filteredEntries.size() > visible) g.drawString(font, Component.literal("SCROLL " + (start + 1) + "-" + Math.min(filteredEntries.size(), start + visible) + " / " + filteredEntries.size()), x, y + h - 12, PALE_GREEN, false); else g.drawString(font, Component.literal("[ CLICK ENTRY TO OPEN ]"), x, y + h - 12, PALE_GREEN, false); } + private List filterArchiveEntries(List entries) { + String query = session.archiveSearch.trim().toLowerCase(Locale.ROOT); + if (query.isEmpty()) return entries; + return entries.stream().filter(entry -> Component.translatable(entry.titleKey()).getString().toLowerCase(Locale.ROOT).contains(query) + || (!entry.subtitleKey().isBlank() && Component.translatable(entry.subtitleKey()).getString().toLowerCase(Locale.ROOT).contains(query))).toList(); + } + private void renderThumbnail(GuiGraphics g, ComputerGuideData.Entry entry, int centerX, int centerY, boolean hover) { int background = hover ? 0xFF173817 : 0xFF102010; g.fill(centerX - 18, centerY - 18, centerX + 18, centerY + 18, background); - if (!entry.itemId().isBlank()) { - try { - ResourceLocation itemId = ResourceLocation.parse(entry.itemId()); - var item = BuiltInRegistries.ITEM.getOptional(itemId).orElse(null); - if (item != null && !item.equals(net.minecraft.world.item.Items.AIR)) { - g.renderItem(new ItemStack(item), centerX - 8, centerY - 8); - return; + if (!entry.recipeId().isBlank() && renderArchiveRecipe(g, entry.recipeId(), centerX - 18, centerY - 12, 36, 8)) return; + if (!renderArchiveAsset(g, entry.itemId(), entry.entityId(), centerX, centerY, 36)) { + String fallback = !entry.itemId().isBlank() ? entry.itemId() : entry.entityId(); + g.drawString(font, Component.literal(trimToWidth(fallback.isBlank() ? "NO RENDER" : fallback, 32)), centerX - 16, centerY - 4, hover ? GREEN : PALE_GREEN, false); + } + } + + private int renderArchiveDescriptionPart(GuiGraphics g, String part, int x, int y, int w) { + if (part.startsWith("@item:")) return renderArchivePreview(g, part.substring(6), "", x, y, w) + 2; + if (part.startsWith("@entity:")) return renderArchivePreview(g, "", part.substring(8), x, y, w) + 2; + if (part.startsWith("@recipe:")) return renderArchiveRecipe(g, part.substring(8), x, y, w) + 2; + return wrap(g, Component.translatable(part), x, y, w, GREEN) + 3; + } + + private int renderArchiveRecipe(GuiGraphics g, String recipeId, int x, int y, int w) { + int slot = 16; + int recipeWidth = slot * 3 + 24; + if (!renderArchiveRecipe(g, recipeId, x, y, Math.min(w, recipeWidth), slot)) { + return wrap(g, "RECIPE // " + recipeId, x, y, w, PALE_GREEN); + } + return y + slot * 3; + } + + private boolean renderArchiveRecipe(GuiGraphics g, String recipeId, int x, int y, int width, int slot) { + if (Minecraft.getInstance().level == null) return false; + try { + var holder = Minecraft.getInstance().level.getRecipeManager().byKey(ResourceLocation.parse(recipeId)).orElse(null); + if (holder == null) return false; + var recipe = holder.value(); + List ingredients = recipe.getIngredients(); + int gridWidth = slot * 3; + int outputX = x + gridWidth + 12; + int outputY = y + slot; + for (int index = 0; index < 9; index++) { + int cellX = x + (index % 3) * slot; + int cellY = y + (index / 3) * slot; + g.fill(cellX, cellY, cellX + slot - 1, cellY + slot - 1, 0xFF173817); + if (index < ingredients.size()) { + ItemStack[] choices = ingredients.get(index).getItems(); + if (choices.length > 0) g.renderItem(choices[0], cellX + (slot - 16) / 2, cellY + (slot - 16) / 2); } - } catch (RuntimeException ignored) { + } + g.fill(x + gridWidth + 3, y + slot + 2, x + gridWidth + 9, y + slot + 4, PALE_GREEN); + g.fill(x + gridWidth + 7, y + slot, x + gridWidth + 9, y + slot + 6, PALE_GREEN); + ItemStack result = recipe.getResultItem(Minecraft.getInstance().level.registryAccess()); + if (!result.isEmpty()) { + g.fill(outputX, outputY, outputX + slot - 1, outputY + slot - 1, 0xFF173817); + g.renderItem(result, outputX + (slot - 16) / 2, outputY + (slot - 16) / 2); + } + return true; + } catch (RuntimeException ignored) { + return false; + } + } + + private int renderArchivePreview(GuiGraphics g, String itemId, String entityId, int x, int y, int w) { + int boxWidth = Math.min(48, w); + g.fill(x, y, x + boxWidth, y + 48, 0xFF102010); + int centerX = x + boxWidth / 2; + int centerY = y + 24; + if (!renderArchiveAsset(g, itemId, entityId, centerX, centerY, boxWidth)) { + String fallback = !itemId.isBlank() ? itemId : entityId; + g.drawString(font, Component.literal(trimToWidth(fallback, Math.max(1, w - boxWidth - 6))), x + boxWidth + 6, y + 18, PALE_GREEN, false); + } else if (!itemId.isBlank() || !entityId.isBlank()) { + g.drawString(font, Component.literal(trimToWidth(!itemId.isBlank() ? "ITEM // " + itemId : "MOB // " + entityId, Math.max(1, w - boxWidth - 6))), x + boxWidth + 6, y + 18, PALE_GREEN, false); + } + return y + 48; + } + + private boolean renderArchiveAsset(GuiGraphics g, String itemId, String entityId, int centerX, int centerY, int size) { + if (!itemId.isBlank()) { + try { + ResourceLocation resourceId = ResourceLocation.parse(itemId); + var item = BuiltInRegistries.ITEM.getOptional(resourceId).orElse(null); + logArchivePreviewOnce("item.lookup." + itemId, "Archive item preview lookup id={} found={} registryName={}", itemId, item != null, item == null ? "" : BuiltInRegistries.ITEM.getKey(item)); + if (item != null && !item.equals(net.minecraft.world.item.Items.AIR)) { + ItemStack stack = new ItemStack(item); + g.renderItem(stack, centerX - 8, centerY - 8); + logArchivePreviewOnce("item.render." + itemId, "Archive item preview rendered id={} descriptionId={} center=({}, {})", itemId, stack.getDescriptionId(), centerX, centerY); + return true; + } + logArchivePreviewOnce("item.unrenderable." + itemId, "Archive item preview unavailable id={} (missing or AIR)", itemId); + } catch (RuntimeException exception) { + logArchivePreviewOnce("item.error." + itemId, "Archive item preview failed id={} error={}", itemId, exception.toString()); } } - if (!entry.entityId().isBlank() && Minecraft.getInstance().level != null) { + if (!entityId.isBlank() && Minecraft.getInstance().level == null) { + logArchivePreviewOnce("entity.no_level." + entityId, "Archive mob preview skipped id={} because the client level is null", entityId); + } + if (!entityId.isBlank() && Minecraft.getInstance().level != null) { try { - ResourceLocation entityId = ResourceLocation.parse(entry.entityId()); - var entityType = BuiltInRegistries.ENTITY_TYPE.getOptional(entityId).orElse(null); + ResourceLocation resourceId = ResourceLocation.parse(entityId); + var entityType = BuiltInRegistries.ENTITY_TYPE.getOptional(resourceId).orElse(null); + logArchivePreviewOnce("entity.lookup." + entityId, "Archive mob preview lookup id={} found={} registryName={}", entityId, entityType != null, entityType == null ? "" : BuiltInRegistries.ENTITY_TYPE.getKey(entityType)); var entity = entityType == null ? null : entityType.create(Minecraft.getInstance().level); if (entity instanceof LivingEntity living && !living.isRemoved()) { - InventoryScreen.renderEntityInInventoryFollowsMouse(g, centerX - 18, centerY - 18, centerX + 18, centerY + 18, 18, 0.15F, centerX, centerY, living); - return; + living.setPos(0.0D, 0.0D, 0.0D); + living.setYRot(180.0F); + living.yBodyRot = 180.0F; + living.yHeadRot = 180.0F; + InventoryScreen.renderEntityInInventoryFollowsMouse(g, centerX - size / 2, centerY - size / 2, centerX + size / 2, centerY + size / 2, Math.max(18, size / 2), 0.15F, centerX, centerY, living); + logArchivePreviewOnce("entity.render." + entityId, "Archive mob preview rendered id={} class={} size={} center=({}, {})", entityId, living.getClass().getName(), size, centerX, centerY); + return true; } - } catch (RuntimeException ignored) { + logArchivePreviewOnce("entity.unrenderable." + entityId, "Archive mob preview unavailable id={} createdClass={} isLiving={}", entityId, entity == null ? "" : entity.getClass().getName(), entity instanceof LivingEntity); + } catch (RuntimeException exception) { + logArchivePreviewOnce("entity.error." + entityId, "Archive mob preview failed id={} error={}", entityId, exception.toString()); } } - g.drawString(font, Component.literal("ANT"), centerX - 12, centerY - 4, hover ? GREEN : PALE_GREEN, false); + return false; + } + + private void logArchivePreviewOnce(String key, String message, Object... arguments) { + if (archiveRenderLog.add(key)) Antarchy.LOGGER.info(message, arguments); } private void renderFileExplorer(GuiGraphics g, int x, int y, int w, int h) { var files = ComputerFileSystemClientState.get(position).files(); - g.drawString(font, Component.literal("FILE EXPLORER // " + session.fileExplorerDirectory), x, y, GREEN, false); + g.drawString(font, Component.literal("FILE EXPLORER // " + trimToWidth(session.fileExplorerDirectory, w - 4)), x, y, GREEN, false); if (!session.fileExplorerDirectory.equals("/")) g.drawString(font, Component.literal("[ UP ]"), x + w - 40, y, GREEN, false); g.drawString(font, Component.literal("TYPE PATH SIZE"), x, y + 18, PALE_GREEN, false); int line = y + 34; + int fileIndex = 0; for (String file : files) { String[] fields = file.split("\\t", 3); - if (fields.length < 3 || !isDirectChild(fields[1], session.fileExplorerDirectory) || line > y + h - 20) continue; + if (fields.length < 3 || !isDirectChild(fields[1], session.fileExplorerDirectory)) continue; + if (fileIndex++ < session.fileExplorerScroll || line > y + h - 20) continue; boolean selected = fields[1].equals(session.fileExplorerSelected); if (selected) g.fill(x - 3, line - 2, x + w - 3, line + 11, 0xFF173817); g.drawString(font, Component.literal(fileIcon(fields[0]) + " " + trimToWidth(fields[0], 30)), x, line, PALE_GREEN, false); @@ -520,7 +728,18 @@ public final class ComputerScreen extends Screen { line += 14; } if (line == y + 34) g.drawString(font, Component.literal("NO FILES // OPEN TERMINAL TO CREATE ONE"), x, y + 38, PALE_GREEN, false); - else g.drawString(font, Component.literal(session.fileExplorerRenaming ? "RENAME: " + session.fileExplorerRename + "_" : "[ DELETE ] [ F2 RENAME ]"), x, y + h - 16, PALE_GREEN, false); + else { + var state = ComputerFileSystemClientState.get(position); + String footer = session.fileExplorerCreatingDirectory ? "NEW FOLDER: " + session.fileExplorerRename + "_" + : session.fileExplorerMoving ? "MOVE TO PATH: " + session.fileExplorerRename + "_" + : session.fileExplorerRenaming ? "RENAME: " + session.fileExplorerRename + "_" + : session.fileExplorerDeleteConfirm ? "DELETE SELECTED FILE? [ ENTER / ESC ]" : "[ F6 NEW FOLDER ] [ F7 MOVE ] [ DELETE ] [ F2 RENAME ]"; + if (state.lastMutationAction() == com.craisinlord.antarchy.content.network.ComputerAccessPayload.FILE_DELETE + || state.lastMutationAction() == com.craisinlord.antarchy.content.network.ComputerAccessPayload.FILE_MOVE) { + footer += state.lastMutationSuccess() ? " // OK" : " // ERR: " + state.lastMutationError(); + } + g.drawString(font, Component.literal(trimToWidth(footer, w - 4)), x, y + h - 16, PALE_GREEN, false); + } } private String fileIcon(String type) { @@ -563,7 +782,7 @@ public final class ComputerScreen extends Screen { ResourceLocation disk = disks.get(i); boolean active = disk.equals(selectedDisk); if (active) g.fill(x - 3, y + 105 + i * 17, x + 205, y + 120 + i * 17, 0xFF173817); - g.drawString(font, Component.literal(disk.toString()), x, y + 108 + i * 17, active ? GREEN : PALE_GREEN, false); + g.drawString(font, Component.literal(trimToWidth(disk.toString(), 202)), x, y + 108 + i * 17, active ? GREEN : PALE_GREEN, false); } g.drawString(font, Component.literal("[ EJECT SELECTED ]"), x, y + 162, selectedDisk == null ? 0xFF4A754A : GREEN, false); } @@ -590,11 +809,11 @@ public final class ComputerScreen extends Screen { g.drawString(font, Component.literal("ANTINTOSH TERMINAL [READY]"), x, y, GREEN, false); int line = y + 17; for (String output : session.terminalOutput) { - line = wrap(g, output, x, line, 208, PALE_GREEN) + 1; - if (line > y + h - 32) break; + line = wrapLimited(g, output, x, line, 208, y + h - 48, PALE_GREEN) + 1; + if (line >= y + h - 48) break; } if (!fileState.error().isEmpty()) g.drawString(font, Component.literal("RESPONSE: " + fileState.error()), x, y + h - 40, PALE_GREEN, false); - g.drawString(font, Component.literal(session.terminalDirectory + "> " + session.terminalInput + "_"), x, y + h - 26, GREEN, false); + g.drawString(font, Component.literal(trimToWidth(session.terminalDirectory + "> " + session.terminalInput + "_", 208)), x, y + h - 26, GREEN, false); } private void renderPaint(GuiGraphics g, int x, int y, int w, int h) { @@ -608,14 +827,16 @@ public final class ComputerScreen extends Screen { } } g.drawString(font, Component.literal("ANTPAINT // " + session.paintName + (session.paintDirty ? " *" : "")), x, y, GREEN, false); - String controls = "NEW PENCIL ERASER FILL CLEAR UNDO REDO SAVE"; - g.drawString(font, Component.literal(trimToWidth(controls, w)), x, y + 14, PALE_GREEN, false); - int size = Math.max(1, Math.min((w - 16) / AntPaintCanvas.WIDTH, (h - 54) / AntPaintCanvas.HEIGHT)); + renderPaintToolbar(g, x, y); + // w and h are already the window's content dimensions; keep rendering in + // lockstep with paintAt(), which receives these same adjusted dimensions. + int canvasHeight = h; + int size = Math.max(1, Math.min(w / AntPaintCanvas.WIDTH, canvasHeight / AntPaintCanvas.HEIGHT)); int cx = x + (w - size * AntPaintCanvas.WIDTH) / 2; - int cy = y + 30 + Math.max(0, (h - 54 - size * AntPaintCanvas.HEIGHT) / 2); + int cy = y + 30 + Math.max(0, (canvasHeight - size * AntPaintCanvas.HEIGHT) / 2); g.fill(cx - 1, cy - 1, cx + size * AntPaintCanvas.WIDTH + 1, cy + size * AntPaintCanvas.HEIGHT + 1, BLACK); - g.fill(cx, cy, cx + size * AntPaintCanvas.WIDTH, cy + size * AntPaintCanvas.HEIGHT, GREEN); - for (int py = 0; py < AntPaintCanvas.HEIGHT; py++) for (int px = 0; px < AntPaintCanvas.WIDTH; px++) if (!session.paintCanvas.get(px, py)) g.fill(cx + px * size, cy + py * size, cx + (px + 1) * size, cy + (py + 1) * size, BLACK); + g.fill(cx, cy, cx + size * AntPaintCanvas.WIDTH, cy + size * AntPaintCanvas.HEIGHT, BLACK); + for (int py = 0; py < AntPaintCanvas.HEIGHT; py++) for (int px = 0; px < AntPaintCanvas.WIDTH; px++) if (session.paintCanvas.get(px, py)) g.fill(cx + px * size, cy + py * size, cx + (px + 1) * size, cy + (py + 1) * size, GREEN); int hoverX = (session.mouseX - cx) / size; int hoverY = (session.mouseY - cy) / size; if (session.mouseX >= cx && session.mouseY >= cy && hoverX >= 0 && hoverX < AntPaintCanvas.WIDTH && hoverY >= 0 && hoverY < AntPaintCanvas.HEIGHT) { @@ -626,38 +847,347 @@ public final class ComputerScreen extends Screen { g.fill(pixelX, pixelY, pixelX + 1, pixelY + size, PALE_GREEN); g.fill(pixelX + size - 1, pixelY, pixelX + size, pixelY + size, PALE_GREEN); } - String paintStatus = "TOOL " + session.paintTool.name() + " " + (session.paintDirty ? "MODIFIED" : "SAVED"); - if (session.mouseX >= cx && session.mouseY >= cy && hoverX >= 0 && hoverX < AntPaintCanvas.WIDTH && hoverY >= 0 && hoverY < AntPaintCanvas.HEIGHT) paintStatus += " PIXEL " + hoverX + "," + hoverY; - g.drawString(font, Component.literal(trimToWidth(paintStatus, w)), x, y + h - 16, PALE_GREEN, false); + } + + private void renderPaintToolbar(GuiGraphics g, int x, int y) { + for (int index = 0; index < 7; index++) { + int buttonX = x + index * 28; + if (index < 3 && ((index == 0 && session.paintTool == AntPaintTool.PENCIL) + || (index == 1 && session.paintTool == AntPaintTool.ERASER) + || (index == 2 && session.paintTool == AntPaintTool.FILL))) { + box(g, buttonX, y + 11, buttonX + 22, y + 28, GREEN); + } + paintToolbarIcon(g, index, buttonX + 11, y + 19); + } + } + + private void paintToolbarIcon(GuiGraphics g, int index, int x, int y) { + int color = PALE_GREEN; + String[][] sprites = { + { + "...............", + ".....##........", + "....#++#.......", + "...#++++##.....", + "...#+++++#.....", + "....#++++##....", + ".....#++++##...", + "......#++++##..", + ".......#++++##.", + "........#++++#.", + ".........#++#..", + "..........##...", + ".........#.....", + "...............", + "..............." + }, + { + "...............", + ".....######....", + "....#++++++#...", + "...#++gg+++##..", + "..#++gg++++++#.", + ".#+++++++++++#.", + "#++++++++++++#.", + "#+++++++++++##.", + "#+++++++++##...", + ".#########.....", + "...............", + "...............", + "...............", + "...............", + "..............." + }, + { + "....######.....", + "...##....##....", + "..##......##...", + "..#........#...", + ".############..", + ".#++++++++++#..", + ".#++gg++++++#..", + ".#++++++++++#..", + ".#++++++++++#..", + "..#++++++++#...", + "..#++++++++#...", + "...#++++++#....", + "...#++++++#....", + "....######.....", + "...............", + "..............." + }, + { + "...............", + "....########...", + "..##++++++++#..", + ".#++#########..", + "#++##.........", + "#++#...........", + "#++##..........", + ".#++#########..", + "..##++++++++#..", + "....########...", + "...............", + "...............", + "...............", + "...............", + "..............." + }, + { + "...............", + "....########...", + "..##++++++++#..", + ".#++#########..", + "#++#...........", + "#++##..........", + "#++#...........", + ".#++#########..", + "..##++++++++#..", + "....########...", + "...............", + "...............", + "...............", + "...............", + "..............." + }, + { + "...............", + "...#########...", + "..#+++++++++#..", + ".#++#######++#.", + "#++##.....##++#", + "#++#.......#++#", + "#++#.......#++#", + ".#++#######++#.", + "..#+++++++++#..", + "...#########...", + "...............", + "...............", + "...............", + "...............", + "..............." + }, + { + ".#############.", + "#+++++++++++++#", + "#++#####++++++#", + "#++#...#++++++#", + "#++#...#++++++#", + "#++#####++++++#", + "#+++++++++++++#", + "#++#########++#", + "#++#+++++++#++#", + "#++#++gg+++#++#", + "#++#+++++++#++#", + "#++#########++#", + "#+++++++++++++#", + ".#############.", + "..............." + } + }; + String[] sprite = sprites[Math.max(0, Math.min(index, sprites.length - 1))]; + for (int row = 0; row < 16; row++) { + String line = row < sprite.length ? sprite[row] : ""; + for (int column = 0; column < 16; column++) { + char pixel = column < line.length() ? line.charAt(column) : '.'; + if (pixel == '#') g.fill(x - 8 + column, y - 8 + row, x - 7 + column, y - 7 + row, BLACK); + else if (pixel == '+') g.fill(x - 8 + column, y - 8 + row, x - 7 + column, y - 7 + row, color); + else if (pixel == 'g') g.fill(x - 8 + column, y - 8 + row, x - 7 + column, y - 7 + row, GREEN); + } + } + } + + private void paintToolbarIconLegacy(GuiGraphics g, int index, int x, int y) { + int color = PALE_GREEN; + if (index == 0) { + // Pencil: a full diagonal silhouette with graphite, wood, painted barrel, ferrule, and eraser. + g.fill(x - 9, y + 4, x - 5, y + 8, BLACK); + g.fill(x - 7, y + 2, x - 3, y + 7, BLACK); + g.fill(x - 5, y, x + 3, y + 6, BLACK); + g.fill(x - 2, y - 3, x + 6, y + 3, BLACK); + g.fill(x + 4, y - 6, x + 8, y - 1, BLACK); + g.fill(x - 8, y + 5, x - 6, y + 7, color); + g.fill(x - 6, y + 3, x - 4, y + 5, color); + g.fill(x - 4, y + 1, x - 2, y + 3, color); + g.fill(x - 2, y - 1, x + 1, y + 2, color); + g.fill(x + 1, y - 3, x + 4, y, color); + g.fill(x + 4, y - 5, x + 6, y - 2, color); + g.fill(x - 4, y + 3, x - 2, y + 5, GREEN); + g.fill(x - 2, y + 1, x + 1, y + 3, GREEN); + g.fill(x + 1, y - 1, x + 4, y + 1, GREEN); + g.fill(x + 3, y - 4, x + 6, y - 2, BLACK); + g.fill(x + 5, y - 6, x + 8, y - 4, BLACK); + g.fill(x + 5, y - 4, x + 7, y - 2, color); + } else if (index == 1) { + // Eraser: large rotated block with a paper edge, center band, shadow, and shine. + g.fill(x - 9, y - 3, x + 5, y + 7, BLACK); + g.fill(x - 6, y - 6, x + 8, y + 4, BLACK); + g.fill(x - 7, y - 2, x - 2, y + 3, color); + g.fill(x - 4, y - 4, x + 2, y + 1, color); + g.fill(x - 1, y - 5, x + 5, y, color); + g.fill(x - 9, y + 4, x + 3, y + 8, BLACK); + g.fill(x - 7, y + 4, x - 1, y + 6, color); + g.fill(x - 6, y - 1, x - 3, y + 2, PALE_GREEN); + g.fill(x - 3, y - 3, x, y, PALE_GREEN); + g.fill(x + 1, y - 4, x + 4, y - 1, PALE_GREEN); + g.fill(x + 3, y, x + 6, y + 3, BLACK); + g.fill(x + 5, y - 3, x + 8, y + 1, BLACK); + g.fill(x + 5, y - 2, x + 6, y, color); + } else if (index == 2) { + // Fill bucket: arched handle, thick rim, tapered metal body, and visible paint inside. + g.fill(x - 6, y - 7, x + 6, y - 4, BLACK); + g.fill(x - 8, y - 5, x - 5, y + 1, BLACK); + g.fill(x + 5, y - 5, x + 8, y + 1, BLACK); + g.fill(x - 6, y - 5, x + 6, y - 3, color); + g.fill(x - 7, y - 2, x + 7, y + 2, BLACK); + g.fill(x - 5, y - 1, x + 5, y + 1, color); + g.fill(x - 5, y + 1, x + 5, y + 7, BLACK); + g.fill(x - 4, y + 3, x + 4, y + 6, color); + g.fill(x - 3, y + 2, x + 4, y + 4, PALE_GREEN); + g.fill(x - 4, y + 6, x + 4, y + 8, BLACK); + g.fill(x - 2, y + 5, x + 3, y + 6, GREEN); + g.fill(x - 5, y - 6, x - 3, y - 4, GREEN); + g.fill(x + 3, y - 6, x + 5, y - 4, GREEN); + } else if (index == 3) { + // Clear canvas: trash can with lid, slats, and a strong diagonal clear mark. + g.fill(x - 6, y - 7, x + 6, y - 4, BLACK); + g.fill(x - 3, y - 9, x + 3, y - 6, BLACK); + g.fill(x - 5, y - 3, x + 5, y + 8, BLACK); + g.fill(x - 3, y - 1, x + 3, y + 6, color); + g.fill(x - 4, y - 2, x + 4, y, PALE_GREEN); + g.fill(x - 3, y + 1, x - 1, y + 6, GREEN); + g.fill(x + 1, y + 1, x + 3, y + 6, GREEN); + g.fill(x - 8, y - 8, x + 8, y - 5, BLACK); + g.fill(x - 7, y - 4, x + 7, y - 2, BLACK); + g.fill(x - 8, y - 8, x - 5, y + 8, BLACK); + g.fill(x + 5, y - 8, x + 8, y + 8, BLACK); + g.fill(x - 9, y - 7, x - 7, y + 8, color); + g.fill(x + 7, y - 7, x + 9, y + 8, color); + g.fill(x - 8, y - 1, x + 8, y + 1, BLACK); + g.fill(x - 8, y + 5, x + 8, y + 7, BLACK); + g.fill(x - 8, y - 8, x + 8, y - 6, color); + g.fill(x - 7, y - 7, x + 7, y - 5, BLACK); + } else if (index == 4) { + // Undo: broad pixel arrow, stepped hook, and hollow center. + g.fill(x - 9, y - 4, x - 5, y + 2, color); + g.fill(x - 7, y - 6, x - 3, y - 2, color); + g.fill(x - 7, y, x - 3, y + 4, color); + g.fill(x - 5, y + 3, x + 3, y + 7, color); + g.fill(x + 1, y + 1, x + 6, y + 5, color); + g.fill(x + 4, y - 3, x + 8, y + 3, color); + g.fill(x + 2, y - 6, x + 6, y - 2, color); + g.fill(x - 5, y - 1, x + 3, y + 2, BLACK); + g.fill(x - 3, y + 2, x + 3, y + 4, BLACK); + g.fill(x - 8, y - 5, x - 5, y - 3, PALE_GREEN); + g.fill(x + 5, y - 2, x + 7, y, PALE_GREEN); + } else if (index == 5) { + // Redo: mirrored broad pixel arrow, stepped hook, and hollow center. + g.fill(x + 5, y - 4, x + 9, y + 2, color); + g.fill(x + 3, y - 6, x + 7, y - 2, color); + g.fill(x + 3, y, x + 7, y + 4, color); + g.fill(x - 3, y + 3, x + 5, y + 7, color); + g.fill(x - 6, y + 1, x - 1, y + 5, color); + g.fill(x - 8, y - 3, x - 4, y + 3, color); + g.fill(x - 6, y - 6, x - 2, y - 2, color); + g.fill(x - 3, y - 1, x + 5, y + 2, BLACK); + g.fill(x - 3, y + 2, x + 3, y + 4, BLACK); + g.fill(x + 5, y - 5, x + 8, y - 3, PALE_GREEN); + g.fill(x - 7, y - 2, x - 5, y, PALE_GREEN); + } else { + // Save: floppy disk with corner notch, shutter, label, hub, and highlight. + g.fill(x - 8, y - 8, x + 8, y + 8, BLACK); + g.fill(x - 5, y - 6, x + 5, y + 6, color); + g.fill(x - 5, y - 6, x + 2, y - 2, GREEN); + g.fill(x + 2, y - 6, x + 5, y - 1, BLACK); + g.fill(x + 4, y - 6, x + 5, y - 3, PALE_GREEN); + g.fill(x - 5, y, x + 5, y + 6, BLACK); + g.fill(x - 3, y + 1, x + 3, y + 5, color); + g.fill(x - 2, y + 2, x + 2, y + 4, PALE_GREEN); + g.fill(x - 7, y - 7, x - 5, y + 5, PALE_GREEN); + g.fill(x - 7, y + 6, x + 7, y + 8, BLACK); + g.fill(x - 4, y + 6, x + 4, y + 7, GREEN); + } } private void renderTextEditor(GuiGraphics g, int x, int y, int w, int h) { var fileState = ComputerFileSystemClientState.get(position); - if (!fileState.openedPath().isEmpty() && !session.textDirty) { + if (session.textDirty + && fileState.lastMutationSuccess() + && (fileState.lastMutationAction() == com.craisinlord.antarchy.content.network.ComputerAccessPayload.FILE_CREATE + || fileState.lastMutationAction() == com.craisinlord.antarchy.content.network.ComputerAccessPayload.FILE_SAVE) + && fileState.lastMutationPath().equals(session.textPath)) { + session.textDirty = false; + } + if (!session.textSaveAsPendingPath.isBlank() + && fileState.lastMutationAction() == com.craisinlord.antarchy.content.network.ComputerAccessPayload.FILE_CREATE + && fileState.lastMutationPath().equals(session.textSaveAsPendingPath)) { + if (fileState.lastMutationSuccess()) { + session.textPath = session.textSaveAsPendingPath; + session.textDirty = false; + session.textJustSavedAs = true; + } + session.textSaveAsPendingPath = ""; + } + if (!session.textMovePendingPath.isBlank() + && fileState.lastMutationAction() == com.craisinlord.antarchy.content.network.ComputerAccessPayload.FILE_MOVE + && fileState.lastMutationPath().equals(session.textMovePendingPath)) { + if (fileState.lastMutationSuccess()) { + session.textPath = session.textMovePendingPath; + session.textJustSavedAs = true; + } + session.textMovePendingPath = ""; + } + if (!fileState.openedPath().isEmpty() && !session.textDirty && !session.textJustSavedAs) { session.textPath = fileState.openedPath(); session.textContent = fileState.openedContents(); + session.textCursor = session.textContent.length(); + } + session.textJustSavedAs = false; + String editorTitle = session.textRenaming ? "RENAME // " + session.textRename + "_" : "ANTTEXT // " + session.textPath + (session.textDirty ? " *" : ""); + g.drawString(font, Component.literal(trimToWidth(editorTitle, Math.max(1, w - 104))), x, y, GREEN, false); + g.drawString(font, Component.literal("NEW OPEN WRITE SAVE AS"), x, y + 18, PALE_GREEN, false); + if (fileState.lastMutationAction() == com.craisinlord.antarchy.content.network.ComputerAccessPayload.FILE_CREATE + || fileState.lastMutationAction() == com.craisinlord.antarchy.content.network.ComputerAccessPayload.FILE_SAVE + || fileState.lastMutationAction() == com.craisinlord.antarchy.content.network.ComputerAccessPayload.FILE_MOVE) { + String status = fileState.lastMutationSuccess() ? "OPERATION OK" : "OPERATION ERROR // " + fileState.lastMutationError(); + g.drawString(font, Component.literal(status), x + w - 100, y, fileState.lastMutationSuccess() ? PALE_GREEN : GREEN, false); } - g.drawString(font, Component.literal(session.textRenaming ? "RENAME // " + session.textRename + "_" : "ANTTEXT // " + session.textPath + (session.textDirty ? " *" : "")), x, y, GREEN, false); - g.drawString(font, Component.literal("NEW OPEN WRITE SAVE"), x, y + 18, PALE_GREEN, false); g.fill(x + 4, y + 36, x + w - 4, y + h - 4, BLACK); if (session.textListing) { g.drawString(font, Component.literal("SELECT FILE"), x + 10, y + 46, GREEN, false); int line = y + 62; + int visibleFiles = 0; + int textIndex = 0; for (String file : fileState.files()) { String[] fields = file.split("\\t", 3); - if (fields.length < 2 || line > y + h - 28) continue; + if (fields.length < 3 || !fields[0].equals("TEXT")) continue; + if (textIndex++ < session.textPickerScroll || line > y + h - 28) continue; g.drawString(font, Component.literal(fields[1]), x + 10, line, PALE_GREEN, false); line += 14; + visibleFiles++; } - if (fileState.files().isEmpty()) g.drawString(font, Component.literal("NO TEXT FILES"), x + 10, y + 62, PALE_GREEN, false); + if (visibleFiles == 0) g.drawString(font, Component.literal("NO TEXT FILES"), x + 10, y + 62, PALE_GREEN, false); } else { - wrap(g, session.textContent.isEmpty() ? "TYPE HERE..." : session.textContent, x + 10, y + 46, w - 28, GREEN); + String content = session.textContent.isEmpty() ? "TYPE HERE..." : session.textContent; + if (session.textFocused) content = content.substring(0, Math.min(session.textCursor, content.length())) + "|" + + content.substring(Math.min(session.textCursor, content.length())); + List lines = font.split(Component.literal(content), w - 28); + int maxLines = Math.max(1, (h - 56) / 11); + session.textScroll = Math.max(0, Math.min(session.textScroll, Math.max(0, lines.size() - maxLines))); + for (int i = session.textScroll; i < lines.size() && i < session.textScroll + maxLines; i++) { + g.drawString(font, lines.get(i), x + 10, y + 46 + (i - session.textScroll) * 11, GREEN, false); + } + } + if (session.textDeleteConfirm) { + g.drawString(font, Component.literal("DELETE CURRENT FILE? [ ENTER / ESC ]"), x, y + h - 28, PALE_GREEN, false); + } else { + g.drawString(font, Component.literal("[CTRL+S] SAVE [CTRL+SHIFT+S] SAVE AS"), x, y + h - 39, PALE_GREEN, false); + g.drawString(font, Component.literal("[F2] RENAME [F8] DELETE [ESC] CLOSE"), x, y + h - 26, PALE_GREEN, false); } - g.drawString(font, Component.literal("[ CTRL+S ] SAVE [ F2 ] RENAME [ ESC ] CLOSE"), x, y + h - 50, PALE_GREEN, false); } private void renderAntmail(GuiGraphics g, int x, int y, int h) { - var result = AntmailClientState.get(position); + var result = AntmailClientState.getMailbox(position); g.drawString(font, Component.literal("ANTMAIL // COMPUTER ADDRESS"), x, y, GREEN, false); boolean unconfigured = result == null || result.address().isBlank(); if (unconfigured) { @@ -669,42 +1199,70 @@ public final class ComputerScreen extends Screen { g.drawString(font, Component.literal("[ ENTER ] REGISTER ADDRESS"), x, y + 88, GREEN, false); } else { g.drawString(font, Component.literal(trimToWidth(result.address(), 208)), x, y + 20, PALE_GREEN, false); - g.drawString(font, Component.literal("[ INBOX ] [ SENT ]"), x, y + 40, GREEN, false); - box(g, x + 122, y + 30, x + 214, y + 53, GREEN); - g.drawString(font, Component.literal("CREATE COMPOSE"), x + 127, y + 38, GREEN, false); + g.drawString(font, Component.literal("[ INBOX ] [ SENT ] [ DRAFTS ]"), x, y + 40, GREEN, false); + box(g, x + 158, y + 30, x + 214, y + 53, GREEN); + g.drawString(font, Component.literal("COMPOSE"), x + 163, y + 38, GREEN, false); if (session.antmailMode.equals("compose")) { - g.drawString(font, Component.literal("TO"), x, y + 62, GREEN, false); - g.drawString(font, Component.literal(trimToWidth(session.antmailRecipient, 180)), x + 28, y + 62, PALE_GREEN, false); - g.drawString(font, Component.literal("SUBJECT"), x, y + 78, GREEN, false); - g.drawString(font, Component.literal(trimToWidth(session.antmailSubject, 156)), x + 52, y + 78, PALE_GREEN, false); - g.drawString(font, Component.literal("BODY"), x, y + 94, GREEN, false); - wrap(g, session.antmailBody.isEmpty() ? "TYPE MESSAGE..." : session.antmailBody, x, y + 110, 208, PALE_GREEN); - g.drawString(font, Component.literal(trimToWidth("[ " + (session.antmailAttachText ? "X" : " ") + " ] TEXT FILE [ " + (session.antmailAttachPaint ? "X" : " ") + " ] PAINTING", 208)), x, y + 142, PALE_GREEN, false); - g.drawString(font, Component.literal("[ ENTER ] SEND MESSAGE"), x, y + h - 30, GREEN, false); + g.drawString(font, Component.literal(trimToWidth(session.antmailRecipient, 180)), x + 28, y + 52, PALE_GREEN, false); + g.drawString(font, Component.literal(trimToWidth(session.antmailSubject, 156)), x + 52, y + 66, PALE_GREEN, false); + g.drawString(font, Component.literal("TO"), x, y + 52, GREEN, false); + g.drawString(font, Component.literal("SUBJECT"), x, y + 66, GREEN, false); + g.drawString(font, Component.literal("BODY"), x, y + 80, GREEN, false); + wrapLimited(g, session.antmailBody.isEmpty() ? "TYPE MESSAGE..." : session.antmailBody, x, y + 94, 208, y + 124, PALE_GREEN); + g.drawString(font, Component.literal(trimToWidth("[ " + (session.antmailAttachText ? "X" : " ") + " ] TEXT FILE [ " + (session.antmailAttachPaint ? "X" : " ") + " ] PAINTING", 208)), x, y + 128, PALE_GREEN, false); + if (session.antmailPickingAttachment) { + g.fill(x + 4, y + 42, x + 210, y + h - 40, BLACK); + box(g, x + 4, y + 42, x + 210, y + h - 40, GREEN); + g.drawString(font, Component.literal("SELECT FILE TO ATTACH"), x + 10, y + 48, GREEN, false); + int line = y + 64; + for (String file : ComputerFileSystemClientState.get(position).files()) { + String[] fields = file.split("\\t", 3); + if (fields.length < 2 || (!fields[0].equals("TEXT") && !fields[0].equals("IMAGE")) || line > y + h - 52) continue; + g.drawString(font, Component.literal(trimToWidth(fields[1], 190)), x + 10, line, PALE_GREEN, false); + line += 14; + } + } + g.drawString(font, Component.literal("[ ENTER ] SEND"), x, y + h - 28, GREEN, false); } else if (session.antmailMode.equals("message")) { AntmailMessage message = selectedAntmailMessage(result); if (message != null) { g.drawString(font, Component.literal("< BACK // " + (session.antmailSent ? "SENT" : "INBOX")), x, y + 40, GREEN, false); g.drawString(font, Component.literal(trimToWidth(session.antmailSent ? message.recipient().fullAddress() : message.sender().fullAddress(), 208)), x, y + 62, PALE_GREEN, false); g.drawString(font, Component.literal(trimToWidth(message.subject(), 208)), x, y + 78, GREEN, false); - int messageLine = wrap(g, message.body(), x, y + 98, 208, PALE_GREEN) + 4; + int messageLine = wrapLimited(g, message.body(), x, y + 98, 208, y + h - 52, PALE_GREEN) + 4; for (AntmailAttachment attachment : message.attachments()) { if (messageLine > y + h - 38) break; - messageLine = wrap(g, "ATTACHMENT // " + attachment.fileName(), x, messageLine, 208, GREEN) + 2; + messageLine = wrap(g, "[ SAVE ATTACHMENT ] " + attachment.fileName(), x, messageLine, 208, GREEN) + 2; } + if (session.antmailSent && !message.deliveryStatus().equals("DELIVERED")) g.drawString(font, Component.literal("[ RETRY DELIVERY ]"), x, y + h - 46, GREEN, false); + g.drawString(font, Component.literal("[ DELETE MESSAGE ]"), x, y + h - 28, GREEN, false); } + } else if (session.antmailMode.equals("drafts")) { + List drafts = mailbox(result) == null ? List.of() : mailbox(result).drafts(); + g.drawString(font, Component.literal("DRAFTS // " + drafts.size()), x, y + 62, GREEN, false); + int line = y + 80; + for (AntmailDraft draft : drafts) { + if (line > y + h - 38) break; + g.drawString(font, Component.literal(trimToWidth("* " + (draft.subject().isBlank() ? "UNTITLED DRAFT" : draft.subject()), 30)), x, line, PALE_GREEN, false); + line += 14; + } + if (drafts.isEmpty()) g.drawString(font, Component.literal("NO SAVED DRAFTS"), x, y + 80, PALE_GREEN, false); } else { List messages = mailboxMessages(result, session.antmailSent); - g.drawString(font, Component.literal((session.antmailSent ? "SENT // " : "INBOX // ") + messages.size()), x, y + 62, GREEN, false); + int total = antmailTotal(result, session.antmailSent); + g.drawString(font, Component.literal((session.antmailSent ? "SENT // " : "INBOX // ") + total), x, y + 62, GREEN, false); int line = y + 80; for (AntmailMessage message : messages) { if (line > y + h - 38) break; - g.drawString(font, Component.literal((message.read() ? " " : "* ") + trimToWidth(message.subject(), 28)), x, line, message.read() ? PALE_GREEN : GREEN, false); + String status = session.antmailSent ? " // " + message.deliveryStatus() : ""; + g.drawString(font, Component.literal((message.read() ? " " : "* ") + trimToWidth(message.subject() + status, 28)), x, line, message.read() ? PALE_GREEN : GREEN, false); line += 14; } + g.drawString(font, Component.literal("[ < ] PAGE " + (session.antmailPage + 1) + " [ > ]"), x, y + h - 42, GREEN, false); } } - String displayStatus = result != null && !result.messageId().isBlank() ? antmailStatus(result) : session.antmailStatus; + AntmailResultPayload operation = AntmailClientState.get(position); + String displayStatus = operation != null && !operation.messageId().isBlank() ? antmailStatus(operation) : session.antmailStatus; if (!displayStatus.isEmpty()) drawBottomWrapped(g, displayStatus, x, y, h, 208, PALE_GREEN); } @@ -729,21 +1287,60 @@ public final class ComputerScreen extends Screen { return sent ? mailbox.sent() : mailbox.inbox(); } - private AntmailMessage selectedAntmailMessage(AntmailResultPayload result) { - List messages = mailboxMessages(result, session.antmailSent); - return session.antmailMessageIndex >= 0 && session.antmailMessageIndex < messages.size() ? messages.get(session.antmailMessageIndex) : null; + private int antmailTotal(AntmailResultPayload result, boolean sent) { + if (result == null || result.data().isBlank()) return 0; + try { + var tag = AntmailWire.decodeTag(result.data()); + return tag.getInt(sent ? "TotalSent" : "TotalInbox"); + } catch (RuntimeException ignored) { + return mailboxMessages(result, sent).size(); + } } - private void renderGames(GuiGraphics g, int x, int y) { + private AntmailMessage selectedAntmailMessage(AntmailResultPayload result) { + List messages = mailboxMessages(result, session.antmailSent); + if (session.antmailMessageIndex < 0 || session.antmailMessageIndex >= messages.size()) return null; + AntmailMessage summary = messages.get(session.antmailMessageIndex); + AntmailMessage detail = AntmailClientState.getMessage(position, summary.id()); + return detail == null ? summary : detail; + } + + private void renderGames(GuiGraphics g, Window window, int x, int y, int mouseX, int mouseY) { g.drawString(font, Component.literal("INSTALLED GAMES"), x, y, GREEN, false); - if (activeWindow != null && activeWindow.gameOpen) { antFarm.render(g, font, x, y + 16, 214, 155); return; } - if (antFarm.isGameInstalled()) g.drawString(font, Component.literal("ANT FARM [ ENTER ]"), x, y + 22, PALE_GREEN, false); - else { + if (window.gameOpen) { + if (window.gameId.equals("antman")) antman.render(g, font, x, y + 16, 214, 155); + else if (window.gameId.equals("blockle")) blockle.render(g, font, x, y + 16, 214, 155); + else basilisk.render(g, font, x, y + 16, 214, 155); + return; + } + List games = installedGameIds(); + for (int index = 0; index < games.size(); index++) { + int rowTop = y + 18 + index * 16; + if (inside(x - 4, rowTop, 218, 16, mouseX, mouseY)) box(g, x - 4, rowTop, x + 214, rowTop + 16, GREEN); + g.drawString(font, Component.literal(gameLabel(games.get(index))), x, y + 22 + index * 16, PALE_GREEN, false); + } + if (games.isEmpty()) { g.drawString(font, Component.literal("NO GAMES INSTALLED"), x, y + 22, PALE_GREEN, false); g.drawString(font, Component.literal("FIND GAME DISKS TO INSTALL PROGRAMS"), x, y + 40, PALE_GREEN, false); } } + private List installedGameIds() { + List games = new ArrayList<>(); + if (basilisk.installed()) games.add("basilisk"); + if (antman.installed()) games.add("antman"); + if (blockle.installed()) games.add("blockle"); + return games; + } + + private String gameLabel(String gameId) { + return switch (gameId) { + case "basilisk" -> "BASILISK [ ENTER ]"; + case "antman" -> "ANTMAN.EXE [ ENTER ]"; + default -> "BLOCKLE [ ENTER ]"; + }; + } + private void renderTrash(GuiGraphics g, int x, int y) { g.drawString(font, Component.literal("DROP A DISK HERE TO EJECT"), x, y, GREEN, false); g.drawString(font, Component.literal("EJECTED FILES RETURN TO PLAYER"), x, y + 22, PALE_GREEN, false); @@ -756,6 +1353,15 @@ public final class ComputerScreen extends Screen { return y; } + private int wrapLimited(GuiGraphics g, String text, int x, int y, int width, int bottom, int color) { + for (var line : font.split(Component.literal(text), width)) { + if (y + 11 > bottom) break; + g.drawString(font, line, x, y, color, false); + y += 11; + } + return y; + } + private void drawBottomWrapped(GuiGraphics g, String text, int x, int y, int h, int width, int color) { List lines = font.split(Component.literal(text), width); int lineY = y + h - 16 - Math.max(0, lines.size() - 1) * 11; @@ -805,17 +1411,28 @@ public final class ComputerScreen extends Screen { return true; } if (window.type.equals("ARCHIVE")) { - List entries = ComputerGuideData.entriesFor(computer() == null ? List.of() : computer().diskIds()); + List entries = filterArchiveEntries(ComputerGuideData.entriesFor(computer() == null ? List.of() : computer().diskIds())); int archiveX = x + 8; int archiveY = y + 28; if (session.archiveEntryId != null) { - if (inside(archiveX, archiveY, w - 16, 20, mouseX, mouseY)) session.archiveEntryId = null; + if (inside(archiveX, archiveY, w - 16, 20, mouseX, mouseY)) { + session.archiveEntryId = null; + session.archiveDetailScroll = 0; + } } else { - int visible = Math.max(1, (h - 34) / 62); + if (inside(archiveX, archiveY + 14, w - 16, 21, mouseX, mouseY)) { + session.archiveSearchFocused = true; + return true; + } + session.archiveSearchFocused = false; + int visible = Math.max(1, (h - 56) / 62); int start = Math.max(0, Math.min(session.archiveScroll, Math.max(0, entries.size() - visible))); - int index = start + ((int) mouseY - (archiveY + 16)) / 62; + int index = start + ((int) mouseY - (archiveY + 38)) / 62; int rowIndex = index - start; - if (rowIndex >= 0 && rowIndex < visible && index < entries.size() && inside(archiveX, archiveY + 16 + rowIndex * 62, w - 16, 56, mouseX, mouseY)) session.archiveEntryId = entries.get(index).id(); + if (rowIndex >= 0 && rowIndex < visible && index < entries.size() && inside(archiveX, archiveY + 38 + rowIndex * 62, w - 16, 56, mouseX, mouseY)) { + session.archiveEntryId = entries.get(index).id(); + session.archiveDetailScroll = 0; + } } return true; } @@ -823,17 +1440,24 @@ public final class ComputerScreen extends Screen { var files = ComputerFileSystemClientState.get(position).files(); if (!session.fileExplorerDirectory.equals("/") && mouseY < y + 36 && mouseX > x + w - 48) { session.fileExplorerDirectory = parentDirectory(session.fileExplorerDirectory); + session.fileExplorerScroll = 0; return true; } int row = 0; for (String file : files) { String[] fields = file.split("\\t", 3); if (fields.length < 3 || !isDirectChild(fields[1], session.fileExplorerDirectory)) continue; - int rowTop = y + 34 + row++ * 14; + int rowIndex = row++; + if (rowIndex < session.fileExplorerScroll) continue; + int rowTop = y + 34 + (rowIndex - session.fileExplorerScroll) * 14; + if (rowTop > y + h - 20) break; if (!inside(x, rowTop - 2, w, 14, mouseX, mouseY)) continue; session.fileExplorerSelected = fields[1]; - if (fields[0].equals("DIRECTORY")) session.fileExplorerDirectory = fields[1]; - else if (fields[0].equals("TEXT")) { + if (fields[0].equals("DIRECTORY")) { + session.fileExplorerDirectory = fields[1]; + session.fileExplorerScroll = 0; + } + else if (fields[0].equals("TEXT") || fields[0].equals("IMAGE")) { ComputerNetworking.openFile(position, fields[1]); open(fields[1].endsWith(".antpaint") ? "PAINT" : "TEXT"); } @@ -843,35 +1467,45 @@ public final class ComputerScreen extends Screen { } if (window.type.equals("PAINT")) { int contentX = x + 8; - int contentY = y + 48; - if (inside(contentX, contentY, w - 16, h - 54, mouseX, mouseY)) paintAt(mouseX, mouseY, contentX, contentY - 18, w - 16, h - 54, button == 1); - else if (mouseY < y + 66) { - if (mouseX > contentX + 190) savePaint(); - else paintTool((int) mouseX - contentX); + int contentY = y + 58; + if (inside(contentX, contentY, w - 16, h - 34, mouseX, mouseY)) paintAt(mouseX, mouseY, contentX, contentY, w - 16, h - 34, button == 1); + else if (mouseY >= y + 39 && mouseY < y + 58 && mouseX >= contentX && mouseX < contentX + 196) { + paintToolbarAction(((int) mouseX - contentX) / 28); } return true; } if (window.type.equals("TEXT")) { if (mouseY < y + 66) { - int action = ((int) mouseX - (x + 8)) / 42; - if (action == 0) newText(); else if (action == 1) { session.textListing = true; ComputerNetworking.listFiles(position); } else if (action == 2) writeText(); else if (action == 3) saveText(); + int toolbarX = (int) mouseX - (x + 8); + if (toolbarX < 30) newText(); + else if (toolbarX < 60) { session.textListing = true; session.textPickerScroll = 0; ComputerNetworking.listFiles(position); } + else if (toolbarX < 102) writeText(); + else if (toolbarX < 138) saveText(); + else if (toolbarX < 210) beginSaveAs(); } else if (session.textListing) { var files = ComputerFileSystemClientState.get(position).files(); int index = ((int) mouseY - (y + 62)) / 14; - if (index >= 0 && index < files.size()) { - String[] fields = files.get(index).split("\\t", 3); - if (fields.length >= 2) { + int textIndex = 0; + for (String file : files) { + String[] fields = file.split("\\t", 3); + if (fields.length < 3 || !fields[0].equals("TEXT")) continue; + if (textIndex < session.textPickerScroll) { textIndex++; continue; } + if (textIndex++ == index) { session.textListing = false; ComputerNetworking.openFile(position, fields[1]); + break; } } - } else session.textFocused = true; + } else { + session.textFocused = true; + setTextCursorFromMouse(mouseX - (x + 10), mouseY - (y + 46), w - 28); + } return true; } if (window.type.equals("ANTMAIL")) { - var result = AntmailClientState.get(position); + var result = AntmailClientState.getMailbox(position); if (result == null || result.address().isBlank()) { - if (inside(x + 8, y + 84, 214, 25, mouseX, mouseY)) { + if (inside(x + 8, y + 56, 214, 25, mouseX, mouseY)) { session.antmailFocused = true; return true; } @@ -879,55 +1513,132 @@ public final class ComputerScreen extends Screen { setupAntmail(); return true; } - } else if (inside(x + 8, y + 54, 54, 27, mouseX, mouseY)) { + } else if (inside(x + 8, y + 30, 54, 24, mouseX, mouseY)) { session.antmailMode = "inbox"; session.antmailSent = false; + session.antmailPage = 0; session.antmailMessageIndex = -1; - } else if (inside(x + 62, y + 54, 58, 27, mouseX, mouseY)) { + requestAntmailState(true); + } else if (inside(x + 62, y + 30, 38, 24, mouseX, mouseY)) { session.antmailMode = "sent"; session.antmailSent = true; + session.antmailPage = 0; session.antmailMessageIndex = -1; - } else if (inside(x + 122, y + 54, 92, 27, mouseX, mouseY)) { + requestAntmailState(true); + } else if (inside(x + 102, y + 30, 52, 24, mouseX, mouseY)) { + session.antmailMode = "drafts"; + session.antmailSent = false; + session.antmailPage = 0; + session.antmailMessageIndex = -1; + requestAntmailState(true); + } else if (inside(x + 158, y + 30, 56, 24, mouseX, mouseY)) { session.antmailMode = "compose"; session.antmailFocused = true; session.antmailField = 1; + restoreLatestDraft(result); } else if (session.antmailMode.equals("inbox") || session.antmailMode.equals("sent")) { - int index = ((int) mouseY - (y + 108)) / 14; + if (mouseY >= y + h - 54 && mouseY < y + h - 32) { + if (mouseX < x + 60 && session.antmailPage > 0) { + session.antmailPage--; + requestAntmailState(true); + } else if (mouseX >= x + 150 && (session.antmailPage + 1) * AntmailMailbox.PAGE_SIZE < antmailTotal(result, session.antmailSent)) { + session.antmailPage++; + requestAntmailState(true); + } + return true; + } + int index = ((int) mouseY - (y + 80)) / 14; List messages = mailboxMessages(result, session.antmailSent); if (index >= 0 && index < messages.size()) { session.antmailMessageIndex = index; session.antmailMode = "message"; + AntmailNetworking.requestMessage(position, messages.get(index).id()); AntmailNetworking.markRead(position, messages.get(index).id()); } + } else if (session.antmailMode.equals("drafts")) { + int index = ((int) mouseY - (y + 80)) / 14; + AntmailMailbox mailbox = mailbox(result); + if (mailbox != null && index >= 0 && index < mailbox.drafts().size()) { + restoreDraft(mailbox.drafts().get(index)); + session.antmailMode = "compose"; + session.antmailFocused = true; + session.antmailField = 1; + } } else if (session.antmailMode.equals("message")) { + AntmailMessage message = selectedAntmailMessage(result); + if (session.antmailSent && message != null && !message.deliveryStatus().equals("DELIVERED") && mouseY >= y + h - 54 && mouseY < y + h - 34) { + AntmailNetworking.retry(position, message.id()); + session.antmailStatus = "RETRYING DELIVERY"; + return true; + } + if (mouseY >= y + h - 32 && mouseY < y + h - 8) { + if (message != null) AntmailNetworking.delete(position, message.id(), session.antmailSent); + session.antmailMode = session.antmailSent ? "sent" : "inbox"; + session.antmailMessageIndex = -1; + return true; + } + if (message != null && mouseY >= y + 90 && mouseY < y + h - 38 && !message.attachments().isEmpty()) { + int attachmentIndex = Math.max(0, Math.min(message.attachments().size() - 1, ((int) mouseY - (y + 98)) / 14)); + saveAntmailAttachment(message.attachments().get(attachmentIndex)); + return true; + } if (mouseY < y + 72) { session.antmailMode = session.antmailSent ? "sent" : "inbox"; session.antmailMessageIndex = -1; } } else if (session.antmailMode.equals("compose")) { - if (mouseY >= y + 160 && mouseY < y + 184) { - session.antmailAttachText = mouseX < x + 112; - session.antmailAttachPaint = mouseX >= x + 112; - if (session.antmailAttachText && session.fileExplorerSelected.endsWith(".txt")) { - session.textPath = session.fileExplorerSelected; - ComputerNetworking.openFile(position, session.fileExplorerSelected); - } - if (session.antmailAttachPaint && session.fileExplorerSelected.endsWith(".antpaint")) { - ComputerNetworking.openFile(position, session.fileExplorerSelected); + if (session.antmailPickingAttachment) { + int row = 0; + for (String file : ComputerFileSystemClientState.get(position).files()) { + String[] fields = file.split("\\t", 3); + if (fields.length < 2 || (!fields[0].equals("TEXT") && !fields[0].equals("IMAGE"))) continue; + int rowTop = y + 64 + row++ * 14; + if (mouseY >= rowTop - 2 && mouseY < rowTop + 12) { + session.fileExplorerSelected = fields[1]; + session.antmailAttachText = fields[0].equals("TEXT"); + session.antmailAttachPaint = fields[0].equals("IMAGE"); + session.antmailPickingAttachment = false; + if (session.antmailAttachText) { + session.textPath = fields[1]; + session.antmailTextPath = fields[1]; + } else { + session.antmailPaintPath = fields[1]; + } + ComputerNetworking.openFile(position, fields[1]); + return true; + } } return true; } - if (mouseY < y + 94) { - session.antmailField = mouseY < y + 78 ? 1 : 2; + if (mouseY >= y + 116 && mouseY < y + 141) { + session.antmailPickingAttachment = true; + return true; + } + if (mouseY >= y + 42 && mouseY < y + 59) { + session.antmailField = 1; session.antmailFocused = true; - } else if (mouseY < y + 150) { + } else if (mouseY >= y + 59 && mouseY < y + 75) { + session.antmailField = 2; + session.antmailFocused = true; + } else if (mouseY >= y + 75 && mouseY < y + 116) { session.antmailField = 3; session.antmailFocused = true; + } else if (mouseY >= y + h - 38 && mouseY < y + h - 8) { + sendAntmail(); } } return true; } - if (window.type.equals("GAMES") && mouseY > y + 35 && !window.gameOpen && antFarm.isGameInstalled()) { window.gameOpen = true; activeWindow = window; return true; } + if (window.type.equals("GAMES") && !window.gameOpen) { + List games = installedGameIds(); + int index = ((int) mouseY - (y + 20)) / 16; + if (index >= 0 && index < games.size() && mouseY < y + 20 + games.size() * 16) { + window.gameId = games.get(index); + window.gameOpen = true; + activeWindow = window; + return true; + } + } if (window.type.equals("TERMINAL")) { session.terminalFocused = true; return true; } } if (window.type.equals("SETTINGS") && inside(x + 8, y + 105, 205, 51, mouseX, mouseY)) { @@ -952,9 +1663,16 @@ public final class ComputerScreen extends Screen { } if (inside(x, y + 20, w, h - 20, mouseX, mouseY)) return true; if (inside(x, y, w, 20, mouseX, mouseY)) { - if (inside(x + w - 18, y, 18, 20, mouseX, mouseY)) session.windows.remove(i); + if (inside(x + w - 18, y, 18, 20, mouseX, mouseY)) { + if (window.type.equals("ANTMAIL") && session.antmailMode.equals("compose")) saveAntmailDraft(); + session.windows.remove(i); + if (activeWindow == window) activeWindow = null; + } else if (inside(x + w - 48, y, 16, 20, mouseX, mouseY)) window.maximized = !window.maximized; - else if (inside(x + w - 63, y, 16, 20, mouseX, mouseY)) window.minimized = true; + else if (inside(x + w - 63, y, 16, 20, mouseX, mouseY)) { + window.minimized = true; + if (activeWindow == window) activeWindow = null; + } else { dragging = window; dragX = (int) mouseX - x; dragY = (int) mouseY - y; session.windows.remove(i); session.windows.add(window); } return true; } @@ -964,7 +1682,7 @@ public final class ComputerScreen extends Screen { int y = t + 48 + i / 4 * 76; if (inside(x - 6, y - 6, 76, 57, mouseX, mouseY)) { open(ICONS[i]); return true; } } - List disks = physicalDisks(); + List disks = physicalDisks().stream().filter(id -> !id.getPath().equals("blockle_game")).toList(); for (int i = 0; i < disks.size() && i < 3; i++) { int x = l + 24 + i % 4 * 94; int y = t + 200 + i / 4 * 54; @@ -992,8 +1710,8 @@ public final class ComputerScreen extends Screen { int l = -WIDTH / 2; int t = -HEIGHT / 2; int x = l + activeWindow.x + 8; - int y = t + activeWindow.y + 48; - paintAt(mouseX, mouseY, x, y - 18, activeWindow.renderWidth - 16, activeWindow.renderHeight - 54, button == 1); + int y = t + activeWindow.y + 58; + paintAt(mouseX, mouseY, x, y, activeWindow.renderWidth - 16, activeWindow.renderHeight - 34, button == 1); } return true; } @@ -1017,8 +1735,23 @@ public final class ComputerScreen extends Screen { @Override public boolean mouseScrolled(double mouseX, double mouseY, double scrollX, double scrollY) { - if (loggedIn && activeWindow != null && activeWindow.type.equals("ARCHIVE") && session.archiveEntryId == null) { - session.archiveScroll = Math.max(0, session.archiveScroll - (int) Math.signum(scrollY)); + Window hoveredWindow = windowAt(mouseX, mouseY); + if (hoveredWindow != null) activeWindow = hoveredWindow; + if (loggedIn && activeWindow != null && activeWindow.type.equals("FILES")) { + session.fileExplorerScroll = Math.max(0, session.fileExplorerScroll - (int) Math.signum(scrollY)); + return true; + } + if (loggedIn && activeWindow != null && activeWindow.type.equals("TEXT") && session.textListing) { + session.textPickerScroll = Math.max(0, session.textPickerScroll - (int) Math.signum(scrollY)); + return true; + } + if (loggedIn && activeWindow != null && activeWindow.type.equals("TEXT")) { + session.textScroll = Math.max(0, session.textScroll - (int) Math.signum(scrollY)); + return true; + } + if (loggedIn && activeWindow != null && activeWindow.type.equals("ARCHIVE")) { + if (session.archiveEntryId == null) session.archiveScroll = Math.max(0, session.archiveScroll - (int) Math.signum(scrollY)); + else session.archiveDetailScroll = Math.max(0, Math.min(session.archiveDetailMaxScroll, session.archiveDetailScroll - (int) Math.signum(scrollY))); return true; } return super.mouseScrolled(mouseX, mouseY, scrollX, scrollY); @@ -1037,12 +1770,31 @@ public final class ComputerScreen extends Screen { if (session.fileExplorerRename.length() < 48) session.fileExplorerRename += codePoint; return true; } + if (loggedIn && activeWindow != null && activeWindow.type.equals("ARCHIVE") && session.archiveSearchFocused && codePoint >= 32 && session.archiveSearch.length() < 48) { + session.archiveSearch += codePoint; + session.archiveScroll = 0; + return true; + } + if (loggedIn && activeWindow != null && activeWindow.type.equals("FILES") && session.fileExplorerCreatingDirectory && codePoint >= 32 && codePoint != '/' && codePoint != '\\') { + if (session.fileExplorerRename.length() < 48) session.fileExplorerRename += codePoint; + return true; + } + if (loggedIn && activeWindow != null && activeWindow.type.equals("FILES") && session.fileExplorerMoving && codePoint >= 32 && codePoint != '\\') { + if (session.fileExplorerRename.length() < 64) session.fileExplorerRename += codePoint; + return true; + } if (loggedIn && activeWindow != null && activeWindow.type.equals("TEXT") && session.textRenaming && codePoint >= 32 && codePoint != '/' && codePoint != '\\') { if (session.textRename.length() < 48) session.textRename += codePoint; return true; } if (loggedIn && activeWindow != null) { - if (activeWindow.type.equals("TEXT") && session.textFocused && codePoint >= 32) { session.textContent += codePoint; session.textDirty = true; return true; } + if (activeWindow.type.equals("GAMES") && activeWindow.gameOpen && activeWindow.gameId.equals("blockle") && blockle.charTyped(codePoint)) return true; + if (activeWindow.type.equals("TEXT") && session.textFocused && codePoint >= 32) { + session.textContent = session.textContent.substring(0, session.textCursor) + codePoint + session.textContent.substring(session.textCursor); + session.textCursor++; + session.textDirty = true; + return true; + } if (activeWindow.type.equals("TERMINAL") && session.terminalFocused && codePoint >= 32) { session.terminalInput += codePoint; return true; } if (activeWindow.type.equals("ANTMAIL") && session.antmailFocused && codePoint >= 32) { if (session.antmailMode.equals("compose")) { @@ -1068,10 +1820,47 @@ public final class ComputerScreen extends Screen { return true; } if (activeWindow != null && activeWindow.type.equals("GAMES") && activeWindow.gameOpen) { - if (keyCode == GLFW.GLFW_KEY_ESCAPE) { activeWindow.gameOpen = false; return true; } - if (antFarm.keyPressed(keyCode)) return true; + if (keyCode == GLFW.GLFW_KEY_ESCAPE) { + activeWindow.gameOpen = false; + return true; + } + if (activeWindow.gameId.equals("antman") ? antman.keyPressed(keyCode) : activeWindow.gameId.equals("blockle") ? blockle.keyPressed(keyCode) : basilisk.keyPressed(keyCode)) return true; } if (activeWindow != null && activeWindow.type.equals("FILES")) { + if (session.fileExplorerDeleteConfirm) { + if (keyCode == GLFW.GLFW_KEY_ESCAPE) { session.fileExplorerDeleteConfirm = false; return true; } + if (keyCode == GLFW.GLFW_KEY_ENTER || keyCode == GLFW.GLFW_KEY_KP_ENTER) { session.fileExplorerDeleteConfirm = false; deleteSelectedFile(); return true; } + } + if (session.fileExplorerCreatingDirectory) { + if (keyCode == GLFW.GLFW_KEY_BACKSPACE) { if (!session.fileExplorerRename.isEmpty()) session.fileExplorerRename = session.fileExplorerRename.substring(0, session.fileExplorerRename.length() - 1); return true; } + if (keyCode == GLFW.GLFW_KEY_ESCAPE) { session.fileExplorerCreatingDirectory = false; session.fileExplorerRename = ""; return true; } + if (keyCode == GLFW.GLFW_KEY_ENTER || keyCode == GLFW.GLFW_KEY_KP_ENTER) { + if (!session.fileExplorerRename.isBlank()) { + String folder = session.fileExplorerRename.replace("\\", "\\\\").replace("\"", "\\\""); + ComputerNetworking.terminalCommand(position, session.fileExplorerDirectory, "mkdir \"" + folder + "\""); + } + session.fileExplorerCreatingDirectory = false; + session.fileExplorerRename = ""; + ComputerNetworking.listFiles(position); + return true; + } + } + if (session.fileExplorerMoving) { + if (keyCode == GLFW.GLFW_KEY_BACKSPACE) { if (!session.fileExplorerRename.isEmpty()) session.fileExplorerRename = session.fileExplorerRename.substring(0, session.fileExplorerRename.length() - 1); return true; } + if (keyCode == GLFW.GLFW_KEY_ESCAPE) { session.fileExplorerMoving = false; session.fileExplorerRename = ""; return true; } + if (keyCode == GLFW.GLFW_KEY_ENTER || keyCode == GLFW.GLFW_KEY_KP_ENTER) { + if (!session.fileExplorerRename.isBlank() && !session.fileExplorerSelected.isBlank()) { + String destination = session.fileExplorerRename.startsWith("/") + ? ComputerFileSystem.normalize(session.fileExplorerRename) + : ComputerFileSystem.normalize(session.fileExplorerDirectory + "/" + session.fileExplorerRename); + ComputerNetworking.moveFile(position, session.fileExplorerSelected, destination); + } + session.fileExplorerMoving = false; + session.fileExplorerRename = ""; + ComputerNetworking.listFiles(position); + return true; + } + } if (session.fileExplorerRenaming) { if (keyCode == GLFW.GLFW_KEY_BACKSPACE) { if (!session.fileExplorerRename.isEmpty()) session.fileExplorerRename = session.fileExplorerRename.substring(0, session.fileExplorerRename.length() - 1); @@ -1090,7 +1879,15 @@ public final class ComputerScreen extends Screen { beginRenameSelectedFile(); return true; } else if (keyCode == GLFW.GLFW_KEY_DELETE) { - deleteSelectedFile(); + session.fileExplorerDeleteConfirm = true; + return true; + } else if (keyCode == GLFW.GLFW_KEY_F6) { + session.fileExplorerCreatingDirectory = true; + session.fileExplorerRename = ""; + return true; + } else if (keyCode == GLFW.GLFW_KEY_F7 && !session.fileExplorerSelected.isBlank()) { + session.fileExplorerMoving = true; + session.fileExplorerRename = ""; return true; } } @@ -1116,12 +1913,27 @@ public final class ComputerScreen extends Screen { if (keyCode == GLFW.GLFW_KEY_ESCAPE) { session.antmailFocused = false; return true; } } if (activeWindow != null && activeWindow.type.equals("TEXT") && session.textFocused) { - if (keyCode == GLFW.GLFW_KEY_BACKSPACE) { if (!session.textContent.isEmpty()) { session.textContent = session.textContent.substring(0, session.textContent.length() - 1); session.textDirty = true; } return true; } - if (keyCode == GLFW.GLFW_KEY_ENTER) { session.textContent += "\n"; session.textDirty = true; return true; } - if (keyCode == GLFW.GLFW_KEY_S && hasControl(modifiers)) { saveText(); return true; } + if (keyCode == GLFW.GLFW_KEY_BACKSPACE) { if (session.textCursor > 0) { session.textContent = session.textContent.substring(0, session.textCursor - 1) + session.textContent.substring(session.textCursor); session.textCursor--; session.textDirty = true; } return true; } + if (keyCode == GLFW.GLFW_KEY_DELETE) { if (session.textCursor < session.textContent.length()) { session.textContent = session.textContent.substring(0, session.textCursor) + session.textContent.substring(session.textCursor + 1); session.textDirty = true; } return true; } + if (keyCode == GLFW.GLFW_KEY_LEFT) { session.textCursor = Math.max(0, session.textCursor - 1); return true; } + if (keyCode == GLFW.GLFW_KEY_RIGHT) { session.textCursor = Math.min(session.textContent.length(), session.textCursor + 1); return true; } + if (keyCode == GLFW.GLFW_KEY_UP || keyCode == GLFW.GLFW_KEY_DOWN) { moveTextCursorVertically(keyCode == GLFW.GLFW_KEY_UP); return true; } + if (keyCode == GLFW.GLFW_KEY_HOME) { session.textCursor = session.textContent.lastIndexOf('\n', Math.max(0, session.textCursor - 1)) + 1; return true; } + if (keyCode == GLFW.GLFW_KEY_END) { int next = session.textContent.indexOf('\n', session.textCursor); session.textCursor = next < 0 ? session.textContent.length() : next; return true; } + if (keyCode == GLFW.GLFW_KEY_ENTER) { session.textContent = session.textContent.substring(0, session.textCursor) + "\n" + session.textContent.substring(session.textCursor); session.textCursor++; session.textDirty = true; return true; } + if (keyCode == GLFW.GLFW_KEY_S && hasControl(modifiers) && (modifiers & GLFW.GLFW_MOD_SHIFT) == 0) { saveText(); return true; } if (keyCode == GLFW.GLFW_KEY_ESCAPE) { session.textFocused = false; return true; } } if (activeWindow != null && activeWindow.type.equals("TEXT")) { + if (session.textDeleteConfirm) { + if (keyCode == GLFW.GLFW_KEY_ESCAPE) { session.textDeleteConfirm = false; return true; } + if (keyCode == GLFW.GLFW_KEY_ENTER || keyCode == GLFW.GLFW_KEY_KP_ENTER) { session.textDeleteConfirm = false; deleteTextFile(); return true; } + } + if (keyCode == GLFW.GLFW_KEY_F8) { session.textDeleteConfirm = true; session.textFocused = false; return true; } + if (keyCode == GLFW.GLFW_KEY_S && hasControl(modifiers) && (modifiers & GLFW.GLFW_MOD_SHIFT) != 0) { + beginSaveAs(); + return true; + } if (keyCode == GLFW.GLFW_KEY_F2 && !session.textPath.isBlank()) { int slash = session.textPath.lastIndexOf('/'); session.textRename = session.textPath.substring(slash + 1); @@ -1146,8 +1958,20 @@ public final class ComputerScreen extends Screen { } if (activeWindow != null && activeWindow.type.equals("ARCHIVE") && session.archiveEntryId != null && keyCode == GLFW.GLFW_KEY_ESCAPE) { session.archiveEntryId = null; + session.archiveDetailScroll = 0; return true; } + if (activeWindow != null && activeWindow.type.equals("ARCHIVE") && session.archiveSearchFocused) { + if (keyCode == GLFW.GLFW_KEY_BACKSPACE) { + if (!session.archiveSearch.isEmpty()) session.archiveSearch = session.archiveSearch.substring(0, session.archiveSearch.length() - 1); + session.archiveScroll = 0; + return true; + } + if (keyCode == GLFW.GLFW_KEY_ESCAPE) { + session.archiveSearchFocused = false; + return true; + } + } return super.keyPressed(keyCode, scanCode, modifiers); } @@ -1189,12 +2013,28 @@ public final class ComputerScreen extends Screen { session.terminalInput = ""; } + private void requestAntmailState() { + requestAntmailState(false); + } + + private void requestAntmailState(boolean force) { + int folder = session.antmailMode.equals("sent") ? com.craisinlord.antarchy.content.network.AntmailStateRequestPayload.SENT + : session.antmailMode.equals("drafts") ? com.craisinlord.antarchy.content.network.AntmailStateRequestPayload.DRAFTS + : com.craisinlord.antarchy.content.network.AntmailStateRequestPayload.INBOX; + AntmailNetworking.requestState(position, folder, session.antmailPage, force ? 0L : AntmailClientState.getVersion(position)); + } + private void setupAntmail() { + if (!loggedIn) { + session.antmailStatus = "SETUP ERROR // SIGN IN TO THE COMPUTER FIRST"; + return; + } if (!AntmailAddress.isValidUsername(session.antmailUsername)) { session.antmailStatus = "SETUP ERROR // USE 3-16 LOWERCASE LETTERS, NUMBERS, OR _"; session.antmailFocused = true; return; } + AntmailClientState.clear(position); AntmailNetworking.setup(position, session.antmailUsername); session.antmailStatus = "REGISTERING ADDRESS"; session.antmailRegistrationPending = true; @@ -1210,22 +2050,17 @@ public final class ComputerScreen extends Screen { session.antmailStatus = "SEND ERROR // SUBJECT AND BODY REQUIRED"; return; } - if (session.antmailAttachText && (session.textDirty || session.textPath.isBlank() || session.textPath.contains("untitled"))) { + if (session.antmailAttachText && (session.textDirty || session.textPath.isBlank() || session.textPath.contains("untitled") || !session.textPath.equals(session.antmailTextPath))) { session.antmailStatus = "SEND ERROR // SAVE TEXT FILE FIRST"; return; } - if (session.antmailAttachPaint && (session.paintDirty || session.paintName.isBlank() || session.paintName.startsWith("UNTITLED"))) { + if (session.antmailAttachPaint && (session.paintDirty || session.paintName.isBlank() || session.paintName.startsWith("UNTITLED") || !session.antmailPaintPath.endsWith(session.paintName))) { session.antmailStatus = "SEND ERROR // SAVE PAINTING FIRST"; return; } - List attachments = new ArrayList<>(); - if (session.antmailAttachText && !session.textContent.isEmpty()) attachments.add(new AntmailAttachment.TextFile(session.textPath.substring(session.textPath.lastIndexOf('/') + 1), session.textContent)); - if (session.antmailAttachPaint) { - byte[] pixels = new byte[AntPaintCanvas.WIDTH * AntPaintCanvas.HEIGHT]; - for (int py = 0; py < AntPaintCanvas.HEIGHT; py++) for (int px = 0; px < AntPaintCanvas.WIDTH; px++) pixels[py * AntPaintCanvas.WIDTH + px] = (byte) (session.paintCanvas.get(px, py) ? 1 : 0); - attachments.add(new AntmailAttachment.PaintImage(session.paintName, AntPaintCanvas.WIDTH, AntPaintCanvas.HEIGHT, pixels)); - } + List attachments = composeAttachments(); AntmailNetworking.send(position, session.antmailRecipient, session.antmailSubject, session.antmailBody, attachments); + if (session.antmailDraftId != null) AntmailNetworking.deleteDraft(position, session.antmailDraftId); session.antmailStatus = "MESSAGE SENT"; session.antmailMode = "inbox"; session.antmailFocused = false; @@ -1234,21 +2069,157 @@ public final class ComputerScreen extends Screen { session.antmailBody = ""; session.antmailAttachText = false; session.antmailAttachPaint = false; + session.antmailTextPath = ""; + session.antmailPaintPath = ""; + session.antmailDraftId = null; + session.antmailDraftLoaded = false; + session.antmailPickingAttachment = false; + } + + private void restoreLatestDraft(AntmailResultPayload result) { + if (session.antmailDraftLoaded) return; + AntmailMailbox mailbox = mailbox(result); + if (mailbox == null || mailbox.drafts().isEmpty()) { + session.antmailDraftLoaded = true; + return; + } + restoreDraft(mailbox.drafts().getLast()); + session.antmailStatus = "DRAFT RECOVERED"; + session.antmailDraftLoaded = true; + } + + private void restoreDraft(AntmailDraft draft) { + session.antmailDraftId = draft.id(); + session.antmailRecipient = draft.recipient() == null ? "" : draft.recipient().fullAddress(); + session.antmailSubject = draft.subject(); + session.antmailBody = draft.body(); + session.antmailAttachText = false; + session.antmailAttachPaint = false; + session.antmailPickingAttachment = false; + for (AntmailAttachment attachment : draft.attachments()) { + if (attachment instanceof AntmailAttachment.TextFile text) { + session.antmailAttachText = true; + session.textPath = "/documents/" + text.fileName(); + session.antmailTextPath = session.textPath; + session.textContent = text.contents(); + } else if (attachment instanceof AntmailAttachment.PaintImage paint) { + session.antmailAttachPaint = true; + session.paintName = paint.fileName(); + session.antmailPaintPath = "/pictures/" + paint.fileName(); + AntPaintCanvas canvas = new AntPaintCanvas(); + byte[] pixels = paint.pixels(); + for (int index = 0; index < pixels.length; index++) if (pixels[index] == 1) canvas.set(index % AntPaintCanvas.WIDTH, index / AntPaintCanvas.WIDTH, true); + session.paintCanvas = canvas; + } + } + } + + private void saveAntmailDraft() { + try { + if (session.antmailRecipient.isBlank() && session.antmailSubject.isBlank() && session.antmailBody.isBlank()) return; + AntmailResultPayload result = AntmailClientState.getMailbox(position); + AntmailMailbox mailbox = mailbox(result); + if (mailbox == null) return; + AntmailDraft draft = new AntmailDraft(session.antmailDraftId, AntmailAddress.parse(mailbox.address().fullAddress()), + session.antmailRecipient.isBlank() ? null : AntmailAddress.parse(session.antmailRecipient), session.antmailSubject, session.antmailBody, composeAttachments()); + AntmailNetworking.saveDraft(position, draft); + } catch (RuntimeException ignored) { + } + } + + private List composeAttachments() { + List attachments = new ArrayList<>(); + if (session.antmailAttachText) attachments.add(new AntmailAttachment.TextFile(session.textPath.substring(session.textPath.lastIndexOf('/') + 1), session.textContent)); + if (session.antmailAttachPaint) { + byte[] pixels = new byte[AntPaintCanvas.WIDTH * AntPaintCanvas.HEIGHT]; + for (int py = 0; py < AntPaintCanvas.HEIGHT; py++) for (int px = 0; px < AntPaintCanvas.WIDTH; px++) pixels[py * AntPaintCanvas.WIDTH + px] = (byte) (session.paintCanvas.get(px, py) ? 1 : 0); + attachments.add(new AntmailAttachment.PaintImage(session.paintName, AntPaintCanvas.WIDTH, AntPaintCanvas.HEIGHT, pixels)); + } + return attachments; + } + + private void saveAntmailAttachment(AntmailAttachment attachment) { + try { + if (attachment instanceof AntmailAttachment.TextFile text) { + String path = "/documents/" + text.fileName(); + if (computerFileExists(path)) ComputerNetworking.saveFile(position, path, text.contents()); + else ComputerNetworking.createFile(position, path, text.contents()); + session.antmailStatus = "ATTACHMENT SAVED // " + text.fileName(); + } else if (attachment instanceof AntmailAttachment.PaintImage paint) { + String name = paint.fileName().endsWith(".antpaint") ? paint.fileName() : paint.fileName() + ".antpaint"; + AntPaintFile file = AntmailAttachmentFiles.toPaintFile(paint, UUID.randomUUID().toString(), 0L, 0L); + String encoded = Base64.getEncoder().encodeToString(AntPaintFileCodec.encode(file)); + String path = "/pictures/" + name; + if (computerFileExists(path)) ComputerNetworking.saveFile(position, path, encoded); + else ComputerNetworking.createFile(position, path, encoded); + session.antmailStatus = "ATTACHMENT SAVED // " + name; + } + ComputerNetworking.listFiles(position); + } catch (RuntimeException exception) { + session.antmailStatus = "ATTACHMENT ERROR // INVALID FILE"; + } + } + + private boolean computerFileExists(String path) { + return ComputerFileSystemClientState.get(position).files().stream().anyMatch(entry -> entry.contains("\t" + path + "\t")); } private void newText() { session.textPath = "/documents/untitled.txt"; session.textContent = ""; + session.textCursor = 0; + session.textScroll = 0; session.textDirty = true; session.textListing = false; session.textFocused = true; } + private void beginSaveAs() { + int slash = session.textPath.lastIndexOf('/'); + session.textRename = session.textPath.substring(slash + 1); + session.textSaveAs = true; + session.textRenaming = true; + session.textFocused = false; + } + + private void setTextCursorFromMouse(double mouseX, double mouseY, int width) { + if (session.textContent.isEmpty()) { session.textCursor = 0; return; } + StringBuilder line = new StringBuilder(); + int cursor = 0; + int targetLine = Math.max(0, (int) (mouseY / 11)); + int currentLine = 0; + for (int index = 0; index < session.textContent.length(); index++) { + char character = session.textContent.charAt(index); + if (character == '\n' || font.width(line.toString() + character) > width) { + if (currentLine == targetLine) { + session.textCursor = index; + return; + } + currentLine++; + line.setLength(0); + if (character == '\n') continue; + } + line.append(character); + cursor = index + 1; + } + session.textCursor = cursor; + } + + private void moveTextCursorVertically(boolean up) { + int lineStart = session.textContent.lastIndexOf('\n', Math.max(0, session.textCursor - 1)) + 1; + int column = session.textCursor - lineStart; + int target = up ? lineStart - 1 : session.textContent.indexOf('\n', session.textCursor); + if (target < 0) return; + int targetStart = up ? session.textContent.lastIndexOf('\n', target - 1) + 1 : target + 1; + int targetEnd = session.textContent.indexOf('\n', targetStart); + if (targetEnd < 0) targetEnd = session.textContent.length(); + session.textCursor = Math.min(targetStart + column, targetEnd); + } + private void writeText() { boolean exists = ComputerFileSystemClientState.get(position).files().stream().anyMatch(entry -> entry.contains("\t" + session.textPath + "\t")); if (exists) ComputerNetworking.saveFile(position, session.textPath, session.textContent); else ComputerNetworking.createFile(position, session.textPath, session.textContent); - session.textDirty = false; ComputerNetworking.listFiles(position); } @@ -1256,7 +2227,6 @@ public final class ComputerScreen extends Screen { boolean exists = ComputerFileSystemClientState.get(position).files().stream().anyMatch(entry -> entry.contains("\t" + session.textPath + "\t")); if (exists) ComputerNetworking.saveFile(position, session.textPath, session.textContent); else ComputerNetworking.createFile(position, session.textPath, session.textContent); - session.textDirty = false; ComputerNetworking.listFiles(position); } @@ -1264,10 +2234,16 @@ public final class ComputerScreen extends Screen { if (!session.textRename.isBlank() && !session.textRename.contains("/") && !ComputerFileSystem.isProtected(session.textPath)) { String parent = parentDirectory(session.textPath); String destination = parent.equals("/") ? "/" + session.textRename : parent + "/" + session.textRename; - ComputerNetworking.moveFile(position, session.textPath, destination); - session.textPath = destination; + if (session.textSaveAs) { + session.textSaveAsPendingPath = destination; + ComputerNetworking.createFile(position, destination, session.textContent); + } else { + ComputerNetworking.moveFile(position, session.textPath, destination); + session.textMovePendingPath = destination; + } ComputerNetworking.listFiles(position); } + session.textSaveAs = false; session.textRenaming = false; session.textRename = ""; } @@ -1289,17 +2265,37 @@ public final class ComputerScreen extends Screen { session.paintTool = offset < 52 ? AntPaintTool.PENCIL : offset < 108 ? AntPaintTool.ERASER : AntPaintTool.FILL; } + private void paintToolbarAction(int index) { + if (index == 0) session.paintTool = AntPaintTool.PENCIL; + else if (index == 1) session.paintTool = AntPaintTool.ERASER; + else if (index == 2) session.paintTool = AntPaintTool.FILL; + else if (index == 3) { + session.paintHistory.record(session.paintCanvas); + session.paintCanvas.clear(); + session.paintDirty = true; + } else if (index == 4 && session.paintHistory.canUndo()) { + session.paintCanvas = session.paintHistory.undo(session.paintCanvas); + session.paintDirty = true; + } else if (index == 5 && session.paintHistory.canRedo()) { + session.paintCanvas = session.paintHistory.redo(session.paintCanvas); + session.paintDirty = true; + } else if (index == 6) { + savePaint(); + } + } + private void paintAt(double mouseX, double mouseY, int x, int y, int w, int h, boolean draw) { int size = Math.min(w / AntPaintCanvas.WIDTH, h / AntPaintCanvas.HEIGHT); if (size <= 0) return; int canvasX = x + (w - size * AntPaintCanvas.WIDTH) / 2; int px = (int) ((mouseX - canvasX) / size); - int py = (int) ((mouseY - y) / size); + int canvasY = y + Math.max(0, (h - size * AntPaintCanvas.HEIGHT) / 2); + int py = (int) ((mouseY - canvasY) / size); if (px < 0 || py < 0 || px >= AntPaintCanvas.WIDTH || py >= AntPaintCanvas.HEIGHT) return; session.paintHistory.record(session.paintCanvas); - if (session.paintTool == AntPaintTool.PENCIL) session.paintCanvas.erase(px, py); - else if (session.paintTool == AntPaintTool.ERASER) session.paintCanvas.draw(px, py); - else session.paintCanvas.floodFill(px, py, session.paintTool == AntPaintTool.ERASER); + if (session.paintTool == AntPaintTool.PENCIL) session.paintCanvas.draw(px, py); + else if (session.paintTool == AntPaintTool.ERASER) session.paintCanvas.erase(px, py); + else session.paintCanvas.floodFill(px, py, true); session.paintDirty = true; } @@ -1354,6 +2350,16 @@ public final class ComputerScreen extends Screen { ComputerNetworking.listFiles(position); } + private void deleteTextFile() { + if (session.textPath.isBlank() || ComputerFileSystem.isProtected(session.textPath)) return; + ComputerNetworking.deleteFile(position, session.textPath); + session.textPath = "/documents/untitled.txt"; + session.textContent = ""; + session.textCursor = 0; + session.textDirty = false; + ComputerNetworking.listFiles(position); + } + private void open(String type) { for (Window window : session.windows) if (window.type.equals(type)) { window.minimized = false; @@ -1363,10 +2369,28 @@ public final class ComputerScreen extends Screen { return; } session.windows.add(new Window(type, TITLES.get(type), 112 + session.windows.size() * 12, 52 + session.windows.size() * 10)); - if (type.equals("ANTMAIL")) AntmailNetworking.requestState(position); + if (type.equals("ANTMAIL")) requestAntmailState(); else if (type.equals("FILES")) ComputerNetworking.listFiles(position); } + private Window windowAt(double mouseX, double mouseY) { + float scale = uiScale(); + double localMouseX = (mouseX - width / 2.0F) / scale; + double localMouseY = (mouseY - height / 2.0F) / scale; + int left = -WIDTH / 2; + int top = -HEIGHT / 2; + for (int index = session.windows.size() - 1; index >= 0; index--) { + Window window = session.windows.get(index); + if (window.minimized) continue; + int windowX = left + window.x; + int windowY = top + window.y; + int windowWidth = window.maximized ? WIDTH - 28 : window.width; + int windowHeight = window.maximized ? HEIGHT - 48 : window.height; + if (inside(windowX, windowY + 20, windowWidth, windowHeight - 20, localMouseX, localMouseY)) return window; + } + return null; + } + private static boolean inside(int x, int y, int w, int h, double mx, double my) { return mx >= x && mx < x + w && my >= y && my < y + h; } @Override @@ -1389,13 +2413,29 @@ public final class ComputerScreen extends Screen { private boolean terminalFocused; private String textPath = "/documents/untitled.txt"; private String textContent = ""; + private int textCursor; + private int textScroll; private boolean textDirty; private boolean textFocused; private boolean textListing; + private int textPickerScroll; private boolean textRenaming; + private boolean textSaveAs; + private String textSaveAsPendingPath = ""; + private String textMovePendingPath = ""; + private boolean textJustSavedAs; + private boolean textDeleteConfirm; private String textRename = ""; private ResourceLocation archiveEntryId; private int archiveScroll; + private String archiveSearch = ""; + private boolean archiveSearchFocused; + private int fileExplorerScroll; + private boolean fileExplorerDeleteConfirm; + private boolean fileExplorerCreatingDirectory; + private boolean fileExplorerMoving; + private int archiveDetailScroll; + private int archiveDetailMaxScroll; private int archiveMouseX; private int archiveMouseY; private int mouseX; @@ -1408,6 +2448,7 @@ public final class ComputerScreen extends Screen { private String antmailUsername = ""; private String antmailStatus = ""; private boolean antmailRegistrationPending; + private int antmailRefreshTicks; private boolean antmailFocused; private String antmailMode = "inbox"; private String antmailRecipient = ""; @@ -1416,8 +2457,14 @@ public final class ComputerScreen extends Screen { private int antmailField; private boolean antmailSent; private int antmailMessageIndex = -1; + private int antmailPage; private boolean antmailAttachText; private boolean antmailAttachPaint; + private String antmailTextPath = ""; + private String antmailPaintPath = ""; + private UUID antmailDraftId; + private boolean antmailDraftLoaded; + private boolean antmailPickingAttachment; private String fileExplorerDirectory = "/"; private String fileExplorerSelected = ""; private String fileExplorerRename = ""; @@ -1426,6 +2473,11 @@ public final class ComputerScreen extends Screen { private List wallpapers = List.of(ComputerDesktopState.DEFAULT_WALLPAPER.toString()); private boolean desktopRequested; private int bootTicks = -1; + private String basiliskResponse = ""; + private boolean basiliskStateRequested; + private String antmanResponse = ""; + private boolean antmanStateRequested; + private boolean blockleStateRequested; } private static final class Window { @@ -1440,6 +2492,7 @@ public final class ComputerScreen extends Screen { private boolean minimized; private boolean maximized; private boolean gameOpen; + private String gameId = "basilisk"; private Window(String type, String title, int x, int y) { this.type = type; this.title = title; this.x = x; this.y = y; } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/computer/ComputerFileSystem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/computer/ComputerFileSystem.java index 4a5a0b04..3cc24eba 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/computer/ComputerFileSystem.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/computer/ComputerFileSystem.java @@ -80,7 +80,7 @@ public final class ComputerFileSystem { if (!validation.successful()) return validation; ComputerFile current = nodes.get(normalized); if (current == null) return Result.failure("not_found"); - if (current.type() != ComputerFile.Type.TEXT) return Result.failure("not_text"); + if (current.type() != ComputerFile.Type.TEXT && current.type() != ComputerFile.Type.IMAGE) return Result.failure("not_file"); int replacement = totalBytes - current.contents().length() + contents.length(); if (replacement > MAX_TOTAL_SIZE) return Result.failure("storage_limit"); nodes.put(normalized, ComputerFile.text(normalized, contents)); @@ -102,8 +102,29 @@ public final class ComputerFileSystem { int slash = to.lastIndexOf('/'); if (slash > 0 && !nodesDirectory(to.substring(0, slash))) return Result.failure("missing_directory"); if (file.type() == ComputerFile.Type.DIRECTORY && to.startsWith(from + "/")) return Result.failure("invalid_path"); - nodes.remove(from); - nodes.put(to, file.type() == ComputerFile.Type.DIRECTORY ? ComputerFile.directory(to) : ComputerFile.text(to, file.contents())); + if (file.type() == ComputerFile.Type.DIRECTORY) { + List descendants = nodes.keySet().stream() + .filter(path -> path.startsWith(from + "/")) + .toList(); + for (String descendant : descendants) { + String movedPath = to + descendant.substring(from.length()); + if (nodes.containsKey(movedPath)) return Result.failure("already_exists"); + } + Map moved = new LinkedHashMap<>(); + moved.put(to, ComputerFile.directory(to)); + for (String descendant : descendants) { + ComputerFile child = nodes.get(descendant); + String movedPath = to + descendant.substring(from.length()); + moved.put(movedPath, child.type() == ComputerFile.Type.DIRECTORY + ? ComputerFile.directory(movedPath) + : ComputerFile.text(movedPath, child.contents())); + } + nodes.keySet().removeIf(path -> path.equals(from) || path.startsWith(from + "/")); + nodes.putAll(moved); + } else { + nodes.remove(from); + nodes.put(to, ComputerFile.text(to, file.contents())); + } return Result.ok(); } @@ -141,7 +162,7 @@ public final class ComputerFileSystem { CompoundTag stored = new CompoundTag(); stored.putString(PATH_TAG, file.path()); stored.putString(TYPE_TAG, file.type().name()); - if (file.type() == ComputerFile.Type.TEXT) stored.putString(CONTENTS_TAG, file.contents()); + if (file.type() == ComputerFile.Type.TEXT || file.type() == ComputerFile.Type.IMAGE) stored.putString(CONTENTS_TAG, file.contents()); files.add(stored); } tag.put(FILES_TAG, files); @@ -157,10 +178,10 @@ public final class ComputerFileSystem { String type = stored.getString(TYPE_TAG); if ("DIRECTORY".equals(type)) { if (nodes.size() < MAX_NODES) nodes.put(path, ComputerFile.directory(path)); - } else if ("TEXT".equals(type)) { + } else if ("TEXT".equals(type) || "IMAGE".equals(type)) { String contents = stored.getString(CONTENTS_TAG); if (contents.length() <= MAX_FILE_SIZE && nodes.size() < MAX_NODES && totalBytes + contents.length() <= MAX_TOTAL_SIZE) { - nodes.put(path, ComputerFile.text(path, contents)); + nodes.put(path, "IMAGE".equals(type) ? ComputerFile.image(path, contents) : ComputerFile.text(path, contents)); totalBytes += contents.length(); } } @@ -192,7 +213,8 @@ public final class ComputerFileSystem { public record ComputerFile(String path, Type type, String contents) { public static ComputerFile directory(String path) { return new ComputerFile(path, Type.DIRECTORY, ""); } - public static ComputerFile text(String path, String contents) { return new ComputerFile(path, Type.TEXT, contents); } + public static ComputerFile text(String path, String contents) { return path.endsWith(".antpaint") ? image(path, contents) : new ComputerFile(path, Type.TEXT, contents); } + public static ComputerFile image(String path, String contents) { return new ComputerFile(path, Type.IMAGE, contents); } public enum Type { DIRECTORY, TEXT, IMAGE } } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/computer/blockle/BlockleAnswers.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/computer/blockle/BlockleAnswers.java new file mode 100644 index 00000000..c33e009a --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/computer/blockle/BlockleAnswers.java @@ -0,0 +1,80 @@ +package com.craisinlord.antarchy.content.computer.blockle; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.resources.ResourceLocation; + +import java.util.List; + +public final class BlockleAnswers { + public static final int VERSION = 1; + private static final int SALT = 0x4A17; + private static final List ANSWERS = List.of( + new Answer("anvil", id("anvil")), + new Answer("apple", id("apple")), + new Answer("arrow", id("arrow")), + new Answer("bread", id("bread")), + new Answer("brick", id("brick")), + new Answer("chain", id("chain")), + new Answer("chest", id("chest")), + new Answer("clock", id("clock")), + new Answer("cocoa", id("cocoa")), + new Answer("flint", id("flint")), + new Answer("glass", id("glass")), + new Answer("melon", id("melon")), + new Answer("paper", id("paper")), + new Answer("poppy", id("poppy")), + new Answer("sculk", id("sculk")), + new Answer("stone", id("stone")), + new Answer("stick", id("stick")), + new Answer("sugar", id("sugar")), + new Answer("torch", id("torch")), + new Answer("vault", id("vault")), + new Answer("wheat", id("wheat")), + new Answer("allay", id("allay_spawn_egg")), + new Answer("blaze", id("blaze_spawn_egg")), + new Answer("camel", id("camel_spawn_egg")), + new Answer("drown", id("drowned_spawn_egg")), + new Answer("ghast", id("ghast_spawn_egg")), + new Answer("horse", id("horse_spawn_egg")), + new Answer("llama", id("llama_spawn_egg")), + new Answer("panda", id("panda_spawn_egg")), + new Answer("sheep", id("sheep_spawn_egg")), + new Answer("slime", id("slime_spawn_egg")), + new Answer("squid", id("squid_spawn_egg")), + new Answer("stray", id("stray_spawn_egg")), + new Answer("witch", id("witch_spawn_egg")), + new Answer("lever", id("lever")), + new Answer("sword", id("iron_sword")), + new Answer("cheep", antarchy("cheep_spawn_egg")), + new Answer("jerry", antarchy("jerry_spawn_egg")), + new Answer("lucid", antarchy("lucid_spawn_egg")), + new Answer("queen", antarchy("queen_spawn_egg")), + new Answer("ichor", antarchy("ichor")), + new Answer("lotus", antarchy("lotus")), + new Answer("mucus", antarchy("mucus")), + new Answer("peach", antarchy("peach")) + ); + + private BlockleAnswers() { + } + + public static Answer answerForDay(long day) { + int index = (int) Math.floorMod(day + SALT, ANSWERS.size()); + return ANSWERS.get(index); + } + + public static int size() { + return ANSWERS.size(); + } + + public record Answer(String word, ResourceLocation itemId) { + } + + private static ResourceLocation id(String path) { + return ResourceLocation.withDefaultNamespace(path); + } + + private static ResourceLocation antarchy(String path) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/computer/blockle/BlockleDictionary.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/computer/blockle/BlockleDictionary.java new file mode 100644 index 00000000..bfc6af07 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/computer/blockle/BlockleDictionary.java @@ -0,0 +1,38 @@ +package com.craisinlord.antarchy.content.computer.blockle; + +import java.util.Collections; +import java.util.HashSet; +import java.util.Locale; +import java.util.Set; + +public final class BlockleDictionary { + private static final String[] CHUNKS = { + "rossa,jetty,wizzo,cuppa,cohoe,gurks,squad,beisa,shrug,fossa,fluyt,camus,speed,mamil,array,polio,barns,panes,souts,limas,fetch,queck,twink,graze,crock,almud,oohed,colog,wisht,beard,samel,ahind,brung,barca,mahal,jambe,plush,bruja,howre,middy,kabab,zeals,mazel,sputa,goory,pails,scogs,snool,poboy,doest,orixa,quipo,burbs,goads,blaud,flocs,harim,mamey,primp,lathy,lunes,staps,salad,agony,gusli,damps,tocks,hoick,marry,amply,glisk,pulis,apter,shell,capas,saunf,kutis,teggs,halsh,gamma,tardy,tease,towts,abuts,allee,chins,rolly,situs,bards,phyma,torrs,chace,bikky,stoor,quink,wedgy,vises,swore,upsee,gyves,heapy,gilas,gairs,yonic,wagon,rance,swail,laxed,panne,tabus,anomy,swarm,sword,pharm,penes,snoek,razet,nahal,kapus,lokey,gobos,jails,afars,nerka,cundy,snark,intra,bundh,tanga,baaed,solus,senor,umami,wared,sharp,pewed,tuktu,knowd,dawds,flurr,inert,taxus,ruana,sulci,jaded,othyl,redig,manky,ovism,matlo,cease,perae,sixes,pubco,yappy,famed,hexed,bawrs,decry,iddah,dixit,cased,rupia,toidy,hodad,yukes,gaffe,annoy,leugh,howay,pixel,linga,bayou,lurgy,lears,scrat,prize,homes,scroo,egest,mopus,verbs,maple,barfs,judge,salle,shine,zineb,flexo,gismo,rears,khads,begum,glade,imams,strad,venae,skene,moten,rugby,goels,khazi,belit,smolt,morin,ofays,sural,janny,short,swish,haets,owned,musky,gimps,nodes,lefty,furca,exome,dribs,gouks,smews,munts,chiro,learn,mocus,slime,mokis,nevis,arcus,prigs,rente,yfere,hiker,crame,irked,naira,stire,nagas,peisy,miser,vivda,dolie,weave,umbel,barmy,louns,didos,viold,fowth,guqin,kayos,finca,taths,eliad,dorts,cooey,dicty,bobak,lowse,tuile,laked,tarts,reefy,agama,thing,shore,nicks,nunny,akoya,snaws,writs,doubt,alive,beaut,ibrik,hemps,towed,crout,mogul,halid,pecky,eched,musit,couth,acron,dynes,gothy,bundy,seeps,deeps,plene,kukus,petre,putto,darls,warps,shoji,emoji,hiked,omits,rainy,fills,zines,bores,algor,oliva,midge,vizor,hafta,mulla,paled,kneed,fibre,ptish,redan,exode,zorro,droll,niece,segno,sceat,tunes,mompe,radon,akkas,jowly,gandy,medii,knelt,evoke,lowts,teaks,bucko,groks,leafy,meses,synes,laths,zedas,blank,japed,voled,toxic,reach,nazzy,pubsy,pedro,cucks,baith,magas,gompa,bilby,popes,hents,auras,giddy,tacos,onned,bowed,tsars,slogs,grind,morel,asada,weeke,winna,amman,sabji,runts,slops,tread,loofa,fever,glove,trist,creps,pheon,beres,corso,sofar,reeze,pisos,lames,treck,boabs,apply,grata,daals,soyas,amour,gerne,dudes,nifle,again,slurp,ulnar,ettin,noles,gobar,bohos,kawas,radgy,coati,scail,helot,motel,tides,coven,jasey,flown,urubu,kiddo,nrtya,pinna,curbs,botas,cycle,yugas,ugali,opter,laver,ousts,ootid,easel,lewis,renos,paned,cunit,muils,jehus,ebike,cotch,upper,theor,unais,idiot,manes,sawer,gazoo,edged,pikey,meech,adyts,boite,ixias,alios,padle,lotah,ragas,pudus,meare,graip,quack,noise,livre,pheme,chest,lined,azlon,waves,achoo,valve,mawks,hydro,muxed,etude,smith,mends,pisco,cilia,algos,nenes,karma,neant,visie,volar,burro,doeth,ecrus,dekes,seepy,facts,pours,gambo,mensa,swept,oafos,shock,roams,potts,piker,tings,fount,daunt,battu,licit,cider,fords,palms,wheep,copes,whelm,usnea,staid,dosai,patka,gamas,drome,licks,aldea,snowy,quods,waker,syphs,stumm,chore,silts,topee,zeins,likin,topic,waved,worse,anear,rayah,clipe,teloi,thesp,dusts,pooch,lunts,vinny,purda,zonda,widen,jonty,mosed,hussy,escar,appay,tonic,tavah,budos,cures,retia,maile,undee,quois,vangs,kytes,rends,taiga,abets,licht,potae,funks,repas,sicht,mobes,ceorl,torte,snarl,might,genas,washy,etats,boink,perog,coden,crown,moity,helos,murky,gaitt,dance,grail,deads,mivvy,fugio,ursid,burin,mimsy,lotus,frons,durst,devis,parae,mands,sarin,ethic,whirs,bribe,rorty,nymph,billy,gighe,kalif,breds,cutey,mincy,modoc,allin,yeses,dwalm,balms,yucca,cyder,loped,kagus,smeek,ylems,peags,comps,nobly,cocoa,pedon,hithe,etrog,dumps,magic,bendy,seely,spawn,oxids,hakus,grads,abacs,focus,hides,hayed,stony,slims,tonka,ident,tansu,whirr,glike,votes,sigri,cades,layed,snail,fykes,ousia,nevus,wings,toile,junta,chair,regia,lavvy,fatty,bippy,hoody,bunco,zupan,spend,phubs,sluse,dwine,piety,pyrus,mogue,glows,kutch,ngana,piton,spalt,qipao,pakka,redly,furzy,arhat,fumer,addin,cardy,zooea,clegs,dhals,deshi,meany,lenos,cines,sneap,busti,belts,weans,globe,decad,tinks,bally,yokes,onsen,lover,iddat,terry,pogey,planh,lotte,clies,femes,deedy,acnes,rubli,lolos,rapes,manse,wiped,sabha,gamer,afear,adraw,outta,slaps,tarka,goyle,tomia,misdo,sayee,popsy,watch,riped,baths,tails,dinna,conin,bunya,skool,khors,hulks,lacet,lazes,seams,slyly,joins,doats,proke,kingy,ranny,raker,swoun,gular,sedum,opera,perns,redia,tekke,appel,waist,bolds,steer,podgy,humfs,stagy,opgaf,skeos,swerf,rhyta,pians,ulans,diver,penny,nanua,onlap,loyal,bohea,lirks,senti,pleon,daman,syned,mools,baked,rungs,brace,melba,sotto,dealt,bikes,fecit,flyer,sidhe,rengs,alkyd,veney,strag,apode,aigas,torts,sooth,stean,algin,gummy,nduja,ratan,durum,acies,unios,punts,filos,blype,molal,tiara,ratal,lowen,dawts,iddut,indew,surfs,brims,abaci,troke,mimed,rosha,elate,tilak,cycas,ornis,jives,mercy,dimes,cries,affix,ought,ansas,besti,romer,gisms,which,logon,weels,lefts,grove,hunky,peter,sorex,onely,hinny,folie,brose,gadjo,waste,clash,baloi,fiats,laigh,sills,hocus,pensy,oulks,druid,tiddy,filar,oxmen,spume,barms,herby,spazz,snits,sings,turds,stive,sesey,reiks,botew,macas,cloak,locum,pards,fovea,grots,yeesh,waler,nuddy,wudus,beare,caved,unsay,tecum,mythi,luces,ronne,gelds,fieri,hyena,dunno,sculp,brock,nitto,geeks,tirrs,dores,ering,limpa,metic,abers,begun,gimpy,posca,stoln,tuple,ramus,mahem,expos,hence,anted,fubsy,quibs,chimo,ferns,fosse,scowl,avers,hurry,gyred,mesem,grand,fauts,adapt,tapus,ruach,jeune,glume,fiqhs,hundo,cough,seism,ninja,cross,suete,lotas,bonds,jugum,brays,oldly,bangs,gunge,dense,imido,elops,gundi,rolls,tayra,nabby,hypha,ribas,tarzy,wazoo,styes,rayas,mayst,skier,slump,riles,mudar,powan,seirs,rares,fanal,abura,yabba,aguti,heaty,pirls,toned,units,nival,powny,rybat,poult,rawks,meums,sober,boers,ghast,grapy,moton,acker,rohes,pilch,snarf,wexes,aspic,tassa,hiois,cloys,ratio,siped,amice,patia,gawky,craws,bunas,kuzus,detag,teaed,orped,smerk,gyron,hasks,netts,niffs,hoped,bokos,risen,zanze,gripy,hecht,duple,crate,mahrs,colas,solar,edema,tulsi,couch,hasta,eques,doper,lokes,flout,frize,thewy,tzars,blows,scrip,arced,sixty,izars,biome,kikes,verst,trifa,gyppo,onium,sowfs,croft,tanhs,canso,labra,bords,lilos,stich,hangi,arars,hules,bocca,bidis,weeps,nevel,camis,irate,rasam,barby,camps,nomos,adieu,furze,assot,hamed,sprit,mingi,elbow,kriol,fawns,gurry,rudds,noels,sears,skyey,seter,shoud,entre,inkle,canty,jello,conex,ioras,onery,brios,tsuba,kotos,anile,queyu,redon,wrick,veins,blite,bares,jived,amber,napes,ewest,thorn,matra,lethe,makes,azyme,caxon,raird,unket,unagi,dexie,chose,alick,roopy,buchu,loran,pulps,pasag,oints,rites,kivas,farce,gares,ranns,aygre,topos,samen,indie,rarer,alkyl,suras,commo,lynes,warby,abbes,tases,nobby,ilial,scats,pauls,bergs,brond,aerie,dross,cutin,peare,barge,pogos,scrap,ninny,stela,fides,calla,pyxed,lough,scrag,panni,shrub,aimer,skyed,tries,soily,hijab,cuber,guans,supra,rhies,kecks,spado,smelt,wheat,siris,apsos,fleur,pight,fyces,spurs,pelfs,anent,knive,tawse,advew,crool,dwang,crank,scalp,pince,fraps,opine,natya,fired,chela,yarta,sower,avast,swots,lobos,board,foehn,citer,ovolo,saros,tawai,speer,relay,retry,spane,felix,simps,gavot,meint,vizir,faxes,spite,bates,modge,track,afros,resay,daubs,imaum,hilar,peril,calps,wavey,goave,benni,pobby,patte,heils,amort,sight,roads,bider,leech,sippy,futon,owrie,regie,gamin,grimy,polys,jiffy,wadge,climb,chief,playa,miltz,selle,bialy,zinke,could,gobis,roady,pimps,genin,pecke,ardeb,xylan,piley,comer,bimbo,cared,husks,sirup,bidet,drape,flail,exeat,borak,zilla,pells,grith,lanky,gynae,byssi,incus,socks,vaper,fohns,punny,telos,hapas,their,runny,zonal,class,cymol,squab,pygmy,nonet,choko,nudie,volve,viffs,gowfs,chuff,loper,parer,bings,pogue,known,sooms,nunus,kedge,cutes,gazed,steam,zoris,ulnae,nicer,vives,poggy,kiter,cowps,ponzu,ephod,windy,testa,envoi,jerid,gloze,estop,coals,runed,plups,click,wraps,wiggy,radge,chout,altar,debur,swoop,setal,scent,pearl,hakea,omdda,wyles,flung,kerbs,nonis,benes,matsu,flisk,swaps,derny,slunk,yacka,twirp,virus,mecha,frena,donny,gears,ulpan,riems,prana,retip,speck,whang,boron,quell,snips,fonts,kangs,rafik,awarn,pukes,elpee,skuas,banes,flack,blash,eager,ariel,skers,pious,unman,bindi,baels,horns,lexes,kyang,voces,fruit,iotas,serrs,borks,nandu,tenth,quoif,toyos,merls,campo,smogs,drama,outdo,fanga,woods,yarco,snaky,fader,fends,soger,oxers,beedi,usage,lends,stews,prawn,tauld,blurs,yirth,kiosk,greps,spack,paoli,raids,musar,gloam,noria,sulus,elain,ankle,biffo,scuft,nurds,haulm,ayahs,begin,laxer,debut,rasps,cardi,tozes,sonsy,accoy,loser,shive,werfs,artly,kynds,heals,rince,arpen,saber,talcy,slang,mecum,apert,flies,skins,lozen,revel,poopa,butut,idola,khoum,kipas,sensa,poles,domic,yorks,towsy,enzym,musth,uhlan,crime,gulls,hammy,yrneh,ovule,abode,wifes,zamak,payed,ferny,chefs,embox,gloms,orate,mrads,tufty,blawn,loued,owari,liana,lacka,fuses,jenny,grege,scuta,gents,unlet,seaze,rabis,fuzes,kaika,banya,refed,ankhs,wolly,riced,rouen,rimes,phony,boule,ninon,epoxy,islet,redry,bosks,gadge,biffy,shire,defog,kurta,kandy,gogos,waift,coves,cions,takky,shiai,pavid,taker,exits,rolfs,ourey,glugs,poesy,urate,wexed,fonio,crems,nitro,bubba,blind,dempt,dowly,drove,snift,acres,pasch,woads,aband,caulk,taxer,marsh,cavas,foamy,murex,spins,gomer,telex,krona,apron,pacey,scamp,dawks,maces,roily,herds,omdah,clogs,roneo,uncus,abash,laura,kawau,laldy,dault,rosco,centu,metho,lymph,donsy,parte,never,outre,calfs,acros,malam,wrath,togue,wools,organ,walla,merge,fizzy,hevel,nawal,uraos,tossy,ivory,soddy,finis,spule,gooks,todos,phots,blobs,nancy,flans,rayle,tinas,kanzu,pross,peeky,mizen,nills,vomit,ingle,taper,basks,delos,pipit,coqui,vitex,nikau,skiey,betid,whelk,pinds,skank,deash,kaies,chevy,sirra,cupel,muvva,tamer,absit,mutha,piano,squid,marah,moups,volet,coram,faver,wooly,fifty,pombe,airer,spout,pussy,gimme,zoeal,frorn,phene,mulga,miaou,quasi,sokah,vests,doble,romal,mappy,obols,posed,ooses,stere,decan,fauna,nates,payee,jasps,doily,peent,gibli,nasal,orgic,towie,roaky,surra,study,kanes,brere,fikes,untax,becks,fleam,torta,fluty,buteo,pecia,goold,nurse,rebab,vouch,mimer,allyl,house,idols,fells,wombs,cysts,osetr,lurch,coude,narks,pargo,spick,gungy,ixtle,jawns,lolls,limbs,thagi,clued,nouls,milos,goats,mailo,thins,porge,mukti,ajwan,norks,gulph,grabs,okehs,avyze,delly,heuch,baron,phare,wires,rakis,celts,coder,pitch,doree,temed,parra,waken,suing,cirri,bulbs,jokol,melts,metro,iroko,ashen,gawps,pavon,prees,piezo,loden,acorn,ohone,bemix,soils,guffs,mandy,chuse,sneak,googs,quaws,skeev,noncy,shart,jibed,rumpo,quina,bourd,minse,watap,shook,ewers,newbs,ghoul,horsy,edger,klang,raffy,spore,moror,veeps,mamma,shoyu,obese,stash,karai,iambi,shiny,danse,korai,sdein,favor,deres,lotsa,ouped,khana,brees,crude,wasts,nomes,degas,woold,eiked,hajes,snowk,bitts,criss,gonof,hajis,apayd,prost,rauns,cuter,rived,tusky,veggo,lexis,fling,naunt,woven,hippo,pelts,uredo,brith,eilds,bhava,loids,turnt,fluor,lyard,belon,sahab,smite,yacca,palls,shets,preve,dilli,vairy,cowan,lithe,field,klick,fayre,snabs,papaw,goaft,missy,spaza,sissy,cloam,wilis,abris,sayas,blonx,wrast,knaur,sadly,fasti,discs,turns,qursh,baize,buret,puffs,albee,redes,boats,bubbe,stewy,couta,sunns,raiks,dojos,swopt,dream,yuzus,ratel,ferer,gnats,imbos,roops,selfs,salas,skegg,phasm,cuifs,juste,gifts,siler,easle,salto,tendu,vleis,quids,rando,gudes,mesel,wigan,manto,nioza,dairy,quais,spirt,siles,kreep,picks,boeps,peins,tears,tuart,akoia,zowie,maven,howso,budas,daily,tamis,yakka,groin,vexed,tegus,makai,title,sefer,lumpy,daker,snake,afrit,zigan,stipa,anana,vocab,naved,froyo,pilar,admit,bowie,idiom,drawl,burls,lance,cruse,seats,kelps,blaer,chive,neume,thuja,muggs,nason,snags,toras,bitty,redid,relet,skirl,bevue,bocci,dench,seedy,eyots,velar,pikes,neefs,cuing,recep,plats,yarer,porks,rudes,savor,guars,hazel,chizz,geist,rotis,basta,untag,needy,picky,raxes,moran,yamen,paren,goves,echos,homos,texts,pegos,reens,nelia,dbags,augen,eorls,hinge,chirp,allot,tubar,ouzel,dales,murgi,kidge,mizzy,tepoy,marae,hoofs,tophi,phase,cacky,lichi,shyer,bihon,filon,eagle,twank,trior,elute,pelog,relax,darts,fraus,deere,turbo,fains,moers,feeze,croci,steal,modem,genio,drily,today,rebuy,grows,tangy,quonk,disme,taata,bwana,snipy,fusts,glues,tiers,herps,immit,benny,anoas,doors,apgar,bourn,ebank,hallo,hulls,fendy,queek,hoops,haute,sward,peage,sheva,ketas,rumes,agers,meads,aspie,mimeo,tunds,hoise,mease,pridy,boral,stedd,areal,dowed,mutes,mylar,slosh,idled,spugs,azury,puddy,kaing,twiny,krewe,freon,mangs,crass,orris,tokos,clefs,oggin,bhoot,hynde,verra,igloo,qajaq,betas,lises,pappy,focal,picas,soles,ainga,ouzos,hoach,adawn,glugg,basha,narky,linny,shaya,trayf,moped,eases,laird,beady,juris,agism,means,vogie,cedes,bunko,naric,peart,query,leare,carby,indol,debye,byked,laarf,kofta,kapas,olios,roufs,louie,plews,spawl,darzi,quoll,celeb,convo,store,skarn,veges,shade,nabes,pirre,bluey,break,ryper,faery,hoods,amies,heats,umbre,quiet,gleed,wanks,gurls,nikah,tazze,korun,towze,blams,falls,wairs,wilga,kwela,aapas,navvy,sapor,rotan,saker,leger,xeric,cyano,garre,tomes,judgy,nains,timon,bevan,duals,urged,azole,doxes,flabs,favas,viver,larga,manus,touze,stars,knobs,yowie,jibes,avion,froze,tenes,nexus,obole,coomy,looks,waltz,smoke,dregs,ledge,kayle,coups,chart,lytes,madam,kalas,benty,rafts,vinca,wiles,bilbo,chark,ceder,tents,virgo,bisks,mines,buhls,mavis,yolky,keaki,sirih,fiefs,dikes,dunce,meves,ketes,hefty,zooey,crits,wived,bogle,cawks,chavs,duomi,tewel,mesyl,balmy,hyleg,acari,feats,meake,ignis,gongs,karts,dents,haffs,sakes,horny,adrad,rebud,yayas,shier,unmew,plasm,loast,pucka,pivot,works,skees,paler,knish,nigga,madar,wakfs,ruche,todde,saury,rough,knops,aking,yills,cymae,brent,umpty,mells,marua,impro,howdy,woopy,aswim,brank,pinko,ginny,vowel,reems,eider,hyped,jeers,since,kacha,whios,naris,aurum,awake,fully,rathe,scops,arvee,wrong,rompy,swine,rames,gimel,mange,wifty,levin,chafe,wenny,queys,tokay,tardo,polar,pends,ashes,mopes,visne,lased,erose,colts,raper,diram,gyrus,jakie,vutty,capes,numen,extra,jowed,cosed,agars,pique,talar,bedad,mandi,unkut,dulls,sloot,bawls,sowne,pleno,rebit,strep,besot,boons,sewed,latah,repro,boohs,flaps,girrs,vesta,hyens,anyon,bodge,modom,yurts,exile,adret,noyed,dyads,longe,tride,trads,goffs,wheys,shojo,ayaya,risks,repot,dwaum,akara,quank,shale,kiefs,clock,nerks,calmy,bobac,pouty,jinne,antic,angel,whams,tater,spods,veery,heame,unmet,ephah,tonal,goner,pauas,ruvid,maist,erupt,amore,sicko,felly,jimpy,crome,sises,honey,vacay,rents,fenks,hosey,puffy,askar,patee,downy,aphid,donko,vampy,rains,craps,amahs,crave,bossa,accha,deely,hoons,rizas,prads,crows,casus,grego,kufis,defis,plebs,bayts,fogou,bloom,tiars,agons,hovel,roker,codex,yajna,kinos,tiyin,salse,reorg,stows,sposh,ender,rheme,tirls,fidge,kicks,hapax,frier,barny,blurt,foram,cowls,korma,spark,edges,neums,tewit,capax,huias,terts,piney,padam,miais,donor,brick,plaza,pulao,guard,kinda,squat,yesks,ecard,frits,soman,asway,majas,pupas,zaman,duroy,civie,seton,amene,stymy,subas,awari,axone,gabby,flary,twals,squiz,duads,soupy,dunsh,ploot", + "puttu,anlas,torch,homed,serow,blogs,agist,tanka,prima,vobla,flosh,tamas,raver,vegas,roves,ommel,godet,sujee,cerne,halon,axils,eaten,dorms,chiva,sonne,kings,royst,album,groof,buddy,dinic,erhus,quoit,vitta,coxib,tithi,bemad,gouts,chiru,wodgy,gucks,ricin,liman,owner,spoil,trews,gawds,ownio,grams,vaxes,trigs,leets,queme,laxly,dhoni,sider,tabls,spuer,cored,merit,whews,treif,elfed,corgi,newsy,idyls,prays,wight,garri,chado,nonno,glazy,tenge,paves,plink,naffs,nonas,pipid,maiks,smees,sudds,plump,cered,moons,tarse,bewet,abaca,saved,scrab,byded,malic,sadhu,karos,trans,pokie,douce,elegy,conto,obeys,nilas,merry,fixer,escot,poise,soyuz,raise,pashm,rorts,bongo,atuas,asker,azuki,falsy,cubeb,aquas,wolfs,annul,luged,smugs,draft,lited,pichi,weils,grate,whins,sieve,boked,pollo,blunk,esker,eyres,padas,ileac,lawny,cymas,gutsy,bombs,zawns,crier,acers,guppy,lusty,dated,ranke,rusty,omdeh,tamal,remap,wersh,torcs,proas,dholl,enarm,loled,whear,cunei,coset,rafty,javel,fifes,grice,apish,idant,locie,hillo,slaws,cents,plain,volta,gundy,rines,keros,condo,asana,spink,psion,yawns,coyer,thews,carls,odyle,chals,darks,fates,pongs,hoyed,halal,sorgo,icons,bafta,blate,pares,rowel,helps,vakas,thali,llano,wamus,dozes,moble,myxos,yearn,ragga,lilty,unpay,niger,slank,bifid,gaums,laces,bekah,fient,nowds,vitro,shyly,helve,murrs,firry,mairs,lindy,tutti,karee,mobos,labis,pluke,insee,basin,winch,about,tizes,genes,probe,umiac,spaer,moots,sewen,grued,shist,perks,tolus,afire,pomas,mapou,gulag,ariki,jupes,false,nelly,gites,burry,sends,canes,bever,knawe,wonga,limen,pungo,staig,twerk,thumb,resid,copay,strew,oomph,saggy,kaids,ruers,naves,virls,sever,pupus,ettle,tipup,ollas,wally,bully,swang,doser,urent,pocan,spile,occur,risus,makaf,sabot,yamun,matai,durzi,vouge,macka,grrrl,avels,sorts,glide,menes,crane,azine,nosed,xoana,uteri,obeli,trots,simba,wirer,party,potai,reges,gombo,grume,hawed,wagyu,upbow,mares,nused,synod,hemic,twerp,tryma,teeny,uveal,crept,hyphy,perst,lords,began,thrum,nocks,ornee,krais,iglus,sloes,apols,cyclo,backy,richt,moist,droid,stand,bonie,fetus,teras,blare,napoo,diced,malts,shend,boars,charm,mayos,suets,antsy,breve,pinas,sprug,recit,halts,dater,mogos,afoam,ploce,inula,setae,raddy,lawns,genip,xrays,raked,maxim,reeaf,swale,wills,midis,scire,stonn,kinks,zeros,vatas,dogie,serry,pepsi,viand,acene,aloft,beals,kaneh,yirks,piled,bajra,lesos,renin,bonus,wauff,crink,lyses,knack,recon,canns,devel,spayd,throb,gaper,arise,moder,bluid,berko,agile,kamas,assai,slits,matte,spads,stool,ashet,uraei,pulls,firms,moule,rober,bydes,modii,ealed,tache,bebop,swapt,guava,curly,solon,argue,covet,skoal,mosso,haded,shorl,doups,hives,bulls,truce,katal,thugs,arles,drown,skags,babel,revet,novel,alays,codas,rache,punji,douks,potsy,diols,amnic,evict,bauds,hosta,dowie,wizen,micks,showy,zoeae,toxin,noded,bleat,kiaat,toyed,azurn,pupae,grees,oopak,yahoo,wists,ovoli,pines,foams,neves,puris,serve,lovie,ysame,womas,relos,sepia,trade,butes,micra,weise,recut,riser,mbari,dower,sakai,octas,danny,divot,cooly,scapi,salsa,exuls,scudi,leges,visit,farle,crest,faced,bukes,mouth,basse,basts,alkin,mausy,forks,dosha,reely,junks,cubed,plots,drent,curfs,goban,snide,taros,funts,niffy,vairs,noggy,toges,lever,egers,rokos,inrun,platy,antre,sabal,cocco,pouce,fugis,ranes,obang,thrip,thoft,baste,stats,momes,ocote,gloop,admin,oozle,slips,boord,hilus,smarm,aloha,natak,knubs,avert,dowak,bruck,bison,onkus,libor,gives,hardy,greet,craft,narra,tetri,ample,awave,thane,hales,acara,braks,mowra,lassy,kerma,shlep,words,raths,paans,aftos,along,fresh,negro,nuked,gated,manis,exons,poeps,joual,milko,azide,poake,mises,culet,pized,dykon,crunk,whose,bogus,moved,gyppy,oscar,lisps,danda,misch,ngwee,ryoti,swayl,snoke,awork,sopra,alley,kideo,crema,spaed,mired,idees,cuffs,baned,styre,poire,lacky,akita,clime,curst,wades,savvy,musks,stell,satis,wussy,zings,ernes,cluck,susus,beach,saola,rifte,tabun,crons,infer,sypes,build,unfed,pomps,mohur,hoser,autos,unset,neath,macte,whist,acrid,ecads,mamba,chocs,smush,cytes,thanx,rings,vinos,woful,awash,bayer,boody,alans,birzz,campy,retch,motus,taish,scots,panim,ethyl,knurs,coots,dacks,munge,ungag,eland,equip,elite,unlay,nonyl,rouky,varve,milts,soare,gecko,filly,jills,sakti,scrob,trope,seral,atocs,sarvo,nonic,masse,picra,dhaba,sensi,fiber,darns,bouge,rayls,tints,phuts,choil,vivre,osone,kemps,holds,bends,datil,hoten,slums,amrit,gouge,pikis,eensy,clans,dough,scads,blame,ghyll,bliss,tumps,budes,senza,gyres,verte,fluff,dhaks,huzzy,omber,piony,leams,amove,unbar,porus,ooaas,janty,leear,trull,droil,nitta,savey,qaids,caphs,brawn,wokka,mumph,ratas,hexer,lucid,oobit,pleat,holks,youks,dashi,leaps,kills,skein,shoat,hurra,juves,strow,shalt,lollo,duxes,chias,tined,plead,pricy,vanes,hazes,remen,rushy,abyss,vares,gally,dizen,wedge,kanga,haham,nuque,spurn,until,laree,midst,naker,mened,karsy,masks,pucer,goors,knoop,ticky,sargo,split,skeen,stood,togae,slush,prise,eales,eater,glaur,prexy,raffs,wekas,snout,court,ileus,palsy,sevir,rynds,ducal,ovels,juice,plets,woofy,panty,talak,vinas,bapus,weber,olein,gamed,tolan,cadee,houff,bizes,hoove,dared,poufs,kudus,urial,hikoi,soave,fices,ramie,tammy,raree,igapo,setts,tarsi,muled,chimb,emmas,acute,umrah,yield,mirex,grift,yabas,kiley,reran,festy,pinga,seare,melam,undue,signa,limbi,persp,cramp,mikos,veers,mooli,sacks,sturt,chunk,plaas,stoke,lowly,turps,congo,poled,chaya,yeads,gucky,tacit,borde,alula,negri,deers,tucks,elemi,aways,beths,ofuro,dahls,morra,abear,slays,pongy,purpy,dobla,bleak,gebur,oojah,pandy,unold,wheen,glees,ensew,herye,nodum,floor,volti,bedew,aulas,abate,sorns,pelta,naams,dooms,izard,clung,gorsy,tagua,lurve,hejra,mpret,appam,dures,emyds,lemur,haafs,gaita,sowse,gamut,sloth,lower,azoth,terra,holts,tabor,shams,highs,spied,ragis,brogs,liger,welch,oxbow,treat,bagie,oslin,rutin,pirog,husos,plans,celli,hinky,modin,siker,lader,rajas,taroc,debel,glads,sacra,azure,paddy,refel,sanad,crein,bizzo,drool,lubra,spans,gutta,whiny,joram,afara,jivey,dowel,pizza,goomy,manta,qubit,tided,fiest,ollav,slink,whizz,hadst,corse,aloos,coted,tamin,avise,ctene,sides,stowp,waits,goved,downs,rikwa,decim,peepy,rozet,dyked,aport,therm,botel,whity,cache,scrod,raped,poori,braai,helio,flank,arter,santo,lipos,lapas,bossy,osmol,sumis,turms,corno,bibbs,thrid,spahi,cause,taiko,allay,timbo,knead,pyxie,terza,noops,murls,pilau,shahs,recce,prems,gable,trout,glode,litas,skugs,fagot,cesti,ninta,aurae,wurst,pooed,yelts,divas,moody,ticks,ulnad,boldo,pervs,dishy,corda,racks,baddy,prest,kylix,zowee,cueca,imino,drays,moron,quins,damns,bloat,jebel,jeton,pukus,lying,latke,wasps,snugs,hards,hobos,dight,lairs,eards,ngapi,stele,bivvy,smits,akene,epees,begot,curdy,kibbi,bolix,machs,spots,scurs,bower,peris,otaku,ahead,amari,donga,gager,riots,dited,flote,dants,spree,hogen,phlox,roted,coyly,meaty,hudud,lowns,hived,cukes,fidus,sease,yakow,manny,tatie,jewel,moral,reest,goafs,axile,ploys,cacao,sunks,thuya,newie,nasho,trite,smily,leuds,brill,omnes,bodoh,sloid,jaaps,spier,creds,skios,toper,tubae,globs,hevea,fedai,oread,tophs,karoo,abius,nerfs,emirs,pocky,moyls,chars,allod,bravo,paper,loppy,poupt,blade,agape,dingy,mirin,hefts,royne,groms,mante,czars,yeahs,comal,eathe,galvo,nexts,heron,favus,tombs,brogh,sulfo,mothy,roved,jetes,rudie,azoic,dalek,hoord,sunts,creek,ongon,totem,walis,holms,datto,slake,ataxy,aimag,yokeg,ajuga,magna,firns,heths,noias,arils,cooed,mawky,lemma,jisms,swink,renga,babes,hylas,griff,lutes,tummy,speug,crabs,lappy,brust,occam,erode,filmi,chaat,burgh,hoaed,barky,yucas,miasm,ragus,kebab,swees,loirs,latte,jihad,glair,scall,nukes,lumps,croon,acing,blets,carny,yoppo,mudra,yells,jocos,cajon,cecal,salps,mozed,foyer,first,symar,kukri,kendo,drock,fella,longs,toffy,laser,derby,sneer,zinky,abrin,namma,wilts,facta,balas,tuner,maneb,zamac,zooty,nuses,drams,jomon,avgas,metta,ohelo,jacky,henry,bowrs,thymi,pshaw,pungs,vrows,seamy,filii,color,schul,amoks,summa,sluts,trats,garbe,nomoi,nouja,clits,droke,trues,mados,ortho,zendo,oonts,wocks,royet,india,swire,mapau,lemon,axite,chyle,dopey,pissy,doted,jujus,nowts,nivas,waged,quirk,stogy,easer,solan,limby,ablow,kombu,carat,ditsy,sidas,gurge,leggy,forky,bides,quila,machi,oleum,elvan,crore,crazy,saags,rases,scifi,goest,execs,peaks,bruts,wanze,doris,orang,fawny,myopy,jambs,putos,chons,draco,bowls,avoid,filed,lowed,qualy,mbars,takes,muffy,skols,petty,yates,nuffs,drier,snees,bhais,chirr,lauch,sugan,meith,spike,poind,coact,qorma,aghas,nohow,mafts,boaks,seifs,riffy,mixup,volks,iodin,rerig,bezil,hayer,sumos,habus,curls,botte,blood,mobby,louts,odors,swizz,dados,borna,snibs,attic,hocks,salic,fugly,curli,rythe,looms,shags,acyls,wrens,preke,swede,objet,bijou,ohmic,bosun,prism,cribo,robur,stick,noble,polje,infix,wanky,lests,bacha,cadet,bicep,stria,honer,stoae,cruet,ribby,swobs,stiff,fence,prime,fitte,snubs,goops,maths,basij,pumps,chapt,esnes,bhang,isbas,hejab,acred,paven,bhels,polos,vezir,lidar,folks,lunks,snort,feese,choky,busky,caple,kikay,seils,viols,ymolt,flaws,doxie,fuzee,wisha,plack,ceros,oxeas,scams,theic,limey,taped,rafiq,seeks,teens,heids,imped,grigs,cozen,bardy,physa,funda,rasse,dadas,opsat,coved,coney,wrack,kayak,unity,ryiji,paste,crisp,abamp,gibed,cosie,kazis,dolma,shots,dowdy,sumph,terek,cyber,hooly,saned,neoza,abhor,aduki,pizes,boche,bails,model,voxes,abaft,thank,ripps,slued,pored,cromb,boors,retox,cooty,palps,nogal,womby,tuffs,swelt,keeks,sikes,kilim,noint,nasus,vexil,milpa,lapel,nifes,gnarl,knick,plaig,sanes,bolus,msasa,cakes,warks,chuck,nidus,snied,chums,kitul,fours,motey,girds,mvule,skoff,quash,effed,cushy,hexad,meres,trios,ardri,cooms,muser,copen,plonk,lingy,awato,neuks,mites,spent,cabob,niopo,ables,rotls,njirl,boyar,ikons,halos,toils,kipes,puces,thick,unhip,halma,durgy,ficos,bevel,takis,slues,teins,teiid,laide,nuder,fujis,daraf,turrs,geasa,bidri,lepta,genty,sugos,skink,crust,badly,crocs,tarty,bions,mourn,chawl,bodle,deign,pulut,braws,gabba,dreer,chord,prase,tempo,stans,goths,sidle,zoism,thrae,faded,yawps,toast,sybbe,kibbe,mocks,sorry,nrtta,larch,rarks,champ,kevil,tween,rifle,vaded,joked,hacky,minas,evets,golps,reedy,selfy,naive,flunk,spasm,brack,gulas,slaid,luffa,boson,rolag,mikes,fried,skeed,sorda,shope,evohe,mikan,cubby,euros,faute,broke,panko,baozi,felts,qilas,syrah,bolar,exalt,monks,toshy,zebec,macaw,whata,tweed,tharm,sooky,fiscs,eskar,moust,viced,piggy,troad,jazzy,lacis,gnars,tawer,choon,puton,winze,hails,wadds,delfs,mensh,zebub,goody,bahus,adlib,lurry,pibal,skelm,dript,peres,fillo,spide,arena,papal,yoofs,ouphe,crowd,ochry,pokes,confs,poset,adios,gists,rawin,stank,thebe,media,bhats,peise,decor,stopt,koppa,glogg,zakat,egret,amine,speel,oaken,noove,yukky,fecht,nyala,otter,axion,hends,waldo,zinco,elder,gaffs,paean,skats,denar,intel,enrol,gator,capon,folds,blest,panna,yojan,neigh,culty,zatis,xolos,gazon,lifts,jirds,shtar,aggag,talma,khats,fumes,poohy,kulas,dungs,weete,speos,dodgy,koura,meffs,noyes,sysop,jatos,bandh,dewed,beany,jalop,flews,antes,pesto,boyla,later,niche,mesia,vakil,aflaj,elogy,wreck,moria,chava,sleep,kites,nanty,temps,mutas,brigs,flock,femmy,poufy,arets,armil,bayle,forel,fleet,kelts,poach,forum,sughs,phial,makar,dural,sumps,slews,munis,wazir,gowks,sable,coral,joyed,balun,jammy,shuns,argle,lochs,herse,dwile,ixora,meins,puzel,gammy,allus,mauri,feist,unred,hubby,pinks,fubby,ergot,scatt,resam,doorn,torii,plues,novum,pinny,verse,zonks,etics,orfes,excel,trona,bland,frust,anole,ennog,foins,praty,splog,toddy,hymns,sowps,balus,lucky,spilt,tacts,comic,caese,unbag,lauds,gashy,vibey,laers,gnawn,pinta,mokus,opihi,rewin,melik,mokey,galia,bykes,oakum,arose,meted,skill,throe,baals,parts,biach,bouse,jings,jatha,myall,coupe,adead,paris,guess,alien,clean,klieg,poppy,praps,skelf,helms,ikats,minge,tenon,speir,biped,dorad,skews,atoke,migod,asper,taste,curch,jumar,riche,asked,xysti,tante,epics,caret,momma,letch,meous,scarf,enema,silos,spect,rhine,hotis,paysd,cesse,tangi,thale,crowl,doner,tegua,punky,derpy,kwirl,pugil,zoomy,ommin,feuar,jemmy,bough,ronte,braxy,gopak,bungs,alure,teddy,orant,denis,djins,nimby,chiks,taira,moyas,quayd,opery,width,vinic,loath,rased,ejido,loopy,crith,boggy,sizer,polis,dosas,codes,yonny,phage,depth,hijra,hazle,furry,spray,ingot,pyoid,umras,bobas,diene,koras,poena,munia,natto,lorel,sleet,janns,sowce,dormy,avian,hyrax,mails,beige,aiyee,milch,ramet,ammos,eloin,piing,sweer,apery,poete,putti,ennui,wifts,rills,sprag,raggy,clips,smize,roset,artal,sager,boles,knoll,plies,breme,lyted,oucht,awned,burks,repun,reata,palsa,momie,odals,cages,adunc,logia,sture,shall,picon,pouke,crash,shiur,barbe,blins,garis,udyog,houfs,ogres,gunny,adzes,burfi,thegn,nacre,sengi,posey,dingo,miaow,shtup,baggy,drice,deeds,heads,roosa,acock,brass,zeera,kants,zinos,sabir,dizzy,quean,atimy,loved,altho,roany,amigo,snies,atony,aloud,kogal,daces,scorp,korus,reman,spivs,muter,feely,trant,quoad,maggs,zingy,spets,covin,arias,cloth,gowan,gypos,urite,cutch,ergon,stour,orlon,steil,wacky,dowry,metre,typic,slung,omuls,ojime,calls,impel,trams,vulgo,shout,icing,whorl,pekid,sprat,cubit,claes,scull,sorer,paise,suent,garbo,molds,arbas,skeds,litem,sepal,voema,vells,sweep,cuish,sieth,baton,varna,etage,ither,vuggs,jodel,hoved,belah,bodes,gaunt,caird,yobby,hawms,kapow,stept,jinns,aunty,pudge,scape,alibi,butch,meals,pepon,palmy,lawsy,fabby,amole,forme,repps,arish,brake,glaik,flane,wifey,hypes,gleek,biris,nonny,poked,parve,ovate,hazed,zhuzh,ether,kidel,aleck,casky,pyric,akses,kibla,volae,mezes,takht,erica,vexes,rages,loses,gilts,murly,mania,ordie,grubs,kiasu,malar,bhuts,batik,tousy,specs,naily,netta,inner,laith,fundi,throw,plute,cubes,trone,knout,sculs,meteg,fakie,inset,koran,paisa,cruor,readd,shaul,fromm,boteh,quarl,flava,deoch,jehad,mollo,bazas,meril,naieo,angle,lamia,agood,iched,corns,lotos,ankus,sweir,snobs,swabs,vetch,quawk,flirt,trapo,enurn,outro,dears,craze,nomic,lubed,gouch,mvula,zebus,culls,tolts,warts,podos,dewax,peavy,keema,assed,emure,conne,aunts,durns,sulls,stroy,brujo,etuis,error,incut,tacho,toyer,mesto,sated,aides,handy,incle,fiend,sices,hyles,fands,costa,sowls,usurp,salat,geste,lomes,dolts,aging,ahold,darre,agila,swigs,armer,beton,senex,pzazz,ahole,cower,feral,bible,sunna,powre,fisho,softy,stylo,swarf,cogie,garde,thirl,ayins,super,madre,maran,yodhs,adept,dalis,crams,reink,haith,geyan,sinhs,tooms,lumbi,puker,haled,veena,turks,ahull,luter,argil,ergos,asses,pattu,howff,pacta,sitka,sheep,creed,fairy,droob,wries,tolas,frizz,mohar,aitus,hists,jolty,roleo,ditzy,poynt,scray,minke,bombo,macon,waxer,grave,rands,poulp,unkid,tasso,doddy,simas,cissy,primy,awkin,samek,dunks,sylis,cutis,rager,aedes,plays,scobe,unhat,geeps,level,oshac,opals,trail,yeast,linum,thete,gypsy,liang,laker,pance,bated,fouat,wooed,haros,vital,rinks,roers,zulus,mumps,noahs,covey,saics,safer,roost,flims,murks,salve,hooch,trabs,bambi,swiss,fazed,pudsy,odoom,avens,mitas,girlf,naifs,tikka,rojak,nighs,bulks,wines,pinky,rumal,afore,whats,goris,piuma,whigs,incas,paspy,girly,phynx,mundu,brosy,kents,runes,vraic,unban,balti,jocks,spars,moker,legno,haunt,ihram,hooha,titre,booay,rosal,basal,boyos,razer,maror,kokam,lense,tsked,duets,salpa,dryly,grats,mured,aches,assez,joint,tasty,wahey,irony,zoppo,plods,gooly,palki,budge,janky,thymy,pints,cyans,warbs,treyf,reses,phooh", + "built,mawrs,lagar,marid,grebo,spare,pieta,noxal,abase,kinky,priss,hacek,vicar,marka,temse,serir,blaze,ngaka,heeds,belar,qophs,noted,brews,hafts,ratti,firma,carbo,wrawl,adrip,mvuli,voici,fetor,recks,perne,dowls,mutic,fetts,wetly,exine,kauru,bubby,stope,haram,herry,dacha,saice,theow,awing,frugs,swoln,odium,parti,gaily,dwelt,money,laned,murry,skits,rowme,tatou,frere,ukase,dolci,rhomb,tynes,corer,nerdy,peats,fondu,okole,close,afoul,swole,scena,talaq,paces,senas,faiks,pneus,rubai,jibba,would,patly,fused,crena,doley,mesca,eches,serai,tinge,saran,glout,solei,tinny,noter,upful,venue,natch,panic,curia,yomps,diode,binks,stear,bring,pekau,peace,humps,ixnay,maunt,balot,cosec,purao,armed,liars,hifis,docks,wuxia,phooo,russe,gutty,urena,aidas,vials,posse,chaos,admen,pilum,gunks,wowed,inurn,trugo,skulk,tutee,wrier,pyxes,sonce,tsubo,floss,algid,allen,nolos,stoss,weamb,aspro,mucho,snebs,talcs,pekes,waxen,marls,clavi,titin,swing,uncut,entia,hwyls,vanga,sayne,based,knurr,raiah,pings,vegan,mound,menta,plowt,gaids,pipal,deets,caaed,sayed,hates,debes,masts,resus,unarm,chays,rowns,babus,lapse,alter,bruin,furol,loord,swits,majoe,faves,albas,lysis,shark,peach,vades,owlet,brods,lyams,rater,moves,mynas,arris,hiems,quags,roans,reamy,tanti,heady,pirns,casts,dress,enews,amido,kinin,adits,puffa,pucks,shuts,mural,mered,whens,gowls,darer,helix,mirly,womyn,raggs,wilja,monie,neram,nyams,slams,dirke,tehrs,skens,tavas,table,horal,oupas,navar,hippy,rawly,diets,surgy,lysol,seths,panny,arums,mulls,mazut,drony,virga,ratha,lunet,rowet,dancy,defat,splat,roger,nucha,plout,mungs,sloan,usque,sakia,guido,hissy,jigot,tyran,drapy,tight,puses,droop,pepla,deter,gleby,primo,haves,pinda,rieve,zabra,lieus,parky,fanum,yoyos,styte,faros,heald,gases,samas,scapa,teary,ginge,lossy,embed,genal,burps,fitly,mythy,purge,bauks,kwink,bawty,ferox,bazar,almah,hains,peaky,plops,noris,brink,kirns,sordo,boomy,dufus,nards,galea,corps,speil,deary,flyby,kerky,unlid,drums,undos,cools,conge,dodos,pavis,patas,pands,tipis,puree,statu,rotte,beads,evert,teals,vined,hamba,gopik,crans,wiled,weedy,pacha,parge,perdu,vaunt,pequi,piccy,leany,marly,whiff,neive,homie,rests,aware,riads,somas,lytta,dorps,idyll,mulsh,pence,vatus,zoril,semes,argot,drouk,linac,cloke,nimbi,anger,mojos,bozos,choof,avale,viewy,mazas,canon,abune,south,slobs,moler,ships,souls,boded,waspy,nowls,trice,nisse,teats,caned,biner,tronc,cutty,truss,diyas,merse,waffs,koala,agate,ezine,nudes,rigmo,evhoe,slick,wadas,olate,oleic,woons,typey,oncer,gumma,sweet,heavy,psych,khyal,cates,brens,socle,katis,frisk,withy,sauba,heyed,rosti,feuds,niced,kyles,rawns,gadje,jabot,crise,tacet,lines,esses,grope,swash,ngati,wised,garda,locks,gelid,horst,attas,sycon,telia,algal,frais,fango,yetis,marcs,addio,anils,bunce,wirra,gnarr,ludes,glary,coxed,beaky,ylids,added,patta,veles,curie,unces,ledum,sansa,adust,aurei,spitz,logie,unget,thema,yowls,coifs,surge,softa,gyoza,putas,blaes,blaws,celly,butte,stamp,grain,bursa,ligge,sagos,sheal,atrip,emeer,degus,stush,kynde,cured,pfftt,mills,minxy,tykes,atmos,suite,ramis,merks,coyau,twats,bussu,mooth,terfs,fests,enmew,nould,hoosh,nylon,alefs,pikas,zoons,busks,qapik,remou,cawed,pally,muntu,teugh,slimy,bassi,almes,outgo,batta,ranks,lanks,roguy,zippy,foids,welks,rowan,psias,yowes,allow,rants,faker,dells,rumbo,titir,combi,winds,rubby,deify,quena,crape,jokey,wootz,wites,koses,nizam,pratt,pukka,fixes,bobby,ruffs,magot,argal,ammas,scoog,aweel,gilia,payer,touns,rupee,marge,colle,pates,doles,rappe,lakhs,carve,grana,wytes,macks,nerve,mitry,crips,bewig,melic,andic,bands,mugil,quoin,pools,omiai,drips,eared,yippy,kexes,carol,lores,bises,obias,thurl,tajes,emmew,chiko,orbit,jimmy,vexer,begob,askos,liwaa,burgs,demob,imbed,lahal,chats,laves,cohos,jowar,nurdy,iodic,whoso,broth,soops,tried,crins,jaune,coarb,cocas,mugho,smoko,scaup,feart,skets,hebes,doums,korat,briki,soars,oaths,abeys,brome,appro,tarot,lymes,quich,amend,doers,duded,hushy,grogs,cleik,audit,kutai,skyre,milky,peens,cooze,rusks,meiko,boost,booze,jeans,neeps,kobos,dazes,bayes,spims,pegma,maddy,bwazi,xylic,agaty,rawdy,soree,dinge,assam,stoic,nyaff,rowed,ledes,polls,olive,strim,taras,piner,steno,seems,notum,cripe,stoai,nsima,buyer,gluey,poohs,hovea,jocky,kinas,fangs,yawed,tungs,ephas,povos,scram,camos,ympes,spacy,nucin,looed,ambit,stile,palay,roche,rices,diota,gatch,vasty,otium,flory,crues,petri,sycee,nippy,ludic,sayid,welke,links,uptie,clone,ploat,tiyns,humic,atopy,basan,boney,drill,oaten,mucro,seals,cavil,rimer,odyls,naked,maqam,kreng,sards,simis,geoid,butoh,aboma,oyers,sheas,laich,imine,ficus,ducky,mobey,eaves,warez,hiper,laund,punim,jouks,route,roods,wushu,mokos,ovens,ebons,paths,eidos,glute,abies,tiles,unsew,bidon,teams,muffs,reave,vigil,dutch,japes,spear,dules,caneh,lakin,arnut,fados,tonus,flied,serge,rives,scorn,orbat,aline,genre,hiant,quorl,cream,pebas,coala,prodd,lamps,wroth,shill,penal,spine,citee,milds,choir,bilat,betty,culpa,dilly,perfs,malik,kondo,surds,slice,ablet,omasa,hanch,vilde,fayne,tense,stare,disas,dowds,braza,dooks,verts,intro,mirah,karks,nones,podal,laids,delis,atman,karzy,debar,prion,favel,dawen,larns,cheep,oiled,meers,tatts,oicks,hound,edits,gills,wicky,rokes,geits,yaffs,xylol,topis,bloke,jiber,brunt,holly,blips,parmo,rowdy,aider,syker,mbira,fifth,power,waifs,theta,nudzh,arked,surat,flash,offed,empty,finds,demos,riels,fewer,jirga,scaly,prows,kithe,mambu,ponts,recto,mysid,usher,mogas,joule,bract,stots,pwned,ambos,yampa,ralph,dozer,candy,emics,jollo,carvy,axmen,grits,inlay,cadis,anode,oculi,dervs,kanas,doing,biker,north,purin,pakay,squee,tumid,yerba,unlit,fogos,cells,mauzy,cruck,salts,parma,marra,watts,bajri,takas,wiver,haats,stalk,gunas,alata,balds,wispy,teils,habit,gripe,peles,evite,sophs,permy,skeer,emyde,redux,cohen,women,hazan,meris,staph,buran,jones,hutch,yuppy,hosel,gordo,mocha,suits,miked,ultra,sipes,pinup,daube,filer,recco,ovals,loral,furor,count,hoagy,joist,lemel,shwas,melty,momme,scaur,gynie,mambo,twigs,equid,foxie,stone,trunk,mbret,breys,farer,hated,titup,sleds,abbey,glamp,bludy,divey,rhyne,maned,ohias,brail,visto,fulls,gonad,sprad,noyau,aroha,darga,motto,venti,urned,lives,niess,nests,mecks,yacht,kibei,wrest,bosey,buzzy,ganks,laugh,abuna,wheel,kepis,begat,senes,sedan,monpe,ghusl,gamps,coost,plume,dopas,anise,stude,huhus,kamik,unsod,aizle,beats,phyle,nyuse,remix,rewon,glift,hikes,chirm,parks,brook,bitos,pushy,erevs,pound,morgy,sonly,mogar,hymen,luger,relit,quran,glost,refan,darcy,stump,melas,needs,lamas,misgo,weens,bunde,ratch,myops,creep,alder,koaps,music,druxy,moony,stets,tiges,troll,fleck,outed,abcee,butyl,goles,wirri,rowts,ryots,begad,gipsy,yeves,spice,scraw,teers,mirls,stoas,clues,kaval,drack,flick,jukes,mathe,risky,jacal,malva,clout,weeds,natis,koine,fluid,funny,penks,lathe,deoxy,sakis,misal,skive,nicht,stown,grasp,zuppa,flats,padre,hewer,vomer,carom,stern,nonce,forte,trims,roach,bagsy,toaze,spiks,darbs,nicey,sigil,brusk,abler,seels,tyers,shawn,origo,reset,mecca,tubas,pluot,fatwa,derro,world,gesse,minus,guano,nanti,gyral,slebs,commy,gains,potch,tryps,seine,times,bomoh,overt,trash,puter,decay,igged,bucku,biota,porta,lusks,skerm,glitz,stays,whoot,lings,balut,burly,hoing,dogan,vacui,snirt,named,leavy,scoot,overs,eyrie,maral,ronuk,vibes,tatty,loxes,gugas,scuts,ikans,tondo,faena,zhush,elmen,nisus,fable,pasar,ratos,joust,galax,adats,camel,glims,wulls,tryst,crees,kojis,varec,cuzes,cusso,rahui,meiny,strum,bells,reups,nabks,pipis,wagga,quays,softs,tabes,barer,yelks,gnaws,smalm,cheek,ocrea,bigae,remex,mixer,grund,vughy,foray,sheng,ringe,wests,defer,enfix,elfin,lysed,cauld,screw,mungy,cowal,trove,virge,outen,chowk,alane,geyer,lyric,khans,mersk,nidor,tuned,fraim,mtepe,winns,savin,gauge,plows,phese,losen,wired,puers,scree,rutty,apnea,syces,kilty,liven,galut,puhas,rymme,waive,poods,broch,goals,culms,nazes,eldin,scant,matin,biddy,sugar,timed,varix,shott,nants,wroot,sylph,purga,debts,tenet,moory,docos,culex,septa,piler,jagas,gnome,harns,elver,ordos,cribs,enows,tyres,bolks,mulch,sabes,capri,binky,vants,skell,foals,yarfa,pigly,numbs,trags,honky,fists,unked,keens,kiers,lokum,nemas,eking,shelf,fifer,ponce,albid,ready,mesne,lumas,neaps,plate,pimas,cobia,molos,spews,vires,chota,kahal,cinct,balky,nebby,suers,telic,axing,lyssa,fiver,morse,bilge,swith,ology,patch,belay,leady,ulmos,tuyer,quoth,weary,planc,costs,malmy,bizzy,ronts,grypt,sarir,visas,odahs,rearm,crias,snood,pekin,curds,vauts,quaff,crawl,smash,sabra,agami,bball,bunns,finer,updry,ouija,vlogs,rhyme,small,imbar,chase,beaty,scrow,chine,dills,cheer,sauls,carps,kaiks,chide,faffs,besom,canid,harms,razai,pitot,peeoy,ropey,agast,auges,powis,agoge,gages,sinks,molys,union,nawab,guest,kudos,crudy,hears,biled,hants,jours,flees,emeus,leves,bones,glory,skogs,annum,anker,cauks,coign,goons,paals,gorse,raita,tripy,tizzy,sprew,rural,rejas,scote,deaws,spiff,shied,semen,exult,bluet,spams,cloff,heast,touzy,mirvs,heels,pinge,anele,stout,gerle,boras,porch,diwan,swath,derns,heeze,sours,skyte,netas,speak,tapes,gobbe,bingy,cleat,boyau,nakas,tetes,yarak,frise,yrapt,brine,forge,knars,virid,bumph,pules,soggy,shlub,purer,foxed,atter,rakes,unpen,saine,lipin,tagma,eying,horks,drone,desks,dadah,luser,sicky,platt,larum,puzta,clear,crake,trike,burra,kotch,tiler,ombre,aeros,leone,mingy,vasal,henna,hover,gleds,reist,skirt,unify,likes,tuans,owres,cooks,parry,humph,pozzy,ngram,feign,mauls,gybed,mutum,ouens,minks,sites,loche,nervy,hoary,houts,sopor,sucre,gerbe,pardi,fetes,toker,devon,trems,dwell,unapt,golfs,aures,wauls,bagel,prent,curns,bairn,slubb,hythe,blocs,tways,dolia,choom,vawte,volts,limax,kulan,sanga,milia,pales,reeve,bolas,fjord,nexum,minny,talus,aloof,waded,gusts,bongs,crook,yewen,briny,arefy,pronk,dried,wanty,babul,taals,nonna,twyer,orval,caffe,glops,trine,padis,exert,hoxed,ruing,runos,uster,gotta,areas,genny,tripe,cedar,reine,etyma,scaws,mbila,voids,endow,cnida,rakia,capex,wiels,kelly,hamel,basil,woady,lapin,looey,quist,clamp,urman,proll,harem,nanny,sangh,teles,rodes,lieve,terms,hemes,repat,axles,finks,nixed,hoggs,daggy,sekts,civet,fayer,prate,aping,holon,litre,triff,morae,kacks,quill,rotty,spiel,dekko,whelp,humpy,barro,kauri,oflag,tippy,yarrs,laddy,voars,imids,ogles,routh,cigar,royal,yummy,olpae,jilts,fedex,ducat,arett,zetas,shchi,young,bitey,lisle,slade,tacks,tepee,gusle,ogees,bobos,obiit,qanat,barfy,phwat,wried,gynos,mogra,apsis,tongs,tsadi,turfs,sayer,voice,cogue,grade,toady,eosin,child,vivos,balon,janes,vault,carns,genua,eruvs,telly,pogge,feaze,hench,hamal,skaws,rumba,elven,zoaea,vison,flawn,batch,fanes,nuevo,yirds,envoy,foggy,herms,shand,yclad,maray,sauts,awful,tuxes,ascon,gouty,craal,nemic,afion,tabla,chess,khaki,tyees,jinks,slive,waugh,losel,kippa,vrouw,peans,roked,redye,thyme,copra,proin,prore,sagum,feels,tires,rusky,premy,breed,pasty,sooks,robes,ayrie,conus,papad,shalm,tying,ruins,stede,pores,molle,cacti,natty,toeas,facet,braze,hasty,saree,genom,pynes,lusus,cense,yarto,month,lacks,fared,mabes,fifis,homas,scale,verso,wimpy,cuppy,howbe,haole,paras,clank,trugs,perry,scurf,paseo,fubar,medin,hawks,tubed,caner,bluer,meeds,preed,peels,hared,qualm,synds,salmi,towse,dargs,thana,marse,vrous,lengs,yokel,mzees,suses,torse,daint,dowse,kroon,babka,aweto,noire,lusts,credo,geeky,zanza,stink,ginzo,sotol,lists,maria,jheel,bared,buffe,vinyl,zygal,chain,zills,gapos,sluff,daisy,arbor,rishi,hided,sehri,sagar,hurls,oddly,chips,sicks,zanja,serks,offer,kreen,agora,lazzo,bight,skips,berms,neral,baiza,sting,jarls,proms,mudif,mujik,pined,heled,tushy,shiso,toque,mungi,gorps,punka,sined,bepat,ourie,laval,typos,goofy,yobbo,gumps,slaes,cling,fanon,mirky,rayon,zaide,pryan,ackee,facia,lardy,traps,scarp,renig,taxes,tifos,raddi,toing,wakes,diary,emove,agita,posts,chaps,spang,yocks,acmes,ficta,wases,sixmo,pucan,weald,zacks,earst,gorbs,choss,reais,mover,sythe,fatso,rayed,tarre,riley,vivas,glaze,volte,tosyl,pated,clift,wisps,skeef,crapy,duroc,kohls,sauce,agger,moans,ament,madge,jawan,facty,pacts,divvy,ogmic,stonk,sizes,kelty,poovy,twain,steps,almug,maumy,vills,bugle,invar,lezzy,firer,laevo,rapso,ugged,treen,lyres,vichy,cotan,sored,toles,awols,terfe,tally,coper,swell,parch,pilon,furls,apage,pongo,reird,kyloe,welly,frite,exams,tymps,scugs,gippo,titan,gorge,washi,beses,devot,birks,clews,yeuks,recta,tommy,theek,spred,drant,zilch,value,mosks,ploit,munga,apiol,neski,beaks,tenty,medic,domes,ducts,rakee,mochy,erbia,agued,alpha,nowed,angas,musca,resod,scend,vases,doses,wanes,voted,ycond,khirs,tanks,okrug,techs,mense,graff,soote,pilow,cusps,cholo,clubs,scuse,spean,chink,urnal,rabic,cheeb,tramp,lycra,puggy,uvula,rigor,shady,comas,banco,locky,belga,sabre,kokas,nerds,serac,ramin,orans,tirth,dolls,jougs,ticed,wanly,moldy,cords,kines,light,ketol,claut,iambs,rojis,crops,juror,phono,gooby,plesh,tozie,renew,shash,coppy,wordy,figgy,bitch,plexi,baker,eeven,evade,plaur,mondo,queue,noobs,ratoo,doves,mauvy,prahu,phizz,kulak,agrum,dying,unwet,maire,tupek,gorms,jiffs,coach,zibet,locis,bools,dicts,spoor,gaups,chaco,diddy,alang,araks,segos,gadso,dunam,zurfs,preem,hoiks,dynos,aumil,baile,havel,quipu,lassi,aroba,cheet,socia,rebop,loves,coapt,odist,cobby,abuse,raced,ruths,ounce,eigne,denim,doona,dukun,shred,nanos,jaggs,rohun,musee,bests,freed,cetes,jerks,fyrds,baloo,silex,tamed,carle,theca,cairn,silen,bunia,proul,fuzed,coaly,nubia,rurus,henny,levas,alike,cangs,woken,aggro,worts,mucid,greve,whore,notam,conns,rubes,maims,pilus,gonna,heedy,blook,deeve,purse,kitke,tulpa,isled,ileal,basho,hotty,sudor,nutso,gokes,courb,upjet,ended,biogs,refix,moles,aurar,pupil,soups,liard,dogey,masur,eaned,thump,flitt,shoer,rosts,gobbo,shins,plier,zuzim,atoll,scoug,wails,state,misty,eevns,adoze,jurel,wacko,syeds,kists,zesty,exfil,dupes,apers,doppe,yager,junto,adown,carte,proxy,yauds,duked,sonar,pomos,grise,tiefs,cedis,bason,ogler,donut,dotal,syren,mutis,fenis,fluke,quads,sheet,cameo,perai,pryer,ravey,trank,decyl,varda,yarra,comby,belee,koffs,tomos,jitty,cusum,polts,sculk,pewee,eclat,lande,sebum,neche,spale,grown,login,capul,weirs,slorm,poxes,seame,duels,kubie,shrew,alcid,pengo,moper,pedes,gelee,runic,shard,mures,curer,label,rauli,swaly,wents,ampul,braes,rinse,bhaji,piqui,ancle,oller,sensu,pumpy,riyal,toads,squaw,bezes,robin,teres,where,veils,zocco,mount,gaurs,prosy,sniff,zazen,fungi,remet,names,cried,spiny,ileum,scuba,azyms,banty,tubal,yaars,chica,ritzy,aptly,loupe,abnet,cobbs,erick,yince,sheds,debag,girth,esrog,mimis,puuko,whipt,mazac,shiva,malis,touks,deman,gussy,updos,fixed,ervil,mihis,perps,retie,wilco,aryls,mawed,brugh,pompa,hyoid,dools,inion,jakes,tawaf,noeme,hires,koori,soaks,ulema,pseud,raith,filks,pudgy,imshi,weems,maker,three,jutes,wined,teeth,phyla,norie,alamo,jeels,bored,lucks,sados,yacks,guyed,grunt,osmic,zoppa,warty,britt,hauls,pusle,kiaki,frate,motts,odour,buded,clots,pioys,mazer,tabos,haufs,cakey,biffs,bungy,riggs,maula,piece,aired,nappy,mazed,boutu,opens,whale,preys,biles,hyson,boxen,unwed,mauka,night,wages,purrs,cores,palas,delph,faire,rhone,mowas,probs,demot,marga,petit,imbue,weest,aboon,maare,sense,swims,sammy,jingo,rekey,bulky,wanta,youth,gloss,poots,thuds,perce,menil,ureic,vendu,cuvee,popos,butts,syrup,haems,ramal,barye,alcea,jaggy,cursi,spued,yogee,davit,facie,tones,hacks,witan,hokis,lowan", + "pahus,goldy,unbox,dowts,copse,snuck,haars,bello,nebek,slipt,tokes,hewgh,alose,bucks,paips,sewar,mieux,madal,ahint,plish,nudgy,tuque,inane,galas,neeld,urdee,amyls,keyed,laccy,slide,adoon,kaugh,naice,vamps,twier,glebe,borms,krunk,buaze,imari,sepad,vertu,giant,repos,courd,resin,flubs,unbid,felty,decaf,razoo,hibas,pouts,kliks,eyras,fogey,aleem,papey,fiers,motet,tulip,steek,scaff,queen,tango,reput,rorie,monas,ponks,deros,venal,piped,alaps,fitts,besee,fauld,moley,apods,circs,plook,asyla,waite,wound,laddu,tices,bleys,tuffe,kains,kunds,seeds,alala,mawns,neddy,mengs,ewhow,doucs,tools,wacks,kypes,bunjy,braid,spifs,wyled,choli,quint,panto,clown,cokey,syver,coths,yokul,vogue,olden,vardo,vibed,cires,fonds,adaws,amuse,sisal,phone,kwaai,bruhs,runty,wonks,psoas,alowe,knows,azido,raike,sidey,sades,tared,culch,poted,afoot,kerel,kakis,devos,metol,avize,saids,kilts,punas,copal,prial,angry,sooty,slane,quest,goopy,plore,dubby,himbo,dogal,appal,dorrs,cando,rewan,kagos,cloop,adays,gulet,porte,clept,haiks,miyas,yeard,mifty,oater,liner,manos,rower,shura,quirl,jafas,clack,pikel,menad,fluky,reans,enate,mates,abray,thans,kuyas,songy,incog,gauds,hokum,dogma,blend,areca,dirge,sarge,ryijy,latus,gambe,shack,renal,reuse,slish,pagan,stirp,kylie,calif,hands,kirks,docus,uveas,shaps,gonzo,mummy,thawt,actin,hoard,howls,bundt,blush,supes,crogs,seron,solve,chert,totty,aborn,vinho,agree,snush,danks,proud,racon,shaly,paged,pulse,shank,onset,spain,regex,ureas,orlop,mushy,cronk,latch,blive,honds,gamay,heath,arnis,purau,tofus,hinds,mewed,cowks,birls,goyim,stend,alant,nolle,fulth,tasar,luvvy,dives,lunge,snick,derth,cosey,disci,uncos,yukos,tansy,metal,barde,saucy,smear,frore,kneel,grama,crios,chedi,endue,bafts,ralli,smore,tenor,pawns,lodge,resol,caron,tiare,poove,undam,kohas,vapes,river,caffs,blahs,vapor,brach,retax,molls,beans,kempy,ceric,scody,ditty,porth,tarte,faqir,jagra,ogive,bezel,malae,tapis,acryl,dully,trave,clads,rhime,skirr,snoot,prowk,satai,embus,colza,affly,dashy,bugan,wahay,shent,hodja,valli,dauby,oracy,beano,corms,hukou,corni,laxes,noisy,shtum,canny,outer,flaff,fuels,sieur,rehab,gleet,disco,mammy,aevum,hiped,moors,agley,ebene,coady,rerun,tynde,fetwa,garba,troys,kapai,calix,dites,ments,praus,loofs,troth,abore,rimae,early,carrs,salet,miens,joeys,quirt,embar,coked,leirs,cozey,flask,benis,guise,patsy,kirri,brava,ridge,jotas,reaps,varus,twits,freak,chads,plaud,oskin,oiran,manks,adopt,triol,logan,decos,glams,sadhe,cirls,theme,siver,quats,mbube,drole,mhorr,garbs,quyte,kells,mitch,adage,ozeki,vrils,mohos,leeps,skivy,plaps,clied,saith,saiga,swain,klutz,varan,ahing,louse,clink,peery,burke,scold,kunas,forze,syboe,pagod,wicca,infos,guimp,kails,evils,hosed,vaned,charr,muras,matzo,draff,range,buffo,alist,epoch,roral,yucko,crack,filet,pouff,biggy,festa,moyle,ramee,bajan,margs,gored,copha,dangs,bardo,micas,hiree,vegie,beers,aalii,yoghs,navel,heare,fease,jorum,exeme,upped,nepit,cover,smack,poney,preif,cauls,gecks,burka,dates,bonce,ruffy,layer,arbah,mirkn,train,enact,fremd,drave,feare,erect,sweal,pring,batts,thees,nudge,antas,doved,pelsh,pigmy,muiry,flora,bonne,oping,nauch,pawaw,golly,muirs,minae,agloo,faked,jamon,bowne,souly,funsy,claro,whids,hubba,flong,snath,howes,lomas,quass,aboil,nabis,shako,shoos,pooks,huger,totes,glial,atigi,mirth,loans,fagin,phpht,china,toter,fleek,bocce,henge,sunis,nenta,booky,miles,steez,pions,rapin,wolve,popup,unode,gymps,stane,naids,pleas,orgia,dames,abjad,peece,lurgi,frill,gitch,feued,lowps,stong,price,holed,eaved,humas,dered,swags,imide,hydel,annus,trons,moppy,rello,bents,bubal,dinlo,kiwis,urine,namer,feens,idler,lanes,scrog,mased,hider,ruffe,fakey,zaris,perts,satyr,suped,ganch,tibia,ceded,rabbi,stuns,stoop,abysm,aulic,carpe,moste,signs,steak,mixes,panir,grids,saddy,chode,viola,gigue,xerox,mirid,manor,strut,curet,bonze,winks,morts,geals,amlas,stubs,kembo,subah,daled,hells,apres,lifer,jhils,kerry,gauss,dayal,films,kophs,suede,unlap,valid,wayed,mechs,picot,halva,funic,zexes,pitas,nondo,waddy,lobar,rowth,threw,efits,nosir,iller,dobes,kabar,toffs,rehem,reign,lenti,hucks,knock,lovey,lants,skies,grouf,smuts,rifts,mauve,retro,tikia,chomp,nazar,clonk,reget,ovoid,sechs,mukim,kyars,amaze,valor,woald,fisks,giber,cames,round,leese,pubic,barbs,issue,razor,myths,kranz,baaps,poxed,vadas,jowls,twill,frita,naiad,ureal,gusla,lipid,sojas,nempt,huers,puler,whoop,obied,litho,debus,panax,befog,kilig,nites,carex,logic,swage,frati,edict,dalle,iliad,boots,scour,bacon,tares,sexer,masha,monal,pappi,flume,abord,chivy,parol,neons,mucko,event,yapon,fusks,sownd,frows,paxes,whaur,skean,owing,gilet,coops,abbed,onlay,akees,zouks,biers,mooni,kafir,lysin,xviii,rusas,reeds,yohay,salon,hones,urupa,smirs,shirr,meter,agrin,paved,lipas,ensky,trust,gippy,enjoy,appuy,fitna,moues,waxes,koiwi,lungi,bunch,goier,frape,keirs,hertz,nairu,promo,sunup,refis,scudo,olent,bromo,soole,conch,tepid,menge,aught,yecch,burns,bogie,carpi,arete,braky,naled,boned,talon,gonia,deray,ceres,inker,ranga,panga,reune,slomo,trema,ycled,heder,narco,quake,mixie,belle,genro,hurty,smeke,gosse,moruk,fusee,epact,peeve,prams,seven,poops,scrum,oboli,chirl,await,tweer,exies,nokes,ollie,fonly,teels,ngege,lalls,casco,sigla,brier,toots,poofy,miche,jawed,roast,digit,gnows,pease,bogue,reams,yufts,pligs,upled,gryce,jesus,biont,easts,shads,umiak,smaik,irons,oozed,boxer,bento,cepes,etape,torah,darky,clams,alfas,guids,cibol,adder,crags,lawin,moths,lucre,raspy,diels,slurb,pooey,sprig,dover,spode,taser,tazza,undug,rakhi,kinds,pasha,dirts,chott,olpes,widow,speks,diane,goras,sents,salis,lodes,hudna,yorps,ponty,snots,fuffs,oueds,stint,conky,socas,crwth,wales,staff,bigot,thens,ocker,plash,kamis,maxed,deawy,zhomo,taxed,hohed,modal,auxin,nyung,blags,baulk,flype,pesch,monde,tower,deity,tifts,shorn,thack,mawla,yawny,haere,oners,muids,alumy,duces,baccy,samps,gants,bliny,monos,knave,kicky,sahib,kesar,hater,golem,churl,bolet,churn,lambs,vuggy,notes,gawks,borer,banky,amiss,oriel,nevvy,saner,conte,uncoy,bills,moray,cable,mucin,medle,blots,twirl,kench,liney,ditch,ombus,llama,manso,loops,hough,tomen,nooky,kraft,salep,kavas,hoogo,sairs,boxla,penna,maill,funis,coned,botos,ilium,oktas,bumpy,reifs,bevor,delts,ghees,hokes,seers,yuans,baser,sords,fundy,gubba,sants,weird,mango,poalo,tecta,bedye,murre,gobby,suave,praam,deevs,photy,modes,apeak,retam,wauks,oncus,fayed,lawer,fichu,squib,emerg,sadic,humor,pluty,emmet,yexes,wadis,fract,verre,revue,enols,rides,yapok,sidha,uptak,varia,rifty,knarl,plavs,unled,wafer,saugh,trooz,stale,cadie,raged,egads,zayde,stock,koros,ryals,nonda,jessy,layin,dopes,yarks,luges,ashed,pyxis,ondol,datal,foots,relie,brave,chana,poems,peaze,dumpy,heres,accas,runup,surly,olona,glace,putza,besit,hokey,dunch,ainee,glean,epena,zolle,cleep,synth,whets,bigos,aguey,jeons,cards,rists,etnas,barry,luxes,ronin,snars,whole,chalk,lilts,keeve,waned,ippon,redug,loipe,cotta,limns,perse,psora,clipt,jirre,chiti,mauts,konks,feers,pirri,sands,zappy,repel,rosit,putid,gales,jobes,souse,looky,jeera,verge,seppo,boffs,vacua,banjo,ayont,aegis,muses,gault,boeuf,shown,shuls,poler,knoud,paedo,ekdam,bouks,spoof,guyse,ousel,newer,bilal,moled,bolts,letty,rione,coats,aahed,steel,stein,birrs,vaped,hoves,taxis,tians,pallu,wipes,cleck,mirrs,valis,impot,males,ached,wroke,ports,pulks,lacey,illth,titar,biose,gadid,honks,plomb,puros,gyros,rhymy,biali,great,peaty,sizar,aceta,clems,cuddy,sithe,chelp,gerah,mysie,besat,sagas,nakfa,zarfs,cobza,fixit,pocho,maund,dalts,start,reoil,fiord,gotch,doled,lints,lifes,nurts,stain,villa,curat,diact,oribi,pouis,wuffs,leggo,nivel,narod,namus,munja,manul,fundo,thaws,plane,cocos,oumas,kheda,dryer,sells,jugal,razed,annal,peals,dumky,shiok,yapps,maced,unleg,queer,nacho,uplit,cater,pinon,quant,ridic,taupe,mihas,torus,savoy,sodas,realo,sials,gaddi,arsey,andro,aredd,poaka,blast,orcin,dirty,twine,loins,testy,inust,gater,raxed,sloyd,riant,litai,acidy,mudge,typed,styli,sokol,hangs,psoae,ladoo,glime,serre,sauna,tahrs,looie,cella,kaury,pyrex,vespa,pavie,claws,neato,fitch,email,emcee,kebob,loges,intis,fanos,warns,bawdy,belch,crone,amaro,skids,pyuff,sprod,luted,shule,lotic,doole,pleck,snead,makos,raine,maron,jeffs,mowed,yauld,evens,privy,pruno,daddy,dowar,akker,gulps,ummah,raphe,kasme,domed,meeja,flore,cital,glens,brawl,gliff,adman,pyral,tolls,ivies,veuve,manie,knurl,gamme,terns,cuffo,inked,sabed,paipe,palet,quire,powin,cills,fussy,goony,yites,alces,yogin,calks,tawie,roupy,serif,boogy,frabs,knags,alway,moner,chime,tappa,shogs,grone,omega,kisan,gests,eolid,baffy,zambo,abaht,hadal,ligne,orach,repla,huies,ranis,spald,stums,stags,godly,slack,fezes,bries,pekea,natal,gulfs,bints,noshi,white,meant,kight,reked,mousy,pawas,okras,spank,globy,saunt,kyudo,ridgy,vices,shove,spics,spiry,jests,progs,warre,rubel,footy,flags,agria,skyfs,laded,flota,stage,aspen,nares,yulan,kajal,ungot,frets,curvy,skofs,lurks,japan,pinto,winey,arras,opsin,kembs,lunas,atria,flowy,situp,tepas,katas,boysy,howks,hitch,jeely,predy,doric,liver,reffo,porin,fleer,coble,sibia,feces,resat,profs,grody,scags,hello,immew,fatal,ruban,sonse,queem,fires,botes,flegs,quino,sasin,hiply,berks,pinch,chirk,pawky,malls,fisty,mains,baldy,liter,genie,lobus,arval,mumbo,vodou,bowet,ricey,eppie,corny,fated,utero,goosy,belve,bream,ummas,jacet,demur,chara,turfy,stack,togas,mards,hongi,toise,kapha,crare,cadge,beefs,grosz,meuse,umber,moted,titty,hight,lemes,wheft,smout,furrs,yeven,glede,alvar,baiks,pants,capiz,uneth,stoma,nimps,renne,fazes,sexts,sayon,docht,nowty,piles,fuero,clomp,untie,vised,pyned,horah,tragu,tilly,waurs,morna,exite,ngoni,repay,mesas,mieve,leans,uhuru,linds,leman,starn,mulct,soled,anvil,giros,nulls,sonic,sweat,omlah,rivas,stall,circa,lynch,carap,cloye,pouch,doffs,woody,pomme,quiff,hoers,lated,wangs,neals,porno,rangs,meats,clach,peevo,roary,misos,towno,views,wides,sodic,atomy,grike,naped,sacre,trump,pilin,pudor,dicks,fetal,zaida,rumps,puked,hilch,lepid,maums,gasts,wrote,hepar,coure,oarer,ogham,refry,shewn,blubs,rozit,iodid,chook,aidos,slows,eiron,keyer,timer,tweak,vitas,varas,shuba,semis,gramp,ocher,scart,doabs,regle,hurts,musts,singe,reggo,pavin,stunk,peeks,sused,rubio,piper,bride,punce,feals,dwarf,nitre,eight,gript,dexes,altos,beaux,bundu,tates,fools,randy,locus,diana,bling,farcy,libel,amowt,staws,tutes,soots,trend,benet,soces,snack,ciels,brast,dotty,knees,wrist,borgo,ofter,nages,colic,bunds,waide,sucks,piths,bomor,thunk,quota,dwams,milks,femme,namad,bices,bothy,oxims,acerb,strop,innit,dicht,tyler,spica,octli,borne,upter,educe,labia,forms,hakas,agaze,hills,limma,culti,below,typto,blimp,halwa,chaap,caves,video,fakir,coeds,arroz,doxed,sneed,hesps,buffa,garni,dulce,perdy,rigid,retag,mesic,civil,trued,dices,peony,kiore,zikrs,bided,askoi,undid,homme,drail,duply,didie,earns,cocky,hoper,kedgy,cones,leuch,pervy,carob,reify,rosin,tombo,subha,rufus,yuked,panel,munds,liane,prole,sheel,aloed,aruhe,inapt,meths,arene,genet,sways,badam,chuts,liked,splay,aviso,pains,roric,shops,gauzy,useta,truer,duans,pirrs,frush,ponto,basis,hakes,mangi,oxine,greek,dumbo,brads,durry,foils,clast,laden,upend,aunes,scans,unpot,naggy,caums,blore,pipul,drats,poyou,strak,soyle,sater,lyart,pumas,rakus,waled,moana,moils,nooks,sixer,nappa,flops,worky,loads,truth,graal,ocean,fnarr,glias,hooks,mungo,pacay,brane,sawah,pooty,lappa,pelus,dappy,strig,bench,raves,mivey,flake,thars,wares,zoner,retem,slots,scope,moose,imply,ebena,hathi,derma,tanna,peize,crura,hogoh,mealy,mutts,amino,woofs,poopy,trods,snipe,raias,bowse,coded,rared,clops,datos,sukis,icily,teste,roars,inarm,morph,rummy,fowls,gesso,turme,yeuky,under,toity,twite,abaya,shakt,sevak,dawns,chics,tehee,aleye,kited,snods,tanas,toros,fares,souks,papri,mongs,damar,ideal,flits,front,spumy,canto,kokum,renks,aucht,eggar,abaka,paiks,junco,jubas,homey,pedis,crepy,biros,halse,jagir,tikas,harsh,immix,rille,horde,bowat,hayle,chola,pareo,swoll,hansa,deffo,unpeg,abeam,malms,cabal,ditto,murra,steen,dusky,dukas,ouphs,doits,sposo,grovy,ionic,woman,civic,unary,heave,omdas,colls,pursy,noule,bitte,nabob,vigia,yolps,snore,mulse,elope,hurst,maril,fatly,ranty,shtik,femic,linin,pithy,flite,zincs,nouns,yales,negus,talks,reeky,ascot,okapi,lenis,dowle,moras,dusks,fames,gravs,rewed,nieve,tauty,toted,brand,ammon,iches,kipsy,satay,boozy,murgh,dweeb,impis,rotto,lerps,molla,quart,rooky,sheer,calve,safes,cooch,sekos,pohed,stork,potto,oleos,yaass,addle,pieds,maedi,sophy,holme,resue,lagan,scrub,polks,bedel,verba,quips,coons,mezzo,bousy,hexyl,crush,mahwa,unfix,naval,imagy,rones,chufa,acted,hurds,mimic,merel,scuff,flyin,ossia,macer,fiked,balsa,palus,yirrs,shunt,mouch,sawed,clade,gaits,dusty,carbs,choke,mutti,wonts,gwine,brahs,tench,jucos,graft,masus,check,shear,eyrir,twins,bogan,shush,merch,caste,wises,sibyl,oaker,arsis,melos,regma,meloe,talas,leary,aglus,derig,foody,julia,sappy,jarul,apple,scars,agene,jolls,gaucy,still,fonda,paddo,holes,grues,aguna,shaka,krump,comet,plank,spell,cetyl,kaons,jelab,cists,tolar,limed,dryas,pizer,nabam,sucky,untin,unsee,blatt,purdy,slats,heugh,heard,forex,abram,racer,tinto,revie,scopa,lurex,junky,botts,spool,ydred,ottar,adult,theft,louma,steds,canti,gurns,human,lemme,greys,macle,teaze,roble,cides,gosht,eject,quops,enure,nougs,hests,pense,raser,reeks,cares,buggy,moais,plant,shoal,emacs,posol,venom,empts,binit,woops,crepe,trois,withs,expel,sorus,muton,kibes,thous,alloy,quark,yedes,froth,kazoo,ruchy,cerci,truck,spesh,exing,desse,imshy,share,nmoli,melon,carer,monic,ceiba,whups,tests,synch,orbed,pages,ethos,acold,arede,owled,sibbs,homer,aeger,poets,powlt,daine,taxor,neeze,saser,flaky,tachs,effer,vapid,moola,mussy,gasps,parcs,rebid,third,exurb,pipes,vinew,whims,temes,worry,epene,yelms,score,neafe,tempt,tomme,spues,woxen,rooks,matts,cebid,clepe,leper,khafs,veldt,stoup,versa,cheat,sains,barre,ester,socko,amide,hiver,voulu,noddy,loach,nided,befit,yeans,loafs,kieve,udder,snyes,kerne,argan,taxon,cloze,tyned,schif,baler,kvell,crypt,karns,leccy,kente,fuddy,blase,alims,pokit,noema,fasci,fishy,dreys,newed,lupin,riper,hause,nikab,seder,reech,soken,batty,deice,mutch,stivy,boong,phons,viper,largo,noses,fents,redub,pownd,cezve,bavin,skosh,kyrie,mused,unrig,wames,etens,deils,grebe,prims,pansy,usure,caids,tusks,skort,mitis,rukhs,shiel,dhikr,fleme,meism,arith,shite,taube,kievs,smorg,hongs,gayly,sewel,purre,knots,vagus,boult,acais,annas,thilk,feast,guyot,axons,nemns,hizen,satin,scoop,sitch,tapas,abeng,rimed,reney,quote,unsex,petto,maban,arpas,plunk,geats,agmas,wilds,whits,kindy,prief,trawl,meows,strae,aiyoh,dobro,dines,deuce,laten,idlis,clary,thots,zooms,leads,getas,emend,melds,preon,banak,fomes,unjam,cults,ekkas,bonny,sudsy,stilt,yagna,roues,pitsu,repeg,hobby,almas,kadis,mosto,unput,piked,aland,terai,rikka,crews,eerie,rocks,bimas,rinds,gavel,gleba,wigga,kolas,adorb,hairy,rougy,swile,dobby,stoat,sneds,ribes,ravin,rammy,leuco,vadge,ictic,drift,buhrs,krabs,bolls,vlast,loxed,pagri,mangy,whips,whomp,boxty,omovs,friar,pungy,manic,certy,bodgy,tuina,flour,denes,oxies,mahis,arson,geans,daurs,glued,boart,group,chubs,hoots,aleak,weize,duper,nexin,fuggy,bubus,lares,fives,fouls,amids,allan,lours,genii,birds,mapes,ginks,jiaos,paten,grrls,slove,tythe,roomy,paeon,quite,wasms,aggri,pried,vanda,rayne,nelis,buxom,muggy,exier,jembe", + "ooids,gully,ramen,suber,sutra,preak,drere,bowel,hedgy,deles,refer,tofts,milty,frosh,manas,octan,kerfs,enorm,rebel,guaco,nisei,pelma,nasis,goeth,oared,segar,aflow,skims,wited,sough,hokku,pardy,teems,michi,decks,twonk,fales,ideas,dirls,snive,clows,leses,wakas,wahoo,memic,eniac,sexor,kimbo,oases,derms,pulka,sutor,botch,unaus,vughs,resto,kimet,malwa,rioty,enemy,ruder,ahent,yoker,shmoe,grame,lytic,potty,odism,acini,mules,soler,antae,lound,nicky,brags,doeks,ulnas,dagga,cadre,coypu,cotts,galis,lowes,bezzy,skran,iliac,pases,halve,flesh,runer,wefts,rebbe,isnae,siroc,gules,clomb,amaut,newts,ladle,gibes,taggy,haply,kalpa,bilks,blown,yomim,attap,educt,ingan,linos,gooey,fibro,maise,ngoma,adzed,flawy,toran,jades,offal,twilt,wager,booby,koban,yules,irone,azygy,tryke,sweys,neist,nunks,rogue,riato,mulai,obeah,emule,mocos,girns,sorta,cooky,causa,ayelp,mitta,emote,pelau,thang,appui,momus,asity,taunt,damme,ulzie,suids,cymes,muzzy,anata,spyre,roate,boppy,kelep,pilaf,caver,pheer,derat,peeps,tania,murva,surer,yatra,kapur,udons,coate,thelf,robbo,chynd,noups,brize,texes,bosky,aargh,alert,shews,lirot,lofty,jolly,palea,geode,suety,ponga,fores,voila,beech,cumin,polyp,murid,laufs,alarm,tyros,ragee,berry,ytost,welts,tinct,cacks,snuff,ecigs,plein,reded,dived,kests,mucky,grays,berth,adore,raksi,whift,pirks,roven,syncs,nomad,medal,cerge,gruff,macho,rooty,yabby,linty,delft,dawah,resow,blink,salty,sowff,lweis,tufts,gipon,veale,tigon,jumps,crick,pacos,porae,doter,rewax,doofs,sarus,vales,douse,cheka,gores,crusy,weals,pause,cours,kakas,nixer,scran,cumec,metes,wifie,eleet,heart,coste,duped,aloin,drags,nouny,vacas,riffs,locos,botty,catch,burnt,belli,swack,thole,stimy,holos,tapet,recti,fasts,musty,keech,moult,hella,tends,rugas,reede,spyal,blitz,octad,fiery,using,robot,unsaw,lipes,methy,gived,faces,touse,bikie,stulm,palla,toled,whies,herls,write,kanat,perch,shirk,roofy,skeps,beamy,rully,swops,hauns,horse,giust,minis,sized,zizit,crump,hulas,haika,verve,mooch,velum,techy,fouds,manty,mesal,alkie,roons,capos,grump,nooit,afanc,packs,mores,ambry,rugal,parly,alifs,legge,wawls,nadir,tenny,erned,solde,yerks,eagly,abeer,reply,gybes,cabre,vifda,vivid,gyver,psoai,pacas,piums,emits,touts,jotun,regal,sheen,tesla,unmix,grace,peasy,sohur,ganja,pylon,sente,gumbo,gruel,tanty,edile,rhumb,tilde,slyer,lasts,carry,kaifs,leche,bunks,moats,woose,mists,nihil,buffy,cabby,sarod,quoys,sered,livid,attar,craig,chave,macro,blech,steik,umiaq,donee,yonks,nopal,tells,gluts,bdays,flics,metas,eagre,spoon,hogos,pinol,fezzy,doody,alaap,rugae,upsey,chyme,raile,urbia,booth,manga,preen,hilum,luffs,baits,raven,preux,gauze,galed,pungi,hedge,heirs,reive,indue,wyted,torsk,fuffy,filmy,carks,neosa,lownd,quaky,lofts,hemin,vodun,pared,kawed,gurly,horas,gelly,foyle,shawm,faine,ulcer,podex,ariot,krays,towny,frags,humid,mints,sifts,merer,inerm,exude,selva,aspis,cinqs,yogic,auris,zests,bazoo,agios,rotal,binal,sella,astir,wacke,owler,saick,kylin,coxae,zokor,vying,ameer,taken,yests,haver,mugga,axiom,primi,pikau,scout,nears,sozin,pooly,roped,sezes,lavas,pilis,tabis,lazar,smote,feyly,japer,inros,griot,alurk,duvet,sepoy,rusts,curse,hahas,kerve,kyaks,longa,degum,dauts,ungum,walds,hollo,forty,howfs,nazis,enlit,gilpy,odeon,wheal,flobs,forby,lumen,opted,neebs,gaged,sulfa,toyon,clous,apart,merde,sukhs,abmho,rheid,bumfs,cogon,larks,parki,rotos,movie,nines,sambo,saint,fungo,snafu,alkos,staun,agros,bawks,takhi,snell,banks,inlet,rumen,shape,pesky,bacco,warst,dukes,typps,jauks,napoh,niton,khula,prese,tranq,gazes,majos,tuism,bacca,lasso,askew,anigh,heaps,sages,brise,kaims,tikes,bulge,gemma,tafia,annat,casks,taxol,nitty,miter,riqqs,cecum,avant,smurs,stray,yesty,boyly,skate,rangy,dosed,edify,gride,burds,agone,coxal,djinn,fadge,abele,skail,apeek,toons,spaes,payor,legit,gapes,takin,cuits,aisle,amici,ceroc,warms,soldi,spaws,naans,dolor,arnas,image,mouly,axels,codec,faffy,slopy,peppy,laari,oligo,prior,lupus,chare,rindy,proto,haick,leash,xysts,mufti,dandy,oxter,fries,hylic,musse,advts,musta,farad,ontal,above,punto,nicad,coirs,knosp,miros,samfu,doggo,oiler,mowie,mirza,fecal,rouet,yikes,jorts,denay,fulla,liart,sojus,ajupa,yumps,limos,gaped,miggs,haint,micos,weids,rorid,logos,mopey,axled,prove,lapje,ramps,oxlip,petal,aphis,fauch,goods,chiao,lazed,opahs,titch,lento,cahow,hutia,mochi,atlas,jolts,prats,omees,nipas,danio,dhoti,vents,allel,loure,erses,dumka,salop,zante,douma,agush,girsh,scyes,apism,ceaze,dicta,miffs,blady,feebs,tyiyn,arear,ruote,chewy,bonks,stogs,fuzil,suhur,oxeye,swamp,proyn,coped,grape,tichy,aarti,rudas,inbye,mopsy,tasca,amiga,gland,beeps,metis,bogey,glatt,nutty,dearn,ranse,aural,sleek,acton,talea,ovine,saist,rivet,leapt,wiper,alums,skimo,skimp,rouse,delay,gazal,appts,blert,cajun,anion,soxes,flips,tipsy,cuspy,trays,amate,yente,ictal,acoel,tumpy,scrim,scums,boing,roils,coffs,shily,tronk,tours,brood,dumas,cokes,dictu,think,teend,haugh,kenaf,lousy,wreak,maqui,radio,pasmo,grens,skint,mneme,liker,bukos,cisco,clang,cycad,micht,desex,naevi,salue,binge,abask,cager,orals,fryer,photo,grins,nurrs,meils,gilly,prora,mocky,grews,tozed,brief,honan,banal,ungod,dread,cheba,ravel,zerks,sonde,mofos,netty,clote,cocks,calyx,ceria,races,stied,oorie,glans,zoned,estro,masas,capot,oking,nugae,chich,comus,arvos,tatar,perle,space,folky,halfs,proem,volke,crewe,bachs,figos,arrow,draps,saheb,lotes,shays,pareu,della,mamak,dexys,tutor,dsobo,risps,ghest,penni,duddy,fucks,zebra,flows,lavra,ybore,holla,boose,pupal,plage,fifed,roofs,dries,mento,octet,cohog,poppa,prier,antis,ceils,leeze,molue,yangs,gizmo,roust,targa,epris,dicot,steem,pingo,stole,hoppy,reals,wheek,nimbs,whops,lorry,skull,mudir,wedel,hefte,alapa,kikoi,loris,james,doyly,dawed,boxed,dicer,toged,clint,pruta,dhols,urari,minds,eyass,robug,motif,durrs,fyles,boast,bless,jarks,itchy,jhala,liers,ruler,radar,deked,pawer,ropes,lakes,haste,aioli,tarns,huffy,ceili,tines,exact,mooey,thein,saris,urare,pater,inbox,exist,blats,rymer,ephor,grufe,match,crays,cornu,plotz,hawse,lived,forma,kalua,boobs,fehme,sitar,upran,civvy,redox,parps,pubes,pling,segue,vints,noone,oaves,leaky,tubby,fards,lunar,leats,flors,towel,gemot,hable,reame,yeggs,stent,tased,bruvs,motza,acral,goura,coley,ruled,cheth,walks,punga,nixes,gowns,stair,sapan,fouer,piste,octal,poofs,camas,bales,clump,ritts,vasts,mazet,typal,parrs,swads,sandy,ishes,pawks,kelim,turon,strip,prook,pakul,labor,facey,tragi,shote,sexes,speat,scowp,dente,pluds,ladee,plait,whoof,rigol,ringy,prose,chute,blebs,shims,ramse,muist,pisky,ledgy,soldo,gulpy,spoom,ginch,skyer,tabby,lapis,atone,myoid,achey,lopes,marks,whyda,maxis,riata,aecia,sharn,lamby,mosey,sijos,siren,pepos,cloot,bammy,methi,queyn,hatty,final,gypes,dwamy,kaama,plena,berob,cunny,coins,dials,trier,cruft,pewit,moxie,chill,logoi,hades,dwale,paska,caddy,gates,gadgy,alias,dolos,moloi,actus,accra,baurs,lases,earls,smoot,farts,dolce,myrrh,abrim,maxes,liths,nipet,ogeed,safed,noser,fecks,masut,worth,dropt,siled,glowy,yours,pulus,sinus,bandy,dagos,total,smalt,bahts,lehrs,rales,cully,filch,feint,tilth,orbic,mants,sones,lacer,indow,spade,secco,arere,dawgs,yoked,saims,skobe,chows,parka,stirs,tsade,fanny,tonga,sighs,juicy,jokes,tubes,shoot,makee,frond,sherd,bufty,novio,kilos,hosts,vails,decoy,jeeps,calle,penne,farse,caped,boner,kutas,yexed,bayed,urali,hicks,ailed,armet,merle,clods,nanna,boyfs,packy,backs,bemas,sared,morro,spart,opium,booed,fugie,hazer,umbos,donna,artic,moany,quouk,dazer,parle,proby,alods,pilao,fraud,jacks,mower,shift,tropo,solid,hints,dobie,sully,muley,nesty,welkt,enter,palak,boeti,grant,chico,least,lesbo,weeis,rouls,reate,vacuo,swats,adhan,pelon,obits,speal,serum,ehing,kadai,plumy,barks,regna,hempy,stirk,prods,flaks,femur,menus,cabin,sangs,tenue,kefir,dhows,kipah,krone,huzza,wojus,redos,traga,papas,pomes,reaks,pluff,wimps,dares,kevel,riven,treys,smirr,pixes,galah,nmols,drusy,sassy,myope,zerda,luxer,frats,talpa,tooth,bosie,becap,oasts,niner,awmry,harts,siege,slojd,colby,fritt,gemmy,carts,aburn,agamy,leery,black,stime,lythe,fumed,pokey,chews,fails,fogie,minar,sabzi,jocko,chiba,avine,madly,serin,erase,dulse,gusto,liber,copsy,hemal,glady,topes,phutu,embow,death,parev,nosey,giver,float,sonny,dicey,byres,pully,slash,corky,garam,zupas,cupid,gross,lills,lutea,poyas,fiche,rated,sales,tikis,majat,becke,nebel,erugo,towns,rises,caper,feyed,welds,pears,nonan,unply,patty,nubby,bevvy,magma,doozy,toney,yawey,zezes,rasta,cloud,kiang,simul,kugel,kiack,jongs,kades,sworn,punks,piets,kehua,tophe,sists,flint,wynds,purry,gourd,shaft,kusso,oxime,nixie,storm,unbed,mikva,skeet,debug,roles,brush,ooyah,stilb,wards,kusti,jibbs,lubes,align,borty,burqa,jitis,beams,nadas,fesse,desis,rangi,wader,glyph,yards,loose,gools,schav,dulia,sabin,wrung,aldol,khuds,tholi,bipod,zaidy,jubes,slurs,tweel,zoeas,adobo,ciggy,motty,manet,migma,noily,curve,koker,potin,yadda,nigua,borts,lawks,crims,zitis,clove,diked,waxed,roton,naats,speld,maiko,expat,jewed,xebec,nodus,poule,duing,aglee,feard,prags,cryer,tryer,amban,sited,torot,stead,drake,chems,abort,regar,tarok,cimex,iiwis,waqfs,pyros,seles,cymar,vista,madid,mixis,garum,scups,voles,swift,bania,caeca,bosom,eever,sklim,tawed,trode,mayan,breem,yucch,thief,bouns,recal,molto,moira,cleek,konbu,bamas,oasal,fjeld,poses,potoo,elchi,smart,doven,guiro,oubit,mazak,spays,rials,eloge,oxman,styme,piais,nully,kumis,witty,broad,ryugi,nertz,potes,yetts,feted,wooer,solah,umped,frory,drain,worst,busts,icker,cauri,felid,whisk,buist,zippo,urson,roums,unlaw,luxed,pulmo,spits,quork,rores,jesse,adyta,frost,bawns,boxes,shies,fudgy,auric,qadis,drees,whort,carse,juvie,ratty,segni,shame,elves,moars,caser,malty,bovid,sarky,twixt,quick,unrip,yoick,tonks,netes,lowne,rakki,twice,yerds,bigly,ylike,squeg,maerl,mixed,unown,drank,dukka,tonne,kybos,emmys,hotel,mokky,wanna,curry,benga,ogams,pagne,owers,sured,havoc,viral,sasse,hanks,winos,bloop,siree,frays,fritz,chivs,sexed,toric,drunk,ebony,fixie,kvass,atmas,haggs,romps,meeps,compo,index,mosts,thorp,chawk,uncia,zobus,farci,sault,reing,pirai,taces,dodge,kirby,zygon,pipet,epopt,shero,booms,pumie,beryl,rawer,tabac,milor,vends,solas,poilu,tahas,anima,zizel,heigh,polly,rejig,qibla,horme,reefs,hotly,posit,syped,doges,tepal,rotor,nunky,gusty,spunk,chiel,sazes,pshut,horis,prank,groan,saman,hashy,vixen,niqab,jural,paced,unzip,doyen,mikra,lahar,saddo,sulph,drabs,getup,resee,unfit,mitts,runce,skiff,wynns,slype,topaz,ottos,kiths,recue,shris,spoot,basti,zamia,pivos,reccy,coils,anura,gytes,quies,parms,reiki,muddy,meved,lands,voips,bused,keeno,liens,girts,clerk,stupe,nache,asset,piyut,sures,trial,biggs,roids,embay,sowms,sowth,jewie,mouse,dogly,havan,sowle,brame,alcos,abide,ickle,ballo,booai,rhody,detox,peake,molts,aeons,glare,dhole,jeeze,seize,lotto,dally,bamma,frump,spelt,jatis,motte,miaul,abjud,daffs,wingy,happi,mirrl,plumb,troat,tromp,usens,resaw,afald,durra,flame,twire,routs,uplay,gyeld,conic,gulab,waked,stucs,cowry,seity,bedes,grize,goety,banns,stems,muted,mayor,marts,moals,tarry,clart,morns,disks,utile,benji,sobas,maneh,bibes,kooky,iftar,nibby,larva,topek,minim,jomos,tutus,byrls,metel,ziffs,incel,runds,kuris,meids,resit,agues,opzit,wrapt,kitab,pluck,wolds,jeats,spiky,falaj,zooid,ferly,gangs,chard,curio,dorks,lanch,terre,emmer,rivel,croze,pavas,viler,hanap,actor,aleft,pondy,mafia,puppa,zymes,corey,surfy,sixte,froom,clasp,lions,scrae,kokra,usual,pocks,katti,erred,alews,senna,johns,peola,vaute,unica,faugh,trees,gloat,kheer,debit,yowza,stark,nails,runch,hatch,quine,flues,toits,ricer,mohrs,fural,ecash,mommy,rohan,inwit,felon,dikas,frown,naibs,birsy,clons,chais,bokes,padri,loner,aidoi,olehs,tiros,pyins,sushi,timid,animi,krans,serra,vehme,proso,semie,dimbo,apoop,acher,balks,poser,gaudy,raits,labda,sdayn,sleer,goodo,tanto,sixth,agogo,owsen,panks,aksed,roups,enoki,demoi,awdls,navew,venas,twaes,spurt,trady,tress,saxes,taint,tunas,aight,arame,swive,suint,rimon,drink,leach,sedgy,whilk,ziram,krang,years,bolos,huggy,jaker,zincy,breid,omens,foxes,upset,wadts,being,grout,nodal,grano,oyama,hooty,herbs,cooee,kulfi,mobee,addra,alack,fugue,noose,sajou,peyse,genoa,osars,upbye,aquae,caged,salal,imlis,ondes,passu,lolly,vealy,bleed,abyes,ploye,stake,nyuze,weigh,combe,memos,orles,acned,voile,wikis,stond,toses,shoes,bocks,aesir,zymic,presa,pises,wefte,axoid,eejit,icers,bleep,ruddy,clype,moong,these,dital,tondi,emong,radii,coofs,quair,cavie,skeez,dimer,groom,sepic,canst,pacer,biccy,bield,buras,pries,resty,gnapi,woosh,gaspy,coyed,ticca,intil,vlies,xerus,taber,hajji,cargo,toped,react,vajra,fulwa,mille,quits,atoks,piani,geums,glint,mauds,daffy,triac,thong,fairs,redds,gunky,smile,compt,opepe,voddy,jager,fines,plong,notch,handi,anglo,skegs,regur,adorn,peepe,moile,sects,wrang,poral,molvi,senvy,seise,audio,gaths,gonch,brant,blimy,cooer,rotas,tolly,vulns,snows,sneck,kiddy,verry,swirl,rotta,matey,tumor,forgo,sloom,loury,rotch,dohyo,prink,lered,noxes,lifey,nanto,rahed,studs,khaya,vaire,sinew,gades,nabla,eased,harps,freit,aroma,servo,urban,airth,dumbs,hulky,azote,naeve,ranid,blaff,penis,dimly,sails,rewth,opsit,divna,mumsy,irade,odeum,slave,feeds,leben,starr,vagal,layby,hoses,rheum,woker,dorje,roded,klaps,debby,elans,porny,glent,foods,sanko,rabat,bufos,buppy,dorba,pampa,dewar,yanks,knuts,fight,comte,panch,frith,peers,foyne,baled,hoyas,cheap,lomed,bacne,samfi,zooks,winky,gryde,roose,weeny,scoff,miner,tores,coled,mezza,nutsy,hykes,titer,byway,picey,naios,hurly,leres,entry,hanse,kraal,koris,venge,abbas,gynny,beira,palpi,hanky,trild,hoied,bubas,revow,spicy,phish,wizes,diffs,terga,ohing,perky,brisk,straw,nance,rucks,joled,calos,nifty,gravy,caboc,hunch,phobe,doped,kasha,trape,moaky,yipes,vauch,dorty,libra,hully,busty,bappu,oppos,bodhi,gibel,rondo,mochs,tapen,yodle,raned,angst,oasis,mimes,draws,pinax,grisy,mobed,cress,sewan,utter,blart,jambu,funky,tufas,soths,radix,thaim,adobe,brume,skear,veily,slept,harpy,nidal,fribs,tyred,guggl,lobed,orzos,piers,scald,decko,giron,simar,hewed,vicus,casas,maars,prius,facto,alate,gonys,redip,pipas,makis,ubity,clats,batos,chere,spuds,sango,larky,tolyl,sorbi,leers,pulas,luach,parid,wenge,stave,buffi,talls,dolly,marle,mawps,guana,lycea,goaty,lairy,drupe,picul,fuzzy,pasts,doseh,arled,vegos,yowed,karez,dorbs,wains,sulks,soral,bread,mitie,inept,plugs,laksa,sofas,briks,cacas,donah,tomin,shake,crony,papes,meshy,brute,bhuna,munjs,kurre,fleas,uncap,motes,annan,sired,elect,amass,creak,jamun,hosen,porty,yonis,rosed,loamy,bibis,macca,paint,deism,aiyoo,cagey,snash,curny,shama,malai,tasse,mater,farms,drest,ruice,duett,birse,inure,tomoz,fined,wider,kenos,druse,poddy,silly,chaws,given,usury,devas,cains,freet,lushy,metif,brers,sauve,sykes,aorta,sinds,souct,pical,flood,faggy,pahit,stook,farls,mayed,direr,chank,petos,noirs,kabob,plung,naiks,stade,rezes,fusel,bancs,molie,rodny,dippy,lassu,helly,porky,telae,germs,punty,mixte,there,beery,lungs,borek,pygal,dozed,jaups,yechy,tawas,layup,winge,dings,cluey,tasto,airns,ditas,miffy,genus,fetid,churr,egged,vitae,briar,sires,mesad,whine,soapy,semas,bulse,cutto,proal,segol,liwas,solds,hydra,aroid,psalm,sadis,dinky,drugs,baken,agent,betes,oilet,vatha,puled,nullo,tithe,dildo,swans,dahis,pluto,wafts,vulva,furth,clapt,zaxes,mamas,tinty,dreck,gulch,butty,heiau,types,pairs,ortet,garth,agals,pitso,mebbe", + "flair,goofs,laiks,karas,amity,gawsy,moggy,lordy,samba,alone,eatin,muset,poker,trins,grist,paver,istle,plaid,groat,blond,bortz,galop,aside,calpa,augur,limes,yrivd,quail,mongo,pagle,yechs,unwit,aback,pilot,acids,ewked,beray,prian,rypin,folic,plied,okies,gushy,banda,worms,divis,pakki,muxes,cudda,conga,dined,tiffs,moxas,terce,thine,douar,gemel,dreks,pedal,towai,thigs,taits,morat,nappe,novia,wembs,smaze,talik,oncet,pecks,pruny,blays,dwaal,luaus,urger,manna,xenon,spags,biter,bunty,sinky,otary,euked,apays,scala,ostia,nasty,oopsy,dauds,beget,harry,meath,voxel,jelly,hotch,sties,creme,rules,dobra,kloof,unmad,podus,yowsa,aiyah,folia,lowry,acedy,alecs,prowl,prune,elude,xylem,lumme,nisin,ruble,tulps,yopos,duits,lulus,necks,tapir,lezzo,leaze,evegs,bumps,odder,grips,prone,fugal,hullo,morne,owies,lobby,yarns,teade,smirk,yandy,cusks,jures,psyop,rhino,kanji,traik,areic,butle,spina,letup,khets,loess,mason,orpin,ureid,nurls,suona,bingo,namak,bassy,hasps,linky,molar,hoghs,walls,comma,titas,mache,trace,crine,coles,spard,hoked,eisel,pooay,rider,haldi,algas,tempi,absey,ancho,fetas,gojis,cleve,lohan,tasks,sedes,chang,pikul,roins,vatic,reast,catty,rafee,laika,soums,whiss,mayas,peple,kyack,pujah,percs,nexal,lochy,fordo,boyey,crumb,glums,demit,wanle,quate,amins,stuff,booty,spook,shool,sluit,manoa,antar,karat,nalla,chimp,frowy,buoys,kissy,furos,tenia,zloty,blear,kotow,sweed,oinks,midgy,unsub,golpe,lades,graph,minor,agbas,celom,wands,gonif,grime,mbuga,dozen,clunk,firth,kurus,meane,fenny,jaspe,golds,latex,diazo,brash,ahigh,pinot,pioye,swipe,flexi,buats,pamby,salut,humus,oleyl,kohen,deems,padou,colin,lepra,yorga,rokey,onces,weets,caput,pilae,yenta,ancon,belly,ripen,raake,palis,treed,boygs,slart,scuzz,tenno,aggie,kooks,petti,weeks,aided,hypos,imago,ameba,pager,award,scute,cippi,asdic,brins,meson,sunny,pyots,babby,ditts,spaul,patel,ching,loams,styed,nante,slipe,grese,wythe,heles,nummy,ketch,hoast,chump,dixie,idles,vodka,fermi,maize,aimed,azons,kamme,moits,exeem,goral,melch,shuck,taluk,pawls,gajos,ghaut,guile,gleys,jukus,gluon,manly,walty,yiked,corby,zaire,chary,arrah,droog,subby,ragde,ponds,oseys,grass,gurdy,aixes,marma,crimp,gassy,bronc,coopt,glibs,toman,dimps,vaids,liken,blowy,sware,print,yourt,unite,tadah,coria,whamo,teene,gormy,urvas,izzat,gyans,syens,fidos,strap,rebar,chile,rifer,urase,hings,major,rabid,tauon,ontic,garms,bombe,firni,germy,tunny,baboo,tulle,rendu,brule,oidia,dorse,apian,dabba,jumby,zobos,akoja,mated,waney,maaed,frank,flute,dryad,jupon,gyals,rurps,lovat,extol,sheol,wrate,afizz,septs,brede,chemo,vieux,sores,noxas,trock,nerts,misto,local,yourn,klong,missa,sukuk,peine,cabas,vardy,issei,boric,aleph,husky,hoven,aiery,apses,wharf,addas,assay,plast,succi,tales,datum,ulmin,eusol,grief,prong,whaps,vocal,vower,nides,rebus,brows,scath,scabs,rozes,blunt,adbot,myons,rally,eyers,fille,frist,zimbs,aymag,leeks,judas,flirs,prunt,inorb,fyked,dicto,chili,spial,lisks,earth,scone,bemud,tosas,tribe,daynt,cohab,preop,oware,atilt,shrow,glass,pavvy,raved,mindi,ochre,poley,deave,umpie,ranch,clair,fugus,bunny,tarps,doomy,rexes,vroom,lauan,aster,meets,blini,pavan,stull,flimp,mirks,shola,passe,skart,gazar,trefa,teind,widdy,dinos,cline,toked,cubic,touch,steys,lazos,samey,chino,rajah,lycee,popia,shaws,sates,other,duchy,moove,orcas,point,beaus,vigor,scaud,girls,gigas,folly,rumpy,gaols,motis,sauch,salud,pents,vozhd,obbos,hokas,kombi,bokeh,laics,namaz,slain,teets,force,phies,genic,inver,tachi,argus,prick,users,bluff,hecks,bewdy,silds,vivat,knowe,besaw,muons,noils,buiks,krait,green,dooky,yeeds,gings,kalis,chugs,soras,buyin,silks,serer,mercs,arses,limbo,moufs,carta,venin,crudo,stoit,cynic,rhabd,kaphs,arsed,noois,flier,ylkes,firie,thowl,virtu,tules,silva,trest,krill,houri,lezes,infra,honda,ansae,nicol,unkey,stims,trapt,abbot,pelch,greed,fault,jolie,axial,estoc,misls,norma,pleep,moire,kudzu,goose,flamy,gayal,gamba,urped,sybil,goxes,wives,muruk,often,welsh,poste,bisom,walie,tuber,doura,reerd,baons,rubin,relic,towzy,tinea,after,volva,egger,dungy,shone,haugo,zitty,yummo,caups,margo,lanas,tinds,fabbo,blanc,quilt,pekoe,napas,chaft,fique,milly,sigma,shmek,rumly,umbra,ovary,foley,nitid,nyong,ogled,tewed,bytes,litie,auger,cimar,seiza,tamps,bruit,tough,kopek,algae,rioja,deare,plips,rheas,proot,lolog,denet,hames,drubs,saute,swoon,fogle,tidal,deals,haler,aglet,segas,seric,neifs,dynel,oldie,feoff,ustad,hance,pixie,netop,raupo,keets,fusty,biked,buroo,mozes,paolo,phoca,dykey,ksars,rejon,dinks,egmas,nital,kilns,malas,hopak,pacai,kreef,lunch,kilps,losed,etwee,tenne,texta,wench,pects,mazey,spork,hatha,cotes,poncy,while,ozone,bantu,salol,remit,lippy,cocus,urbex,purls,saeta,linch,plock,levis,slant,murti,fades,found,hakam,buses,gogga,fouet,silky,bigha,begem,lease,spire,binds,sampi,pyres,newel,baghs,rudis,niefs,donne,howto,yucky,ummed,domal,essay,nujol,limba,blain,kbars,boets,lotta,diker,aloes,felch,aggry,kutus,amuck,smeik,herns,witch,yaird,pryse,munch,finos,molas,dolee,rubor,zonae,boyed,novas,kheth,fudge,wodge,aflap,guyle,arepa,hault,stobs,faxed,cento,avail,usnic,songs,akela,fiere,rouge,yupon,lanai,misky,spake,files,youse,rownd,shoon,prill,spats,judos,texas,codon,amain,makie,khoja,dibbs,halms,shawl,herma,fiars,ruggy,slugs,bleah,aiver,zarda,order,monad,dongs,vatos,birze,aller,iring,muhly,sheaf,fluey,hopes,selah,heben,agidi,limps,aliya,tugra,neele,yoops,trogs,terse,delve,shonk,plica,chogs,mgals,caber,srsly,donas,huffs,twang,putty,posho,combs,marvy,mynah,rebut,porgy,pommy,dhobi,ylide,neats,valet,spail,lager,drook,cesta,pesty,haiku,ferms,ryked,artis,vines,sling,tract,pendu,corbe,zayin,bimah,shits,legal,padma,kluge,gurus,plaga,cases,jefes,hamza,tacan,dreed,regot,mases,eaver,ecole,hired,astun,skatt,teths,cites,xylyl,stabs,depot,minos,sheik,grein,araba,teffs,trigo,lyase,demes,mobie,asura,rowie,dunes,hilsa,spall,loons,laced,oundy,roses,wongi,pakua,liefs,lehua,ajies,tabid,nolls,grype,deans,nagar,leaks,hadji,awner,babas,rocky,funds,bonza,skied,esile,ville,begar,lathi,zlote,zimbi,ghazi,forbs,malky,tosed,ginga,ebook,flamm,siens,semee,daiko,spate,pechs,wowse,khadi,seans,powns,birch,mixen,filum,vygie,wring,molly,lefte,schwa,gnash,pujas,villi,cobot,forth,gooky,goray,urges,chops,frees,gilds,block,pouks,pokal,lulls,cupro,kopje,incur,chibs,goers,nulla,harks,gobbi,redif,lobes,hilts,cagot,games,beast,snare,malax,juked,mucor,narre,reins,dioch,khaph,knife,scind,porer,rates,pills,razee,lezza,sperm,najib,yaups,baisa,xenic,bomas,torsi,wears,skrik,yolks,petar,clays,penie,kapok,divan,steep,gibus,ranas,airts,yealm,snary,orful,furan,thiol,demon,sista,cavus,stuck,skite,larnt,whack,mewls,libri,hoyle,inspo,tangs,audad,broom,feods,cruds,arcos,nirly,yelps,plyer,yokan,spait,lites,puppy,vigas,pudic,massa,ligan,dadla,ratus,peely,hotte,regos,teach,willy,gappy,pyets,nyssa,croup,whaup,aitch,optic,dirks,oaked,leafs,offie,putts,hooka,quern,dints,elsin,dooce,rimus,vibex,audax,vimen,fones,rithe,pride,dadis,guilt,yages,tocos,quims,snogs,fytte,leave,smoky,corks,peggy,porns,gloom,duros,dyers,haily,dicky,dorsa,busby,poyse,boofy,artel,kaput,swamy,those,mould,miler,kaiak,balls,moree,hyper,oozes,hipes,pasta,cwtch,riled,rompu,sclim,sodom,adhoc,pittu,breer,heros,agave,kolos,waulk,reels,yawls,mormo,maids,bonum,forts,viers,cryne,frack,deist,sowed,matty,harls,owche,solos,robed,scuds,lilac,sprue,clour,ulvas,wowee,hoxes,scows,scand,glaum,tweep,jaxie,pahos,galls,boree,blent,calid,clame,waver,heist,sield,mulie,canna,ptype,older,flare,gayer,nkosi,lenes,potro,mmkay,koans,lured,lurid,droit,barfi,kales,omers,ganev,daych,troak,parvo,buena,vinal,ovist,matza,loggy,wuses,larfs,mezze,targe,shere,ascus,kraut,isles,stang,campi,twoer,every,stupa,items,puyas,pooka,zones,kumys,yogis,shows,bines,laude,jells,meles,thoro,tards,colon,recte,radif,oches,gyved,mebos,sumac,bedim,foule,umble,twist,forza,abeat,conia,basas,pelas,phang,antra,cunts,truly,yitie,rubus,bivia,mooks,wants,honor,kuias,pyran,jaunt,octic,clags,tawts,mossy,claps,march,timps,bowes,lidos,bantz,minty,coses,wecht,lures,wawes,soppy,beted,perls,sabos,cylix,wield,ozzie,rasas,growl,derry,foist,uprun,rebec,kydst,prang,finny,tilts,mauby,gawcy,poupe,shogi,dazed,cauda,trass,julep,flogs,parse,bravi,taigs,amens,bakes,rewet,repin,terne,adeem,sudan,massy,gleam,prude,duffs,topoi,adred,amias,morah,perve,deink,melee,jinni,jiggy,cided,noust,noons,ramsh,messy,gursh,nurtz,drows,moses,kames,feres,cants,roots,pubby,shish,chits,podia,halls,wicks,afret,caked,artsy,onmun,nashi,visor,ictus,weros,unpin,peghs,rueda,looby,birdo,fumet,toner,chock,drear,betta,rykes,among,sloop,divos,shirs,mings,hooey,ronde,epode,pened,diebs,armor,comfy,bylaw,slabs,inned,mohel,zamis,allis,facer,setup,yogas,serfs,hilly,atoms,teads,bound,proof,libre,flush,knell,addax,kanal,doobs,tutty,nongs,barra,naras,pesos,chasm,kappa,belie,trill,hauld,ngaio,frail,pukey,groma,swill,fakes,rodeo,amnio,smock,scoup,webby,polka,murth,press,seeld,dikey,pests,keels,dured,jiver,place,miraa,skody,shoed,manat,ahuru,sylva,satem,loots,feyer,buffs,geese,reddy,kempt,dubbo,vowed,sines,combo,bluds,dovie,momos,ducti,coits,sulky,fancy,stunt,coast,marri,jambo,ethne,claim,malus,lamed,cobra,dedal,refit,innie,brats,sprog,sokes,taboo,calms,mooed,nalas,annex,brain,musha,gazer,bites,liege,lawed,marms,romeo,shaky,archi,wells,chack,choco,troop,jerky,saver,zombi,borel,rusma,pones,lazzi,blads,roake,blits,haven,gauch,cowed,sorbs,canoe,eughs,hogan,ulyie,verde,duars,liras,faddy,yeeek,norms,ormer,snoep,hours,renay,beigy,hirer,whish,aheap,ramon,pecan,songo,vatje,ponor,boils,tuath,rekes,loups,grece,plouk,mucus,betel,valse,plims,water,cleft,beset,gambs,pyats,pangs,jarta,rajes,voter,scary,yores,yagis,daven,geest,razes,frass,cozie,scion,salix,slier,rotes,lepak,piend,slaty,lummy,peons,kanae,dampy,maser,achar,smell,putin,burst,tains,javas,beefy,dzhos,large,gulfy,teuch,gonks,cives,realm,frogs,beath,basen,tatus,daris,taels,powsy,mazar,nomas,sweel,wifed,caman,silty,blues,flump,gummi,ooped,dinar,skelp,ducks,geare,going,salvo,souce,chape,wince,mudim,aimak,guide,unrid,bobol,phota,octyl,vireo,palar,neper,jurat,praos,magus,blume,deled,hoors,roper,outie,mazes,chaff,story,hexes,memes,pauxi,sessa,yucks,downa,folio,recap,livor,dhuti,fauve,pooja,gigot,laved,wryly,stoep,reard,orgue,notal,equal,swung,nerol,nomen,cruel,skald,masty,lowth,recur,tiger,jaffa,brits,didis,vague,bulla,whirl,mages,licet,irids,poort,seyen,laris,tired,carne,doilt,omrah,bases,skunk,snaps,knits,elint,slope,budis,arret,sedge,algum,zilas,paaho,roshi,flyte,lamer,bajus,purps,ember,ninth,bakra,amnia,patin,oozie,abohm,velds,wetas,acone,justs,choux,sorel,rosso,scene,baric,tratt,areae,cutup,noway,doggy,shivs,chirt,sound,ozena,avows,karst,frock,cruve,blued,smoor,kerns,knule,hoist,karri,swart,osier,boffo,hooky,mashy,rogan,selky,ouche,sally,okays,joker,faith,jaleo,ganof,colds,anime,pervo,pulli,plebe,tacky,demic,moeni,baffs,snook,cello,pures,viner,drops,grill,xenia,endew,jooks,lemed,kores,blurb,comms,jerry,sadza,agasp,almeh,mavin,elide,gaumy,farro,dorky,nefie,gluer,smowt,hunts,quale,makan,rowen,whare,ripes,tohos,pekan,aglow,jobed,berme,finch,hayey,fauns,mavie,rumor,pilea,currs,yeuch,oxide,franc,gelts,shans,sewer,slubs,myals,resew,craic,keefs,paire,bants,krubi,ludos,linen,lards,linns,coxes,debud,awoke,nying,dowfs,trait,ydrad,jutty,woozy,bulgy,flams,snoop,mizes,torso,bears,auloi,preps,manzo,sayst,gleis,comix,drawn,cavel,globi,hauds,moods,jakey,hafiz,devil,emery,clave,cinch,spies,roule,comae,swank,eikon,sizel,nitry,taver,stove,kcals,mince,ruses,beret,zoist,geres,toppy,mucic,drive,godso,flays,numps,powie,kitty,erven,mokes,daric,surah,dummy,broos,todea,koels,maleo,rosps,levee,blabs,sames,skroo,tunic,thigh,maybe,borax,spewy,dewan,meaks,pawed,delta,blude,slily,eruct,duppy,gauje,genae,filth,fusil,reads,burse,duomo,style,wunga,neemb,mekka,thill,venus,grans,bayas,theed,fanks,basto,trips,narcs,fugle,patio,mumms,withe,dsomo,pured,tauts,badge,croak,loave,argol,yohah,lingo,jedis,tetra,sorra,fleys,basso,damna,tiled,aread,mohua,talky,roist,hying,haoma,blist,rapid,feria,duras,ranee,twocs,faint,quare,floes,rooms,props,mirch,scare,bourg,wiser,ethal,pilei,birle,piert,wawas,hygge,alary,bawds,tupik,tills,laggy,hapus,coomb,argon,sexto,meynt,trick,gamic,sarks,neems,rover,mouls,axman,deair,spill,abuzz,nagor,dowps,cusec,soaps,nazir,bushy,jumbo,mamee,tical,sooey,sorbo,lurer,sinsi,frigs,udals,yurta,plums,punch,books,pesta,sleys,moops,saves,taler,chick,mugos,amped,barps,muzak,dotes,klett,preta,yampy,smick,seres,lovee,telco,crost,gofer,quabs,brans,myoma,modus,guild,chams,flaxy,rails,micky,rohus,steme,wormy,doula,frame,loony,fears,eupad,bitou,pippy,tanky,purty,shuln,mitey,milfs,cited,halfa,conks,stoun,monte,solum,ferry,seria,bilgy,vired,sient,hinau,kalam,amirs,maras,stipe,whows,ebbet,zorse,jotty,panda,swear,poons,deids,patus,earnt,bitsy,jetee,thraw,brool,froes,pulik,didst,tawny,beets,ganef,sutta,visna,cafes,kipps,beins,comes,apted,cozes,ichor,glits,onion,dayan,leish,veiny,sloka,douts,steed,flued,ayres,creel,deens,mozos,weepy,apace,sools,wamed,icier,cocci,musos,amble,subak,dykes,pitta,ubacs,mooly,mahua,jarps,ardor,mahoe,bouts,sposa,mucks,gowds,kyats,hunks,shave,knaps,fouth,showd,canal,certs,queso,gryke,indri,sikas,cozed,mamie,pukas,keeps,spoke,azans,taffy,cliff,tames,aulos,ensue,pilaw,stott,laity,labne,colly,ficin,fucus,pousy,podge,right,swies,twirk,tweet,lolas,spelk,blees,yodel,admix,porey,veves,moobs,wuddy,neese,raads,adnex,ivied,stomp,wonky,pulpy,stung,erics,titis,squit,bicky,nirls,holey,chant,pubis,cutie,embog,mined,apaid,wends,umphs,monty,uncle,mumus,stens,roman,breis,niter,novae,rival,jumpy,gamey,ricks,limit,nigre,hairs,unwon,linux,sowar,sapid,ebbed,newly,jnana,burrs,diner,bunje,basic,rouks,louis,mardy,comme,inter,trets,ataps,slate,hetes,bagua,whump,adsum,abled,sided,wryer,ulama,kebar,sport,stary,trows,loric,freer,dipso,shute,briss,bunts,rilly,ursae,perea,kythe,input,rapee,fetta,repen,lammy,veals,actas,cyton,faurd,smaak,sybow,stops,nanas,dooly,ghost,bumbo,micro,broil,leant,acmic,outby,skyrs,yrent,boaty,brown,ajiva,bathe,hakim,refly,mence,mires,mafic,treks,motor,snigs,schmo,pedos,perms,odums,sewin,happy,ghats,roque,dunts,benne,birth,murri,gadis,firks,hoars,quete,retin,slags,shirt,gonef,token,oboes,honed,merds,noggs,thawy,mitre,bahut,hares,joles,kelpy,triad,poche,mocap,swami,tocky,femal,goary,waacs,dunny,decal,fungs,cadgy,jalap" + }; + private static final Set WORDS = load(); + + private BlockleDictionary() { + } + + public static boolean contains(String word) { + return word != null && WORDS.contains(word.toLowerCase(Locale.ROOT)); + } + + public static int size() { + return WORDS.size(); + } + + private static Set load() { + Set words = new HashSet<>(); + for (String chunk : CHUNKS) { + Collections.addAll(words, chunk.split(",")); + } + return Set.copyOf(words); + } +} + diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/computer/blockle/BlockleGame.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/computer/blockle/BlockleGame.java new file mode 100644 index 00000000..96d36a96 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/computer/blockle/BlockleGame.java @@ -0,0 +1,30 @@ +package com.craisinlord.antarchy.content.computer.blockle; + +public final class BlockleGame { + private BlockleGame() { + } + + public static String evaluate(String answer, String guess) { + if (answer == null || guess == null || answer.length() != 5 || guess.length() != 5) return "XXXXX"; + char[] result = {'X', 'X', 'X', 'X', 'X'}; + int[] remaining = new int[26]; + for (int index = 0; index < 5; index++) { + if (answer.charAt(index) == guess.charAt(index)) { + result[index] = 'G'; + } else { + remaining[answer.charAt(index) - 'a']++; + } + } + for (int index = 0; index < 5; index++) { + if (result[index] == 'G') { + continue; + } + int letter = guess.charAt(index) - 'a'; + if (letter >= 0 && letter < remaining.length && remaining[letter] > 0) { + result[index] = 'Y'; + remaining[letter]--; + } + } + return new String(result); + } +} 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 6deea10d..4f833207 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 @@ -640,7 +640,7 @@ public final class CreativeTabContents { acceptPotionFamily(output, potionPath); } for (String diskId : List.of("antarchy:introduction", "antarchy:chronosphere", "antarchy:toreterror_arena", "antarchy:high_fructose_corn_syrup", - "antarchy:elythia", "antarchy:cavaryn", "antarchy:thoraxis", "antarchy:temporal_fields", "antarchy:bloodglass", "antarchy:vortex")) { + "antarchy:elythia", "antarchy:flying_squirrel", "antarchy:cavaryn", "antarchy:thoraxis", "antarchy:temporal_fields", "antarchy:bloodglass", "antarchy:vortex")) { ItemStack disk = new ItemStack(AntarchyObjects.FLOPPY_DISK.get()); disk.set(AntarchyObjects.FLOPPY_DISK_COMPONENT.get(), ResourceLocation.parse(diskId)); output.accept(disk); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/portal/DimensionalTearEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/portal/DimensionalTearEntity.java index 67ae7bdc..6758adb8 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/portal/DimensionalTearEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/portal/DimensionalTearEntity.java @@ -32,6 +32,7 @@ import net.minecraft.world.Difficulty; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.projectile.Projectile; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.Mob; @@ -117,7 +118,7 @@ public class DimensionalTearEntity extends Entity implements GeoEntity { int lifetimeTicks, UUID queenId, int count) { DimensionalTearEntity tear = create(level, pos, yaw, lifetimeTicks); tear.queenOwnerId = queenId; - tear.queenManticoreCount = Math.max(1, count); + tear.queenManticoreCount = Math.max(0, count); QUEEN_TEAR_IDS.computeIfAbsent(queenId, ignored -> new HashSet<>()).add(tear.getUUID()); return tear; } @@ -472,6 +473,16 @@ public class DimensionalTearEntity extends Entity implements GeoEntity { return true; } + @Override + public boolean hurt(DamageSource source, float amount) { + if (this.queenOwnerId != null && source.getDirectEntity() instanceof Projectile + && !this.level().isClientSide) { + this.removeLinkedPair(); + return true; + } + return false; + } + @Override public boolean fireImmune() { return true; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/KingEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/KingEntity.java index 850f90c2..8ee3ae4e 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/KingEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/KingEntity.java @@ -55,10 +55,8 @@ import com.craisinlord.antarchy.content.entity.royal.decree.ComeNoCloserDecree; import com.craisinlord.antarchy.content.entity.royal.decree.DoNotRunDecree; import com.craisinlord.antarchy.content.entity.royal.decree.FightMeCowardDecree; import com.craisinlord.antarchy.content.entity.royal.decree.HandsOffTheCrownDecree; -import com.craisinlord.antarchy.content.entity.royal.decree.KeepYourDistanceDecree; import com.craisinlord.antarchy.content.entity.royal.decree.KneelDecree; import com.craisinlord.antarchy.content.entity.royal.decree.NoRespiteDecree; -import com.craisinlord.antarchy.content.entity.royal.decree.NoRetreatDecree; import com.craisinlord.antarchy.content.entity.royal.decree.RoyalDecree; import com.craisinlord.antarchy.content.entity.royal.decree.ShowNoMercyDecree; import com.craisinlord.antarchy.content.entity.royal.decree.SkyIsMineDecree; @@ -89,8 +87,6 @@ public class KingEntity extends RoyalBossEntity { private static final int BEHAVIOR_SCORE_CAP = 12; /** Keep the tree-bound patrol safely inside the authored tree footprint. */ private static final double TREE_ORBIT_RADIUS = 128.0D; - private static final double TREE_RETURN_RADIUS = 192.0D; - private static final double TREE_RETURN_RELEASE_RADIUS = 144.0D; private static final double TREE_ORBIT_ANGLE_STEP = 0.014D; private static final int TREE_ORBIT_PATH_SAMPLES = 16; private static final double KING_FOLLOW_RANGE = 192.0D; @@ -108,7 +104,6 @@ public class KingEntity extends RoyalBossEntity { private double treePatrolMaximumY; private double treePatrolAngle; private boolean treePatrolBound; - private boolean returningToTree; private int patrolCooldownTicks; private int decreeCooldownTicks; private int activeDecreeTicks; @@ -118,6 +113,7 @@ public class KingEntity extends RoyalBossEntity { private int iceballCooldownTicks = 120; private int iceSpikeCooldownTicks = 160; private boolean decreeRetreatPressure; + private int royalBoundaryGraceTicks; @Nullable private ServerPlayer exileTarget; private int exileTicks; @@ -151,7 +147,7 @@ public class KingEntity extends RoyalBossEntity { } public static AttributeSupplier.Builder createAttributes() { - return createBaseAttributes(AntarchySettings.kingHealth(), AntarchySettings.kingAttackDamage()) + return createBaseAttributes(AntarchySettings.kingHealth(), AntarchySettings.kingAttackDamage(), AntarchySettings.kingArmor()) .add(net.minecraft.world.entity.ai.attributes.Attributes.FOLLOW_RANGE, KING_FOLLOW_RANGE); } @@ -373,14 +369,11 @@ public class KingEntity extends RoyalBossEntity { @Override public void tick() { - if (!this.level().isClientSide && this.shouldReturnToTree()) { - this.returningToTree = true; - this.setTarget(null); - } super.tick(); if (this.level().isClientSide) { return; } + this.tickRoyalBoundary((ServerLevel) this.level()); this.tickComeNoCloserIndicator(); this.tickRoyalPunishment(); this.tickPendingExileAnimation(); @@ -390,21 +383,6 @@ public class KingEntity extends RoyalBossEntity { ServerLevel serverLevel = (ServerLevel) this.level(); this.iceBuildup.entrySet().removeIf(entry -> serverLevel.getEntity(entry.getKey()) == null); if (this.iceBuildup.size() > 16) this.iceBuildup.clear(); - if (this.returningToTree) { - this.setTarget(null); - this.decreeRetreatPressure = false; - if (this.treePatrolBound && this.treePatrolCenter != null) { - this.setRoyalFlying(true); - if (this.isWithinTreeReturnReleaseRadius()) { - this.returningToTree = false; - } else { - this.tickTreePatrol(); - return; - } - } else { - this.returningToTree = false; - } - } LivingEntity target = this.getTarget(); if (target != null && !this.isDeadOrDying() && this.level() instanceof ServerLevel level) { this.trackBehavior(target); @@ -474,14 +452,44 @@ public class KingEntity extends RoyalBossEntity { } } - private boolean shouldReturnToTree() { - return this.treePatrolBound && this.treePatrolCenter != null - && this.horizontalDistanceToTreeSqr() > TREE_RETURN_RADIUS * TREE_RETURN_RADIUS; - } - - private boolean isWithinTreeReturnReleaseRadius() { - return this.treePatrolCenter != null - && this.horizontalDistanceToTreeSqr() <= TREE_RETURN_RELEASE_RADIUS * TREE_RETURN_RELEASE_RADIUS; + private void tickRoyalBoundary(ServerLevel level) { + if (!this.treePatrolBound || this.treePatrolCenter == null) { + return; + } + double boundaryRadius = Math.max(32.0D, AntarchySettings.royalBoundaryRadius()); + double distance = Math.sqrt(this.horizontalDistanceToTreeSqr()); + if (distance > boundaryRadius) { + Vec3 towardCenter = this.treePatrolCenter.subtract(this.position()).multiply(1.0D, 0.0D, 1.0D); + if (towardCenter.lengthSqr() > 0.001D) { + towardCenter = towardCenter.normalize(); + this.getMoveControl().setWantedPosition(this.getX() + towardCenter.x * 12.0D, + this.groundYBelow(this.getX() + towardCenter.x * 12.0D, + this.getZ() + towardCenter.z * 12.0D) + FLYING_PREFERRED_HOVER, + this.getZ() + towardCenter.z * 12.0D, 1.4D); + } + } + LivingEntity target = this.getTarget(); + if (target == null || !target.isAlive()) { + this.royalBoundaryGraceTicks = 0; + return; + } + double warningRadius = Math.min(boundaryRadius, Math.max(16.0D, AntarchySettings.royalBoundaryWarningRadius())); + double targetDistance = Math.sqrt(target.position().subtract(this.treePatrolCenter).multiply(1.0D, 0.0D, 1.0D).lengthSqr()); + if (targetDistance > warningRadius) { + if (this.tickCount % 5 == 0) { + level.sendParticles(ParticleTypes.END_ROD, target.getX(), target.getY() + 1.0D, target.getZ(), + 4, 0.3D, 0.5D, 0.3D, 0.02D); + } + if (targetDistance > boundaryRadius) { + this.royalBoundaryGraceTicks++; + if (this.royalBoundaryGraceTicks > Math.max(0, AntarchySettings.royalBoundaryGraceTicks()) + && this.tickCount % 20 == 0) { + this.invokeJudgment(target); + } + } + } else { + this.royalBoundaryGraceTicks = 0; + } } private double horizontalDistanceToTreeSqr() { @@ -824,10 +832,13 @@ public class KingEntity extends RoyalBossEntity { } private void tickKingWholeBody(ServerLevel level, LivingEntity target) { + if (this.isRoyalRecoveryActive()) { + return; + } boolean skyIsMine = this.activeDecree instanceof SkyIsMineDecree; boolean forceFar = this.decreeRetreatPressure || this.activeDecree instanceof ComeNoCloserDecree - || this.activeDecree instanceof KeepYourDistanceDecree; + ; { double distance = target.distanceTo(this); @@ -1013,7 +1024,7 @@ public class KingEntity extends RoyalBossEntity { for (int lane = -1; lane <= 1; lane++) { Vec3 point = start.add(line.scale(distance)).add(side.scale(lane * (i % 2 == 0 ? 2.0D : 0.0D))); double y = this.groundYBelow(point.x, point.z) + 0.1D; - RoyalIceSpikeEntity spike = RoyalIceSpikeEntity.create(level, new Vec3(point.x, y, point.z)); + RoyalIceSpikeEntity spike = RoyalIceSpikeEntity.create(level, new Vec3(point.x, y, point.z), this); level.addFreshEntity(spike); } } @@ -1053,12 +1064,15 @@ public class KingEntity extends RoyalBossEntity { Vec3 push = toTarget.normalize().scale(3.2D); living.setDeltaMovement(living.getDeltaMovement().add(push.x, 0.5D, push.z)); living.hasImpulse = true; - living.hurt(this.damageSources().mobAttack(this), 6.0F); + living.hurt(this.damageSources().mobAttack(this), this.scaleRoyalDamage(6.0D)); } level.sendParticles(ParticleTypes.SWEEP_ATTACK, this.getX() + forward.x * 6.0D, this.getY() + 4.0D, this.getZ() + forward.z * 6.0D, 12, 4.0D, 2.0D, 4.0D, 0.0D); } private void tickDecree(ServerLevel level, LivingEntity target) { + if (this.isRoyalRecoveryActive() && this.activeDecree == null) { + return; + } if (!(target instanceof ServerPlayer player) || !target.isAlive() || target.level() != level) { if (this.activeDecree != null) { this.endDecree(target); @@ -1137,6 +1151,7 @@ public class KingEntity extends RoyalBossEntity { this.activeDecreeTicks = 0; this.decreeRetreatPressure = false; this.decreeCooldownTicks = AntarchySettings.royalDecreeCooldownTicks(); + this.startRoyalRecovery(40); } public void clearActiveDecree() { @@ -1175,7 +1190,7 @@ public class KingEntity extends RoyalBossEntity { if (this.judgmentCooldowns.getOrDefault(target.getUUID(), 0L) <= now) { this.judgmentCooldowns.put(target.getUUID(), now + 20L); this.projectRoyalSound(AntarchySoundEvents.KING_JUDGEMENT.get(), 4.0F, 1.0F, target); - target.hurt(this.damageSources().magic(), 6.0F); + target.hurt(this.damageSources().magic(), this.scaleRoyalDamage(6.0D)); } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/QueenEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/QueenEntity.java index c10bf976..d620b41d 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/QueenEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/QueenEntity.java @@ -252,6 +252,7 @@ public class QueenEntity extends RoyalBossEntity { } private void tickDreamFireballs() { + if (this.isRoyalRecoveryActive()) return; if (!(this.level() instanceof ServerLevel level)) return; LivingEntity target = this.getTarget(); if (target == null || !target.isAlive() || !this.canAttack(target)) return; @@ -360,6 +361,7 @@ public class QueenEntity extends RoyalBossEntity { } private void tickManticoreSummon() { + if (this.isRoyalRecoveryActive()) return; if (this.manticoreSummonCooldownTicks > 0) { this.manticoreSummonCooldownTicks--; return; @@ -386,6 +388,7 @@ public class QueenEntity extends RoyalBossEntity { ? this.cooldown(Math.max(20, AntarchySettings.queenManticoreSummonCooldownTicks())) : FAILED_SUMMON_RETRY_TICKS; if (spawned > 0) { + this.startRoyalRecovery(45); this.manticoreAnimationPending = true; this.playRoyalSound(AntarchySoundEvents.QUEEN_ROAR.get(), 0.8F + this.random.nextFloat() * 0.12F); serverLevel.sendParticles(ParticleTypes.PORTAL, this.getX(), this.getY() + 2.0D, this.getZ(), @@ -413,6 +416,7 @@ public class QueenEntity extends RoyalBossEntity { private int spawnManticoreTears(ServerLevel level, LivingEntity target, int count) { int pairs = Math.max(1, Math.min(3, (count + 1) / 2)); int created = 0; + int remaining = count; Vec3 towardTarget = target.position().subtract(this.position()).multiply(1.0D, 0.0D, 1.0D); if (towardTarget.lengthSqr() < 1.0E-4D) { towardTarget = this.getViewVector(1.0F).multiply(1.0D, 0.0D, 1.0D); @@ -436,20 +440,24 @@ public class QueenEntity extends RoyalBossEntity { double pairSeparation = 3.5D + this.random.nextDouble() * 3.0D; Vec3 firstPos = pairCenter.add(pairDirection.scale(pairSeparation)); Vec3 secondPos = pairCenter.add(pairDirection.scale(-pairSeparation)); + int firstCount = Math.min(3, (remaining + 1) / 2); + int secondCount = Math.min(3, remaining / 2); DimensionalTearEntity first = DimensionalTearEntity.createQueenManticoreTear(level, firstPos, - tearYaw, 240, this.getUUID(), Math.min(3, count)); + tearYaw, 240, this.getUUID(), firstCount); DimensionalTearEntity second = DimensionalTearEntity.createQueenManticoreTear(level, secondPos, - tearYaw, 240, this.getUUID(), Math.min(3, count)); + tearYaw, 240, this.getUUID(), secondCount); first.linkTo(second); second.linkTo(first); level.addFreshEntity(first); level.addFreshEntity(second); created++; + remaining -= firstCount + secondCount; } return created; } private void tickQueenAbilities() { + if (this.isRoyalRecoveryActive()) return; if (this.gravityStompCooldownTicks > 0) this.gravityStompCooldownTicks--; if (this.momentumLockCooldownTicks > 0) this.momentumLockCooldownTicks--; if (this.crushingGravityCooldownTicks > 0) this.crushingGravityCooldownTicks--; @@ -523,7 +531,7 @@ public class QueenEntity extends RoyalBossEntity { case "crushing_gravity" -> { this.crushingGravityCooldownTicks = cooldown; this.royalEffects.start("crushing_gravity", CRUSHING_GRAVITY_DURATION, - () -> {}, this::tickCrushingGravity, () -> {}); + () -> {}, this::tickCrushingGravity, () -> this.startRoyalRecovery(35)); this.playRoyalSound(AntarchySoundEvents.QUEEN_ROAR.get(), 0.6F); } case "acceleration" -> { this.accelerationCooldownTicks = cooldown; this.startRoyalAcceleration(); } @@ -565,7 +573,7 @@ public class QueenEntity extends RoyalBossEntity { for (LivingEntity living : level.getEntitiesOfClass(LivingEntity.class, this.getBoundingBox().inflate(18.0D), this::canDamageWithRoyalAttack)) { double distance = Math.max(1.0D, living.distanceTo(this)); - living.hurt(source, (float) (12.0D * Math.max(0.25D, 1.0D - distance / 24.0D))); + living.hurt(source, this.scaleRoyalDamage(12.0D * Math.max(0.25D, 1.0D - distance / 24.0D))); Vec3 push = living.position().subtract(this.position()).normalize().scale(1.3D); living.setDeltaMovement(living.getDeltaMovement().add(push.x, 0.65D, push.z)); living.hasImpulse = true; @@ -611,6 +619,7 @@ public class QueenEntity extends RoyalBossEntity { } } this.frozenVelocities.clear(); + this.startRoyalRecovery(35); }); this.playRoyalSound(AntarchySoundEvents.QUEEN_ROAR.get(), 0.5F); } @@ -669,6 +678,7 @@ public class QueenEntity extends RoyalBossEntity { this.setRoyalAccelerated(false); removeAccelModifier(this.getAttribute(Attributes.MOVEMENT_SPEED), ACCEL_SPEED_ID); removeAccelModifier(this.getAttribute(Attributes.FLYING_SPEED), ACCEL_FLY_ID); + this.startRoyalRecovery(30); }); } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBlackHoleEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBlackHoleEntity.java index 91577d9d..b6cf65f5 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBlackHoleEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBlackHoleEntity.java @@ -355,7 +355,9 @@ public class RoyalBlackHoleEntity extends Entity implements GeoEntity { } double distance = Math.max(1.0D, living.position().distanceTo(center)); float falloff = (float) Math.max(0.25D, 1.0D - distance / radius); - living.hurt(source, 26.0F * falloff); + double damage = 26.0D * falloff; + living.hurt(source, this.ownerEntity() instanceof RoyalBossEntity royalBoss + ? royalBoss.scaleRoyalDamage(damage) : (float) damage); Vec3 launch = living.position().subtract(center).normalize().scale(2.6D * falloff); living.setDeltaMovement(launch.x, 1.1D * falloff + 0.4D, launch.z); living.hasImpulse = true; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBossEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBossEntity.java index f7d2f576..c6f46be2 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBossEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBossEntity.java @@ -14,7 +14,11 @@ import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; import java.util.Arrays; +import java.util.HashSet; import java.util.List; +import java.util.Set; +import java.util.UUID; +import net.minecraft.resources.ResourceLocation; import net.minecraft.network.chat.Component; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.syncher.EntityDataAccessor; @@ -37,6 +41,8 @@ import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.item.ItemStack; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.attributes.AttributeInstance; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.ai.control.FlyingMoveControl; import net.minecraft.world.entity.ai.control.MoveControl; import net.minecraft.world.entity.ai.goal.FloatGoal; @@ -100,6 +106,8 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult private static final int CRUSH_MAX_BLOCKS = 24; private static final double CRUSH_MAX_RESISTANCE = 60.0D; private static final float CRUSH_DROP_CHANCE = 0.1F; + private static final int RECOVERY_AFTER_BEAM_TICKS = 30; + private static final ResourceLocation MULTIPLAYER_DAMAGE_ID = ResourceLocation.fromNamespaceAndPath("antarchy", "royal_multiplayer_damage"); private static final int OBSTRUCTION_CLEAR_INTERVAL_TICKS = 5; private static final double OBSTRUCTION_CLEAR_RADIUS = 3.5D; private static final int OBSTRUCTION_CLEAR_MAX_BLOCKS = 24; @@ -177,6 +185,10 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult @Nullable private Vec3 aerialCombatAnchor; private int aerialCombatAnchorTicks; + private int recoveryWindowTicks; + private boolean multiplayerScalingInitialized; + private final Set encounterParticipants = new HashSet<>(); + private double royalDamageMultiplier = 1.0D; @Nullable private Entity[] multipartParts; @@ -249,10 +261,14 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult } public static AttributeSupplier.Builder createBaseAttributes(double health, double attackDamage) { + return createBaseAttributes(health, attackDamage, AntarchySettings.royalBossArmor()); + } + + protected static AttributeSupplier.Builder createBaseAttributes(double health, double attackDamage, double armor) { return Mob.createMobAttributes() .add(Attributes.MAX_HEALTH, health) .add(Attributes.ATTACK_DAMAGE, attackDamage) - .add(Attributes.ARMOR, AntarchySettings.royalBossArmor()) + .add(Attributes.ARMOR, armor) .add(Attributes.FOLLOW_RANGE, AntarchySettings.royalBossFollowRange()) .add(Attributes.MOVEMENT_SPEED, AntarchySettings.royalBossMovementSpeed()) .add(Attributes.FLYING_SPEED, AntarchySettings.royalBossMovementSpeed()) @@ -447,6 +463,9 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult this.bossEvent.setProgress(this.getHealth() / this.getMaxHealth()); this.attackScheduler.tick(); + if (this.recoveryWindowTicks > 0) { + this.recoveryWindowTicks--; + } if (this.isRoyalFlying() && this.tickCount % 40 == 0 && this.royalFlyLoopSound() != null) { this.playRoyalSound(this.royalFlyLoopSound(), 0.92F + this.random.nextFloat() * 0.12F); @@ -464,6 +483,8 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult return; } + this.initializeMultiplayerScaling(primaryTarget); + this.tickCombatLocomotionMode(primaryTarget); boolean aeriallyStabilized = this.steerTowardTarget(primaryTarget); if (!aeriallyStabilized) { @@ -475,6 +496,9 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult Phase phase = this.phase(); int activeHeadAttacks = 0; + if (this.recoveryWindowTicks > 0) { + return; + } for (RoyalHead head : this.heads) { if (this.attackScheduler.laneBusy(this.headLane(head))) { activeHeadAttacks++; @@ -503,6 +527,9 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult } private void tickRoyalBeam(LivingEntity primaryTarget) { + if (this.recoveryWindowTicks > 0) { + return; + } Phase phase = this.phase(); int activeBeams = 0; for (RoyalHead head : this.heads) { @@ -588,6 +615,7 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult @Override public void onComplete() { RoyalBossEntity.this.stopRoyalBeam(head); + RoyalBossEntity.this.startRoyalRecovery(RECOVERY_AFTER_BEAM_TICKS); } })) { continue; @@ -601,6 +629,47 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult return phase.maxConcurrentHeadAttacks(); } + protected boolean isRoyalRecoveryActive() { + return this.recoveryWindowTicks > 0; + } + + protected void startRoyalRecovery(int ticks) { + this.recoveryWindowTicks = Math.max(this.recoveryWindowTicks, ticks); + } + + private void initializeMultiplayerScaling(LivingEntity target) { + if (this.multiplayerScalingInitialized || !(this.level() instanceof ServerLevel level)) { + return; + } + this.multiplayerScalingInitialized = true; + if (!AntarchySettings.royalBossMultiplayerScalingEnabled()) { + return; + } + int maxPlayers = Math.max(1, AntarchySettings.royalBossScalingMaxPlayers()); + List players = level.getPlayers(player -> player.isAlive() + && !player.isSpectator() + && player.distanceToSqr(this) <= AntarchySettings.royalBossFollowRange() * AntarchySettings.royalBossFollowRange()); + if (target instanceof ServerPlayer player && player.isAlive() && !players.contains(player)) { + players.add(player); + } + int participantCount = Math.min(maxPlayers, Math.max(1, players.size())); + for (ServerPlayer player : players) { + if (this.encounterParticipants.size() >= participantCount) { + break; + } + this.encounterParticipants.add(player.getUUID()); + } + double healthMultiplier = 1.0D + Math.max(0, participantCount - 1) + * Math.max(0.0D, AntarchySettings.royalBossHealthPerAdditionalPlayer()); + double baseHealth = this.getAttributeBaseValue(Attributes.MAX_HEALTH); + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(baseHealth * healthMultiplier); + this.setHealth(this.getMaxHealth()); + double damageMultiplier = Math.max(0.0D, participantCount - 1) + * Math.max(0.0D, AntarchySettings.royalBossDamagePerAdditionalPlayer()); + this.royalDamageMultiplier = 1.0D + damageMultiplier; + this.applyRoyalDamageModifier(); + } + private void stopRoyalBeam(RoyalHead head) { int index = head.slot().ordinal(); head.setBeamActive(false); @@ -1211,12 +1280,38 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult public void addAdditionalSaveData(CompoundTag tag) { super.addAdditionalSaveData(tag); tag.putBoolean("RoyalFlying", this.isRoyalFlying()); + tag.putBoolean("RoyalScalingInitialized", this.multiplayerScalingInitialized); + tag.putInt("RoyalScalingParticipants", this.encounterParticipants.size()); + tag.putDouble("RoyalDamageMultiplier", this.royalDamageMultiplier); } @Override public void readAdditionalSaveData(CompoundTag tag) { super.readAdditionalSaveData(tag); this.setRoyalFlying(!tag.contains("RoyalFlying") || tag.getBoolean("RoyalFlying")); + this.multiplayerScalingInitialized = tag.getBoolean("RoyalScalingInitialized"); + this.royalDamageMultiplier = Math.max(1.0D, tag.getDouble("RoyalDamageMultiplier")); + if (tag.contains("RoyalScalingParticipants")) { + int count = Math.max(1, tag.getInt("RoyalScalingParticipants")); + for (int i = 0; i < count; i++) { + this.encounterParticipants.add(new UUID(0L, i + 1L)); + } + } + this.applyRoyalDamageModifier(); + } + + public float scaleRoyalDamage(double damage) { + return (float) (damage * this.royalDamageMultiplier); + } + + private void applyRoyalDamageModifier() { + AttributeInstance attackDamage = this.getAttribute(Attributes.ATTACK_DAMAGE); + if (attackDamage == null || this.royalDamageMultiplier <= 1.0D + || attackDamage.getModifier(MULTIPLAYER_DAMAGE_ID) != null) { + return; + } + attackDamage.addPermanentModifier(new AttributeModifier(MULTIPLAYER_DAMAGE_ID, + this.royalDamageMultiplier - 1.0D, AttributeModifier.Operation.ADD_MULTIPLIED_BASE)); } @Override diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalElementalProjectileEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalElementalProjectileEntity.java index fec4280b..efaf689a 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalElementalProjectileEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalElementalProjectileEntity.java @@ -136,7 +136,9 @@ public class RoyalElementalProjectileEntity extends ThrowableProjectile implemen this::canDamageWithImpact)) { double distance = Math.max(0.5D, living.position().distanceTo(center)); float falloff = (float) Math.max(0.25D, 1.0D - distance / 5.0D); - living.hurt(source, (float) (AntarchySettings.kingFireballDamage() * falloff)); + double damage = AntarchySettings.kingFireballDamage() * falloff; + living.hurt(source, this.getOwner() instanceof RoyalBossEntity royalBoss + ? royalBoss.scaleRoyalDamage(damage) : (float) damage); living.setRemainingFireTicks(Math.max(living.getRemainingFireTicks(), 120)); } igniteImpact(level, center, this.isDreamFireball()); @@ -170,7 +172,9 @@ public class RoyalElementalProjectileEntity extends ThrowableProjectile implemen DamageSource source = this.damageSources().mobProjectile(this, this.getOwner() instanceof LivingEntity living ? living : null); for (LivingEntity living : level.getEntitiesOfClass(LivingEntity.class, new AABB(center, center).inflate(5.0D), this::canDamageWithImpact)) { - living.hurt(source, (float) AntarchySettings.kingIceballDamage()); + double damage = AntarchySettings.kingIceballDamage(); + living.hurt(source, this.getOwner() instanceof RoyalBossEntity royalBoss + ? royalBoss.scaleRoyalDamage(damage) : (float) damage); living.setTicksFrozen(Math.min(living.getTicksRequiredToFreeze() + 80, living.getTicksFrozen() + 180)); living.addEffect(new net.minecraft.world.effect.MobEffectInstance(net.minecraft.world.effect.MobEffects.MOVEMENT_SLOWDOWN, 120, 3)); } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalIceSpikeEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalIceSpikeEntity.java index af78aad3..8b0f58ba 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalIceSpikeEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalIceSpikeEntity.java @@ -12,6 +12,8 @@ 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 java.util.UUID; +import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; import software.bernie.geckolib.animation.AnimatableManager; @@ -26,6 +28,8 @@ public class RoyalIceSpikeEntity extends Entity implements GeoEntity { private static final String ANIMATION_CONTROLLER = "ice_spike"; private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); private boolean impacted; + @Nullable + private UUID ownerId; public RoyalIceSpikeEntity(EntityType type, Level level) { super(type, level); @@ -39,6 +43,12 @@ public class RoyalIceSpikeEntity extends Entity implements GeoEntity { return spike; } + public static RoyalIceSpikeEntity create(ServerLevel level, Vec3 position, LivingEntity owner) { + RoyalIceSpikeEntity spike = create(level, position); + spike.ownerId = owner.getUUID(); + return spike; + } + @Override protected void defineSynchedData(net.minecraft.network.syncher.SynchedEntityData.Builder builder) { } @@ -65,7 +75,10 @@ public class RoyalIceSpikeEntity extends Entity implements GeoEntity { DamageSource source = this.damageSources().magic(); for (LivingEntity living : level.getEntitiesOfClass(LivingEntity.class, new AABB(this.blockPosition()).inflate(2.2D), entity -> entity.isAlive())) { - living.hurt(source, (float) AntarchySettings.kingIceSpikeDamage()); + Entity owner = this.ownerId == null ? null : level.getEntity(this.ownerId); + living.hurt(source, owner instanceof RoyalBossEntity royalBoss + ? royalBoss.scaleRoyalDamage(AntarchySettings.kingIceSpikeDamage()) + : (float) AntarchySettings.kingIceSpikeDamage()); living.setTicksFrozen(Math.min(living.getTicksRequiredToFreeze() + 60, living.getTicksFrozen() + 100)); living.setDeltaMovement(living.getDeltaMovement().add(0.0D, 0.35D, 0.0D)); living.hasImpulse = true; @@ -76,11 +89,17 @@ public class RoyalIceSpikeEntity extends Entity implements GeoEntity { @Override protected void readAdditionalSaveData(CompoundTag tag) { this.impacted = tag.getBoolean("Impacted"); + if (tag.hasUUID("Owner")) { + this.ownerId = tag.getUUID("Owner"); + } } @Override protected void addAdditionalSaveData(CompoundTag tag) { tag.putBoolean("Impacted", this.impacted); + if (this.ownerId != null) { + tag.putUUID("Owner", this.ownerId); + } } @Override diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/beam/RoyalBeamController.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/beam/RoyalBeamController.java index 0b0cb3fc..2825384f 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/beam/RoyalBeamController.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/beam/RoyalBeamController.java @@ -154,13 +154,13 @@ public final class RoyalBeamController { boolean pathMutates = terrainMode == RoyalBeamTerrainMode.DESTROY; for (double walked = settings.pathStep(); walked < Math.min(distance, settings.range()); walked += settings.pathStep()) { Vec3 sample = shootFrom.add(direction.scale(walked)); - hurtEntitiesAround(sample, settings.pathDamageRadius(), settings.damage(), settings.knockback(), damageSource, settings.requireLineOfSightForDamage(), this.damagedThisTick); + hurtEntitiesAround(sample, settings.pathDamageRadius(), this.scaledDamage(settings.damage()), settings.knockback(), damageSource, settings.requireLineOfSightForDamage(), this.damagedThisTick); if (pathMutates && shouldMutateTerrain(settings, walked)) { mutateTerrainAround(sample, settings.pathTerrainRadius(), settings, terrainMode); } } - hurtEntitiesAround(beamEnd, settings.impactDamageRadius(), settings.damage(), settings.knockback(), damageSource, settings.requireLineOfSightForDamage(), this.damagedThisTick); + hurtEntitiesAround(beamEnd, settings.impactDamageRadius(), this.scaledDamage(settings.damage()), settings.knockback(), damageSource, settings.requireLineOfSightForDamage(), this.damagedThisTick); if (!shouldMutateTerrain(settings, distance)) { return; @@ -174,6 +174,10 @@ public final class RoyalBeamController { } } + private float scaledDamage(float damage) { + return this.owner instanceof RoyalBossEntity royalBoss ? royalBoss.scaleRoyalDamage(damage) : damage; + } + private boolean shouldMutateTerrain(RoyalBeamSettings settings, double distanceFromOwner) { return settings.terrainEnabled() && settings.maxTerrainMutationsPerTick() > 0 diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/AdvanceDecree.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/AdvanceDecree.java deleted file mode 100644 index a1aeab5e..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/AdvanceDecree.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.craisinlord.antarchy.content.entity.royal.decree; -import com.craisinlord.antarchy.content.entity.royal.KingEntity; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.entity.LivingEntity; -public final class AdvanceDecree implements RoyalDecree { - private static final double REQUIRED_RANGE = 14.0D; - public String translationKey() { return "decree.antarchy.advance"; } - public void apply(ServerLevel level, KingEntity king, LivingEntity target) { king.setDecreeRetreatPressure(true); } - @Override public Evaluation evaluate(ServerLevel level, KingEntity king, LivingEntity target) { - return target.distanceToSqr(king) > REQUIRED_RANGE * REQUIRED_RANGE ? Evaluation.VIOLATED : Evaluation.COMPLIANT; - } - @Override - public int contextWeight(KingEntity king, LivingEntity target) { - return 4 + king.behaviorScore(KingEntity.Behavior.KEEPING_FAR); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/KeepYourDistanceDecree.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/KeepYourDistanceDecree.java deleted file mode 100644 index 780db185..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/KeepYourDistanceDecree.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.craisinlord.antarchy.content.entity.royal.decree; -import com.craisinlord.antarchy.content.entity.royal.KingEntity; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.entity.LivingEntity; -public final class KeepYourDistanceDecree implements RoyalDecree { - private static final double INNER_RADIUS = 16.0D; - public String translationKey() { return "decree.antarchy.keep_your_distance"; } - public void apply(ServerLevel level, KingEntity king, LivingEntity target) { } - @Override public Evaluation evaluate(ServerLevel level, KingEntity king, LivingEntity target) { - return target.distanceToSqr(king) <= INNER_RADIUS * INNER_RADIUS ? Evaluation.VIOLATED : Evaluation.COMPLIANT; - } - @Override - public int contextWeight(KingEntity king, LivingEntity target) { - return 4 + king.behaviorScore(KingEntity.Behavior.HUGGING); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/NoRetreatDecree.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/NoRetreatDecree.java deleted file mode 100644 index ce190b32..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/decree/NoRetreatDecree.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.craisinlord.antarchy.content.entity.royal.decree; -import com.craisinlord.antarchy.content.entity.royal.KingEntity; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.entity.LivingEntity; -public final class NoRetreatDecree implements RoyalDecree { - private static final double ALLOWED_RANGE = 26.0D; - public String translationKey() { return "decree.antarchy.no_retreat"; } - public void apply(ServerLevel level, KingEntity king, LivingEntity target) { - if (target.distanceToSqr(king) > ALLOWED_RANGE * ALLOWED_RANGE) { - king.invokeJudgment(target); - } - } - @Override - public int contextWeight(KingEntity king, LivingEntity target) { - return 4 + king.behaviorScore(KingEntity.Behavior.RETREATING); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/trades/ComputerScientistTradeManager.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/trades/ComputerScientistTradeManager.java new file mode 100644 index 00000000..406c16df --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/trades/ComputerScientistTradeManager.java @@ -0,0 +1,133 @@ +package com.craisinlord.antarchy.content.entity.trades; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.packs.resources.ResourceManager; +import net.minecraft.server.packs.resources.SimpleJsonResourceReloadListener; +import net.minecraft.util.profiling.ProfilerFiller; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.world.entity.npc.VillagerTrades; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.trading.ItemCost; +import net.minecraft.world.item.trading.MerchantOffer; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** Loads Computer Scientist offers from data/computer_scientist_trades/*.json. */ +public final class ComputerScientistTradeManager extends SimpleJsonResourceReloadListener { + private static final Gson GSON = new Gson(); + private static final String DIRECTORY = "computer_scientist_trades"; + private static final List GENERAL_DISKS = List.of( + id("introduction"), id("chronosphere"), id("high_fructose_corn_syrup"), + id("elythia"), id("flying_squirrel"), id("cavaryn"), id("thoraxis"), + id("temporal_fields"), id("bloodglass"), id("vortex")); + private static volatile List loadedTrades = List.of(); + + public ComputerScientistTradeManager() { + super(GSON, DIRECTORY); + } + + public static int[] slotsPerLevel() { + return new int[] {4, 2, 2, 3, 4}; + } + + public static VillagerTrades.ItemListing listing(int level, int index) { + return (trader, random) -> { + TradeEntry trade = loadedTrades.stream() + .filter(entry -> entry.level == level && entry.index == index) + .findFirst() + .orElse(null); + return trade == null ? null : trade.createOffer(random); + }; + } + + @Override + protected void apply(Map object, ResourceManager resourceManager, ProfilerFiller profiler) { + List parsed = new ArrayList<>(); + for (JsonElement file : object.values()) { + if (!file.isJsonObject()) continue; + JsonObject root = file.getAsJsonObject(); + if (root.has("trades") && root.get("trades").isJsonArray()) { + for (JsonElement element : root.getAsJsonArray("trades")) { + if (element.isJsonObject()) parsed.add(parse(element.getAsJsonObject())); + } + } else { + parsed.add(parse(root)); + } + } + loadedTrades = List.copyOf(parsed); + } + + private static TradeEntry parse(JsonObject json) { + return new TradeEntry( + integer(json, "level", 1), integer(json, "index", 0), + stack(json.getAsJsonObject("buy")), + json.has("second_buy") ? stack(json.getAsJsonObject("second_buy")) : null, + stack(json.getAsJsonObject("sell")), + json.has("sell_disk") ? json.get("sell_disk").getAsString() : null, + integer(json, "max_uses", 12), integer(json, "villager_xp", 5), + json.has("price_multiplier") ? json.get("price_multiplier").getAsFloat() : 0.05F, + json.has("chance") ? json.get("chance").getAsFloat() : 1.0F); + } + + private record TradeEntry(int level, int index, StackRange buy, StackRange secondBuy, + StackRange sell, String sellDisk, int maxUses, int villagerXp, + float priceMultiplier, float chance) { + private MerchantOffer createOffer(net.minecraft.util.RandomSource random) { + if (random.nextFloat() > chance) return null; + ItemCost buyCost = buy.toCost(random); + java.util.Optional secondCost = secondBuy == null + ? java.util.Optional.empty() : java.util.Optional.of(secondBuy.toCost(random)); + ItemStack result = sellDisk == null ? sell.toStack(random) : diskStack(sellDisk, random, sell.toStack(random).getCount()); + return new MerchantOffer(buyCost, secondCost, result, maxUses, villagerXp, priceMultiplier); + } + } + + private record StackRange(ResourceLocation item, int min, int max) { + private Item itemValue() { + return BuiltInRegistries.ITEM.get(item); + } + + private int count(net.minecraft.util.RandomSource random) { + return min == max ? min : min + random.nextInt(max - min + 1); + } + + private ItemCost toCost(net.minecraft.util.RandomSource random) { + return new ItemCost(itemValue(), count(random)); + } + + private ItemStack toStack(net.minecraft.util.RandomSource random) { + return new ItemStack(itemValue(), count(random)); + } + } + + private static StackRange stack(JsonObject json) { + int min = integer(json, "min", integer(json, "count", 1)); + int max = integer(json, "max", min); + return new StackRange(ResourceLocation.parse(json.get("item").getAsString()), min, max); + } + + private static ItemStack diskStack(String diskType, net.minecraft.util.RandomSource random, int count) { + ResourceLocation diskId = diskType.equals("random_general") + ? GENERAL_DISKS.get(random.nextInt(GENERAL_DISKS.size())) + : ResourceLocation.parse(diskType); + ItemStack disk = new ItemStack(AntarchyObjects.FLOPPY_DISK.get(), count); + disk.set(AntarchyObjects.FLOPPY_DISK_COMPONENT.get(), diskId); + return disk; + } + + private static int integer(JsonObject json, String key, int fallback) { + return json.has(key) ? json.get(key).getAsInt() : fallback; + } + + private static ResourceLocation id(String path) { + return ResourceLocation.fromNamespaceAndPath("antarchy", path); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/vortex/VortexEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/vortex/VortexEntity.java index c350fe92..44e3527c 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/vortex/VortexEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/vortex/VortexEntity.java @@ -2,6 +2,8 @@ package com.craisinlord.antarchy.content.entity.vortex; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; +import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; +import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.syncher.EntityDataAccessor; @@ -200,7 +202,10 @@ public class VortexEntity extends Monster implements GeoEntity { private void tickCombatMovement(LivingEntity target) { this.faceTowards(target.position().add(0.0D, target.getBbHeight() * 0.5D, 0.0D), 12.0F, 8.0F); - this.getMoveControl().setWantedPosition(target.getX(), target.getY() + 2.5D, target.getZ(), 0.38D); + Vec3 gravityUp = Vec3.atLowerCornerOf( + AntarchyGravityRotationUtil.getGravityDownDirection(this).getOpposite().getNormal()); + Vec3 hoverPosition = target.position().add(gravityUp.scale(2.5D)); + this.getMoveControl().setWantedPosition(hoverPosition.x, hoverPosition.y, hoverPosition.z, 0.38D); if (this.attackCooldown <= 0 && this.distanceToSqr(target) <= ATTACK_RANGE * ATTACK_RANGE @@ -251,6 +256,7 @@ public class VortexEntity extends Monster implements GeoEntity { double distance = direction.length(); Vec3 drift = distance > 1.0E-6D ? direction.scale(0.24D / distance) : this.getViewVector(1.0F).scale(0.24D); WindVortexEntity vortex = WindVortexEntity.create(serverLevel, windVortexTypeSupplier.get(), origin, Vec3.ZERO, this, true); + vortex.setAxis(AntarchyGravityRotationUtil.getGravityDownDirection(this).getOpposite()); vortex.setTravel(drift); vortex.setTravelDuration(Mth.clamp((int) Math.ceil(distance / drift.length()), 8, 36)); vortex.setHoming(false); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/vortex/WindVortexEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/vortex/WindVortexEntity.java index 043e6b0e..3ff59d1b 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/vortex/WindVortexEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/vortex/WindVortexEntity.java @@ -2,6 +2,8 @@ package com.craisinlord.antarchy.content.entity.vortex; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; +import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; @@ -208,12 +210,10 @@ public class WindVortexEntity extends Entity { } } else if (!lensVortex) { Vec3 current = this.getDeltaMovement(); + Vec3 axis = this.getAxis(); double downwardSpeed = Math.min(MAX_FALL_SPEED, Math.max(MINIMUM_DOWNWARD_DRIFT, - -current.y + FALL_ACCELERATION)); - Vec3 drift = new Vec3( - current.x * DRIFT_FRICTION, - -downwardSpeed, - current.z * DRIFT_FRICTION); + -current.dot(axis) + FALL_ACCELERATION)); + Vec3 drift = current.scale(DRIFT_FRICTION).add(axis.scale(-downwardSpeed)); Vec3 from = this.position(); Vec3 to = from.add(drift); HitResult blockHit = this.level().clip( @@ -323,20 +323,17 @@ public class WindVortexEntity extends Entity { : this.getDeltaMovement(); double speed = Mth.clamp(incoming.length(), 0.2D, 0.9D); Vec3 flow = incoming; - if (normal.y > 0.5D) { - flow = new Vec3(incoming.x, 0.0D, incoming.z); - } else if (normal.y < -0.5D) { - flow = new Vec3(incoming.x, 0.0D, incoming.z).add(0.0D, -0.08D, 0.0D); - } else { - Vec3 tangent = incoming.subtract(normal.scale(incoming.dot(normal))); + Vec3 tangent = incoming.subtract(normal.scale(incoming.dot(normal))); + if (tangent.lengthSqr() < 1.0E-6D) { + tangent = this.getAxis().cross(normal); if (tangent.lengthSqr() < 1.0E-6D) { - tangent = new Vec3(-normal.z, 0.0D, normal.x); - if (tangent.lengthSqr() < 1.0E-6D) { - tangent = new Vec3(0.0D, 0.0D, 1.0D); - } + tangent = new Vec3(0.0D, 1.0D, 0.0D).cross(normal); + } + if (tangent.lengthSqr() < 1.0E-6D) { + tangent = new Vec3(1.0D, 0.0D, 0.0D); } - flow = tangent.normalize().scale(speed); } + flow = tangent.normalize().scale(speed); if (flow.lengthSqr() < 1.0E-6D) { this.travelVelocity = Vec3.ZERO; this.setDeltaMovement(Vec3.ZERO); @@ -511,24 +508,20 @@ public class WindVortexEntity extends Entity { .add(tangent.scale(spin)) .add(basis.axis.scale(axialSpeed)) .scale(ENTITY_FORCE_SPEED_SCALE); - Vec3 current = entity.getDeltaMovement(); - Vec3 updatedMovement = new Vec3( - Mth.lerp(0.72D, current.x, wanted.x), - Mth.lerp(0.58D, current.y, wanted.y), - Mth.lerp(0.72D, current.z, wanted.z) - ); + Vec3 current = AntarchyGravityApi.getWorldVelocity(entity); + Vec3 updatedMovement = current.lerp(wanted, 0.72D); if (this.travelling) { - updatedMovement = updatedMovement.add( - this.travelVelocity.x * 0.8D * ENTITY_FORCE_SPEED_SCALE, - 0.0D, - this.travelVelocity.z * 0.8D * ENTITY_FORCE_SPEED_SCALE); + updatedMovement = updatedMovement.add(this.travelVelocity.scale(0.8D * ENTITY_FORCE_SPEED_SCALE)); } if (mode == VortexMode.UPWARD && entity.onGround()) { double minRise = (entity instanceof Player ? 0.38D : 0.3D) * ENTITY_FORCE_SPEED_SCALE; - updatedMovement = new Vec3(updatedMovement.x, Math.max(updatedMovement.y, minRise), updatedMovement.z); + Vec3 gravityUp = Vec3.atLowerCornerOf( + AntarchyGravityRotationUtil.getGravityDownDirection(entity).getOpposite().getNormal()); + double minimumAxialSpeed = Math.max(updatedMovement.dot(gravityUp), minRise); + updatedMovement = updatedMovement.add(gravityUp.scale(minimumAxialSpeed - updatedMovement.dot(gravityUp))); entity.setOnGround(false); } - entity.setDeltaMovement(updatedMovement); + AntarchyGravityApi.setWorldVelocity(entity, updatedMovement); if (entity instanceof Player) { entity.setOnGround(false); } @@ -542,7 +535,7 @@ public class WindVortexEntity extends Entity { Vec3 radial = radialVector.lengthSqr() < 1.0E-6D ? basis.sideA : radialVector.scale(1.0D / horizontal); Vec3 tangent = basis.axis.cross(radial).normalize(); double scale = this.launchStrength * Mth.clamp(this.getVortexHeight() / 5.0D, 0.5D, 2.5D); - entity.setDeltaMovement(tangent.scale(0.72D * scale * ENTITY_FORCE_SPEED_SCALE) + this.setWorldVelocity(entity, tangent.scale(0.72D * scale * ENTITY_FORCE_SPEED_SCALE) .add(radial.scale(0.34D * scale * ENTITY_FORCE_SPEED_SCALE)) .add(basis.axis.scale((0.78D + progress * 0.28D) * scale * ENTITY_FORCE_SPEED_SCALE))); entity.hasImpulse = true; @@ -578,7 +571,9 @@ public class WindVortexEntity extends Entity { Vec3 direction = distance < 1.0E-4D ? new Vec3(0.0D, 1.0D, 0.0D) : toOwner.scale(1.0D / distance); double arc = Mth.clamp(distance * 0.06D, 0.25D, 1.1D) * ENTITY_FORCE_SPEED_SCALE; double power = this.launchStrength * Mth.clamp(distance / 6.0D, 0.6D, 2.0D) * ENTITY_FORCE_SPEED_SCALE; - entity.setDeltaMovement(direction.scale(power).add(0.0D, arc, 0.0D)); + Vec3 gravityUp = Vec3.atLowerCornerOf( + AntarchyGravityRotationUtil.getGravityDownDirection(entity).getOpposite().getNormal()); + this.setWorldVelocity(entity, direction.scale(power).add(gravityUp.scale(arc))); entity.fallDistance = 0.0F; entity.hasImpulse = true; entity.hurtMarked = true; @@ -596,6 +591,10 @@ public class WindVortexEntity extends Entity { } } + private void setWorldVelocity(Entity entity, Vec3 velocity) { + AntarchyGravityApi.setWorldVelocity(entity, velocity); + } + private DamageSource damageSource() { Entity owner = this.getOwnerEntity(); if (owner instanceof LivingEntity living) { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/guide/ComputerGuideData.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/guide/ComputerGuideData.java index 0af87166..e3189a8b 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/guide/ComputerGuideData.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/guide/ComputerGuideData.java @@ -41,14 +41,14 @@ public final class ComputerGuideData extends SimplePreparableReloadListener entriesFor(List diskIds) { if (AntarchySettings.unlockAllArchives()) { Map result = new LinkedHashMap<>(); - result.put(INTRODUCTION, new Entry(INTRODUCTION, "article", "general", "guide.antarchy.entry.introduction.title", "guide.antarchy.entry.introduction.subtitle", List.of("guide.antarchy.entry.introduction.description"), "", "", "", "")); + result.put(INTRODUCTION, new Entry(INTRODUCTION, "article", "general", "guide.antarchy.entry.introduction.title", "guide.antarchy.entry.introduction.subtitle", List.of("guide.antarchy.entry.introduction.description"), "", "", "", "", "")); result.putAll(entries); return result.values().stream().sorted(Comparator.comparing(entry -> entry.titleKey().toString())).toList(); } Map result = new LinkedHashMap<>(); for (ResourceLocation diskId : diskIds) { if (INTRODUCTION.equals(diskId)) { - result.put(INTRODUCTION, new Entry(INTRODUCTION, "article", "general", "guide.antarchy.entry.introduction.title", "guide.antarchy.entry.introduction.subtitle", List.of("guide.antarchy.entry.introduction.description"), "", "", "", "")); + result.put(INTRODUCTION, new Entry(INTRODUCTION, "article", "general", "guide.antarchy.entry.introduction.title", "guide.antarchy.entry.introduction.subtitle", List.of("guide.antarchy.entry.introduction.description"), "", "", "", "", "")); continue; } Disk disk = disks.get(diskId); @@ -115,9 +115,10 @@ public final class ComputerGuideData extends SimplePreparableReloadListener description = strings(object.get("description")); String item = string(object, "item", ""); String entity = string(object, "entity", ""); + String recipe = string(object, "recipe", ""); String structure = string(object, "structure", ""); String dimension = string(object, "dimension", ""); - target.put(id, new Entry(id, type, category, title, subtitle, description, item, entity, structure, dimension)); + target.put(id, new Entry(id, type, category, title, subtitle, description, item, entity, recipe, structure, dimension)); } private static void parseDisk(ResourceLocation id, JsonElement element, Map target) { @@ -163,13 +164,21 @@ public final class ComputerGuideData extends SimplePreparableReloadListener descriptionKeys, String itemId, String entityId, String structureId, String dimensionId) { + List descriptionKeys, String itemId, String entityId, String recipeId, String structureId, String dimensionId) { } public record Disk(ResourceLocation id, String category, String titleKey, List entries, String wallpaper) { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/ComputerItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/ComputerItem.java index bbd4d438..78a5c6ee 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/ComputerItem.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/ComputerItem.java @@ -1,54 +1,10 @@ package com.craisinlord.antarchy.content.item; -import com.craisinlord.antarchy.content.client.model.ResourceBackedGeoItemModel; -import com.craisinlord.antarchy.content.client.renderer.AnimatedHeldItemRenderer; import com.craisinlord.antarchy.content.block.ComputerBlock; -import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.BlockItem; -import software.bernie.geckolib.animatable.GeoItem; -import software.bernie.geckolib.animatable.client.GeoRenderProvider; -import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; -import software.bernie.geckolib.animation.AnimatableManager; -import software.bernie.geckolib.animation.AnimationController; -import software.bernie.geckolib.animation.PlayState; -import software.bernie.geckolib.animation.RawAnimation; -import software.bernie.geckolib.util.GeckoLibUtil; - -import java.util.function.Consumer; - -public final class ComputerItem extends BlockItem implements GeoItem { - private static final ResourceLocation MODEL = ResourceLocation.fromNamespaceAndPath("antarchy", "geo/computer.geo.json"); - private static final ResourceLocation TEXTURE = ResourceLocation.fromNamespaceAndPath("antarchy", "textures/item/computer.png"); - private static final ResourceLocation ANIMATION = ResourceLocation.fromNamespaceAndPath("antarchy", "animations/computer.animation.json"); - private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); +public final class ComputerItem extends BlockItem { public ComputerItem(ComputerBlock block, Properties properties) { super(block, properties); - GeoItem.registerSyncedAnimatable(this); - } - - @Override - public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "state", state -> state.setAndContinue(RawAnimation.begin().thenLoop("on_state")))); - } - - @Override - public AnimatableInstanceCache getAnimatableInstanceCache() { - return cache; - } - - @Override - public void createGeoRenderer(Consumer consumer) { - consumer.accept(new GeoRenderProvider() { - private AnimatedHeldItemRenderer renderer; - - @Override - public net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer getGeoItemRenderer() { - if (renderer == null) { - renderer = new AnimatedHeldItemRenderer<>(new ResourceBackedGeoItemModel<>(MODEL, TEXTURE, ANIMATION)); - } - return renderer; - } - }); } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/EyeOfTheStormItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/EyeOfTheStormItem.java index b48d158f..e32bb10f 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/EyeOfTheStormItem.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/EyeOfTheStormItem.java @@ -5,6 +5,7 @@ import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.client.model.ResourceBackedGeoItemModel; import com.craisinlord.antarchy.content.client.renderer.AnimatedHeldItemRenderer; import com.craisinlord.antarchy.content.entity.vortex.WindVortexEntity; +import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; import java.util.List; import java.util.function.Consumer; import net.minecraft.ChatFormatting; @@ -76,12 +77,15 @@ public class EyeOfTheStormItem extends Item implements GeoItem { false ); vortex.setMode(WindVortexEntity.VortexMode.UPWARD); - vortex.setAxis(Direction.UP); + vortex.setAxis(AntarchyGravityApi.isGravityInverted(player) ? Direction.DOWN : Direction.UP); vortex.setVortexSize((float) AntarchySettings.eyeOfTheStormUpdraftHeight(), (float) AntarchySettings.eyeOfTheStormUpdraftRadius()); vortex.setVortexDurationTicks(AntarchySettings.eyeOfTheStormUpdraftDurationTicks()); serverLevel.addFreshEntity(vortex); - player.setDeltaMovement(player.getDeltaMovement().add(0.0D, AntarchySettings.eyeOfTheStormUpdraftLaunchStrength(), 0.0D)); + Vec3 gravityUp = Vec3.atLowerCornerOf( + (AntarchyGravityApi.isGravityInverted(player) ? Direction.DOWN : Direction.UP).getNormal()); + AntarchyGravityApi.setWorldVelocity(player, + AntarchyGravityApi.getWorldVelocity(player).add(gravityUp.scale(AntarchySettings.eyeOfTheStormUpdraftLaunchStrength()))); player.hasImpulse = true; player.resetFallDistance(); player.getCooldowns().addCooldown(this, AntarchySettings.eyeOfTheStormUpdraftCooldownTicks()); @@ -129,7 +133,7 @@ public class EyeOfTheStormItem extends Item implements GeoItem { true ); vortex.setMode(WindVortexEntity.VortexMode.UPWARD); - vortex.setAxis(Direction.UP); + vortex.setAxis(owner != null && AntarchyGravityApi.isGravityInverted(owner) ? Direction.DOWN : Direction.UP); vortex.setVortexSize((float) AntarchySettings.eyeOfTheStormSurgeHeight(), (float) AntarchySettings.eyeOfTheStormSurgeRadius()); vortex.setVortexDurationTicks(AntarchySettings.eyeOfTheStormSurgeDurationTicks()); vortex.setVortexStrengths(AntarchySettings.eyeOfTheStormSurgePullStrength(), AntarchySettings.eyeOfTheStormSurgeReturnStrength()); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/FloppyDiskItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/FloppyDiskItem.java index 6681675c..a8b2d7e2 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/FloppyDiskItem.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/FloppyDiskItem.java @@ -14,6 +14,19 @@ public final class FloppyDiskItem extends Item { super(properties.stacksTo(1)); } + public static float categoryModelProperty(ItemStack stack) { + ResourceLocation id = stack.get(AntarchyObjects.FLOPPY_DISK_COMPONENT.get()); + if (id == null) return 0.0F; + var disk = com.craisinlord.antarchy.content.guide.ComputerGuideData.disk(id); + if (disk == null) return 0.0F; + return switch (disk.category()) { + case "elythia" -> 1.0F; + case "cavaryn" -> 2.0F; + case "thoraxis" -> 3.0F; + default -> 0.0F; + }; + } + @Override public Component getName(ItemStack stack) { ResourceLocation id = stack.get(AntarchyObjects.FLOPPY_DISK_COMPONENT.get()); @@ -28,6 +41,7 @@ public final class FloppyDiskItem extends Item { @Override public void appendHoverText(ItemStack stack, TooltipContext context, List tooltip, TooltipFlag flag) { + tooltip.add(Component.translatable("item.antarchy.floppy_disk.tooltip")); ResourceLocation id = stack.get(AntarchyObjects.FLOPPY_DISK_COMPONENT.get()); if (id != null) { var disk = com.craisinlord.antarchy.content.guide.ComputerGuideData.disk(id); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/AntmailDeletePayload.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/AntmailDeletePayload.java new file mode 100644 index 00000000..a2dceb8d --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/AntmailDeletePayload.java @@ -0,0 +1,15 @@ +package com.craisinlord.antarchy.content.network; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.core.BlockPos; +import net.minecraft.network.RegistryFriendlyByteBuf; +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 AntmailDeletePayload(BlockPos pos, String messageId, boolean sent) implements CustomPacketPayload { + public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "antmail_delete")); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite(BlockPos.STREAM_CODEC, AntmailDeletePayload::pos, ByteBufCodecs.stringUtf8(64), AntmailDeletePayload::messageId, ByteBufCodecs.BOOL, AntmailDeletePayload::sent, AntmailDeletePayload::new); + @Override public Type type() { return TYPE; } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/AntmailDraftPayload.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/AntmailDraftPayload.java new file mode 100644 index 00000000..dde362ef --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/AntmailDraftPayload.java @@ -0,0 +1,17 @@ +package com.craisinlord.antarchy.content.network; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.core.BlockPos; +import net.minecraft.network.RegistryFriendlyByteBuf; +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 AntmailDraftPayload(BlockPos pos, int action, String data) implements CustomPacketPayload { + public static final int SAVE = 0; + public static final int DELETE = 1; + public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "antmail_draft")); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite(BlockPos.STREAM_CODEC, AntmailDraftPayload::pos, ByteBufCodecs.VAR_INT, AntmailDraftPayload::action, ByteBufCodecs.stringUtf8(65536), AntmailDraftPayload::data, AntmailDraftPayload::new); + @Override public Type type() { return TYPE; } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/AntmailMessageRequestPayload.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/AntmailMessageRequestPayload.java new file mode 100644 index 00000000..366c07c4 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/AntmailMessageRequestPayload.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.content.network; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.core.BlockPos; +import net.minecraft.network.RegistryFriendlyByteBuf; +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 AntmailMessageRequestPayload(BlockPos pos, String messageId) implements CustomPacketPayload { + public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "antmail_message_request")); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + BlockPos.STREAM_CODEC, AntmailMessageRequestPayload::pos, + ByteBufCodecs.stringUtf8(64), AntmailMessageRequestPayload::messageId, + AntmailMessageRequestPayload::new + ); + + @Override + public Type type() { + return TYPE; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/AntmailNetworking.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/AntmailNetworking.java index 83e2d6e9..a4d0409d 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/AntmailNetworking.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/AntmailNetworking.java @@ -1,6 +1,7 @@ package com.craisinlord.antarchy.content.network; import com.craisinlord.antarchy.content.antmail.AntmailAttachment; +import com.craisinlord.antarchy.content.antmail.AntmailDraft; import com.craisinlord.antarchy.content.antmail.AntmailWire; import net.minecraft.core.BlockPos; @@ -23,7 +24,19 @@ public final class AntmailNetworking { } public static void requestState(BlockPos pos) { - sender.accept(new AntmailStateRequestPayload(pos)); + requestState(pos, AntmailStateRequestPayload.INBOX, 0, 0L); + } + + public static void requestState(BlockPos pos, int folder, int page) { + requestState(pos, folder, page, 0L); + } + + public static void requestState(BlockPos pos, int folder, int page, long knownVersion) { + sender.accept(new AntmailStateRequestPayload(pos, folder, page, knownVersion)); + } + + public static void requestMessage(BlockPos pos, UUID messageId) { + sender.accept(new AntmailMessageRequestPayload(pos, messageId.toString())); } public static void send(BlockPos pos, String recipient, String subject, String body, List attachments) { @@ -37,4 +50,20 @@ public final class AntmailNetworking { public static void markUnread(BlockPos pos, UUID messageId) { sender.accept(new AntmailReadPayload(pos, messageId.toString(), false)); } + + public static void delete(BlockPos pos, UUID messageId, boolean sent) { + sender.accept(new AntmailDeletePayload(pos, messageId.toString(), sent)); + } + + public static void saveDraft(BlockPos pos, AntmailDraft draft) { + sender.accept(new AntmailDraftPayload(pos, AntmailDraftPayload.SAVE, AntmailWire.encodeTag(draft.toTag()))); + } + + public static void deleteDraft(BlockPos pos, UUID draftId) { + sender.accept(new AntmailDraftPayload(pos, AntmailDraftPayload.DELETE, draftId.toString())); + } + + public static void retry(BlockPos pos, UUID messageId) { + sender.accept(new AntmailRetryPayload(pos, messageId.toString())); + } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/AntmailPayloadTypes.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/AntmailPayloadTypes.java index 9ed63a81..db991df6 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/AntmailPayloadTypes.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/AntmailPayloadTypes.java @@ -12,8 +12,12 @@ public final class AntmailPayloadTypes { return List.of( AntmailSetupPayload.TYPE, AntmailStateRequestPayload.TYPE, + AntmailMessageRequestPayload.TYPE, AntmailSendPayload.TYPE, AntmailReadPayload.TYPE, + AntmailDeletePayload.TYPE, + AntmailDraftPayload.TYPE, + AntmailRetryPayload.TYPE, AntmailResultPayload.TYPE ); } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/AntmailResultPayload.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/AntmailResultPayload.java index 17c281a1..8a4860cc 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/AntmailResultPayload.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/AntmailResultPayload.java @@ -8,8 +8,26 @@ import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; -public record AntmailResultPayload(BlockPos pos, int status, String address, String messageId, String detail, String data) implements CustomPacketPayload { +public record AntmailResultPayload(BlockPos pos, int status, String address, String messageId, String detail, String data, long version) implements CustomPacketPayload { public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "antmail_result")); - public static final StreamCodec STREAM_CODEC = StreamCodec.composite(BlockPos.STREAM_CODEC, AntmailResultPayload::pos, ByteBufCodecs.VAR_INT, AntmailResultPayload::status, ByteBufCodecs.stringUtf8(64), AntmailResultPayload::address, ByteBufCodecs.stringUtf8(64), AntmailResultPayload::messageId, ByteBufCodecs.stringUtf8(128), AntmailResultPayload::detail, ByteBufCodecs.stringUtf8(65536), AntmailResultPayload::data, AntmailResultPayload::new); + public static final StreamCodec STREAM_CODEC = StreamCodec.of( + (buf, payload) -> { + BlockPos.STREAM_CODEC.encode(buf, payload.pos()); + ByteBufCodecs.VAR_INT.encode(buf, payload.status()); + ByteBufCodecs.stringUtf8(64).encode(buf, payload.address()); + ByteBufCodecs.stringUtf8(64).encode(buf, payload.messageId()); + ByteBufCodecs.stringUtf8(128).encode(buf, payload.detail()); + ByteBufCodecs.stringUtf8(65536).encode(buf, payload.data()); + ByteBufCodecs.VAR_LONG.encode(buf, payload.version()); + }, + buf -> new AntmailResultPayload( + BlockPos.STREAM_CODEC.decode(buf), + ByteBufCodecs.VAR_INT.decode(buf), + ByteBufCodecs.stringUtf8(64).decode(buf), + ByteBufCodecs.stringUtf8(64).decode(buf), + ByteBufCodecs.stringUtf8(128).decode(buf), + ByteBufCodecs.stringUtf8(65536).decode(buf), + ByteBufCodecs.VAR_LONG.decode(buf) + )); @Override public Type type() { return TYPE; } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/AntmailRetryPayload.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/AntmailRetryPayload.java new file mode 100644 index 00000000..71c9d724 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/AntmailRetryPayload.java @@ -0,0 +1,15 @@ +package com.craisinlord.antarchy.content.network; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.core.BlockPos; +import net.minecraft.network.RegistryFriendlyByteBuf; +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 AntmailRetryPayload(BlockPos pos, String messageId) implements CustomPacketPayload { + public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "antmail_retry")); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite(BlockPos.STREAM_CODEC, AntmailRetryPayload::pos, ByteBufCodecs.stringUtf8(64), AntmailRetryPayload::messageId, AntmailRetryPayload::new); + @Override public Type type() { return TYPE; } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/AntmailServerHandler.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/AntmailServerHandler.java index c2e78a36..9ccc6416 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/AntmailServerHandler.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/AntmailServerHandler.java @@ -3,6 +3,7 @@ package com.craisinlord.antarchy.content.network; import com.craisinlord.antarchy.content.antmail.AntmailAddress; import com.craisinlord.antarchy.content.antmail.AntmailAttachment; import com.craisinlord.antarchy.content.antmail.AntmailDeliveryResult; +import com.craisinlord.antarchy.content.antmail.AntmailDraft; import com.craisinlord.antarchy.content.antmail.AntmailMessage; import com.craisinlord.antarchy.content.antmail.AntmailMailbox; import com.craisinlord.antarchy.content.antmail.AntmailServerData; @@ -35,7 +36,8 @@ public final class AntmailServerHandler { } AntmailServerData data = AntmailServerData.access(player.server); AntmailServerData.Registration registration = data.register(player.server, player.serverLevel(), payload.pos(), payload.username()); - String mailbox = registration.valid() ? AntmailWire.encodeTag(data.mailboxOrCreate(registration.address()).toTag()) : ""; + if (registration.valid()) data.setLastUsedAddress(player, registration.address()); + String mailbox = registration.valid() ? AntmailWire.encodeTag(data.mailboxOrCreate(registration.address()).toTag(false)) : ""; String detail = registration.valid() ? "registration_success" : "registration_failed:" + registration.reason(); result(player, payload.pos(), registration.valid() ? AntmailDeliveryResult.Status.DELIVERED.ordinal() : AntmailDeliveryResult.Status.FAILED.ordinal(), registration.valid() ? registration.address().fullAddress() : "", "", detail, mailbox); } @@ -47,13 +49,48 @@ public final class AntmailServerHandler { return; } AntmailServerData data = AntmailServerData.access(player.server); + data.drainAddress(player.server, player.serverLevel(), payload.pos()); AntmailAddress address = data.addressAt(player.serverLevel().dimension().location(), payload.pos()); if (address == null) { result(player, payload.pos(), AntmailDeliveryResult.Status.ADDRESS_NOT_FOUND.ordinal(), "", "", "unconfigured", ""); return; } AntmailMailbox mailbox = data.mailboxOrCreate(address); - result(player, payload.pos(), AntmailDeliveryResult.Status.DELIVERED.ordinal(), address.fullAddress(), "", "", AntmailWire.encodeTag(mailbox.toTag())); + if (payload.knownVersion() == data.mailboxVersion(address)) { + result(player, payload.pos(), AntmailDeliveryResult.Status.DELIVERED.ordinal(), address.fullAddress(), "", "unchanged", ""); + return; + } + int folder = payload.folder() < AntmailStateRequestPayload.INBOX || payload.folder() > AntmailStateRequestPayload.DRAFTS + ? AntmailStateRequestPayload.INBOX : payload.folder(); + int page = Math.max(0, Math.min(payload.page(), AntmailValidation.MAX_MAILBOX_MESSAGES / AntmailMailbox.PAGE_SIZE)); + result(player, payload.pos(), AntmailDeliveryResult.Status.DELIVERED.ordinal(), address.fullAddress(), "", "", AntmailWire.encodeTag(mailbox.toPageTag(folder, page))); + } + + public static void handle(ServerPlayer player, AntmailMessageRequestPayload payload) { + ComputerBlockEntity computer = authorizedComputer(player, payload.pos()); + if (computer == null) { + result(player, payload.pos(), AntmailDeliveryResult.Status.FAILED.ordinal(), "", payload.messageId(), "unauthorized", ""); + return; + } + AntmailServerData data = AntmailServerData.access(player.server); + AntmailAddress address = data.addressAt(player.serverLevel().dimension().location(), payload.pos()); + if (address == null) { + result(player, payload.pos(), AntmailDeliveryResult.Status.ADDRESS_NOT_FOUND.ordinal(), "", payload.messageId(), "unconfigured", ""); + return; + } + try { + UUID id = UUID.fromString(payload.messageId()); + AntmailMailbox mailbox = data.mailboxOrCreate(address); + AntmailMessage message = mailbox.findInbox(id); + if (message == null) message = mailbox.findSent(id); + if (message == null) { + result(player, payload.pos(), AntmailDeliveryResult.Status.FAILED.ordinal(), address.fullAddress(), payload.messageId(), "not_found", ""); + return; + } + result(player, payload.pos(), AntmailDeliveryResult.Status.DELIVERED.ordinal(), address.fullAddress(), payload.messageId(), "message_detail", AntmailWire.encodeTag(message.toTag())); + } catch (IllegalArgumentException exception) { + result(player, payload.pos(), AntmailDeliveryResult.Status.FAILED.ordinal(), address.fullAddress(), payload.messageId(), "invalid_id", ""); + } } public static void handle(ServerPlayer player, AntmailSendPayload payload) { @@ -73,7 +110,7 @@ public final class AntmailServerHandler { List attachments = AntmailWire.decodeAttachments(payload.attachments()); AntmailMessage message = AntmailMessage.create(sender, recipient, payload.subject(), payload.body(), player.serverLevel().getGameTime(), attachments); AntmailDeliveryResult delivery = data.deliver(player.server, message); - result(player, payload.pos(), delivery.status().ordinal(), sender.fullAddress(), message.id().toString(), delivery.detail(), AntmailWire.encodeTag(data.mailboxOrCreate(sender).toTag())); + result(player, payload.pos(), delivery.status().ordinal(), sender.fullAddress(), message.id().toString(), delivery.detail(), AntmailWire.encodeTag(data.mailboxOrCreate(sender).toTag(false))); } catch (RuntimeException exception) { result(player, payload.pos(), AntmailDeliveryResult.Status.MESSAGE_INVALID.ordinal(), "", "", "invalid_message", ""); } @@ -95,13 +132,87 @@ public final class AntmailServerHandler { UUID id = UUID.fromString(payload.messageId()); AntmailMailbox mailbox = data.mailboxOrCreate(address); boolean changed = payload.read() ? mailbox.markRead(id) : markUnread(mailbox, id); - if (changed) data.setDirty(); - result(player, payload.pos(), changed ? AntmailDeliveryResult.Status.DELIVERED.ordinal() : AntmailDeliveryResult.Status.FAILED.ordinal(), address.fullAddress(), payload.messageId(), changed ? "" : "not_found", AntmailWire.encodeTag(mailbox.toTag())); + if (changed) data.touchMailbox(address); + result(player, payload.pos(), changed ? AntmailDeliveryResult.Status.DELIVERED.ordinal() : AntmailDeliveryResult.Status.FAILED.ordinal(), address.fullAddress(), payload.messageId(), changed ? "" : "not_found", AntmailWire.encodeTag(mailbox.toTag(false))); } catch (IllegalArgumentException exception) { result(player, payload.pos(), AntmailDeliveryResult.Status.FAILED.ordinal(), address.fullAddress(), payload.messageId(), "invalid_id", ""); } } + public static void handle(ServerPlayer player, AntmailDeletePayload payload) { + ComputerBlockEntity computer = authorizedComputer(player, payload.pos()); + if (computer == null) { + result(player, payload.pos(), AntmailDeliveryResult.Status.FAILED.ordinal(), "", payload.messageId(), "unauthorized", ""); + return; + } + AntmailServerData data = AntmailServerData.access(player.server); + AntmailAddress address = data.addressAt(player.serverLevel().dimension().location(), payload.pos()); + if (address == null) { + result(player, payload.pos(), AntmailDeliveryResult.Status.ADDRESS_NOT_FOUND.ordinal(), "", payload.messageId(), "unconfigured", ""); + return; + } + try { + UUID id = UUID.fromString(payload.messageId()); + AntmailMailbox mailbox = data.mailboxOrCreate(address); + boolean changed = payload.sent() ? mailbox.removeSent(id) : mailbox.removeInbox(id); + if (changed) data.touchMailbox(address); + result(player, payload.pos(), changed ? AntmailDeliveryResult.Status.DELIVERED.ordinal() : AntmailDeliveryResult.Status.FAILED.ordinal(), address.fullAddress(), payload.messageId(), changed ? "" : "not_found", AntmailWire.encodeTag(mailbox.toTag(false))); + } catch (IllegalArgumentException exception) { + result(player, payload.pos(), AntmailDeliveryResult.Status.FAILED.ordinal(), address.fullAddress(), payload.messageId(), "invalid_id", ""); + } + } + + public static void handle(ServerPlayer player, AntmailDraftPayload payload) { + ComputerBlockEntity computer = authorizedComputer(player, payload.pos()); + if (computer == null) { + result(player, payload.pos(), AntmailDeliveryResult.Status.FAILED.ordinal(), "", "", "unauthorized", ""); + return; + } + AntmailServerData data = AntmailServerData.access(player.server); + AntmailAddress address = data.addressAt(player.serverLevel().dimension().location(), payload.pos()); + if (address == null) { + result(player, payload.pos(), AntmailDeliveryResult.Status.ADDRESS_NOT_FOUND.ordinal(), "", "", "unconfigured", ""); + return; + } + AntmailMailbox mailbox = data.mailboxOrCreate(address); + try { + if (payload.action() == AntmailDraftPayload.SAVE) { + AntmailDraft draft = AntmailDraft.fromTag(AntmailWire.decodeTag(payload.data())); + AntmailDraft stored = new AntmailDraft(draft.id(), address, draft.recipient(), draft.subject(), draft.body(), draft.attachments()); + if (!mailbox.saveDraft(stored)) throw new IllegalArgumentException("draft_limit"); + } else if (payload.action() == AntmailDraftPayload.DELETE) { + if (!mailbox.removeDraft(UUID.fromString(payload.data()))) throw new IllegalArgumentException("not_found"); + } else { + throw new IllegalArgumentException("invalid_action"); + } + data.touchMailbox(address); + result(player, payload.pos(), AntmailDeliveryResult.Status.DELIVERED.ordinal(), address.fullAddress(), "", "draft_saved", AntmailWire.encodeTag(mailbox.toTag(false))); + } catch (RuntimeException exception) { + result(player, payload.pos(), AntmailDeliveryResult.Status.MESSAGE_INVALID.ordinal(), address.fullAddress(), "", "draft_failed", AntmailWire.encodeTag(mailbox.toTag(false))); + } + } + + public static void handle(ServerPlayer player, AntmailRetryPayload payload) { + ComputerBlockEntity computer = authorizedComputer(player, payload.pos()); + if (computer == null) { + result(player, payload.pos(), AntmailDeliveryResult.Status.FAILED.ordinal(), "", payload.messageId(), "unauthorized", ""); + return; + } + AntmailServerData data = AntmailServerData.access(player.server); + AntmailAddress sender = data.addressAt(player.serverLevel().dimension().location(), payload.pos()); + if (sender == null) { + result(player, payload.pos(), AntmailDeliveryResult.Status.ADDRESS_NOT_FOUND.ordinal(), "", payload.messageId(), "unconfigured", ""); + return; + } + try { + AntmailDeliveryResult delivery = data.retry(player.server, sender, UUID.fromString(payload.messageId())); + AntmailMailbox mailbox = data.mailboxOrCreate(sender); + result(player, payload.pos(), delivery == null ? AntmailDeliveryResult.Status.MESSAGE_INVALID.ordinal() : delivery.status().ordinal(), sender.fullAddress(), payload.messageId(), delivery == null ? "not_found" : delivery.detail(), AntmailWire.encodeTag(mailbox.toTag(false))); + } catch (IllegalArgumentException exception) { + result(player, payload.pos(), AntmailDeliveryResult.Status.MESSAGE_INVALID.ordinal(), sender.fullAddress(), payload.messageId(), "invalid_id", ""); + } + } + private static ComputerBlockEntity authorizedComputer(ServerPlayer player, BlockPos pos) { ComputerBlockEntity computer = computer(player, pos); return computer != null && computer.canUseFileSystem(player) ? computer : null; @@ -124,6 +235,11 @@ public final class AntmailServerHandler { } private static void result(ServerPlayer player, BlockPos pos, int status, String address, String messageId, String detail, String data) { - resultSender.accept(player, new AntmailResultPayload(pos, status, address, messageId, detail, data)); + long version = 0L; + try { + if (!address.isBlank()) version = AntmailServerData.access(player.server).mailboxVersion(AntmailAddress.parse(address)); + } catch (IllegalArgumentException ignored) { + } + resultSender.accept(player, new AntmailResultPayload(pos, status, address, messageId, detail, data, version)); } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/AntmailStateRequestPayload.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/AntmailStateRequestPayload.java index ae918088..095b54e7 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/AntmailStateRequestPayload.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/AntmailStateRequestPayload.java @@ -3,12 +3,21 @@ package com.craisinlord.antarchy.content.network; import com.craisinlord.antarchy.Antarchy; import net.minecraft.core.BlockPos; import net.minecraft.network.RegistryFriendlyByteBuf; +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 AntmailStateRequestPayload(BlockPos pos) implements CustomPacketPayload { +public record AntmailStateRequestPayload(BlockPos pos, int folder, int page, long knownVersion) implements CustomPacketPayload { + public static final int INBOX = 0; + public static final int SENT = 1; + public static final int DRAFTS = 2; public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "antmail_state_request")); - public static final StreamCodec STREAM_CODEC = StreamCodec.composite(BlockPos.STREAM_CODEC, AntmailStateRequestPayload::pos, AntmailStateRequestPayload::new); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + BlockPos.STREAM_CODEC, AntmailStateRequestPayload::pos, + ByteBufCodecs.VAR_INT, AntmailStateRequestPayload::folder, + ByteBufCodecs.VAR_INT, AntmailStateRequestPayload::page, + ByteBufCodecs.VAR_LONG, AntmailStateRequestPayload::knownVersion, + AntmailStateRequestPayload::new); @Override public Type type() { return TYPE; } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/ComputerAccessHandler.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/ComputerAccessHandler.java index 5c1bca8d..0f7bdeaf 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/ComputerAccessHandler.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/ComputerAccessHandler.java @@ -6,7 +6,12 @@ import com.craisinlord.antarchy.content.computer.terminal.TerminalCommandService import com.craisinlord.antarchy.content.computer.terminal.TerminalFileSystem; import com.craisinlord.antarchy.content.computer.terminal.TerminalResult; import com.craisinlord.antarchy.content.antmail.AntmailWire; +import com.craisinlord.antarchy.content.computer.blockle.BlockleAnswers; +import com.craisinlord.antarchy.content.computer.blockle.BlockleDictionary; +import com.craisinlord.antarchy.content.computer.blockle.BlockleGame; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.level.Level; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.entity.BlockEntity; @@ -59,6 +64,10 @@ public final class ComputerAccessHandler { case ComputerAccessPayload.TERMINAL_COMMAND -> terminalCommand(player, computer, payload); case ComputerAccessPayload.DESKTOP_STATE -> desktopState(player, computer, payload); case ComputerAccessPayload.DESKTOP_WALLPAPER -> desktopWallpaper(player, computer, payload); + case ComputerAccessPayload.BASILISK_STATE -> basiliskState(player, computer, payload); + case ComputerAccessPayload.ANTMAN_STATE -> antmanState(player, computer, payload); + case ComputerAccessPayload.BLOCKLE_STATE -> blockleState(player, computer, payload, false); + case ComputerAccessPayload.BLOCKLE_GUESS -> blockleState(player, computer, payload, true); default -> send(player, payload, ComputerAccessResultPayload.INVALID); } } @@ -91,6 +100,10 @@ public final class ComputerAccessHandler { if (computer.hasActiveUser() && !computer.isAuthenticatedBy(player)) { send(player, payload, ComputerAccessResultPayload.BUSY); } else if (computer.authenticate(player, payload.value())) { + com.craisinlord.antarchy.content.antmail.AntmailServerData data = com.craisinlord.antarchy.content.antmail.AntmailServerData.access(player.server); + net.minecraft.resources.ResourceLocation dimension = player.serverLevel().dimension().location(); + com.craisinlord.antarchy.content.antmail.AntmailAddress address = data.addressAt(dimension, computer.getBlockPos()); + if (address != null) data.setLastUsedAddress(player, address); send(player, payload, ComputerAccessResultPayload.SUCCESS); } else { send(player, payload, ComputerAccessResultPayload.INVALID_PASSWORD); @@ -128,8 +141,8 @@ public final class ComputerAccessHandler { ComputerFileSystem.ComputerFile file = computer.fileSystem().get(payload.value()); if (file == null) { sendFile(player, payload, false, "", "not_found"); - } else if (file.type() != ComputerFileSystem.ComputerFile.Type.TEXT) { - sendFile(player, payload, false, "", "not_text"); + } else if (file.type() != ComputerFileSystem.ComputerFile.Type.TEXT && file.type() != ComputerFileSystem.ComputerFile.Type.IMAGE) { + sendFile(player, payload, false, "", "not_file"); } else { sendFile(player, payload, true, file.path() + "\0" + file.contents(), ""); } @@ -269,6 +282,91 @@ public final class ComputerAccessHandler { } } + private static void basiliskState(ServerPlayer player, ComputerBlockEntity computer, ComputerAccessPayload payload) { + if (!computer.canUseFileSystem(player)) { + sendFile(player, payload, false, "", "unauthorized"); + return; + } + if (!payload.value().isBlank()) { + try { + computer.setBasiliskScore(Integer.parseInt(payload.value())); + } catch (NumberFormatException ignored) { + sendFile(player, payload, false, "", "invalid_score"); + return; + } + } + sendFile(player, payload, true, computer.basiliskScore() + "\0" + computer.basiliskHighScore(), ""); + } + + private static void antmanState(ServerPlayer player, ComputerBlockEntity computer, ComputerAccessPayload payload) { + if (!computer.canUseFileSystem(player)) { + sendFile(player, payload, false, "", "unauthorized"); + return; + } + if (!payload.value().isBlank()) { + try { + computer.setAntmanScore(Integer.parseInt(payload.value())); + } catch (NumberFormatException ignored) { + sendFile(player, payload, false, "", "invalid_score"); + return; + } + } + sendFile(player, payload, true, computer.antmanScore() + "\0" + computer.antmanHighScore(), ""); + } + + private static void blockleState(ServerPlayer player, ComputerBlockEntity computer, ComputerAccessPayload payload, boolean submit) { + if (!computer.canUseFileSystem(player)) { + sendFile(player, payload, false, "", "unauthorized"); + return; + } + ResourceLocation disk = ResourceLocation.fromNamespaceAndPath("antarchy", "blockle_game"); + if (!computer.diskIds().contains(disk)) { + sendFile(player, payload, false, "", "not_installed"); + return; + } + ServerLevel overworld = player.server.getLevel(Level.OVERWORLD); + if (overworld == null) { + sendFile(player, payload, false, "", "overworld_unavailable"); + return; + } + long day = overworld.getDayTime() / 24000L; + computer.resetBlockle(day); + BlockleAnswers.Answer answer = BlockleAnswers.answerForDay(day); + if (submit) { + String guess = payload.value() == null ? "" : payload.value().toLowerCase(java.util.Locale.ROOT); + if (guess.length() != 5 || !guess.chars().allMatch(value -> value >= 'a' && value <= 'z')) { + sendFile(player, payload, false, "", "invalid_word"); + return; + } + if (!BlockleDictionary.contains(guess)) { + sendFile(player, payload, false, "", "invalid_word"); + return; + } + if (computer.blockleGuesses().size() >= 6 || computer.blockleGuesses().stream().anyMatch(value -> value.equals(answer.word()))) { + sendFile(player, payload, false, "", "game_over"); + return; + } + computer.addBlockleGuess(guess); + } + sendFile(player, payload, true, encodeBlockle(day, answer, computer.blockleGuesses()), ""); + } + + private static String encodeBlockle(long day, BlockleAnswers.Answer answer, java.util.List guesses) { + StringBuilder result = new StringBuilder(Long.toString(day)); + boolean solved = false; + for (String guess : guesses) { + String colors = BlockleGame.evaluate(answer.word(), guess); + if (guess.equals(answer.word())) solved = true; + result.append('|').append(guess).append(',').append(colors); + } + if (solved || guesses.size() >= 6) { + result.append('|').append(solved ? "SOLVED" : "FAILED").append('|').append(answer.word()).append('|').append(answer.itemId()); + } else { + result.append('|').append("PLAYING"); + } + return result.toString(); + } + private static void sendDesktop(ServerPlayer player, ComputerAccessPayload payload, boolean success, String data) { BlockEntity blockEntity = player.serverLevel().getBlockEntity(payload.pos()); boolean hasPassword = blockEntity instanceof ComputerBlockEntity computer && computer.hasPassword(); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/ComputerAccessPayload.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/ComputerAccessPayload.java index 5cc418e7..8391f52e 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/ComputerAccessPayload.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/ComputerAccessPayload.java @@ -25,6 +25,10 @@ public record ComputerAccessPayload(BlockPos pos, int action, String value) impl public static final int FILE_DELETE = 13; public static final int FILE_MOVE = 14; public static final int TERMINAL_COMMAND = 15; + public static final int BASILISK_STATE = 16; + public static final int ANTMAN_STATE = 17; + public static final int BLOCKLE_STATE = 18; + public static final int BLOCKLE_GUESS = 19; public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "computer_access")); public static final StreamCodec STREAM_CODEC = StreamCodec.composite( BlockPos.STREAM_CODEC, ComputerAccessPayload::pos, diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/ComputerNetworking.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/ComputerNetworking.java index e3bac6f6..3393d055 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/ComputerNetworking.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/ComputerNetworking.java @@ -79,4 +79,28 @@ public final class ComputerNetworking { public static void selectWallpaper(BlockPos pos, ResourceLocation id) { sender.accept(new ComputerAccessPayload(pos, ComputerAccessPayload.DESKTOP_WALLPAPER, id.toString())); } + + public static void requestBasiliskState(BlockPos pos) { + sender.accept(new ComputerAccessPayload(pos, ComputerAccessPayload.BASILISK_STATE)); + } + + public static void saveBasiliskScore(BlockPos pos, int score) { + sender.accept(new ComputerAccessPayload(pos, ComputerAccessPayload.BASILISK_STATE, Integer.toString(Math.max(0, score)))); + } + + public static void requestAntmanState(BlockPos pos) { + sender.accept(new ComputerAccessPayload(pos, ComputerAccessPayload.ANTMAN_STATE)); + } + + public static void saveAntmanScore(BlockPos pos, int score) { + sender.accept(new ComputerAccessPayload(pos, ComputerAccessPayload.ANTMAN_STATE, Integer.toString(Math.max(0, score)))); + } + + public static void requestBlockleState(BlockPos pos) { + sender.accept(new ComputerAccessPayload(pos, ComputerAccessPayload.BLOCKLE_STATE)); + } + + public static void submitBlockleGuess(BlockPos pos, String guess) { + sender.accept(new ComputerAccessPayload(pos, ComputerAccessPayload.BLOCKLE_GUESS, guess)); + } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/VillagePoolAdditions.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/VillagePoolAdditions.java new file mode 100644 index 00000000..33d00fb9 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/VillagePoolAdditions.java @@ -0,0 +1,125 @@ +package com.craisinlord.antarchy.content.worldgen; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.mixins.PoiTypesAccessor; +import com.craisinlord.integrated_api.mixins.structures.StructurePoolAccessor; +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.mojang.datafixers.util.Pair; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import net.minecraft.core.Holder; +import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.packs.resources.Resource; +import net.minecraft.world.level.levelgen.structure.pools.StructurePoolElement; +import net.minecraft.world.level.levelgen.structure.pools.StructureTemplatePool; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureProcessorList; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.core.registries.BuiltInRegistries; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** Applies Antarchy-owned additions to existing vanilla jigsaw pools without replacing them. */ +public final class VillagePoolAdditions { + private static final Gson GSON = new Gson(); + private static final String DIRECTORY = "structure_pool_additions"; + + private VillagePoolAdditions() { + } + + public static void apply(MinecraftServer server) { + registerComputerPoiStates(server); + Registry pools = server.registryAccess().registryOrThrow(Registries.TEMPLATE_POOL); + Registry processors = server.registryAccess().registryOrThrow(Registries.PROCESSOR_LIST); + + for (Map.Entry entry : server.getResourceManager() + .listResources(DIRECTORY, path -> path.getPath().endsWith(".json")).entrySet()) { + try (java.io.Reader reader = entry.getValue().openAsReader()) { + JsonObject definition = GSON.fromJson(reader, JsonObject.class); + addToPool(pools, processors, definition, entry.getKey()); + } catch (IOException | RuntimeException exception) { + Antarchy.LOGGER.error("Failed to apply structure pool additions from {}", entry.getKey(), exception); + } + } + } + + private static void registerComputerPoiStates(MinecraftServer server) { + ResourceLocation poiId = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "computer"); + Registry poiRegistry = + server.registryAccess().registryOrThrow(Registries.POINT_OF_INTEREST_TYPE); + Holder poi = poiRegistry.getHolderOrThrow( + ResourceKey.create(Registries.POINT_OF_INTEREST_TYPE, poiId)); + Map> stateMap = + PoiTypesAccessor.antarchy$getTypeByState(); + for (BlockState state : AntarchyObjects.COMPUTER.get().getStateDefinition().getPossibleStates()) { + stateMap.put(state, poi); + } + } + + private static void addToPool( + Registry pools, + Registry processors, + JsonObject definition, + ResourceLocation source + ) { + ResourceLocation poolId = ResourceLocation.parse(definition.get("pool").getAsString()); + StructureTemplatePool pool = pools.get(poolId); + if (pool == null) { + Antarchy.LOGGER.warn("Skipping structure pool addition {} because pool {} does not exist", source, poolId); + return; + } + + JsonObject elementDefinition = definition.getAsJsonObject("element"); + ResourceLocation location = ResourceLocation.parse(elementDefinition.get("location").getAsString()); + ResourceLocation processorId = ResourceLocation.parse(stringValue( + elementDefinition, "processors", "minecraft:empty")); + Holder processor = processors.getHolderOrThrow( + ResourceKey.create(Registries.PROCESSOR_LIST, processorId)); + StructureTemplatePool.Projection projection = projection(stringValue( + elementDefinition, "projection", "rigid")); + int weight = definition.has("weight") ? definition.get("weight").getAsInt() : 1; + if (weight < 1) { + throw new IllegalArgumentException("weight must be positive"); + } + + StructurePoolElement poolElement = StructurePoolElement + .legacy(location.toString(), processor) + .apply(projection); + StructurePoolAccessor accessor = (StructurePoolAccessor) pool; + List> templates = new ArrayList<>(accessor.integratedapi_getRawTemplates()); + templates.add(Pair.of(poolElement, weight)); + accessor.integratedapi_setRawTemplates(templates); + + // StructureTemplatePool caches its weighted list in addition to the raw entries. + // Keep both views synchronized so the new house is immediately eligible. + ObjectArrayList expandedTemplates = new ObjectArrayList<>(accessor.integratedapi_getTemplates()); + for (int i = 0; i < weight; i++) { + expandedTemplates.add(poolElement); + } + accessor.integratedapi_setTemplates(expandedTemplates); + } + + private static StructureTemplatePool.Projection projection(String value) { + return switch (value) { + case "rigid" -> StructureTemplatePool.Projection.RIGID; + case "terrain_matching" -> StructureTemplatePool.Projection.TERRAIN_MATCHING; + default -> throw new IllegalArgumentException("Unknown structure pool projection: " + value); + }; + } + + private static JsonElement primitive(String value) { + return new com.google.gson.JsonPrimitive(value); + } + + private static String stringValue(JsonObject object, String key, String fallback) { + return object.has(key) ? object.get(key).getAsString() : fallback; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PlayerAdvancementsMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PlayerAdvancementsMixin.java new file mode 100644 index 00000000..6ec45eaf --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PlayerAdvancementsMixin.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.antmail.AntmailEventData; +import net.minecraft.advancements.AdvancementHolder; +import net.minecraft.server.PlayerAdvancements; +import net.minecraft.server.level.ServerPlayer; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(PlayerAdvancements.class) +public abstract class PlayerAdvancementsMixin { + @Shadow @Final private ServerPlayer player; + + @Inject(method = "award", at = @At("RETURN")) + private void antarchy$onAward(AdvancementHolder advancement, String criterion, CallbackInfoReturnable callback) { + if (callback.getReturnValueZ() && player.getAdvancements().getOrStartProgress(advancement).isDone()) AntmailEventData.onAdvancement(player, advancement); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PoiTypesAccessor.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PoiTypesAccessor.java new file mode 100644 index 00000000..83cd7050 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PoiTypesAccessor.java @@ -0,0 +1,17 @@ +package com.craisinlord.antarchy.mixins; + +import net.minecraft.core.Holder; +import net.minecraft.world.entity.ai.village.poi.PoiType; +import net.minecraft.world.level.block.state.BlockState; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.Map; + +@Mixin(net.minecraft.world.entity.ai.village.poi.PoiTypes.class) +public interface PoiTypesAccessor { + @Accessor("TYPE_BY_STATE") + static Map> antarchy$getTypeByState() { + throw new AssertionError(); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PoiTypesMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PoiTypesMixin.java new file mode 100644 index 00000000..ef9e77e9 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PoiTypesMixin.java @@ -0,0 +1,38 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.ai.village.poi.PoiType; +import net.minecraft.world.entity.ai.village.poi.PoiTypes; +import net.minecraft.world.level.block.state.BlockState; +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; + +import java.util.Optional; + +@Mixin(PoiTypes.class) +public abstract class PoiTypesMixin { + @Inject(method = "forState", at = @At("HEAD"), cancellable = true) + private static void antarchy$computerPoi(BlockState state, + CallbackInfoReturnable>> callback) { + try { + if (!state.is(AntarchyObjects.COMPUTER.get())) { + return; + } + ResourceKey key = ResourceKey.create( + Registries.POINT_OF_INTEREST_TYPE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "computer")); + BuiltInRegistries.POINT_OF_INTEREST_TYPE.getHolder(key) + .ifPresent(holder -> callback.setReturnValue(Optional.of(holder))); + } catch (IllegalStateException ignored) { + // Registration can be queried during bootstrap before loader bindings finish. + } + } +} 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 6d06cd49..0cd093bc 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,7 +4,7 @@ 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 com.craisinlord.antarchy.content.portalgun.PortalGunCollisionHelper; +// import com.craisinlord.antarchy.content.portalgun.PortalGunCollisionHelper; import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import java.util.List; @@ -349,12 +349,9 @@ public abstract class EntityMoveMixin { localMovement, cir.getReturnValue(), this.antarchy$collideWorldMovement, worldResult, entity.onGround(), entity.maxUpStep(), entity.getBoundingBox()); } - cir.setReturnValue(PortalGunCollisionHelper.resolveCollision( - entity, - entity.getBoundingBox(), - this.antarchy$collideWorldMovement, - worldResult - )); + // Portal-gun collision restoration is temporarily disabled. It can + // recurse through Sable's collision redirect and hang the server. + cir.setReturnValue(worldResult); } @Unique 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 933b2e12..0d686526 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 @@ -42,13 +42,14 @@ "NightmareSwordDamageMixin", "NightmareArmorEffectImmunityMixin", "PotionBrewingMixin", - "PortalGunEntityCollisionMixin", - "PortalGunEntityInWallMixin", + "PoiTypesAccessor", + "PoiTypesMixin", "RedStoneWireBlockMixin", "StinkyCrouchMixin", "VillagerTradesMixin", "WaterlilyLumenMixin", "ServerPlayerGameModeMixin", + "PlayerAdvancementsMixin", "SpongeAntiwaterMixin", "SquidzookaEnchantMixin", "SquidzookaMultishotMixin", 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 74801f35..ed813aee 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 @@ -1425,26 +1425,22 @@ ,"decree.antarchy.fight_me_coward.subtitle": "Approach the King." ,"decree.antarchy.no_respite": "NO RESPITE" ,"decree.antarchy.no_respite.subtitle": "Healing is sealed." - ,"decree.antarchy.no_retreat": "NO RETREAT" - ,"decree.antarchy.no_retreat.subtitle": "Do not flee the King's presence." - ,"decree.antarchy.keep_your_distance": "KEEP YOUR DISTANCE" - ,"decree.antarchy.keep_your_distance.subtitle": "Stay out of the King's reach." ,"decree.antarchy.stand_tall": "STAND TALL" ,"decree.antarchy.stand_tall.subtitle": "Do not crouch before the King." ,"decree.antarchy.stand_your_ground": "STAND YOUR GROUND" ,"decree.antarchy.stand_your_ground.subtitle": "Do not stray from where you stand." ,"decree.antarchy.hands_off_the_crown": "HANDS OFF THE CROWN" ,"decree.antarchy.hands_off_the_crown.subtitle": "Strike the King and be judged." - ,"decree.antarchy.advance": "ADVANCE" - ,"decree.antarchy.advance.subtitle": "Close on the King or be judged." ,"decree.antarchy.show_no_mercy": "SHOW NO MERCY" ,"decree.antarchy.show_no_mercy.subtitle": "Keep dealing damage." ,"menu.antarchy.royal_judgment": "Royal Judgment" ,"enchantment.antarchy.feather_rising": "Feather Rising" ,"enchantment.antarchy.chronosphere": "Chronosphere" ,"block.antarchy.computer": "Computer" + ,"entity.minecraft.villager.antarchy.computer_scientist": "Game Developer" ,"item.antarchy.computer": "Computer" ,"item.antarchy.floppy_disk": "Floppy Disk" + ,"item.antarchy.floppy_disk.tooltip": "Put in a computer to find out more" ,"screen.antarchy.computer": "ANTINTOSH OS" ,"guide.antarchy.category.general": "GENERAL" ,"guide.antarchy.category.elythia": "ELYTHIA" @@ -1457,6 +1453,10 @@ ,"guide.antarchy.disk.toreterror_arena.title": "TORETERROR ARENA DATA" ,"guide.antarchy.disk.high_fructose_corn_syrup.title": "CORN SYRUP DATA" ,"guide.antarchy.disk.elythia.title": "ELYTHIA ACCESS RECORD" + ,"guide.antarchy.disk.flying_squirrel.title": "FLYING SQUIRREL FIELD NOTES" + ,"guide.antarchy.disk.basilisk_game.title": "BASILISK.EXE" + ,"guide.antarchy.disk.antman_game.title": "ANTMAN.EXE" + ,"guide.antarchy.disk.blockle_game.title": "BLOCKLE" ,"guide.antarchy.disk.cavaryn.title": "CAVARYN ACCESS RECORD" ,"guide.antarchy.disk.thoraxis.title": "THORAXIS ACCESS RECORD" ,"guide.antarchy.disk.temporal_fields.title": "TEMPORAL FIELDS MANUAL" @@ -1474,6 +1474,9 @@ ,"guide.antarchy.entry.elythia.title": "Elythia" ,"guide.antarchy.entry.elythia.subtitle": "Dimension and portal access record" ,"guide.antarchy.entry.elythia.description": "Elythia is reached through an Elythia portal made with a valid frame. A sacrificed Brown Ant activates the portal. The dimension contains oceans, meadows, forests, coral spikes, and other surface biomes." + ,"guide.antarchy.entry.flying_squirrel.title": "Flying Squirrel" + ,"guide.antarchy.entry.flying_squirrel.subtitle": "Elythia companion record" + ,"guide.antarchy.entry.flying_squirrel.description": "You wanna get nuts? Let’s get nuts. Flying squirrels like nuts, trees, and making a dramatic exit. Feed one to befriend it, then give it plenty of canopy to climb through. If you tell it to, it will perch on top of your head. If it falls, do not panic. It may be gliding. If you fall, you have my permission to panic." ,"guide.antarchy.entry.cavaryn.title": "Cavaryn" ,"guide.antarchy.entry.cavaryn.subtitle": "Dimension and portal access record" ,"guide.antarchy.entry.cavaryn.description": "Cavaryn is reached through a Cavaryn portal made with a valid frame. A sacrificed Termite activates the portal. The dimension is a deep network of caves, including Glowcap, Biowart, Moleworm, Wormy, and Brooding Tunnel regions." diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/verdant_nyxium.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/verdant_nyxium.json index da4f5fb3..6afbf9dc 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/verdant_nyxium.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/verdant_nyxium.json @@ -1,7 +1,7 @@ { "parent": "minecraft:block/cube_bottom_top", "textures": { - "bottom": "antarchy:block/nyxite", + "bottom": "antarchy:block/typhonite", "side": "antarchy:block/verdant_nyxium", "top": "antarchy:block/verdant_nyxium_top" } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/computer.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/computer.json index ab467129..b119ecb7 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/item/computer.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/computer.json @@ -1,3 +1,232 @@ { - "parent": "builtin/entity" + "format_version": "1.21.11", + "credit": "Made with Blockbench", + "texture_size": [128, 128], + "textures": { + "0": "antarchy/item/computer", + "particle": "antarchy/item/computer" + }, + "elements": [ + { + "from": [1, 0, 1], + "to": [15, 4, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -1, 9]}, + "faces": { + "north": {"uv": [1.75, 1.75, 3.5, 2.25], "texture": "#0"}, + "east": {"uv": [0, 1.75, 1.75, 2.25], "texture": "#0"}, + "south": {"uv": [5.25, 1.75, 7, 2.25], "texture": "#0"}, + "west": {"uv": [3.5, 1.75, 5.25, 2.25], "texture": "#0"}, + "up": {"uv": [3.5, 1.75, 1.75, 0], "texture": "#0"}, + "down": {"uv": [5.25, 0, 3.5, 1.75], "texture": "#0"} + } + }, + { + "from": [11, 2, 0.95], + "to": [14, 3, 0.95], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -1, 8.95]}, + "faces": { + "north": {"uv": [12.125, 1.75, 12.5, 1.875], "texture": "#0"}, + "east": {"uv": [10.375, 1.75, 10.375, 1.875], "texture": "#0"}, + "south": {"uv": [15.625, 1.75, 16, 1.875], "texture": "#0"}, + "west": {"uv": [13.875, 1.75, 13.875, 1.875], "texture": "#0"}, + "up": {"uv": [12.5, 0, 12.125, 0], "texture": "#0"}, + "down": {"uv": [14.25, 0, 13.875, 0], "texture": "#0"} + } + }, + { + "from": [10, 1, 13], + "to": [10, 9, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [13, 3, 9]}, + "faces": { + "north": {"uv": [1.625, 8.25, 1.625, 9.25], "texture": "#0"}, + "east": {"uv": [0, 8.25, 0.375, 9.25], "texture": "#0"}, + "south": {"uv": [3.25, 8.25, 3.25, 9.25], "texture": "#0"}, + "west": {"uv": [1.625, 8.25, 3.25, 9.25], "texture": "#0"}, + "up": {"uv": [1.625, 8.25, 1.625, 6.625], "texture": "#0"}, + "down": {"uv": [1.625, 6.625, 1.625, 8.25], "texture": "#0"} + } + }, + { + "from": [6, 1, 13], + "to": [6, 9, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [9, 3, 9]}, + "faces": { + "north": {"uv": [5.625, 6.375, 5.625, 7.375], "texture": "#0"}, + "east": {"uv": [4, 6.375, 4.375, 7.375], "texture": "#0"}, + "south": {"uv": [7.25, 6.375, 7.25, 7.375], "texture": "#0"}, + "west": {"uv": [5.625, 6.375, 7.25, 7.375], "texture": "#0"}, + "up": {"uv": [5.625, 6.375, 5.625, 4.75], "texture": "#0"}, + "down": {"uv": [5.625, 4.75, 5.625, 6.375], "texture": "#0"} + } + }, + { + "from": [2, 4, 2], + "to": [14, 15, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 3, 8]}, + "faces": { + "north": {"uv": [0.5, 5.25, 2, 6.625], "texture": "#0"}, + "east": {"uv": [0, 5.25, 0.5, 6.625], "texture": "#0"}, + "south": {"uv": [2.5, 5.25, 4, 6.625], "texture": "#0"}, + "west": {"uv": [2, 5.25, 2.5, 6.625], "texture": "#0"}, + "up": {"uv": [2, 5.25, 0.5, 4.75], "texture": "#0"} + } + }, + { + "from": [3, 4, 3], + "to": [13, 14, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 3, 9]}, + "faces": { + "north": {"uv": [1.25, 3.5, 2.5, 4.75], "texture": "#0"}, + "east": {"uv": [0, 3.5, 1.25, 4.75], "texture": "#0"}, + "south": {"uv": [3.75, 3.5, 5, 4.75], "texture": "#0"}, + "west": {"uv": [2.5, 3.5, 3.75, 4.75], "texture": "#0"}, + "up": {"uv": [2.5, 3.5, 1.25, 2.25], "texture": "#0"}, + "down": {"uv": [3.75, 2.25, 2.5, 3.5], "texture": "#0"} + } + }, + { + "from": [2.5, 3.9, 2.4], + "to": [13.5, 14.9, 2.4], + "rotation": {"angle": 0, "axis": "y", "origin": [7.5, 2.9, 8.4]}, + "faces": { + "north": {"uv": [9.625, 4.125, 11.75, 6.25], "texture": "#0"}, + "east": {"uv": [5, 2.25, 5, 3.625], "texture": "#0"}, + "south": {"uv": [6.375, 2.25, 7.75, 3.625], "texture": "#0"}, + "west": {"uv": [6.375, 2.25, 6.375, 3.625], "texture": "#0"}, + "up": {"uv": [6.375, 2.25, 5, 2.25], "texture": "#0"}, + "down": {"uv": [7.75, 2.25, 6.375, 2.25], "texture": "#0"} + } + }, + { + "from": [2.5, 3.9, 2.35], + "to": [13.5, 14.9, 2.35], + "rotation": {"angle": 0, "axis": "y", "origin": [7.5, 2.9, 8.35]}, + "faces": { + "north": {"uv": [12.25, 3.9375, 14.375, 6.0625], "texture": "#0"}, + "east": {"uv": [5, 2.25, 5, 3.625], "texture": "#0"}, + "south": {"uv": [6.375, 2.25, 7.75, 3.625], "texture": "#0"}, + "west": {"uv": [6.375, 2.25, 6.375, 3.625], "texture": "#0"}, + "up": {"uv": [6.375, 2.25, 5, 2.25], "texture": "#0"}, + "down": {"uv": [7.75, 2.25, 6.375, 2.25], "texture": "#0"} + } + }, + { + "from": [2.5, 3.9, 2.6], + "to": [13.5, 14.9, 2.6], + "rotation": {"angle": 0, "axis": "y", "origin": [7.5, 2.9, 8.6]}, + "faces": { + "north": {"uv": [9.625, 6.25, 11.75, 8.375], "texture": "#0"}, + "east": {"uv": [7.25, 3.625, 7.25, 5], "texture": "#0"}, + "south": {"uv": [7.75, 5.75, 9.125, 7.125], "texture": "#0"}, + "west": {"uv": [8.625, 3.625, 8.625, 5], "texture": "#0"}, + "up": {"uv": [8.625, 3.625, 7.25, 3.625], "texture": "#0"}, + "down": {"uv": [10, 3.625, 8.625, 3.625], "texture": "#0"} + } + }, + { + "from": [2.5, 3.9, 2.45], + "to": [13.5, 14.9, 2.45], + "rotation": {"angle": 0, "axis": "y", "origin": [7.5, 2.9, 8.45]}, + "faces": { + "north": {"uv": [7, 0, 8.375, 1.375], "texture": "#0"}, + "east": {"uv": [7, 0, 7, 1.375], "texture": "#0"}, + "south": {"uv": [8.375, 0, 9.75, 1.375], "texture": "#0"}, + "west": {"uv": [8.375, 0, 8.375, 1.375], "texture": "#0"}, + "up": {"uv": [8.375, 0, 7, 0], "texture": "#0"}, + "down": {"uv": [9.75, 0, 8.375, 0], "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "computer", + "origin": [13, 3, 9], + "scope": 0, + "color": 0, + "children": [ + 0, + { + "name": "computer_on", + "origin": [8, -1, 8.95], + "scope": 0, + "color": 0, + "children": [1] + }, + { + "name": "cables", + "origin": [13, 3, 9], + "scope": 0, + "color": 0, + "children": [2, 3] + }, + { + "name": "monitor", + "origin": [8, 3, 8], + "scope": 0, + "color": 0, + "children": [ + 4, + 5, + { + "name": "screens", + "origin": [7.5, 2.9, 8.5], + "scope": 0, + "color": 0, + "children": [ + { + "name": "on", + "origin": [8, 9.4, 2.375], + "scope": 0, + "color": 0, + "children": [6, 7] + }, + { + "name": "off", + "origin": [8, 9.4, 2.6], + "scope": 0, + "color": 0, + "children": [8] + }, + { + "name": "white_flash", + "origin": [8, 9.4, 2.45], + "scope": 0, + "color": 0, + "children": [9] + } + ] + } + ] + } + ] + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "rotation": [0, 180, 0], + "scale": [0.5, 0.5, 0.5] + } + } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/floppy_disk.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/floppy_disk.json index c2f12045..20b0be13 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/item/floppy_disk.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/floppy_disk.json @@ -2,5 +2,19 @@ "parent": "minecraft:item/generated", "textures": { "layer0": "antarchy:item/floppy_disk/floppy_disk" - } + }, + "overrides": [ + { + "predicate": {"antarchy:disk_category": 1.0}, + "model": "antarchy:item/floppy_disk/elythia_floppy_disk" + }, + { + "predicate": {"antarchy:disk_category": 2.0}, + "model": "antarchy:item/floppy_disk/cavaryn_floppy_disk" + }, + { + "predicate": {"antarchy:disk_category": 3.0}, + "model": "antarchy:item/floppy_disk/thoraxis_floppy_disk" + } + ] } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/floppy_disk/cavaryn_floppy_disk.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/floppy_disk/cavaryn_floppy_disk.json new file mode 100644 index 00000000..3360a214 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/floppy_disk/cavaryn_floppy_disk.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/floppy_disk/cavaryn_floppy_disk" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/floppy_disk/elythia_floppy_disk.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/floppy_disk/elythia_floppy_disk.json new file mode 100644 index 00000000..fbe4e65b --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/floppy_disk/elythia_floppy_disk.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/floppy_disk/elythia_floppy_disk" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/floppy_disk/thoraxis_floppy_disk.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/floppy_disk/thoraxis_floppy_disk.json new file mode 100644 index 00000000..8bf4e26e --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/floppy_disk/thoraxis_floppy_disk.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/floppy_disk/thoraxis_floppy_disk" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/villager/profession/computer_scientist.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/villager/profession/computer_scientist.png new file mode 100644 index 00000000..420cfcfe Binary files /dev/null and b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/villager/profession/computer_scientist.png differ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/villager/profession/computer_scientist.png.mcmeta b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/villager/profession/computer_scientist.png.mcmeta new file mode 100644 index 00000000..4525a63b --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/villager/profession/computer_scientist.png.mcmeta @@ -0,0 +1,5 @@ +{ + "villager": { + "hat": "full" + } +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/antmail/message/bloxiclean_queen_clean.json b/common-1.21.1/src/main/resources/data/antarchy/antmail/message/bloxiclean_queen_clean.json new file mode 100644 index 00000000..4fb9213f --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/antmail/message/bloxiclean_queen_clean.json @@ -0,0 +1,9 @@ +{ + "sender": "bloxiclean@antmail.com", + "subject": "IS YOUR HIVE QUEEN DUSTY?", + "body": "Bloxiclean now offers premium royal-area cleaning. We remove ash, ichor, bloodglass dust, and other difficult stains. Queen not included. Prices may vary by dimension.", + "trigger": { + "type": "random", + "value": 0.01 + } +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/antmail/message/bloxiclean_sparkle.json b/common-1.21.1/src/main/resources/data/antarchy/antmail/message/bloxiclean_sparkle.json new file mode 100644 index 00000000..054dcbd8 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/antmail/message/bloxiclean_sparkle.json @@ -0,0 +1,9 @@ +{ + "sender": "bloxiclean@antmail.com", + "subject": "BLOXICLEAN: WE MAKE BLOCKS SPARKLE", + "body": "Cobwebs? Sculk? Suspicious residue? Bloxiclean removes nearly anything from nearly anywhere. Book your complimentary pressure-wash before the stains become lore.", + "trigger": { + "type": "random", + "value": 0.01 + } +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/antmail/message/coldcraft_city_tourism.json b/common-1.21.1/src/main/resources/data/antarchy/antmail/message/coldcraft_city_tourism.json new file mode 100644 index 00000000..fac3bde7 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/antmail/message/coldcraft_city_tourism.json @@ -0,0 +1,9 @@ +{ + "sender": "coldcraft@antmail.com", + "subject": "COLDCRAFT CITY: YOUR NEXT DESTINATION", + "body": "Visit ColdCraft City! See Big Ben, go shopping, and ride the Ferris wheel. Bring a coat, some spending money, and a plan for getting home.", + "trigger": { + "type": "random", + "value": 0.01 + } +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/antmail/message/dicaprios_dinner.json b/common-1.21.1/src/main/resources/data/antarchy/antmail/message/dicaprios_dinner.json new file mode 100644 index 00000000..b6f1f85a --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/antmail/message/dicaprios_dinner.json @@ -0,0 +1,9 @@ +{ + "sender": "dicaprios@antmail.com", + "subject": "A TASTE OF ITALY AWAITS", + "body": "DiCaprio's is now serving handmade pasta, suspiciously expensive bread, and a tiramisu that may know your secrets. Reserve a table today. Formal armor encouraged.", + "trigger": { + "type": "random", + "value": 0.01 + } +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/antmail/message/welcome_day.json b/common-1.21.1/src/main/resources/data/antarchy/antmail/message/welcome_day.json new file mode 100644 index 00000000..19ad2161 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/antmail/message/welcome_day.json @@ -0,0 +1,9 @@ +{ + "sender": "dr_traeoris@antmail.com", + "subject": "WELCOME TO ANTMAIL", + "body": "Your address has been registered. If this message arrived late, the network probably had ants in it.", + "trigger": { + "type": "advancement", + "value": "minecraft:story/root" + } +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/computer/disk/antman_game.json b/common-1.21.1/src/main/resources/data/antarchy/computer/disk/antman_game.json new file mode 100644 index 00000000..75f1e29d --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/computer/disk/antman_game.json @@ -0,0 +1,4 @@ +{ + "title": "guide.antarchy.disk.antman_game.title", + "entries": [] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/computer/disk/basilisk_game.json b/common-1.21.1/src/main/resources/data/antarchy/computer/disk/basilisk_game.json new file mode 100644 index 00000000..b9a5dbcb --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/computer/disk/basilisk_game.json @@ -0,0 +1,5 @@ +{ + "category": "elythia", + "title": "guide.antarchy.disk.basilisk_game.title", + "entries": [] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/computer/disk/blockle_game.json b/common-1.21.1/src/main/resources/data/antarchy/computer/disk/blockle_game.json new file mode 100644 index 00000000..3d826c18 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/computer/disk/blockle_game.json @@ -0,0 +1,4 @@ +{ + "title": "guide.antarchy.disk.blockle_game.title", + "entries": [] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/computer/disk/flying_squirrel.json b/common-1.21.1/src/main/resources/data/antarchy/computer/disk/flying_squirrel.json new file mode 100644 index 00000000..ac77c8ca --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/computer/disk/flying_squirrel.json @@ -0,0 +1,5 @@ +{ + "category": "elythia", + "title": "guide.antarchy.disk.flying_squirrel.title", + "entries": ["antarchy:flying_squirrel"] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/computer/entry/flying_squirrel.json b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/flying_squirrel.json new file mode 100644 index 00000000..34a61e11 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/computer/entry/flying_squirrel.json @@ -0,0 +1,8 @@ +{ + "type": "mob", + "category": "elythia", + "title": "guide.antarchy.entry.flying_squirrel.title", + "subtitle": "guide.antarchy.entry.flying_squirrel.subtitle", + "description": ["guide.antarchy.entry.flying_squirrel.description"], + "entity": "antarchy:flying_squirrel" +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/computer_scientist_trades/trades.json b/common-1.21.1/src/main/resources/data/antarchy/computer_scientist_trades/trades.json new file mode 100644 index 00000000..27bf53b1 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/computer_scientist_trades/trades.json @@ -0,0 +1,20 @@ +{ + "trades": [ + {"level": 1, "index": 0, "buy": {"item": "minecraft:redstone", "min": 12, "max": 16}, "sell": {"item": "minecraft:emerald", "min": 1, "max": 2}}, + {"level": 1, "index": 1, "buy": {"item": "antarchy:bluestone", "min": 6, "max": 10}, "sell": {"item": "minecraft:emerald", "min": 1, "max": 2}}, + {"level": 1, "index": 2, "buy": {"item": "minecraft:emerald", "min": 2, "max": 4}, "sell": {"item": "antarchy:duct_tape", "min": 1, "max": 2}}, + {"level": 1, "index": 3, "buy": {"item": "antarchy:floppy_disk", "min": 1, "max": 1}, "sell": {"item": "minecraft:emerald", "min": 4, "max": 8}}, + {"level": 2, "index": 0, "buy": {"item": "minecraft:emerald", "min": 4, "max": 8}, "sell": {"item": "antarchy:floppy_disk", "min": 1, "max": 1}, "sell_disk": "random_general"}, + {"level": 2, "index": 1, "buy": {"item": "antarchy:floppy_disk", "min": 12, "max": 20}, "sell": {"item": "antarchy:floppy_disk", "min": 1, "max": 1}, "sell_disk": "antarchy:toreterror_arena"}, + {"level": 3, "index": 0, "buy": {"item": "antarchy:vortex_charge", "min": 1, "max": 1}, "sell": {"item": "minecraft:emerald", "min": 10, "max": 10}}, + {"level": 3, "index": 1, "buy": {"item": "antarchy:flytrap_goo", "min": 1, "max": 1}, "sell": {"item": "minecraft:emerald", "min": 10, "max": 10}}, + {"level": 4, "index": 0, "buy": {"item": "minecraft:emerald", "min": 8, "max": 16}, "sell": {"item": "minecraft:comparator", "min": 1, "max": 2}}, + {"level": 4, "index": 1, "buy": {"item": "minecraft:emerald", "min": 12, "max": 20}, "sell": {"item": "antarchy:bluestone_comparator", "min": 1, "max": 2}}, + {"level": 4, "index": 2, "buy": {"item": "antarchy:antimetal", "min": 1, "max": 2}, "sell": {"item": "minecraft:emerald", "min": 8, "max": 16}}, + {"level": 5, "index": 0, "buy": {"item": "minecraft:emerald", "min": 32, "max": 64}, "sell": {"item": "antarchy:uranium_nugget", "min": 1, "max": 1}}, + {"level": 5, "index": 1, "buy": {"item": "minecraft:emerald", "min": 32, "max": 64}, "sell": {"item": "antarchy:titanium_nugget", "min": 1, "max": 1}}, + {"level": 5, "index": 2, "buy": {"item": "minecraft:emerald", "min": 16, "max": 32}, "sell": {"item": "antarchy:rainbow_sugar", "min": 1, "max": 2}}, + {"level": 5, "index": 3, "buy": {"item": "minecraft:emerald", "min": 24, "max": 40}, "sell": {"item": "antarchy:floppy_disk", "min": 1, "max": 1}, "sell_disk": "antarchy:antman_game", "max_uses": 1, "chance": 0.35}, + {"level": 5, "index": 4, "buy": {"item": "minecraft:emerald", "min": 24, "max": 40}, "sell": {"item": "antarchy:floppy_disk", "min": 1, "max": 1}, "sell_disk": "antarchy:blockle_game", "max_uses": 1, "chance": 0.35} + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/basilisk_lair/treasure.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/basilisk_lair/treasure.json index 3c2530ea..69ebd4dc 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/basilisk_lair/treasure.json +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/basilisk_lair/treasure.json @@ -34,6 +34,19 @@ } ] }, + { + "type": "minecraft:item", + "name": "antarchy:floppy_disk", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_components", + "components": { + "antarchy:floppy_disk": "antarchy:basilisk_game" + } + } + ] + }, { "type": "minecraft:item", "name": "minecraft:diamond", diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/computer_prototype.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/computer_prototype.json index 7e2bfce1..0d25df8b 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/computer_prototype.json +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/chests/computer_prototype.json @@ -30,6 +30,19 @@ } ] }, + { + "type": "minecraft:item", + "name": "antarchy:floppy_disk", + "weight": 4, + "functions": [ + { + "function": "minecraft:set_components", + "components": { + "antarchy:floppy_disk": "antarchy:flying_squirrel" + } + } + ] + }, { "type": "minecraft:item", "name": "antarchy:floppy_disk", @@ -42,6 +55,19 @@ } } ] + }, + { + "type": "minecraft:item", + "name": "antarchy:floppy_disk", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_components", + "components": { + "antarchy:floppy_disk": "antarchy:basilisk_game" + } + } + ] } ] } diff --git a/common-1.21.1/src/main/resources/data/antarchy/structure/village/computer_scientist_house.nbt b/common-1.21.1/src/main/resources/data/antarchy/structure/village/computer_scientist_house.nbt new file mode 100644 index 00000000..7a2a9f41 Binary files /dev/null and b/common-1.21.1/src/main/resources/data/antarchy/structure/village/computer_scientist_house.nbt differ diff --git a/common-1.21.1/src/main/resources/data/antarchy/structure_pool_additions/computer_scientist_house.json b/common-1.21.1/src/main/resources/data/antarchy/structure_pool_additions/computer_scientist_house.json new file mode 100644 index 00000000..7bc949e1 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/structure_pool_additions/computer_scientist_house.json @@ -0,0 +1,9 @@ +{ + "pool": "minecraft:village/plains/houses", + "element": { + "location": "antarchy:village/computer_scientist_house", + "processors": "minecraft:empty", + "projection": "rigid" + }, + "weight": 1 +} diff --git a/common-1.21.1/src/main/resources/data/minecraft/tags/point_of_interest_type/acquirable_job_site.json b/common-1.21.1/src/main/resources/data/minecraft/tags/point_of_interest_type/acquirable_job_site.json new file mode 100644 index 00000000..df36bb72 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/minecraft/tags/point_of_interest_type/acquirable_job_site.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:computer" + ] +} diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java index 15c782d9..03436618 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java @@ -4,6 +4,7 @@ import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.compat.infinity.InfinityCompat; import com.craisinlord.antarchy.compat.infinity.InfinityCompatVersion; import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.enchantment.AntarchyEnchantments; import com.craisinlord.antarchy.content.block.*; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.item.BloodCrystalKatanaItem; @@ -107,6 +108,7 @@ public final class AntarchyFabricContent { AntarchyFabricMisc.POTIONS.register(); AntarchyFabricItems.ITEMS.register(); AntarchyFabricMisc.MENUS.register(); + AntarchyFabricMisc.ENCHANTMENTS.register(); AntarchyFabricMisc.RECIPE_SERIALIZERS.register(); AntarchyFabricCreativeModeTabs.CREATIVE_MODE_TABS.register(); @@ -448,6 +450,7 @@ public final class AntarchyFabricContent { com.craisinlord.antarchy.content.time.TimeDilationApi.setFieldSyncDispatcher( com.craisinlord.antarchy.fabric.network.AntarchyFabricTimeDilationNetworking::syncFields); AntarchyObjects.setTimeDilationField(() -> AntarchyFabricEntities.TIME_DILATION_FIELD.get()); + AntarchyEnchantments.bind(() -> AntarchyFabricMisc.FEATHER_RISING.get(), () -> AntarchyFabricMisc.CHRONOSPHERE.get()); AntarchyObjects.setRoyalAssailantBlackHole(() -> AntarchyFabricEntities.ROYAL_ASSAILANT_BLACK_HOLE.get()); AntarchyObjects.setDilatedEffect(() -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.DILATED)); AntarchyObjects.setContractedEffect(() -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.CONTRACTED)); diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java index d2759984..356796b5 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java @@ -20,6 +20,7 @@ import com.craisinlord.antarchy.content.portal.PermanentPortalManager; import com.craisinlord.antarchy.content.command.CavarynCommand; import com.craisinlord.antarchy.content.command.CaterpillarCommand; import com.craisinlord.antarchy.content.command.GravityCommand; +import com.craisinlord.antarchy.content.command.QueenLocateCommand; import com.craisinlord.antarchy.content.time.TimeDilationCommand; import com.craisinlord.antarchy.content.time.TimeDilationManager; import com.craisinlord.antarchy.content.item.MinersDreamExcavationManager; @@ -72,6 +73,7 @@ public final class AntarchyFabricEvents { CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> { CavarynCommand.register(dispatcher); GravityCommand.register(dispatcher); + QueenLocateCommand.register(dispatcher); CaterpillarCommand.register(dispatcher); TimeDilationCommand.register(dispatcher); }); diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java index f10d5dd6..3e6b34ba 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java @@ -87,6 +87,14 @@ public final class AntarchyFabricClientBootstrap { (net.minecraft.world.level.block.entity.BlockEntityType) AntarchyFabricBlocks.CRITTER_CAGE_BLOCK_ENTITY.get(), (BlockEntityRendererProvider) CritterCageRenderer::new ); + BlockEntityRendererRegistry.register( + (net.minecraft.world.level.block.entity.BlockEntityType) AntarchyFabricBlocks.UNDERTRIAL_SPAWNER_BLOCK_ENTITY.get(), + (BlockEntityRendererProvider) UndertrialSpawnerRenderer::new + ); + BlockEntityRendererRegistry.register( + (net.minecraft.world.level.block.entity.BlockEntityType) AntarchyFabricBlocks.UNDERVAULT_BLOCK_ENTITY.get(), + (BlockEntityRendererProvider) UnderVaultRenderer::new + ); EntityRendererRegistry.register(AntarchyFabricEntities.EASTER_BUNNY.get(), EasterBunnyRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.FLYING_SQUIRREL.get(), FlyingSquirrelRenderer::new); @@ -296,6 +304,9 @@ public final class AntarchyFabricClientBootstrap { registry.register(AntarchyFabricMisc.ORANGE_ASH.get(), OrangeAshParticle.Provider::new); registry.register(AntarchyFabricMisc.LUCID_BOLT_IMPACT_SMALL.get(), LucidBoltImpactParticle.SmallProvider::new); registry.register(AntarchyFabricMisc.LUCID_BOLT_IMPACT_LARGE.get(), LucidBoltImpactParticle.LargeProvider::new); + registry.register(AntarchyFabricMisc.UNDERTRIAL_SPAWNER_DETECTION.get(), UndertrialParticle.DetectionProvider::new); + registry.register(AntarchyFabricMisc.UNDERTRIAL_OMEN.get(), UndertrialParticle.OmenProvider::new); + registry.register(AntarchyFabricMisc.UNDERVAULT_CONNECTION.get(), UndertrialParticle.OmenProvider::new); } private static void registerRenderLayers() { diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricBlocks.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricBlocks.java index ed66d071..d144ed9a 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricBlocks.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricBlocks.java @@ -12,6 +12,9 @@ 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.block.entity.UndertrialSpawnerBlockEntity; +import com.craisinlord.antarchy.content.block.entity.UnderVaultBlockEntity; +import com.craisinlord.antarchy.content.block.entity.QueenTrailSpawnMarkerBlockEntity; import com.craisinlord.antarchy.content.fluid.BileLiquidBlock; import com.craisinlord.antarchy.content.fluid.LumenLiquidBlock; import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterLiquidBlock; @@ -488,7 +491,7 @@ public final class AntarchyFabricBlocks { () -> new RotatedPillarBlock(AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock TRIFFID_GOO_BLOCK = BLOCKS.register("triffid_goo_block", + public static final DeferredBlock TRIFFID_GOO_BLOCK = BLOCKS.register("flytrap_goo_block", () -> new com.craisinlord.antarchy.content.block.TriffidGooBlock(BlockBehaviour.Properties.copy(Blocks.SLIME_BLOCK).noOcclusion().isViewBlocking((s, l, p) -> false).isSuffocating((s, l, p) -> false))); @@ -694,11 +697,11 @@ public final class AntarchyFabricBlocks { .replaceable())); - public static final DeferredBlock CREEPING_HORROR_EGG = BLOCKS.register("creeping_horror_egg", + public static final DeferredBlock CREEPING_HORROR_EGG = BLOCKS.register("crawling_blight_egg", () -> new CreepingHorrorEggBlock(BlockBehaviour.Properties.copy(Blocks.TURTLE_EGG))); - public static final DeferredBlock JUMPY_BUG_EGG = BLOCKS.register("jumpy_bug_egg", + public static final DeferredBlock JUMPY_BUG_EGG = BLOCKS.register("springbug_egg", () -> new JumpyBugEggBlock(BlockBehaviour.Properties.copy(Blocks.TURTLE_EGG))); @@ -710,7 +713,7 @@ public final class AntarchyFabricBlocks { () -> new JerryEggBlock(BlockBehaviour.Properties.copy(Blocks.TURTLE_EGG).randomTicks())); - public static final DeferredBlock LURKING_TERROR_EGG = BLOCKS.register("lurking_terror_egg", + public static final DeferredBlock LURKING_TERROR_EGG = BLOCKS.register("skulking_fright_egg", () -> new LurkingTerrorEggBlock(BlockBehaviour.Properties.copy(Blocks.TURTLE_EGG))); @@ -1086,6 +1089,16 @@ public final class AntarchyFabricBlocks { public static final DeferredBlock STAR_CORAL_WALL_FAN = BLOCKS.register("star_coral_wall_fan", () -> new StarCoralWallFanBlock(DEAD_STAR_CORAL_WALL_FAN.get(), BlockBehaviour.Properties.copy(Blocks.TUBE_CORAL_WALL_FAN).lightLevel(state -> 8))); + public static final DeferredBlock UNDERTRIAL_SPAWNER = BLOCKS.register("undertrial_spawner", + () -> new UndertrialSpawnerBlock(AntarchyFabricBlocks::undertrialSpawnerBlockEntityType, + BlockBehaviour.Properties.copy(Blocks.OBSIDIAN).noOcclusion())); + public static final DeferredBlock UNDERVAULT = BLOCKS.register("undervault", + () -> new UnderVaultBlock(AntarchyFabricBlocks::underVaultBlockEntityType, + BlockBehaviour.Properties.copy(Blocks.OBSIDIAN).noOcclusion())); + public static final DeferredBlock QUEEN_TRAIL_SPAWN_MARKER = BLOCKS.register("queen_trail_spawn_marker", + () -> new QueenTrailSpawnMarkerBlock(AntarchyFabricBlocks::queenTrailSpawnMarkerBlockEntityType, + BlockBehaviour.Properties.of().noCollission().noOcclusion().noLootTable().strength(-1.0F))); + public static final DeferredHolder, BlockEntityType> ANT_NEST_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("ant_nest", () -> BlockEntityType.Builder.of( @@ -1148,6 +1161,27 @@ public final class AntarchyFabricBlocks { (pos, state) -> new UpperBlockEntity(pos, state, AntarchyFabricBlocks::upperBlockEntityType), UPPER.get() ).build(null)); + public static final DeferredHolder, BlockEntityType> UNDERTRIAL_SPAWNER_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("undertrial_spawner", + () -> BlockEntityType.Builder.of((pos, state) -> new UndertrialSpawnerBlockEntity(pos, state, AntarchyFabricBlocks::undertrialSpawnerBlockEntityType), + UNDERTRIAL_SPAWNER.get()).build(null)); + public static final DeferredHolder, BlockEntityType> UNDERVAULT_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("undervault", + () -> BlockEntityType.Builder.of((pos, state) -> new UnderVaultBlockEntity(pos, state, AntarchyFabricBlocks::underVaultBlockEntityType), + UNDERVAULT.get()).build(null)); + public static final DeferredHolder, BlockEntityType> QUEEN_TRAIL_SPAWN_MARKER_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("queen_trail_spawn_marker", + () -> BlockEntityType.Builder.of((pos, state) -> new QueenTrailSpawnMarkerBlockEntity(pos, state, AntarchyFabricBlocks::queenTrailSpawnMarkerBlockEntityType), + QUEEN_TRAIL_SPAWN_MARKER.get()).build(null)); + + private static BlockEntityType undertrialSpawnerBlockEntityType() { + return UNDERTRIAL_SPAWNER_BLOCK_ENTITY.get(); + } + + private static BlockEntityType underVaultBlockEntityType() { + return UNDERVAULT_BLOCK_ENTITY.get(); + } + + private static BlockEntityType queenTrailSpawnMarkerBlockEntityType() { + return QUEEN_TRAIL_SPAWN_MARKER_BLOCK_ENTITY.get(); + } diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java index 39ccff3e..965075da 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java @@ -163,11 +163,11 @@ public final class AntarchyFabricEntities { .build("molevore")); - public static final DeferredHolder, EntityType> TRIFFID = ENTITY_TYPES.register("triffid", + public static final DeferredHolder, EntityType> TRIFFID = ENTITY_TYPES.register("flytrap", () -> EntityType.Builder.of(TriffidEntity::new, MobCategory.MONSTER) .sized(2.0F, 5.0F) .clientTrackingRange(10) - .build("triffid")); + .build("flytrap")); public static final DeferredHolder, EntityType> BED_BUG = ENTITY_TYPES.register("bed_bug", @@ -198,11 +198,11 @@ public final class AntarchyFabricEntities { .build("bomber")); - public static final DeferredHolder, EntityType> JUMPY_BUG = ENTITY_TYPES.register("jumpy_bug", + public static final DeferredHolder, EntityType> JUMPY_BUG = ENTITY_TYPES.register("springbug", () -> EntityType.Builder.of(JumpyBugEntity::new, MobCategory.MONSTER) .sized(3.0F, 6.0F) .clientTrackingRange(8) - .build("jumpy_bug")); + .build("springbug")); public static final DeferredHolder, EntityType> SPIT_BUG = ENTITY_TYPES.register("spit_bug", @@ -305,11 +305,11 @@ public final class AntarchyFabricEntities { .build("dr_trayaurus")); - public static final DeferredHolder, EntityType> CLOUD_SHARK = ENTITY_TYPES.register("cloud_shark", + public static final DeferredHolder, EntityType> CLOUD_SHARK = ENTITY_TYPES.register("stratoshark", () -> EntityType.Builder.of(CloudSharkEntity::new, MobCategory.MONSTER) .sized(2.4F, 0.9F) .clientTrackingRange(10) - .build("cloud_shark")); + .build("stratoshark")); public static final DeferredHolder, EntityType> KRAKEN = ENTITY_TYPES.register("kraken", @@ -493,18 +493,18 @@ public final class AntarchyFabricEntities { - public static final DeferredHolder, EntityType> CREEPING_HORROR = ENTITY_TYPES.register("creeping_horror", + public static final DeferredHolder, EntityType> CREEPING_HORROR = ENTITY_TYPES.register("crawling_blight", () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.CreepingHorrorEntity::new, MobCategory.MONSTER) .sized(1.3F, 1.5F) .clientTrackingRange(10) - .build("creeping_horror")); + .build("crawling_blight")); - public static final DeferredHolder, EntityType> LURKING_TERROR = ENTITY_TYPES.register("lurking_terror", + public static final DeferredHolder, EntityType> LURKING_TERROR = ENTITY_TYPES.register("skulking_fright", () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.LurkingTerrorEntity::new, MobCategory.MONSTER) .sized(1.3F, 1.5F) .clientTrackingRange(10) - .build("lurking_terror")); + .build("skulking_fright")); public static final DeferredHolder, EntityType> JERRY = ENTITY_TYPES.register("jerry", 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 16e1f94e..8e926f20 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 @@ -659,7 +659,7 @@ public final class AntarchyFabricItems { public static final DeferredItem SHELLSTONE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SHELLSTONE_BRICK_WALL); - public static final DeferredItem TRIFFID_GOO_BLOCK_ITEM = ITEMS.register("triffid_goo_block", + public static final DeferredItem TRIFFID_GOO_BLOCK_ITEM = ITEMS.register("flytrap_goo_block", () -> new com.craisinlord.antarchy.content.item.TriffidGooBlockItem(AntarchyFabricBlocks.TRIFFID_GOO_BLOCK.get(), new Item.Properties())); @@ -715,6 +715,9 @@ public final class AntarchyFabricItems { public static final DeferredItem HANGING_CREEPROOTS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.HANGING_CREEPROOTS); public static final DeferredItem GLOWCAP_MUSHROOM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.GLOWCAP_MUSHROOM); public static final DeferredItem GLOWCAP_MUSHROOM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.GLOWCAP_MUSHROOM_BLOCK); + public static final DeferredItem UNDERTRIAL_SPAWNER_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.UNDERTRIAL_SPAWNER); + public static final DeferredItem UNDERVAULT_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.UNDERVAULT); + public static final DeferredItem UNDERTRIAL_KEY = ITEMS.registerSimpleItem("undertrial_key", new Item.Properties()); public static final DeferredItem MOLTING_VINES_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MOLTING_VINES); @@ -830,10 +833,10 @@ public final class AntarchyFabricItems { public static final DeferredItem STINK_BUG_ITEM = 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_BUG_LEG = ITEMS.registerSimpleItem("springbug_leg", new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem JUMPY_BOOTS = ITEMS.register("jumpy_boots", + public static final DeferredItem JUMPY_BOOTS = ITEMS.register("springy_boots", () -> new com.craisinlord.antarchy.content.item.JumpyBootsItem( AntarchyFabricMisc.JUMPY_BOOTS_ARMOR_MATERIAL, new Item.Properties().stacksTo(1).rarity(Rarity.UNCOMMON).fireResistant().durability(AntarchyFabricMisc.JUMPY_BOOTS_ARMOR_MATERIAL.getDurabilityForType(ArmorItem.Type.BOOTS)) @@ -974,7 +977,7 @@ public final class AntarchyFabricItems { .build()))); - public static final DeferredItem TRIFFID_GOO = ITEMS.registerSimpleItem("triffid_goo", + public static final DeferredItem TRIFFID_GOO = ITEMS.registerSimpleItem("flytrap_goo", new Item.Properties().rarity(Rarity.UNCOMMON)); @@ -1033,10 +1036,10 @@ public final class AntarchyFabricItems { .build()))); - public static final DeferredItem CLOUD_SHARK_FIN = ITEMS.registerSimpleItem("cloud_shark_fin", new Item.Properties().rarity(Rarity.UNCOMMON)); + public static final DeferredItem CLOUD_SHARK_FIN = ITEMS.registerSimpleItem("stratoshark_fin", new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem CLOUD_SHARK_FIN_SOUP = ITEMS.register("cloud_shark_fin_soup", + public static final DeferredItem CLOUD_SHARK_FIN_SOUP = ITEMS.register("stratoshark_fin_soup", () -> new CloudSharkFinSoupItem(new Item.Properties() .stacksTo(1) .craftRemainder(Items.BOWL) @@ -1400,7 +1403,7 @@ public final class AntarchyFabricItems { () -> new DeferredSpawnEggItem(AntarchyFabricEntities.MOLEVORE, 0x4A4A4A, 0x6B4A2B, new Item.Properties().rarity(Rarity.UNCOMMON))); - public static final DeferredItem TRIFFID_SPAWN_EGG = ITEMS.register("triffid_spawn_egg", + public static final DeferredItem TRIFFID_SPAWN_EGG = ITEMS.register("flytrap_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyFabricEntities.TRIFFID, 0x4C8F3A, 0xFF2FB3, new Item.Properties().rarity(Rarity.UNCOMMON))); @@ -1428,7 +1431,7 @@ public final class AntarchyFabricItems { () -> new DeferredSpawnEggItem(AntarchyFabricEntities.BOMBER, 0x7A7A7A, 0xB32020, new Item.Properties())); - public static final DeferredItem JUMPY_BUG_SPAWN_EGG = ITEMS.register("jumpy_bug_spawn_egg", + public static final DeferredItem JUMPY_BUG_SPAWN_EGG = ITEMS.register("springbug_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyFabricEntities.JUMPY_BUG, 0x0A1636, 0x8A3E00, new Item.Properties())); @@ -1440,7 +1443,7 @@ public final class AntarchyFabricItems { () -> new DeferredSpawnEggItem(AntarchyFabricEntities.STINK_BUG, 0x111111, 0xFF7A00, new Item.Properties())); - public static final DeferredItem CLOUD_SHARK_SPAWN_EGG = ITEMS.register("cloud_shark_spawn_egg", + public static final DeferredItem CLOUD_SHARK_SPAWN_EGG = ITEMS.register("stratoshark_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyFabricEntities.CLOUD_SHARK, 0xDDEAF4, 0x7F96A8, new Item.Properties())); @@ -1515,11 +1518,11 @@ public final class AntarchyFabricItems { new Item.Properties().stacksTo(1).rarity(Rarity.RARE).fireResistant().durability(AntarchyFabricMisc.PRIMORDIAL_ARMOR_MATERIAL.getDurabilityForType(ArmorItem.Type.BOOTS)))); - public static final DeferredItem CREEPING_HORROR_SPAWN_EGG = ITEMS.register("creeping_horror_spawn_egg", + public static final DeferredItem CREEPING_HORROR_SPAWN_EGG = ITEMS.register("crawling_blight_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyFabricEntities.CREEPING_HORROR, 0x6B3A1F, 0x6B0000, new Item.Properties())); - public static final DeferredItem LURKING_TERROR_SPAWN_EGG = ITEMS.register("lurking_terror_spawn_egg", + public static final DeferredItem LURKING_TERROR_SPAWN_EGG = ITEMS.register("skulking_fright_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyFabricEntities.LURKING_TERROR, 0x2D5A1B, 0x8B0000, new Item.Properties())); diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java index 9310f860..3e773d1b 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java @@ -3,6 +3,8 @@ package com.craisinlord.antarchy.fabric.registry; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.recipe.AmericanizeRecipe; +import com.craisinlord.antarchy.content.enchantment.ChronosphereEnchantment; +import com.craisinlord.antarchy.content.enchantment.FeatherRisingEnchantment; import com.craisinlord.antarchy.content.worldgen.ants.BrownAntNestFeature; import com.craisinlord.antarchy.content.worldgen.ants.RainbowAntNestFeature; import com.craisinlord.antarchy.content.worldgen.ants.RedAntNestFeature; @@ -21,6 +23,8 @@ import com.craisinlord.antarchy.content.worldgen.thoraxis.AntiwaterSpringsFeatur import com.craisinlord.antarchy.content.worldgen.thoraxis.DimensionalTearFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.NyxiteSpikeFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.PotentNyxiteFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisTransitionThroatFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.QueenHavocTrailFeature; import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterFluid; import com.craisinlord.antarchy.content.effect.DreadMobEffect; import com.craisinlord.antarchy.content.effect.GoopedMobEffect; @@ -92,6 +96,8 @@ import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvents; import net.minecraft.world.item.alchemy.Potion; +import net.minecraft.world.item.enchantment.Enchantment; +import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.effect.MobEffect; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffects; @@ -217,6 +223,11 @@ public final class AntarchyFabricMisc { public static final DeferredRegister> MENUS = DeferredRegister.create(Registries.MENU, Antarchy.MODID); + public static final DeferredRegister ENCHANTMENTS = DeferredRegister.create(Registries.ENCHANTMENT, Antarchy.MODID); + public static final DeferredHolder FEATHER_RISING = ENCHANTMENTS.register("feather_rising", + () -> new FeatherRisingEnchantment(Enchantment.Rarity.RARE, EquipmentSlot.FEET)); + public static final DeferredHolder CHRONOSPHERE = ENCHANTMENTS.register("chronosphere", + () -> new ChronosphereEnchantment(Enchantment.Rarity.RARE, EquipmentSlot.CHEST)); public static final DeferredRegister FROG_VARIANTS = DeferredRegister.create(Registries.FROG_VARIANT, Antarchy.MODID); @@ -325,6 +336,12 @@ public final class AntarchyFabricMisc { public static final DeferredHolder, SimpleParticleType> LUCID_BOLT_IMPACT_LARGE = PARTICLE_TYPES.register("lucid_bolt_impact_large", () -> simpleParticleType()); + public static final DeferredHolder, SimpleParticleType> UNDERTRIAL_SPAWNER_DETECTION = PARTICLE_TYPES.register("undertrial_spawner_detection", + () -> simpleParticleType()); + public static final DeferredHolder, SimpleParticleType> UNDERTRIAL_OMEN = PARTICLE_TYPES.register("undertrial_omen", + () -> simpleParticleType()); + public static final DeferredHolder, SimpleParticleType> UNDERVAULT_CONNECTION = PARTICLE_TYPES.register("undervault_connection", + () -> simpleParticleType()); public static final DeferredHolder, ParticleType> INVERTED_GEYSER_BASE = PARTICLE_TYPES.register("inverted_geyser_base", @@ -630,7 +647,7 @@ public final class AntarchyFabricMisc { () -> new MolewormSurfaceMoundsFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, TriffidPatchFeature> TRIFFID_PATCH = FEATURES.register("triffid_patch", + public static final DeferredHolder, TriffidPatchFeature> TRIFFID_PATCH = FEATURES.register("flytrap_patch", () -> new TriffidPatchFeature(NoneFeatureConfiguration.CODEC)); @@ -684,6 +701,10 @@ public final class AntarchyFabricMisc { public static final DeferredHolder, ThoraxisFissureFeature> THORAXIS_FISSURE = FEATURES.register("thoraxis_fissure", () -> new ThoraxisFissureFeature(ThoraxisFissureConfiguration.CODEC)); + public static final DeferredHolder, QueenHavocTrailFeature> QUEEN_HAVOC_TRAIL = FEATURES.register("queen_havoc_trail", + QueenHavocTrailFeature::new); + public static final DeferredHolder, ThoraxisTransitionThroatFeature> THORAXIS_TRANSITION_THROAT = FEATURES.register("thoraxis_transition_throat", + ThoraxisTransitionThroatFeature::new); public static final DeferredHolder, ThoraxisRibColumnsFeature> THORAXIS_RIB_COLUMNS = FEATURES.register("thoraxis_rib_columns", @@ -723,7 +744,7 @@ public final class AntarchyFabricMisc { public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.cavaryn.GroundMoltingVinesFeature> GROUND_MOLTING_VINES = FEATURES.register("ground_molting_vines", () -> new com.craisinlord.antarchy.content.worldgen.cavaryn.GroundMoltingVinesFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.cavaryn.JumpyBugEggCeilingFeature> JUMPY_BUG_EGG_CEILING = FEATURES.register("jumpy_bug_egg_ceiling", + public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.cavaryn.JumpyBugEggCeilingFeature> JUMPY_BUG_EGG_CEILING = FEATURES.register("springbug_egg_ceiling", () -> new com.craisinlord.antarchy.content.worldgen.cavaryn.JumpyBugEggCeilingFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.cavaryn.SpitBugEggPatchFeature> SPIT_BUG_EGG_PATCH = FEATURES.register("spit_bug_egg_patch", () -> new com.craisinlord.antarchy.content.worldgen.cavaryn.SpitBugEggPatchFeature(NoneFeatureConfiguration.CODEC)); @@ -803,7 +824,7 @@ public final class AntarchyFabricMisc { public static final ArmorMaterial JUMPY_BOOTS_ARMOR_MATERIAL = armorMaterial( 37, createJumpyBootsDefense(), 15, net.minecraft.sounds.SoundEvents.ARMOR_EQUIP_NETHERITE, - () -> Ingredient.of(net.minecraft.world.item.Items.NETHERITE_BOOTS), 3.0F, 0.1F, "jumpy_boots"); + () -> Ingredient.of(net.minecraft.world.item.Items.NETHERITE_BOOTS), 3.0F, 0.1F, "springy_boots"); diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSounds.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSounds.java index e38e31ca..bee09de1 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSounds.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSounds.java @@ -40,19 +40,19 @@ public final class AntarchyFabricSounds { public static final DeferredHolder ANT_NEST = registerSoundEvent("ant_nest"); - public static final DeferredHolder CLOUD_SHARK_BITE = registerSoundEvent("cloud_shark_bite"); + public static final DeferredHolder CLOUD_SHARK_BITE = registerSoundEvent("stratoshark_bite"); - public static final DeferredHolder CLOUD_SHARK_IDLE = registerSoundEvent("cloud_shark_idle"); + public static final DeferredHolder CLOUD_SHARK_IDLE = registerSoundEvent("stratoshark_idle"); - public static final DeferredHolder CLOUD_SHARK_HURT = registerSoundEvent("cloud_shark_hurt"); + public static final DeferredHolder CLOUD_SHARK_HURT = registerSoundEvent("stratoshark_hurt"); - public static final DeferredHolder CLOUD_SHARK_DEATH = registerSoundEvent("cloud_shark_death"); + public static final DeferredHolder CLOUD_SHARK_DEATH = registerSoundEvent("stratoshark_death"); - public static final DeferredHolder CLOUD_SHARK_FLY = registerSoundEvent("cloud_shark_fly"); + public static final DeferredHolder CLOUD_SHARK_FLY = registerSoundEvent("stratoshark_fly"); public static final DeferredHolder CATERPILLAR_IDLE = registerSoundEvent("caterpillar_idle"); @@ -241,22 +241,22 @@ public final class AntarchyFabricSounds { public static final DeferredHolder NIGHTMARE_FLAP = registerSoundEvent("nightmare_flap"); - public static final DeferredHolder TRIFFID_ATTACK = registerSoundEvent("triffid_attack"); + public static final DeferredHolder TRIFFID_ATTACK = registerSoundEvent("flytrap_attack"); - public static final DeferredHolder TRIFFID_GRAB = registerSoundEvent("triffid_grab"); + public static final DeferredHolder TRIFFID_GRAB = registerSoundEvent("flytrap_grab"); - public static final DeferredHolder TRIFFID_HURT = registerSoundEvent("triffid_hurt"); + public static final DeferredHolder TRIFFID_HURT = registerSoundEvent("flytrap_hurt"); - public static final DeferredHolder TRIFFID_DEATH = registerSoundEvent("triffid_death"); + public static final DeferredHolder TRIFFID_DEATH = registerSoundEvent("flytrap_death"); - public static final DeferredHolder TRIFFID_HISS = registerSoundEvent("triffid_hiss"); + public static final DeferredHolder TRIFFID_HISS = registerSoundEvent("flytrap_hiss"); - public static final DeferredHolder TRIFFID_GROWL = registerSoundEvent("triffid_growl"); + public static final DeferredHolder TRIFFID_GROWL = registerSoundEvent("flytrap_growl"); public static final DeferredHolder MANTIS_AMBIENT = registerSoundEvent("mantis_ambient"); @@ -414,35 +414,35 @@ public final class AntarchyFabricSounds { public static final DeferredHolder JERRY_ADULT_ATTACK = registerSoundEvent("jerry_adult_attack"); - public static final DeferredHolder CREEPING_HORROR_GROWL = registerSoundEvent("creeping_horror_growl"); + public static final DeferredHolder CREEPING_HORROR_GROWL = registerSoundEvent("crawling_blight_growl"); - public static final DeferredHolder CREEPING_HORROR_HURT = registerSoundEvent("creeping_horror_hurt"); + public static final DeferredHolder CREEPING_HORROR_HURT = registerSoundEvent("crawling_blight_hurt"); - public static final DeferredHolder CREEPING_HORROR_BITE = registerSoundEvent("creeping_horror_bite"); + public static final DeferredHolder CREEPING_HORROR_BITE = registerSoundEvent("crawling_blight_bite"); - public static final DeferredHolder LURKING_TERROR_SNARL = registerSoundEvent("lurking_terror_snarl"); + public static final DeferredHolder LURKING_TERROR_SNARL = registerSoundEvent("skulking_fright_snarl"); - public static final DeferredHolder LURKING_TERROR_HURT = registerSoundEvent("lurking_terror_hurt"); + public static final DeferredHolder LURKING_TERROR_HURT = registerSoundEvent("skulking_fright_hurt"); - public static final DeferredHolder LURKING_TERROR_BITE = registerSoundEvent("lurking_terror_bite"); + public static final DeferredHolder LURKING_TERROR_BITE = registerSoundEvent("skulking_fright_bite"); - public static final DeferredHolder LURKING_TERROR_FLY_LOOP = registerSoundEvent("lurking_terror_fly_loop"); + public static final DeferredHolder LURKING_TERROR_FLY_LOOP = registerSoundEvent("skulking_fright_fly_loop"); public static final DeferredHolder HERCULES_BEETLE_IDLE = registerSoundEvent("hercules_beetle_idle"); public static final DeferredHolder HERCULES_BEETLE_HURT = registerSoundEvent("hercules_beetle_hurt"); public static final DeferredHolder HERCULES_BEETLE_ATTACK = registerSoundEvent("hercules_beetle_attack"); public static final DeferredHolder HERCULES_BEETLE_CRY = registerSoundEvent("hercules_beetle_cry"); public static final DeferredHolder HERCULES_BEETLE_CHARGE_START = registerSoundEvent("hercules_beetle_charge_start"); public static final DeferredHolder HERCULES_BEETLE_KNOCKED_DOWN = registerSoundEvent("hercules_beetle_knocked_down"); - public static final DeferredHolder JUMPY_BUG_IDLE = registerSoundEvent("jumpy_bug_idle"); + public static final DeferredHolder JUMPY_BUG_IDLE = registerSoundEvent("springbug_idle"); public static final DeferredHolder SPIT_BUG_IDLE = registerSoundEvent("spit_bug_idle"); - public static final DeferredHolder JUMPY_BUG_HURT = registerSoundEvent("jumpy_bug_hurt"); - public static final DeferredHolder JUMPY_BUG_JUMP = registerSoundEvent("jumpy_bug_jump"); + public static final DeferredHolder JUMPY_BUG_HURT = registerSoundEvent("springbug_hurt"); + public static final DeferredHolder JUMPY_BUG_JUMP = registerSoundEvent("springbug_jump"); public static final DeferredHolder SPIT_BUG_HURT = registerSoundEvent("spit_bug_hurt"); public static final DeferredHolder SPIT_BUG_SPIT = registerSoundEvent("spit_bug_spit"); public static final DeferredHolder BRUTALFLY_SPIT = registerSoundEvent("brutalfly_spit"); diff --git a/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/eye_of_the_storm.json b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/eye_of_the_storm.json new file mode 100644 index 00000000..b504f30f --- /dev/null +++ b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/eye_of_the_storm.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:item/eye_of_the_storm_held_geo" +} diff --git a/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun.json b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun.json new file mode 100644 index 00000000..a3b81466 --- /dev/null +++ b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/portal_gun.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:item/portal_gun_held_geo" +} diff --git a/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/royal_assailant_battleaxe.json b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/royal_assailant_battleaxe.json new file mode 100644 index 00000000..c6ede5e2 --- /dev/null +++ b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/royal_assailant_battleaxe.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:item/royal_assailant_battleaxe_held" +} diff --git a/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/royal_guardian_sword.json b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/royal_guardian_sword.json new file mode 100644 index 00000000..52bdad62 --- /dev/null +++ b/fabric-1.20.1/src/main/resources/assets/antarchy/models/item/royal_guardian_sword.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:item/royal_guardian_sword_held" +} 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 ef907a01..9e2356c6 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 @@ -4,6 +4,7 @@ import com.craisinlord.antarchy.fabric.registry.AntarchyFabricEntities; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.AntarchyGameRules; import com.craisinlord.antarchy.content.entity.trades.DrTrayaurusTradeManager; +import com.craisinlord.antarchy.content.entity.trades.ComputerScientistTradeManager; import com.craisinlord.antarchy.content.item.BloodCrystalShardItem; import com.craisinlord.antarchy.fabric.network.AntarchyFabricNetworking; import net.fabricmc.fabric.api.biome.v1.BiomeModifications; @@ -154,7 +155,6 @@ public final class AntarchyFabric implements ModInitializer { AntarchyConfigModuleFabric.init(); AntarchyFabricContent.register(); registerWorldgenFeatures(); - AntarchyFabricEvents.register(); BloodglassManager.register(); TigerEyeFabricManager.register(); Antarchy.init(); @@ -174,6 +174,20 @@ public final class AntarchyFabric implements ModInitializer { barrier, manager, prepareProfiler, applyProfiler, prepareExecutor, applyExecutor); } }); + ResourceManagerHelper.get(PackType.SERVER_DATA).registerReloadListener(new IdentifiableResourceReloadListener() { + @Override + public ResourceLocation getFabricId() { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "antmail_events"); + } + + @Override + public CompletableFuture reload(PreparableReloadListener.PreparationBarrier barrier, ResourceManager manager, + ProfilerFiller prepareProfiler, ProfilerFiller applyProfiler, + Executor prepareExecutor, Executor applyExecutor) { + return com.craisinlord.antarchy.content.antmail.AntmailEventData.instance().reload( + barrier, manager, prepareProfiler, applyProfiler, prepareExecutor, applyExecutor); + } + }); } private static void registerTradeReloadListener() { @@ -191,6 +205,20 @@ public final class AntarchyFabric implements ModInitializer { return delegate.reload(barrier, manager, prepareProfiler, applyProfiler, prepareExecutor, applyExecutor); } }); + ComputerScientistTradeManager computerScientistDelegate = new ComputerScientistTradeManager(); + ResourceManagerHelper.get(PackType.SERVER_DATA).registerReloadListener(new IdentifiableResourceReloadListener() { + @Override + public ResourceLocation getFabricId() { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "computer_scientist_trades"); + } + + @Override + public CompletableFuture reload(PreparableReloadListener.PreparationBarrier barrier, ResourceManager manager, + ProfilerFiller prepareProfiler, ProfilerFiller applyProfiler, + Executor prepareExecutor, Executor applyExecutor) { + return computerScientistDelegate.reload(barrier, manager, prepareProfiler, applyProfiler, prepareExecutor, applyExecutor); + } + }); } private static final TagKey CAVARYN_BIOMES = TagKey.create( diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java index f676c83d..ae9fa330 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java @@ -1,6 +1,7 @@ package com.craisinlord.antarchy.fabric; import com.craisinlord.antarchy.fabric.registry.AntarchyFabricBlocks; import com.craisinlord.antarchy.fabric.registry.AntarchyFabricItems; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricMisc; import com.craisinlord.antarchy.content.entity.ReverieEntity; import com.craisinlord.antarchy.content.entity.ant.RainbowAntEntity; @@ -28,6 +29,7 @@ import com.craisinlord.antarchy.content.time.TimeDilationManager; import com.craisinlord.antarchy.content.time.ChronosphereManager; import com.craisinlord.antarchy.content.item.MinersDreamExcavationManager; import com.craisinlord.antarchy.content.item.WormHookTetherManager; +import com.craisinlord.antarchy.content.entity.trades.ComputerScientistTradeManager; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; import net.fabricmc.fabric.api.entity.event.v1.ServerLivingEntityEvents; @@ -187,6 +189,8 @@ public final class AntarchyFabricEvents { }); ServerTickEvents.END_SERVER_TICK.register(server -> { + com.craisinlord.antarchy.content.antmail.AntmailServerData.access(server).drainAvailable(server); + com.craisinlord.antarchy.content.antmail.AntmailEventData.onTick(server); Set activeThisTick = new HashSet<>(); for (ServerLevel level : server.getAllLevels()) { CavarynHordeManager.tick(level); @@ -208,6 +212,15 @@ public final class AntarchyFabricEvents { } private static void registerTrades() { + int[] computerScientistSlots = ComputerScientistTradeManager.slotsPerLevel(); + for (int level = 1; level <= computerScientistSlots.length; level++) { + final int tradeLevel = level; + for (int index = 0; index < computerScientistSlots[level - 1]; index++) { + final int tradeIndex = index; + TradeOfferHelper.registerVillagerOffers(AntarchyFabricMisc.COMPUTER_SCIENTIST.get(), tradeLevel, + factories -> factories.add(ComputerScientistTradeManager.listing(tradeLevel, tradeIndex))); + } + } TradeOfferHelper.registerVillagerOffers(VillagerProfession.FARMER, 1, factories -> factories.add((trader, random) -> new MerchantOffer( new ItemCost(AntarchyFabricItems.CORN.get(), 20), 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 e9b87fc9..b57c5c5e 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 @@ -515,6 +515,11 @@ public final class AntarchyFabricClientBootstrap { return cage.getItemState(stack); } ); + ItemProperties.register( + AntarchyFabricItems.FLOPPY_DISK.get(), + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "disk_category"), + (stack, level, entity, seed) -> com.craisinlord.antarchy.content.item.FloppyDiskItem.categoryModelProperty(stack) + ); } @SuppressWarnings({"unchecked", "rawtypes"}) 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 97a3cf2f..a0327818 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 @@ -112,8 +112,12 @@ public final class AntarchyFabricNetworking { PayloadTypeRegistry.playC2S().register(ComputerAccessPayload.TYPE, ComputerAccessPayload.STREAM_CODEC); PayloadTypeRegistry.playC2S().register(AntmailSetupPayload.TYPE, AntmailSetupPayload.STREAM_CODEC); PayloadTypeRegistry.playC2S().register(AntmailStateRequestPayload.TYPE, AntmailStateRequestPayload.STREAM_CODEC); + PayloadTypeRegistry.playC2S().register(AntmailMessageRequestPayload.TYPE, AntmailMessageRequestPayload.STREAM_CODEC); PayloadTypeRegistry.playC2S().register(AntmailSendPayload.TYPE, AntmailSendPayload.STREAM_CODEC); PayloadTypeRegistry.playC2S().register(AntmailReadPayload.TYPE, AntmailReadPayload.STREAM_CODEC); + PayloadTypeRegistry.playC2S().register(AntmailDeletePayload.TYPE, AntmailDeletePayload.STREAM_CODEC); + PayloadTypeRegistry.playC2S().register(AntmailDraftPayload.TYPE, AntmailDraftPayload.STREAM_CODEC); + PayloadTypeRegistry.playC2S().register(AntmailRetryPayload.TYPE, AntmailRetryPayload.STREAM_CODEC); } private static void registerServerReceivers() { @@ -123,10 +127,18 @@ public final class AntarchyFabricNetworking { context.server().execute(() -> AntmailServerHandler.handle(context.player(), payload))); ServerPlayNetworking.registerGlobalReceiver(AntmailStateRequestPayload.TYPE, (payload, context) -> context.server().execute(() -> AntmailServerHandler.handle(context.player(), payload))); + ServerPlayNetworking.registerGlobalReceiver(AntmailMessageRequestPayload.TYPE, (payload, context) -> + context.server().execute(() -> AntmailServerHandler.handle(context.player(), payload))); ServerPlayNetworking.registerGlobalReceiver(AntmailSendPayload.TYPE, (payload, context) -> context.server().execute(() -> AntmailServerHandler.handle(context.player(), payload))); ServerPlayNetworking.registerGlobalReceiver(AntmailReadPayload.TYPE, (payload, context) -> context.server().execute(() -> AntmailServerHandler.handle(context.player(), payload))); + ServerPlayNetworking.registerGlobalReceiver(AntmailDeletePayload.TYPE, (payload, context) -> + context.server().execute(() -> AntmailServerHandler.handle(context.player(), payload))); + ServerPlayNetworking.registerGlobalReceiver(AntmailDraftPayload.TYPE, (payload, context) -> + context.server().execute(() -> AntmailServerHandler.handle(context.player(), payload))); + ServerPlayNetworking.registerGlobalReceiver(AntmailRetryPayload.TYPE, (payload, context) -> + context.server().execute(() -> AntmailServerHandler.handle(context.player(), payload))); ServerPlayNetworking.registerGlobalReceiver(GravityGunPrimaryPayload.TYPE, (payload, context) -> context.server().execute(() -> handleGravityGunPrimary(context.player(), payload))); ServerPlayNetworking.registerGlobalReceiver(PortalGunPrimaryPayload.TYPE, (payload, context) -> 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 e1b107ae..13d73c90 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 @@ -110,6 +110,8 @@ import net.minecraft.world.effect.MobEffects; import net.minecraft.tags.TagKey; import net.minecraft.world.damagesource.DamageType; import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.village.poi.PoiType; +import net.minecraft.world.entity.npc.VillagerProfession; import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.ArmorMaterial; import net.minecraft.world.item.Items; @@ -127,6 +129,25 @@ import com.craisinlord.antarchy.fabric.AntarchyFabricContent; public final class AntarchyFabricMisc { + public static final DeferredRegister POI_TYPES = DeferredRegister.create(Registries.POINT_OF_INTEREST_TYPE, Antarchy.MODID); + + public static final DeferredRegister VILLAGER_PROFESSIONS = DeferredRegister.create(Registries.VILLAGER_PROFESSION, Antarchy.MODID); + + public static final DeferredHolder COMPUTER_POI = POI_TYPES.register("computer", + () -> new PoiType( + java.util.Set.copyOf(AntarchyFabricBlocks.COMPUTER.get().getStateDefinition().getPossibleStates()), + 1, + 1)); + + public static final DeferredHolder COMPUTER_SCIENTIST = VILLAGER_PROFESSIONS.register("computer_scientist", + () -> new VillagerProfession( + "computer_scientist", + holder -> holder.value() == COMPUTER_POI.get(), + holder -> holder.value() == COMPUTER_POI.get(), + com.google.common.collect.ImmutableSet.of(), + com.google.common.collect.ImmutableSet.of(), + SoundEvents.VILLAGER_WORK_LIBRARIAN)); + public static final DeferredRegister ARMOR_MATERIALS = DeferredRegister.create(Registries.ARMOR_MATERIAL, Antarchy.MODID); @@ -1049,6 +1070,8 @@ public final class AntarchyFabricMisc { public static void register() { + POI_TYPES.register(); + VILLAGER_PROFESSIONS.register(); ARMOR_MATERIALS.register(); FLUIDS.register(); ATTRIBUTES.register(); diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyForge.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyForge.java index 66afd8ec..c16b899a 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyForge.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyForge.java @@ -6,6 +6,7 @@ import com.craisinlord.antarchy.compat.infinity.InfinityCompatVersion; import com.craisinlord.antarchy.content.AntarchyGameRules; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.enchantment.AntarchyEnchantments; import com.craisinlord.antarchy.content.item.BloodCrystalKatanaItem; import com.craisinlord.antarchy.content.item.ScorpionWhipTetherSync; import com.craisinlord.antarchy.content.network.BloodCrystalKatanaTrailPayload; @@ -367,6 +368,7 @@ public class AntarchyForge { AntarchyObjects.setSpiritApple(() -> AntarchyForgeItems.SPIRIT_APPLE.get()); AntarchyObjects.setGlimmeringEffect(() -> AntarchyForgeMisc.mobEffectHolder(AntarchyForgeMisc.GLIMMERING)); AntarchyObjects.setTimeDilationField(() -> AntarchyForgeEntites.TIME_DILATION_FIELD.get()); + AntarchyEnchantments.bind(() -> AntarchyForgeMisc.FEATHER_RISING.get(), () -> AntarchyForgeMisc.CHRONOSPHERE.get()); AntarchyObjects.setRoyalAssailantBlackHole(() -> AntarchyForgeEntites.ROYAL_ASSAILANT_BLACK_HOLE.get()); AntarchyObjects.setDilatedEffect(() -> AntarchyForgeMisc.mobEffectHolder(AntarchyForgeMisc.DILATED)); AntarchyObjects.setContractedEffect(() -> AntarchyForgeMisc.mobEffectHolder(AntarchyForgeMisc.CONTRACTED)); diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyForgeEvents.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyForgeEvents.java index 06a9ab4d..38ff369c 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyForgeEvents.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyForgeEvents.java @@ -4,6 +4,7 @@ import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.command.CavarynCommand; import com.craisinlord.antarchy.content.command.CaterpillarCommand; import com.craisinlord.antarchy.content.command.GravityCommand; +import com.craisinlord.antarchy.content.command.QueenLocateCommand; import com.craisinlord.antarchy.content.time.TimeDilationCommand; import net.minecraftforge.event.RegisterCommandsEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; @@ -18,6 +19,7 @@ final class AntarchyForgeCommandEvents { public static void onRegisterCommands(RegisterCommandsEvent event) { CavarynCommand.register(event.getDispatcher()); GravityCommand.register(event.getDispatcher()); + QueenLocateCommand.register(event.getDispatcher()); CaterpillarCommand.register(event.getDispatcher()); TimeDilationCommand.register(event.getDispatcher()); } diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/AntarchyForgeClient.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/AntarchyForgeClient.java index dc7ba2ae..80367415 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/AntarchyForgeClient.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/client/AntarchyForgeClient.java @@ -91,6 +91,8 @@ public final class AntarchyForgeClient { event.registerBlockEntityRenderer(AntarchyForgeBlocks.SEASHELL_BLOCK_ENTITY.get(), SeashellRenderer::new); event.registerBlockEntityRenderer(AntarchyForgeBlocks.LUCID_ANCHOR_BLOCK_ENTITY.get(), LucidAnchorBlockEntityRenderer::new); event.registerBlockEntityRenderer(AntarchyForgeBlocks.CRITTER_CAGE_BLOCK_ENTITY.get(), CritterCageRenderer::new); + event.registerBlockEntityRenderer(AntarchyForgeBlocks.UNDERTRIAL_SPAWNER_BLOCK_ENTITY.get(), UndertrialSpawnerRenderer::new); + event.registerBlockEntityRenderer(AntarchyForgeBlocks.UNDERVAULT_BLOCK_ENTITY.get(), UnderVaultRenderer::new); event.registerEntityRenderer(AntarchyForgeEntites.EASTER_BUNNY.get(), context -> withParalyzedGeoLayer(new EasterBunnyRenderer(context))); event.registerEntityRenderer(AntarchyForgeEntites.FLYING_SQUIRREL.get(), context -> withParalyzedGeoLayer(new FlyingSquirrelRenderer(context))); event.registerEntityRenderer(AntarchyForgeEntites.CATERPILLAR.get(), context -> withParalyzedGeoLayer(new CaterpillarRenderer(context))); @@ -307,6 +309,9 @@ public final class AntarchyForgeClient { event.registerSpriteSet(AntarchyForgeMisc.ORANGE_ASH.get(), OrangeAshParticle.Provider::new); event.registerSpriteSet(AntarchyForgeMisc.LUCID_BOLT_IMPACT_SMALL.get(), LucidBoltImpactParticle.SmallProvider::new); event.registerSpriteSet(AntarchyForgeMisc.LUCID_BOLT_IMPACT_LARGE.get(), LucidBoltImpactParticle.LargeProvider::new); + event.registerSpriteSet(AntarchyForgeMisc.UNDERTRIAL_SPAWNER_DETECTION.get(), UndertrialParticle.DetectionProvider::new); + event.registerSpriteSet(AntarchyForgeMisc.UNDERTRIAL_OMEN.get(), UndertrialParticle.OmenProvider::new); + event.registerSpriteSet(AntarchyForgeMisc.UNDERVAULT_CONNECTION.get(), UndertrialParticle.OmenProvider::new); } @SubscribeEvent @@ -337,7 +342,7 @@ public final class AntarchyForgeClient { event.registerAboveAll("triffid_goo", (gui, guiGraphics, partialTick, width, height) -> TriffidGooHudRenderer.render(guiGraphics) ); - event.registerAboveAll("jumpy_boots", + event.registerAboveAll("springy_boots", (gui, guiGraphics, partialTick, width, height) -> JumpyBootsHudRenderer.render(guiGraphics) ); event.registerAboveAll("dorrie_jump", diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeBlocks.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeBlocks.java index eebc33cb..7caad1e8 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeBlocks.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeBlocks.java @@ -12,6 +12,9 @@ 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.block.entity.UndertrialSpawnerBlockEntity; +import com.craisinlord.antarchy.content.block.entity.UnderVaultBlockEntity; +import com.craisinlord.antarchy.content.block.entity.QueenTrailSpawnMarkerBlockEntity; import com.craisinlord.antarchy.content.fluid.BileLiquidBlock; import com.craisinlord.antarchy.content.fluid.LumenLiquidBlock; import com.craisinlord.antarchy.content.portal.PermanentPortalType; @@ -272,7 +275,7 @@ public final class AntarchyForgeBlocks { () -> new WallBlock(AntarchyObjects.shellstoneProperties())); public static final RegistryObject SHELLSTONE_PILLAR = BLOCKS.register("shellstone_pillar", () -> new RotatedPillarBlock(AntarchyObjects.shellstoneProperties())); - public static final RegistryObject TRIFFID_GOO_BLOCK = BLOCKS.register("triffid_goo_block", + public static final RegistryObject TRIFFID_GOO_BLOCK = BLOCKS.register("flytrap_goo_block", () -> new com.craisinlord.antarchy.content.block.TriffidGooBlock(BlockBehaviour.Properties.copy(Blocks.SLIME_BLOCK).noOcclusion().isViewBlocking((s, l, p) -> false).isSuffocating((s, l, p) -> false))); public static final RegistryObject CLOUD_BLOCK = BLOCKS.register("cloud_block", () -> new com.craisinlord.antarchy.content.block.CloudBlock( @@ -382,15 +385,15 @@ public final class AntarchyForgeBlocks { .noOcclusion() .noCollission() .replaceable())); - public static final RegistryObject CREEPING_HORROR_EGG = BLOCKS.register("creeping_horror_egg", + public static final RegistryObject CREEPING_HORROR_EGG = BLOCKS.register("crawling_blight_egg", () -> new CreepingHorrorEggBlock(BlockBehaviour.Properties.copy(Blocks.TURTLE_EGG))); - public static final RegistryObject JUMPY_BUG_EGG = BLOCKS.register("jumpy_bug_egg", + public static final RegistryObject JUMPY_BUG_EGG = BLOCKS.register("springbug_egg", () -> new JumpyBugEggBlock(BlockBehaviour.Properties.copy(Blocks.TURTLE_EGG))); public static final RegistryObject SPIT_BUG_EGG = BLOCKS.register("spit_bug_egg", () -> new SpitBugEggBlock(BlockBehaviour.Properties.copy(Blocks.TURTLE_EGG))); public static final RegistryObject JERRY_EGG = BLOCKS.register("jerry_egg", () -> new JerryEggBlock(BlockBehaviour.Properties.copy(Blocks.TURTLE_EGG).randomTicks())); - public static final RegistryObject LURKING_TERROR_EGG = BLOCKS.register("lurking_terror_egg", + public static final RegistryObject LURKING_TERROR_EGG = BLOCKS.register("skulking_fright_egg", () -> new LurkingTerrorEggBlock(BlockBehaviour.Properties.copy(Blocks.TURTLE_EGG))); static { @@ -603,6 +606,16 @@ public final class AntarchyForgeBlocks { public static final RegistryObject STAR_CORAL_WALL_FAN = BLOCKS.register("star_coral_wall_fan", () -> new com.craisinlord.antarchy.content.block.StarCoralWallFanBlock(DEAD_STAR_CORAL_WALL_FAN.get(), BlockBehaviour.Properties.copy(Blocks.TUBE_CORAL_WALL_FAN).lightLevel(state -> 8))); + public static final RegistryObject UNDERTRIAL_SPAWNER = BLOCKS.register("undertrial_spawner", + () -> new UndertrialSpawnerBlock(AntarchyForgeBlocks::undertrialSpawnerBlockEntityType, + BlockBehaviour.Properties.copy(Blocks.OBSIDIAN).noOcclusion())); + public static final RegistryObject UNDERVAULT = BLOCKS.register("undervault", + () -> new UnderVaultBlock(AntarchyForgeBlocks::underVaultBlockEntityType, + BlockBehaviour.Properties.copy(Blocks.OBSIDIAN).noOcclusion())); + public static final RegistryObject QUEEN_TRAIL_SPAWN_MARKER = BLOCKS.register("queen_trail_spawn_marker", + () -> new QueenTrailSpawnMarkerBlock(AntarchyForgeBlocks::queenTrailSpawnMarkerBlockEntityType, + BlockBehaviour.Properties.of().noCollission().noOcclusion().noLootTable().strength(-1.0F))); + // Block entity types public static final RegistryObject> ANT_NEST_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("ant_nest", () -> BlockEntityType.Builder.of( @@ -657,6 +670,27 @@ public final class AntarchyForgeBlocks { (pos, state) -> new UpperBlockEntity(pos, state, AntarchyForgeBlocks::upperBlockEntityType), UPPER.get() ).build(null)); + public static final RegistryObject> UNDERTRIAL_SPAWNER_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("undertrial_spawner", + () -> BlockEntityType.Builder.of((pos, state) -> new UndertrialSpawnerBlockEntity(pos, state, AntarchyForgeBlocks::undertrialSpawnerBlockEntityType), + UNDERTRIAL_SPAWNER.get()).build(null)); + public static final RegistryObject> UNDERVAULT_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("undervault", + () -> BlockEntityType.Builder.of((pos, state) -> new UnderVaultBlockEntity(pos, state, AntarchyForgeBlocks::underVaultBlockEntityType), + UNDERVAULT.get()).build(null)); + public static final RegistryObject> QUEEN_TRAIL_SPAWN_MARKER_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("queen_trail_spawn_marker", + () -> BlockEntityType.Builder.of((pos, state) -> new QueenTrailSpawnMarkerBlockEntity(pos, state, AntarchyForgeBlocks::queenTrailSpawnMarkerBlockEntityType), + QUEEN_TRAIL_SPAWN_MARKER.get()).build(null)); + + private static BlockEntityType undertrialSpawnerBlockEntityType() { + return UNDERTRIAL_SPAWNER_BLOCK_ENTITY.get(); + } + + private static BlockEntityType underVaultBlockEntityType() { + return UNDERVAULT_BLOCK_ENTITY.get(); + } + + private static BlockEntityType queenTrailSpawnMarkerBlockEntityType() { + return QUEEN_TRAIL_SPAWN_MARKER_BLOCK_ENTITY.get(); + } private AntarchyForgeBlocks() {} diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeEntites.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeEntites.java index 066610d4..ed54ed7b 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeEntites.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeEntites.java @@ -159,11 +159,11 @@ public final class AntarchyForgeEntites { .sized(1.95F, 1.1F) .clientTrackingRange(10) .build("molevore")); - public static final RegistryObject> TRIFFID = ENTITY_TYPES.register("triffid", + public static final RegistryObject> TRIFFID = ENTITY_TYPES.register("flytrap", () -> EntityType.Builder.of(TriffidEntity::new, MobCategory.MONSTER) .sized(2.0F, 5.0F) .clientTrackingRange(10) - .build("triffid")); + .build("flytrap")); public static final RegistryObject> BED_BUG = ENTITY_TYPES.register("bed_bug", () -> EntityType.Builder.of(BedBugEntity::new, MobCategory.CREATURE) .sized(1.15F, 0.8F) @@ -184,11 +184,11 @@ public final class AntarchyForgeEntites { .sized(0.55F, 0.75F) .clientTrackingRange(8) .build("bomber")); - public static final RegistryObject> JUMPY_BUG = ENTITY_TYPES.register("jumpy_bug", + public static final RegistryObject> JUMPY_BUG = ENTITY_TYPES.register("springbug", () -> EntityType.Builder.of(JumpyBugEntity::new, MobCategory.MONSTER) .sized(3.0F, 6.0F) .clientTrackingRange(8) - .build("jumpy_bug")); + .build("springbug")); public static final RegistryObject> SPIT_BUG = ENTITY_TYPES.register("spit_bug", () -> EntityType.Builder.of(SpitBugEntity::new, MobCategory.MONSTER) .sized(2.5F, 3.0F) @@ -258,11 +258,11 @@ public final class AntarchyForgeEntites { .sized(0.6F, 1.95F) .clientTrackingRange(10) .build("dr_trayaurus")); - public static final RegistryObject> CLOUD_SHARK = ENTITY_TYPES.register("cloud_shark", + public static final RegistryObject> CLOUD_SHARK = ENTITY_TYPES.register("stratoshark", () -> EntityType.Builder.of(CloudSharkEntity::new, MobCategory.MONSTER) .sized(2.4F, 0.9F) .clientTrackingRange(10) - .build("cloud_shark")); + .build("stratoshark")); public static final RegistryObject> KRAKEN = ENTITY_TYPES.register("kraken", () -> EntityType.Builder.of(KrakenEntity::new, MobCategory.MONSTER) .sized(11.4F, 39.0F) @@ -371,16 +371,16 @@ public final class AntarchyForgeEntites { .clientTrackingRange(8) .updateInterval(1) .build("water_bomb")); - public static final RegistryObject> CREEPING_HORROR = ENTITY_TYPES.register("creeping_horror", + public static final RegistryObject> CREEPING_HORROR = ENTITY_TYPES.register("crawling_blight", () -> EntityType.Builder.of(CreepingHorrorEntity::new, MobCategory.MONSTER) .sized(1.3F, 1.5F) .clientTrackingRange(10) - .build("creeping_horror")); - public static final RegistryObject> LURKING_TERROR = ENTITY_TYPES.register("lurking_terror", + .build("crawling_blight")); + public static final RegistryObject> LURKING_TERROR = ENTITY_TYPES.register("skulking_fright", () -> EntityType.Builder.of(LurkingTerrorEntity::new, MobCategory.MONSTER) .sized(1.3F, 1.5F) .clientTrackingRange(10) - .build("lurking_terror")); + .build("skulking_fright")); public static final RegistryObject> JERRY = ENTITY_TYPES.register("jerry", () -> EntityType.Builder.of(JerryEntity::new, MobCategory.MONSTER) .sized(1.4F, 1.4F) 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 11bac2c0..2ca9f565 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 @@ -157,7 +157,7 @@ public final class AntarchyForgeItems { () -> Ingredient.of(PRIMORDIAL_SCUTE.get()), 3.0F, 0.1F, "primordial"); private static final ArmorMaterial JUMPY_BOOTS_ARMOR_MATERIAL = armorMaterial( 37, createJumpyBootsDefense(), 15, SoundEvents.ARMOR_EQUIP_NETHERITE, - () -> Ingredient.of(Items.NETHERITE_BOOTS), 3.0F, 0.1F, "jumpy_boots"); + () -> Ingredient.of(Items.NETHERITE_BOOTS), 3.0F, 0.1F, "springy_boots"); private static final ArmorMaterial FALLEN_KING_CROWN_ARMOR_MATERIAL = armorMaterial( 25, createFallenKingCrownDefense(), 25, SoundEvents.ARMOR_EQUIP_GOLD, () -> Ingredient.of(Items.GOLD_INGOT), 0.0F, 0.0F, "fallen_king_crown"); @@ -431,7 +431,7 @@ public final class AntarchyForgeItems { public static final RegistryObject SHELLSTONE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.SHELLSTONE_BRICK_STAIRS); public static final RegistryObject SHELLSTONE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.SHELLSTONE_BRICK_SLAB); public static final RegistryObject SHELLSTONE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.SHELLSTONE_BRICK_WALL); - public static final RegistryObject TRIFFID_GOO_BLOCK_ITEM = ITEMS.register("triffid_goo_block", + public static final RegistryObject TRIFFID_GOO_BLOCK_ITEM = ITEMS.register("flytrap_goo_block", () -> new com.craisinlord.antarchy.content.item.TriffidGooBlockItem(AntarchyForgeBlocks.TRIFFID_GOO_BLOCK.get(), new Item.Properties())); public static final RegistryObject PALE_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.PALE_NYXITE); public static final RegistryObject NYXITE_SPIKE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.NYXITE_SPIKE); @@ -463,6 +463,9 @@ public final class AntarchyForgeItems { public static final RegistryObject HANGING_CREEPROOTS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.HANGING_CREEPROOTS); public static final RegistryObject GLOWCAP_MUSHROOM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.GLOWCAP_MUSHROOM); public static final RegistryObject GLOWCAP_MUSHROOM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.GLOWCAP_MUSHROOM_BLOCK); + public static final RegistryObject UNDERTRIAL_SPAWNER_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.UNDERTRIAL_SPAWNER); + public static final RegistryObject UNDERVAULT_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.UNDERVAULT); + public static final RegistryObject UNDERTRIAL_KEY = ITEMS.registerSimpleItem("undertrial_key", new Item.Properties()); public static final RegistryObject MOLTING_VINES_ITEM = ITEMS.registerSimpleBlockItem(AntarchyForgeBlocks.MOLTING_VINES); public static final RegistryObject BILE_BUCKET = ITEMS.register("bile_bucket", () -> new BucketItem(AntarchyForgeMisc.BILE.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); @@ -524,8 +527,8 @@ public final class AntarchyForgeItems { .saturationMod(0.1F) .build()))); 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", + public static final RegistryObject JUMPY_BUG_LEG = ITEMS.registerSimpleItem("springbug_leg", new Item.Properties().rarity(Rarity.UNCOMMON)); + public static final RegistryObject JUMPY_BOOTS = ITEMS.register("springy_boots", () -> new JumpyBootsItem(JUMPY_BOOTS_ARMOR_MATERIAL, new Item.Properties().stacksTo(1).rarity(Rarity.UNCOMMON).fireResistant().durability(armorDurability(ArmorItem.Type.BOOTS, 37)))); public static final RegistryObject BRUTALFLY_WING = ITEMS.registerSimpleItem("brutalfly_wing", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final RegistryObject BRUTALFLY_ELYTRA = ITEMS.register("brutalfly_elytra", @@ -631,7 +634,7 @@ public final class AntarchyForgeItems { .effect(() -> new MobEffectInstance(MobEffects.REGENERATION, 100, 0), 1.0F) .alwaysEat() .build()))); - public static final RegistryObject TRIFFID_GOO = ITEMS.registerSimpleItem("triffid_goo", + public static final RegistryObject TRIFFID_GOO = ITEMS.registerSimpleItem("flytrap_goo", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final RegistryObject VORTEX_EYE = ITEMS.register("vortex_eye", () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); @@ -662,8 +665,8 @@ public final class AntarchyForgeItems { .saturationMod(0.0F) .effect(() -> new MobEffectInstance(MobEffects.HUNGER, 600), 0.8F) .build()))); - public static final RegistryObject CLOUD_SHARK_FIN = ITEMS.registerSimpleItem("cloud_shark_fin", new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final RegistryObject CLOUD_SHARK_FIN_SOUP = ITEMS.register("cloud_shark_fin_soup", + public static final RegistryObject CLOUD_SHARK_FIN = ITEMS.registerSimpleItem("stratoshark_fin", new Item.Properties().rarity(Rarity.UNCOMMON)); + public static final RegistryObject CLOUD_SHARK_FIN_SOUP = ITEMS.register("stratoshark_fin_soup", () -> new CloudSharkFinSoupItem(new Item.Properties() .stacksTo(1) .craftRemainder(Items.BOWL) @@ -886,7 +889,7 @@ public final class AntarchyForgeItems { () -> new ForgeSpawnEggItem(AntarchyForgeEntites.ROLLY_POLLY, 0x7284A3, 0xBCC8DB, new Item.Properties())); public static final RegistryObject MOLEVORE_SPAWN_EGG = ITEMS.register("molevore_spawn_egg", () -> new ForgeSpawnEggItem(AntarchyForgeEntites.MOLEVORE, 0x4A4A4A, 0x6B4A2B, new Item.Properties().rarity(Rarity.UNCOMMON))); - public static final RegistryObject TRIFFID_SPAWN_EGG = ITEMS.register("triffid_spawn_egg", + public static final RegistryObject TRIFFID_SPAWN_EGG = ITEMS.register("flytrap_spawn_egg", () -> new ForgeSpawnEggItem(AntarchyForgeEntites.TRIFFID, 0x4C8F3A, 0xFF2FB3, new Item.Properties().rarity(Rarity.UNCOMMON))); public static final RegistryObject APPLE_COW_SPAWN_EGG = ITEMS.register("apple_cow_spawn_egg", () -> new ForgeSpawnEggItem(AntarchyForgeEntites.APPLE_COW, 0xFF1A1A, 0x32FF32, new Item.Properties())); @@ -900,13 +903,13 @@ public final class AntarchyForgeItems { () -> new ForgeSpawnEggItem(AntarchyForgeEntites.WASP, 0x111111, 0xF1D800, new Item.Properties())); public static final RegistryObject BOMBER_SPAWN_EGG = ITEMS.register("bomber_spawn_egg", () -> new ForgeSpawnEggItem(AntarchyForgeEntites.BOMBER, 0x7A7A7A, 0xB32020, new Item.Properties())); - public static final RegistryObject JUMPY_BUG_SPAWN_EGG = ITEMS.register("jumpy_bug_spawn_egg", + public static final RegistryObject JUMPY_BUG_SPAWN_EGG = ITEMS.register("springbug_spawn_egg", () -> new ForgeSpawnEggItem(AntarchyForgeEntites.JUMPY_BUG, 0x0A1636, 0x8A3E00, new Item.Properties())); public static final RegistryObject SPIT_BUG_SPAWN_EGG = ITEMS.register("spit_bug_spawn_egg", () -> new ForgeSpawnEggItem(AntarchyForgeEntites.SPIT_BUG, 0x6B4A2B, 0x7ED957, new Item.Properties())); public static final RegistryObject STINK_BUG_SPAWN_EGG = ITEMS.register("stink_bug_spawn_egg", () -> new ForgeSpawnEggItem(AntarchyForgeEntites.STINK_BUG, 0x111111, 0xFF7A00, new Item.Properties())); - public static final RegistryObject CLOUD_SHARK_SPAWN_EGG = ITEMS.register("cloud_shark_spawn_egg", + public static final RegistryObject CLOUD_SHARK_SPAWN_EGG = ITEMS.register("stratoshark_spawn_egg", () -> new ForgeSpawnEggItem(AntarchyForgeEntites.CLOUD_SHARK, 0xDDEAF4, 0x7F96A8, new Item.Properties())); public static final RegistryObject KRAKEN_SPAWN_EGG = ITEMS.register("kraken_spawn_egg", () -> new ForgeSpawnEggItem(AntarchyForgeEntites.KRAKEN, 0x163C53, 0x4F8E99, new Item.Properties().rarity(Rarity.EPIC))); @@ -948,9 +951,9 @@ public final class AntarchyForgeItems { () -> new PrimordialArmorItem(PRIMORDIAL_ARMOR_MATERIAL, ArmorItem.Type.LEGGINGS, new Item.Properties().stacksTo(1).rarity(Rarity.RARE).fireResistant())); public static final RegistryObject PRIMORDIAL_BOOTS = ITEMS.register("primordial_boots", () -> new PrimordialArmorItem(PRIMORDIAL_ARMOR_MATERIAL, ArmorItem.Type.BOOTS, new Item.Properties().stacksTo(1).rarity(Rarity.RARE).fireResistant())); - public static final RegistryObject CREEPING_HORROR_SPAWN_EGG = ITEMS.register("creeping_horror_spawn_egg", + public static final RegistryObject CREEPING_HORROR_SPAWN_EGG = ITEMS.register("crawling_blight_spawn_egg", () -> new ForgeSpawnEggItem(AntarchyForgeEntites.CREEPING_HORROR, 0x6B3A1F, 0x6B0000, new Item.Properties())); - public static final RegistryObject LURKING_TERROR_SPAWN_EGG = ITEMS.register("lurking_terror_spawn_egg", + public static final RegistryObject LURKING_TERROR_SPAWN_EGG = ITEMS.register("skulking_fright_spawn_egg", () -> new ForgeSpawnEggItem(AntarchyForgeEntites.LURKING_TERROR, 0x2D5A1B, 0x8B0000, new Item.Properties())); public static final RegistryObject HERCULES_BEETLE_SPAWN_EGG = ITEMS.register("hercules_beetle_spawn_egg", () -> new ForgeSpawnEggItem(AntarchyForgeEntites.HERCULES_BEETLE, 0x6B1F2A, 0xD4AF37, new Item.Properties().rarity(Rarity.RARE))); diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeMisc.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeMisc.java index 668b0b81..d95f7080 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeMisc.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeMisc.java @@ -12,6 +12,8 @@ import com.craisinlord.antarchy.content.effect.ShrinkMobEffect; import com.craisinlord.antarchy.content.effect.StinkyMobEffect; import com.craisinlord.antarchy.content.effect.DilatedMobEffect; import com.craisinlord.antarchy.content.effect.ContractedMobEffect; +import com.craisinlord.antarchy.content.enchantment.ChronosphereEnchantment; +import com.craisinlord.antarchy.content.enchantment.FeatherRisingEnchantment; import com.craisinlord.antarchy.content.recipe.AmericanizeRecipe; import com.craisinlord.antarchy.content.worldgen.ants.BrownAntNestFeature; import com.craisinlord.antarchy.content.worldgen.ants.RainbowAntNestFeature; @@ -42,8 +44,10 @@ import net.minecraft.world.effect.MobEffect; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.inventory.MenuType; import net.minecraft.world.item.alchemy.Potion; +import net.minecraft.world.item.enchantment.Enchantment; import net.minecraft.world.level.biome.BiomeSource; import net.minecraft.world.level.levelgen.DensityFunction; import net.minecraft.world.level.levelgen.feature.Feature; @@ -67,6 +71,11 @@ public final class AntarchyForgeMisc { private static final DeferredRegister> DENSITY_FUNCTION_TYPES = DeferredRegister.create(Registries.DENSITY_FUNCTION_TYPE, Antarchy.MODID); private static final DeferredRegister ATTRIBUTES = DeferredRegister.create(Registries.ATTRIBUTE, Antarchy.MODID); private static final DeferredRegister> MENU_TYPES = DeferredRegister.create(Registries.MENU, Antarchy.MODID); + private static final DeferredRegister ENCHANTMENTS = DeferredRegister.create(Registries.ENCHANTMENT, Antarchy.MODID); + public static final RegistryObject FEATHER_RISING = ENCHANTMENTS.register("feather_rising", + () -> new FeatherRisingEnchantment(Enchantment.Rarity.RARE, EquipmentSlot.FEET)); + public static final RegistryObject CHRONOSPHERE = ENCHANTMENTS.register("chronosphere", + () -> new ChronosphereEnchantment(Enchantment.Rarity.RARE, EquipmentSlot.CHEST)); private static final DeferredRegister FROG_VARIANTS = DeferredRegister.create(Registries.FROG_VARIANT, Antarchy.MODID); public static final RegistryObject ELYTHIA_FROG_VARIANT = FROG_VARIANTS.register( @@ -190,6 +199,12 @@ public final class AntarchyForgeMisc { AntarchyForgeMisc::simpleParticleType); public static final RegistryObject LUCID_BOLT_IMPACT_LARGE = PARTICLE_TYPES.register("lucid_bolt_impact_large", AntarchyForgeMisc::simpleParticleType); + public static final RegistryObject UNDERTRIAL_SPAWNER_DETECTION = PARTICLE_TYPES.register("undertrial_spawner_detection", + AntarchyForgeMisc::simpleParticleType); + public static final RegistryObject UNDERTRIAL_OMEN = PARTICLE_TYPES.register("undertrial_omen", + AntarchyForgeMisc::simpleParticleType); + public static final RegistryObject UNDERVAULT_CONNECTION = PARTICLE_TYPES.register("undervault_connection", + AntarchyForgeMisc::simpleParticleType); public static final RegistryObject> INVERTED_GEYSER_BASE = PARTICLE_TYPES.register("inverted_geyser_base", () -> particleType(InvertedGeyserBaseParticleOptions.deserializer())); public static final RegistryObject> INVERTED_GEYSER_PLUME = PARTICLE_TYPES.register("inverted_geyser_plume", @@ -253,7 +268,7 @@ public final class AntarchyForgeMisc { () -> new MolewormWarrensFeature(NoneFeatureConfiguration.CODEC)); public static final RegistryObject ELYTHIA_MOLEWORM_SURFACE_MOUNDS = FEATURES.register("elythia_moleworm_surface_mounds", () -> new MolewormSurfaceMoundsFeature(NoneFeatureConfiguration.CODEC)); - public static final RegistryObject TRIFFID_PATCH = FEATURES.register("triffid_patch", + public static final RegistryObject TRIFFID_PATCH = FEATURES.register("flytrap_patch", () -> new TriffidPatchFeature(NoneFeatureConfiguration.CODEC)); public static final RegistryObject ELYTHIA_POND = FEATURES.register("elythia_pond", () -> new ElythiaPondFeature(NoneFeatureConfiguration.CODEC)); @@ -287,6 +302,10 @@ public final class AntarchyForgeMisc { () -> new com.craisinlord.antarchy.content.worldgen.elythia.FungalMushroomFeature(NoneFeatureConfiguration.CODEC)); public static final RegistryObject THORAXIS_FISSURE = FEATURES.register("thoraxis_fissure", () -> new ThoraxisFissureFeature(ThoraxisFissureConfiguration.CODEC)); + public static final RegistryObject QUEEN_HAVOC_TRAIL = FEATURES.register("queen_havoc_trail", + QueenHavocTrailFeature::new); + public static final RegistryObject THORAXIS_TRANSITION_THROAT = FEATURES.register("thoraxis_transition_throat", + ThoraxisTransitionThroatFeature::new); public static final RegistryObject THORAXIS_RIB_COLUMNS = FEATURES.register("thoraxis_rib_columns", () -> new ThoraxisRibColumnsFeature(ThoraxisRibColumnsConfiguration.CODEC)); public static final RegistryObject THORAXIS_SPIKE = FEATURES.register("thoraxis_spike", @@ -307,7 +326,7 @@ public final class AntarchyForgeMisc { () -> new MoltingVinesFeature(NoneFeatureConfiguration.CODEC)); public static final RegistryObject GROUND_MOLTING_VINES = FEATURES.register("ground_molting_vines", () -> new com.craisinlord.antarchy.content.worldgen.cavaryn.GroundMoltingVinesFeature(NoneFeatureConfiguration.CODEC)); - public static final RegistryObject JUMPY_BUG_EGG_CEILING = FEATURES.register("jumpy_bug_egg_ceiling", + public static final RegistryObject JUMPY_BUG_EGG_CEILING = FEATURES.register("springbug_egg_ceiling", () -> new com.craisinlord.antarchy.content.worldgen.cavaryn.JumpyBugEggCeilingFeature(NoneFeatureConfiguration.CODEC)); public static final RegistryObject SPIT_BUG_EGG_PATCH = FEATURES.register("spit_bug_egg_patch", () -> new com.craisinlord.antarchy.content.worldgen.cavaryn.SpitBugEggPatchFeature(NoneFeatureConfiguration.CODEC)); @@ -371,6 +390,7 @@ public final class AntarchyForgeMisc { DENSITY_FUNCTION_TYPES.register(modEventBus); ATTRIBUTES.register(modEventBus); MENU_TYPES.register(modEventBus); + ENCHANTMENTS.register(modEventBus); FROG_VARIANTS.register(modEventBus); RECIPE_SERIALIZERS.register(modEventBus); } diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeSounds.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeSounds.java index b66118be..1f365dd0 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeSounds.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeSounds.java @@ -20,11 +20,11 @@ public final class AntarchyForgeSounds { public static final RegistryObject ANT_BITE = registerSoundEvent("ant_bite"); public static final RegistryObject ANT_GATHER = registerSoundEvent("ant_gather"); public static final RegistryObject ANT_NEST = registerSoundEvent("ant_nest"); - public static final RegistryObject CLOUD_SHARK_BITE = registerSoundEvent("cloud_shark_bite"); - public static final RegistryObject CLOUD_SHARK_IDLE = registerSoundEvent("cloud_shark_idle"); - public static final RegistryObject CLOUD_SHARK_HURT = registerSoundEvent("cloud_shark_hurt"); - public static final RegistryObject CLOUD_SHARK_DEATH = registerSoundEvent("cloud_shark_death"); - public static final RegistryObject CLOUD_SHARK_FLY = registerSoundEvent("cloud_shark_fly"); + public static final RegistryObject CLOUD_SHARK_BITE = registerSoundEvent("stratoshark_bite"); + public static final RegistryObject CLOUD_SHARK_IDLE = registerSoundEvent("stratoshark_idle"); + public static final RegistryObject CLOUD_SHARK_HURT = registerSoundEvent("stratoshark_hurt"); + public static final RegistryObject CLOUD_SHARK_DEATH = registerSoundEvent("stratoshark_death"); + public static final RegistryObject CLOUD_SHARK_FLY = registerSoundEvent("stratoshark_fly"); public static final RegistryObject CATERPILLAR_IDLE = registerSoundEvent("caterpillar_idle"); public static final RegistryObject CATERPILLAR_HURT = registerSoundEvent("caterpillar_hurt"); public static final RegistryObject CATERPILLAR_CRAWL = registerSoundEvent("caterpillar_crawl"); @@ -87,12 +87,12 @@ public final class AntarchyForgeSounds { public static final RegistryObject NIGHTMARE_DEATH = registerSoundEvent("nightmare_death"); public static final RegistryObject NIGHTMARE_BITE = registerSoundEvent("nightmare_bite"); public static final RegistryObject NIGHTMARE_FLAP = registerSoundEvent("nightmare_flap"); - public static final RegistryObject TRIFFID_ATTACK = registerSoundEvent("triffid_attack"); - public static final RegistryObject TRIFFID_GRAB = registerSoundEvent("triffid_grab"); - public static final RegistryObject TRIFFID_HURT = registerSoundEvent("triffid_hurt"); - public static final RegistryObject TRIFFID_DEATH = registerSoundEvent("triffid_death"); - public static final RegistryObject TRIFFID_HISS = registerSoundEvent("triffid_hiss"); - public static final RegistryObject TRIFFID_GROWL = registerSoundEvent("triffid_growl"); + public static final RegistryObject TRIFFID_ATTACK = registerSoundEvent("flytrap_attack"); + public static final RegistryObject TRIFFID_GRAB = registerSoundEvent("flytrap_grab"); + public static final RegistryObject TRIFFID_HURT = registerSoundEvent("flytrap_hurt"); + public static final RegistryObject TRIFFID_DEATH = registerSoundEvent("flytrap_death"); + public static final RegistryObject TRIFFID_HISS = registerSoundEvent("flytrap_hiss"); + public static final RegistryObject TRIFFID_GROWL = registerSoundEvent("flytrap_growl"); public static final RegistryObject MANTIS_AMBIENT = registerSoundEvent("mantis_ambient"); public static final RegistryObject MANTIS_HURT = registerSoundEvent("mantis_hurt"); public static final RegistryObject MANTIS_ATTACK = registerSoundEvent("mantis_attack"); @@ -144,23 +144,23 @@ public final class AntarchyForgeSounds { public static final RegistryObject ROLLY_POLLY_WHEEL_MODE = registerSoundEvent("rolly_polly_wheel_mode"); public static final RegistryObject ROLLY_POLLY_NORMAL_MODE = registerSoundEvent("rolly_polly_normal_mode"); public static final RegistryObject ROLLY_POLLY_ROLL = registerSoundEvent("rolly_polly_roll"); - public static final RegistryObject CREEPING_HORROR_GROWL = registerSoundEvent("creeping_horror_growl"); - public static final RegistryObject CREEPING_HORROR_HURT = registerSoundEvent("creeping_horror_hurt"); - public static final RegistryObject CREEPING_HORROR_BITE = registerSoundEvent("creeping_horror_bite"); - public static final RegistryObject LURKING_TERROR_SNARL = registerSoundEvent("lurking_terror_snarl"); - public static final RegistryObject LURKING_TERROR_HURT = registerSoundEvent("lurking_terror_hurt"); - public static final RegistryObject LURKING_TERROR_BITE = registerSoundEvent("lurking_terror_bite"); - public static final RegistryObject LURKING_TERROR_FLY_LOOP = registerSoundEvent("lurking_terror_fly_loop"); + public static final RegistryObject CREEPING_HORROR_GROWL = registerSoundEvent("crawling_blight_growl"); + public static final RegistryObject CREEPING_HORROR_HURT = registerSoundEvent("crawling_blight_hurt"); + public static final RegistryObject CREEPING_HORROR_BITE = registerSoundEvent("crawling_blight_bite"); + public static final RegistryObject LURKING_TERROR_SNARL = registerSoundEvent("skulking_fright_snarl"); + public static final RegistryObject LURKING_TERROR_HURT = registerSoundEvent("skulking_fright_hurt"); + public static final RegistryObject LURKING_TERROR_BITE = registerSoundEvent("skulking_fright_bite"); + public static final RegistryObject LURKING_TERROR_FLY_LOOP = registerSoundEvent("skulking_fright_fly_loop"); public static final RegistryObject HERCULES_BEETLE_IDLE = registerSoundEvent("hercules_beetle_idle"); public static final RegistryObject HERCULES_BEETLE_HURT = registerSoundEvent("hercules_beetle_hurt"); public static final RegistryObject HERCULES_BEETLE_ATTACK = registerSoundEvent("hercules_beetle_attack"); public static final RegistryObject HERCULES_BEETLE_CRY = registerSoundEvent("hercules_beetle_cry"); public static final RegistryObject HERCULES_BEETLE_CHARGE_START = registerSoundEvent("hercules_beetle_charge_start"); public static final RegistryObject HERCULES_BEETLE_KNOCKED_DOWN = registerSoundEvent("hercules_beetle_knocked_down"); - public static final RegistryObject JUMPY_BUG_IDLE = registerSoundEvent("jumpy_bug_idle"); + public static final RegistryObject JUMPY_BUG_IDLE = registerSoundEvent("springbug_idle"); public static final RegistryObject SPIT_BUG_IDLE = registerSoundEvent("spit_bug_idle"); - public static final RegistryObject JUMPY_BUG_HURT = registerSoundEvent("jumpy_bug_hurt"); - public static final RegistryObject JUMPY_BUG_JUMP = registerSoundEvent("jumpy_bug_jump"); + public static final RegistryObject JUMPY_BUG_HURT = registerSoundEvent("springbug_hurt"); + public static final RegistryObject JUMPY_BUG_JUMP = registerSoundEvent("springbug_jump"); public static final RegistryObject SPIT_BUG_HURT = registerSoundEvent("spit_bug_hurt"); public static final RegistryObject SPIT_BUG_SPIT = registerSoundEvent("spit_bug_spit"); public static final RegistryObject BRUTALFLY_SPIT = registerSoundEvent("brutalfly_spit"); 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 34c75072..1fa32aef 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 @@ -147,6 +147,7 @@ public final class AntarchyConfigModuleNeoforge { AntarchySettings.setKingAttackDamage(AntarchyMobsConfig.kingAttackDamage()); AntarchySettings.setQueenAttackDamage(AntarchyMobsConfig.queenAttackDamage()); AntarchySettings.setRoyalBossArmor(AntarchyMobsConfig.royalBossArmor()); + AntarchySettings.setKingArmor(AntarchyMobsConfig.kingArmor()); AntarchySettings.setRoyalBossFollowRange(AntarchyMobsConfig.royalBossFollowRange()); AntarchySettings.setRoyalBossMovementSpeed(AntarchyMobsConfig.royalBossMovementSpeed()); AntarchySettings.setRoyalBossKnockbackResistance(AntarchyMobsConfig.royalBossKnockbackResistance()); @@ -155,6 +156,13 @@ public final class AntarchyConfigModuleNeoforge { AntarchySettings.setRoyalBossBiteReach(AntarchyMobsConfig.royalBossBiteReach()); AntarchySettings.setRoyalBossBiteDamageMultiplier(AntarchyMobsConfig.royalBossBiteDamageMultiplier()); AntarchySettings.setRoyalBossBiteCooldownTicks(AntarchyMobsConfig.royalBossBiteCooldownTicks()); + AntarchySettings.setRoyalBossMultiplayerScalingEnabled(AntarchyMobsConfig.royalBossMultiplayerScalingEnabled()); + AntarchySettings.setRoyalBossScalingMaxPlayers(AntarchyMobsConfig.royalBossScalingMaxPlayers()); + AntarchySettings.setRoyalBossHealthPerAdditionalPlayer(AntarchyMobsConfig.royalBossHealthPerAdditionalPlayer()); + AntarchySettings.setRoyalBossDamagePerAdditionalPlayer(AntarchyMobsConfig.royalBossDamagePerAdditionalPlayer()); + AntarchySettings.setRoyalBoundaryRadius(AntarchyMobsConfig.royalBoundaryRadius()); + AntarchySettings.setRoyalBoundaryWarningRadius(AntarchyMobsConfig.royalBoundaryWarningRadius()); + AntarchySettings.setRoyalBoundaryGraceTicks(AntarchyMobsConfig.royalBoundaryGraceTicks()); AntarchySettings.setQueenBeamDamage(AntarchyMobsConfig.queenBeamDamage()); AntarchySettings.setQueenBeamRange(AntarchyMobsConfig.queenBeamRange()); AntarchySettings.setQueenBeamMinimumRange(AntarchyMobsConfig.queenBeamMinimumRange()); @@ -189,10 +197,6 @@ public final class AntarchyConfigModuleNeoforge { AntarchySettings.setQueenBlackHoleActiveTicks(AntarchyMobsConfig.queenBlackHoleActiveTicks()); AntarchySettings.setQueenBlackHolePullStrength(AntarchyMobsConfig.queenBlackHolePullStrength()); AntarchySettings.setQueenBlackHoleBlockSuctionCap(AntarchyMobsConfig.queenBlackHoleBlockSuctionCap()); - AntarchySettings.setQueenFinalTimeFieldRadius(AntarchyMobsConfig.queenFinalTimeFieldRadius()); - AntarchySettings.setQueenFinalTimeFieldRate(AntarchyMobsConfig.queenFinalTimeFieldRate()); - AntarchySettings.setQueenFinalTimeFieldDurationTicks(AntarchyMobsConfig.queenFinalTimeFieldDurationTicks()); - AntarchySettings.setQueenFinalTimeFieldCooldownTicks(AntarchyMobsConfig.queenFinalTimeFieldCooldownTicks()); AntarchySettings.setKingFireballDamage(AntarchyMobsConfig.kingFireballDamage()); AntarchySettings.setKingFireballRadius(AntarchyMobsConfig.kingFireballRadius()); AntarchySettings.setKingFireballCooldownTicks(AntarchyMobsConfig.kingFireballCooldownTicks()); 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 33e6cce3..ce216847 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 @@ -122,6 +122,7 @@ public final class AntarchyMobsConfig { private static final ModConfigSpec.DoubleValue KING_ATTACK_DAMAGE; private static final ModConfigSpec.DoubleValue QUEEN_ATTACK_DAMAGE; private static final ModConfigSpec.DoubleValue ROYAL_BOSS_ARMOR; + private static final ModConfigSpec.DoubleValue KING_ARMOR; private static final ModConfigSpec.DoubleValue ROYAL_BOSS_FOLLOW_RANGE; private static final ModConfigSpec.DoubleValue ROYAL_BOSS_MOVEMENT_SPEED; private static final ModConfigSpec.DoubleValue ROYAL_BOSS_KNOCKBACK_RESISTANCE; @@ -130,6 +131,11 @@ public final class AntarchyMobsConfig { private static final ModConfigSpec.DoubleValue ROYAL_BOSS_BITE_REACH; private static final ModConfigSpec.DoubleValue ROYAL_BOSS_BITE_DAMAGE_MULTIPLIER; private static final ModConfigSpec.IntValue ROYAL_BOSS_BITE_COOLDOWN_TICKS; + private static final ModConfigSpec.BooleanValue ROYAL_BOSS_MULTIPLAYER_SCALING_ENABLED; + private static final ModConfigSpec.IntValue ROYAL_BOSS_SCALING_MAX_PLAYERS; + private static final ModConfigSpec.DoubleValue ROYAL_BOSS_HEALTH_PER_ADDITIONAL_PLAYER, ROYAL_BOSS_DAMAGE_PER_ADDITIONAL_PLAYER; + private static final ModConfigSpec.DoubleValue ROYAL_BOUNDARY_RADIUS, ROYAL_BOUNDARY_WARNING_RADIUS; + private static final ModConfigSpec.IntValue ROYAL_BOUNDARY_GRACE_TICKS; private static final ModConfigSpec.DoubleValue QUEEN_BEAM_DAMAGE, QUEEN_BEAM_RANGE, QUEEN_BEAM_MINIMUM_RANGE, QUEEN_BEAM_TRACKING, QUEEN_BEAM_TERRAIN_RADIUS; private static final ModConfigSpec.IntValue QUEEN_BEAM_DURATION_TICKS, QUEEN_BEAM_WINDUP_TICKS, QUEEN_BEAM_TRAVEL_TICKS, QUEEN_BEAM_COOLDOWN_TICKS, QUEEN_BEAM_TERRAIN_CAP, QUEEN_BEAM_PHASE_ONE_CAP, QUEEN_BEAM_PHASE_TWO_CAP, QUEEN_BEAM_PHASE_THREE_CAP; @@ -140,10 +146,8 @@ public final class AntarchyMobsConfig { private static final ModConfigSpec.DoubleValue KING_ROYAL_MUSTER_RADIUS; private static final ModConfigSpec.IntValue KING_ROYAL_MUSTER_COOLDOWN_TICKS, KING_ROYAL_MUSTER_WINDUP_TICKS, KING_ROYAL_MUSTER_DURATION_TICKS, KING_ROYAL_MUSTER_CAP; - private static final ModConfigSpec.DoubleValue QUEEN_BLACK_HOLE_RADIUS, QUEEN_BLACK_HOLE_PULL_STRENGTH, - QUEEN_FINAL_TIME_FIELD_RADIUS, QUEEN_FINAL_TIME_FIELD_RATE; - private static final ModConfigSpec.IntValue QUEEN_BLACK_HOLE_ACTIVE_TICKS, QUEEN_BLACK_HOLE_BLOCK_SUCTION_CAP, - QUEEN_FINAL_TIME_FIELD_DURATION_TICKS, QUEEN_FINAL_TIME_FIELD_COOLDOWN_TICKS; + private static final ModConfigSpec.DoubleValue QUEEN_BLACK_HOLE_RADIUS, QUEEN_BLACK_HOLE_PULL_STRENGTH; + private static final ModConfigSpec.IntValue QUEEN_BLACK_HOLE_ACTIVE_TICKS, QUEEN_BLACK_HOLE_BLOCK_SUCTION_CAP; private static final ModConfigSpec.DoubleValue ROYAL_BOSS_SOUND_VOLUME; private static final ModConfigSpec.DoubleValue KING_FIREBALL_DAMAGE, KING_FIREBALL_RADIUS, KING_ICEBALL_DAMAGE, KING_ICEBALL_RADIUS, KING_ICE_SPIKE_DAMAGE; private static final ModConfigSpec.IntValue KING_FIREBALL_COOLDOWN_TICKS, KING_ICEBALL_COOLDOWN_TICKS, KING_ICE_SPIKE_COOLDOWN_TICKS, KING_ELEMENTAL_TERRAIN_CAP; @@ -627,11 +631,12 @@ public final class AntarchyMobsConfig { b.pop(); b.push("royalBosses"); - KING_HEALTH = b.comment("Base max health for the King.").defineInRange("kingHealth", 6000.0D, 1.0D, 32768.0D); - QUEEN_HEALTH = b.comment("Base max health for the Queen.").defineInRange("queenHealth", 6000.0D, 1.0D, 32768.0D); + KING_HEALTH = b.comment("Base max health for the King.").defineInRange("kingHealth", 3400.0D, 1.0D, 32768.0D); + QUEEN_HEALTH = b.comment("Base max health for the Queen.").defineInRange("queenHealth", 4300.0D, 1.0D, 32768.0D); KING_ATTACK_DAMAGE = b.comment("Base attack damage for the King.").defineInRange("kingAttackDamage", 50.0D, 0.0D, 1024.0D); QUEEN_ATTACK_DAMAGE = b.comment("Base attack damage for the Queen.").defineInRange("queenAttackDamage", 45.0D, 0.0D, 1024.0D); ROYAL_BOSS_ARMOR = b.comment("Base armor value shared by King and Queen.").defineInRange("armor", 20.0D, 0.0D, 1024.0D); + KING_ARMOR = b.defineInRange("kingArmor", 30.0D, 0.0D, 1024.0D); ROYAL_BOSS_FOLLOW_RANGE = b.comment("Target acquisition range shared by King and Queen.").defineInRange("followRange", 128.0D, 1.0D, 256.0D); ROYAL_BOSS_MOVEMENT_SPEED = b.comment("Base grounded movement speed shared by King and Queen.").defineInRange("movementSpeed", 0.22D, 0.0D, 10.0D); ROYAL_BOSS_KNOCKBACK_RESISTANCE = b.comment("Base knockback resistance shared by King and Queen.").defineInRange("knockbackResistance", 1.0D, 0.0D, 1.0D); @@ -640,6 +645,13 @@ public final class AntarchyMobsConfig { ROYAL_BOSS_BITE_REACH = b.comment("Radius around each head anchor that a King or Queen bite can hit.").defineInRange("biteReach", 12.0D, 1.0D, 64.0D); ROYAL_BOSS_BITE_DAMAGE_MULTIPLIER = b.comment("Multiplier applied to base attack damage for King and Queen head bites.").defineInRange("biteDamageMultiplier", 1.6D, 0.0D, 32.0D); ROYAL_BOSS_BITE_COOLDOWN_TICKS = b.comment("Base cooldown in ticks between bites for a single King or Queen head (scaled down at later phases).").defineInRange("biteCooldownTicks", 45, 1, 1200); + ROYAL_BOSS_MULTIPLAYER_SCALING_ENABLED = b.define("multiplayerScalingEnabled", true); + ROYAL_BOSS_SCALING_MAX_PLAYERS = b.defineInRange("scalingMaxPlayers", 4, 1, 32); + ROYAL_BOSS_HEALTH_PER_ADDITIONAL_PLAYER = b.defineInRange("healthPerAdditionalPlayer", 0.35D, 0.0D, 4.0D); + ROYAL_BOSS_DAMAGE_PER_ADDITIONAL_PLAYER = b.defineInRange("damagePerAdditionalPlayer", 0.10D, 0.0D, 2.0D); + ROYAL_BOUNDARY_RADIUS = b.defineInRange("royalBoundaryRadius", 192.0D, 32.0D, 1024.0D); + ROYAL_BOUNDARY_WARNING_RADIUS = b.defineInRange("royalBoundaryWarningRadius", 160.0D, 16.0D, 1024.0D); + ROYAL_BOUNDARY_GRACE_TICKS = b.defineInRange("royalBoundaryGraceTicks", 60, 0, 2400); QUEEN_BEAM_DAMAGE = b.defineInRange("queenBeamDamage", 45.0D, 0.0D, 1024.0D); QUEEN_BEAM_RANGE = b.defineInRange("queenBeamRange", 100.0D, 1.0D, 256.0D); QUEEN_BEAM_MINIMUM_RANGE = b.comment("Minimum distance from the Queen before she may begin or maintain a beam.").defineInRange("queenBeamMinimumRange", 22.0D, 0.0D, 256.0D); @@ -674,10 +686,6 @@ public final class AntarchyMobsConfig { QUEEN_BLACK_HOLE_ACTIVE_TICKS = b.comment("Active duration for Royal Assailant axe black holes. Queen black holes always follow their 20.125-second animation.").defineInRange("queenBlackHoleActiveTicks", 120, 20, 1200); QUEEN_BLACK_HOLE_PULL_STRENGTH = b.defineInRange("queenBlackHolePullStrength", 0.16D, 0.0D, 2.0D); QUEEN_BLACK_HOLE_BLOCK_SUCTION_CAP = b.comment("Maximum terrain blocks a single Queen black hole may pull into itself.").defineInRange("queenBlackHoleBlockSuctionCap", 160, 0, 4096); - QUEEN_FINAL_TIME_FIELD_RADIUS = b.defineInRange("queenFinalTimeFieldRadius", 20.0D, 1.0D, 64.0D); - QUEEN_FINAL_TIME_FIELD_RATE = b.defineInRange("queenFinalTimeFieldRate", 0.05D, 0.05D, 1.0D); - QUEEN_FINAL_TIME_FIELD_DURATION_TICKS = b.defineInRange("queenFinalTimeFieldDurationTicks", 45, 1, 1200); - QUEEN_FINAL_TIME_FIELD_COOLDOWN_TICKS = b.defineInRange("queenFinalTimeFieldCooldownTicks", 80, 1, 2400); KING_FIREBALL_DAMAGE = b.defineInRange("kingFireballDamage", 32.0D, 0.0D, 1024.0D); KING_FIREBALL_RADIUS = b.defineInRange("kingFireballRadius", 4.5D, 0.5D, 32.0D); KING_FIREBALL_COOLDOWN_TICKS = b.defineInRange("kingFireballCooldownTicks", 150, 1, 2400); @@ -1181,6 +1189,7 @@ public final class AntarchyMobsConfig { static double kingAttackDamage() { return KING_ATTACK_DAMAGE.get(); } static double queenAttackDamage() { return QUEEN_ATTACK_DAMAGE.get(); } static double royalBossArmor() { return ROYAL_BOSS_ARMOR.get(); } + static double kingArmor() { return KING_ARMOR.get(); } static double royalBossFollowRange() { return ROYAL_BOSS_FOLLOW_RANGE.get(); } static double royalBossMovementSpeed() { return ROYAL_BOSS_MOVEMENT_SPEED.get(); } static double royalBossKnockbackResistance() { return ROYAL_BOSS_KNOCKBACK_RESISTANCE.get(); } @@ -1189,6 +1198,13 @@ public final class AntarchyMobsConfig { static double royalBossBiteReach() { return ROYAL_BOSS_BITE_REACH.get(); } static double royalBossBiteDamageMultiplier() { return ROYAL_BOSS_BITE_DAMAGE_MULTIPLIER.get(); } static int royalBossBiteCooldownTicks() { return ROYAL_BOSS_BITE_COOLDOWN_TICKS.get(); } + static boolean royalBossMultiplayerScalingEnabled() { return ROYAL_BOSS_MULTIPLAYER_SCALING_ENABLED.get(); } + static int royalBossScalingMaxPlayers() { return ROYAL_BOSS_SCALING_MAX_PLAYERS.get(); } + static double royalBossHealthPerAdditionalPlayer() { return ROYAL_BOSS_HEALTH_PER_ADDITIONAL_PLAYER.get(); } + static double royalBossDamagePerAdditionalPlayer() { return ROYAL_BOSS_DAMAGE_PER_ADDITIONAL_PLAYER.get(); } + static double royalBoundaryRadius() { return ROYAL_BOUNDARY_RADIUS.get(); } + static double royalBoundaryWarningRadius() { return ROYAL_BOUNDARY_WARNING_RADIUS.get(); } + static int royalBoundaryGraceTicks() { return ROYAL_BOUNDARY_GRACE_TICKS.get(); } static double queenBeamDamage() { return QUEEN_BEAM_DAMAGE.get(); } static double queenBeamRange() { return QUEEN_BEAM_RANGE.get(); } static double queenBeamMinimumRange() { return QUEEN_BEAM_MINIMUM_RANGE.get(); } @@ -1223,10 +1239,6 @@ public final class AntarchyMobsConfig { static int queenBlackHoleActiveTicks() { return QUEEN_BLACK_HOLE_ACTIVE_TICKS.get(); } static double queenBlackHolePullStrength() { return QUEEN_BLACK_HOLE_PULL_STRENGTH.get(); } static int queenBlackHoleBlockSuctionCap() { return QUEEN_BLACK_HOLE_BLOCK_SUCTION_CAP.get(); } - static double queenFinalTimeFieldRadius() { return QUEEN_FINAL_TIME_FIELD_RADIUS.get(); } - static double queenFinalTimeFieldRate() { return QUEEN_FINAL_TIME_FIELD_RATE.get(); } - static int queenFinalTimeFieldDurationTicks() { return QUEEN_FINAL_TIME_FIELD_DURATION_TICKS.get(); } - static int queenFinalTimeFieldCooldownTicks() { return QUEEN_FINAL_TIME_FIELD_COOLDOWN_TICKS.get(); } static double kingFireballDamage() { return KING_FIREBALL_DAMAGE.get(); } static double kingFireballRadius() { return KING_FIREBALL_RADIUS.get(); } static int kingFireballCooldownTicks() { return KING_FIREBALL_COOLDOWN_TICKS.get(); } 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 982bad14..c1ee80d2 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 @@ -593,7 +593,6 @@ public final class AntarchyNeoForgeClient { registerGeoItemExtension(event, AntarchyNeoforgeItems.BATTLE_AXE.get()); registerGeoItemExtension(event, AntarchyNeoforgeItems.BIG_BERTHA.get()); registerGeoItemExtension(event, AntarchyNeoforgeItems.ROYAL_GUARDIAN_SWORD.get()); - registerGeoItemExtension(event, AntarchyNeoforgeItems.COMPUTER_ITEM.get()); } @SubscribeEvent @@ -709,6 +708,7 @@ public final class AntarchyNeoForgeClient { ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.GLOWCAP_MUSHROOM.get(), RenderType.cutout()); registerUltimateBowProperties(); registerUltimateCrossbowProperties(); + registerFloppyDiskProperties(); }); } @@ -728,6 +728,14 @@ public final class AntarchyNeoForgeClient { }); } + private static void registerFloppyDiskProperties() { + ItemProperties.register( + AntarchyNeoforgeItems.FLOPPY_DISK.get(), + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "disk_category"), + (stack, level, entity, seed) -> com.craisinlord.antarchy.content.item.FloppyDiskItem.categoryModelProperty(stack) + ); + } + private static void registerUltimateBowProperties() { ItemProperties.register( AntarchyNeoforgeItems.ULTIMATE_BOW.get(), 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 b742cb33..a7770bbd 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 @@ -23,6 +23,7 @@ import com.craisinlord.antarchy.content.entity.multipart.MultipartFramework; import com.craisinlord.antarchy.content.entity.vortex.VortexChargeProjectileEntity; import com.craisinlord.antarchy.content.entity.vortex.VortexEntity; import com.craisinlord.antarchy.content.entity.trades.DrTrayaurusTradeManager; +import com.craisinlord.antarchy.content.entity.trades.ComputerScientistTradeManager; import com.craisinlord.antarchy.content.horde.CavarynHordeManager; import com.craisinlord.antarchy.content.item.*; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; @@ -254,7 +255,15 @@ public final class AntarchyNeoForgeEvents { } static void onVillagerTrades(VillagerTradesEvent event) { - if (event.getType() == VillagerProfession.FARMER) { + if (event.getType() == AntarchyNeoforgeMisc.COMPUTER_SCIENTIST.get()) { + int[] slots = ComputerScientistTradeManager.slotsPerLevel(); + for (int level = 1; level <= slots.length; level++) { + for (int index = 0; index < slots[level - 1]; index++) { + event.getTrades().computeIfAbsent(level, ignored -> new java.util.ArrayList<>()) + .add(ComputerScientistTradeManager.listing(level, index)); + } + } + } else if (event.getType() == VillagerProfession.FARMER) { event.getTrades().get(1).add(emeraldForItems(AntarchyObjects.CORN.get(), 20, 16, 2)); } else if (event.getType() == VillagerProfession.BUTCHER) { event.getTrades().get(1).add(emeraldForItems(AntarchyObjects.COOKED_CORNDOG.get(), 5, 16, 2)); @@ -312,7 +321,10 @@ public final class AntarchyNeoForgeEvents { } } + static void tickCavarynHordes(ServerTickEvent.Post event) { + com.craisinlord.antarchy.content.antmail.AntmailServerData.access(event.getServer()).drainAvailable(event.getServer()); + com.craisinlord.antarchy.content.antmail.AntmailEventData.onTick(event.getServer()); for (ServerLevel level : event.getServer().getAllLevels()) { CavarynHordeManager.tick(level); com.craisinlord.antarchy.content.horde.CavarynCreatureSpawner.tick(level); @@ -381,7 +393,9 @@ public final class AntarchyNeoForgeEvents { static void registerReloadListeners(AddReloadListenerEvent event) { event.addListener(new DrTrayaurusTradeManager()); + event.addListener(new ComputerScientistTradeManager()); event.addListener(com.craisinlord.antarchy.content.guide.ComputerGuideData.instance()); + event.addListener(com.craisinlord.antarchy.content.antmail.AntmailEventData.instance()); } static void handleStartTracking(PlayerEvent.StartTracking event) { if (event.getTarget().level().isClientSide()) { 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 bcafb2f8..1d167f45 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 @@ -46,6 +46,8 @@ import net.minecraft.world.effect.MobEffect; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.village.poi.PoiType; +import net.minecraft.world.entity.npc.VillagerProfession; import net.minecraft.world.inventory.MenuType; import net.minecraft.world.item.alchemy.Potion; import net.minecraft.world.level.biome.BiomeSource; @@ -64,6 +66,23 @@ import net.neoforged.neoforge.registries.NeoForgeRegistries; import java.util.function.Function; public final class AntarchyNeoforgeMisc { + private static final DeferredRegister POI_TYPES = DeferredRegister.create(Registries.POINT_OF_INTEREST_TYPE, Antarchy.MODID); + private static final DeferredRegister VILLAGER_PROFESSIONS = DeferredRegister.create(Registries.VILLAGER_PROFESSION, Antarchy.MODID); + + public static final DeferredHolder COMPUTER_POI = POI_TYPES.register("computer", + () -> new PoiType( + java.util.Set.copyOf(AntarchyNeoforgeBlocks.COMPUTER.get().getStateDefinition().getPossibleStates()), + 1, + 1)); + + public static final DeferredHolder COMPUTER_SCIENTIST = VILLAGER_PROFESSIONS.register("computer_scientist", + () -> new VillagerProfession( + "computer_scientist", + holder -> holder.value() == COMPUTER_POI.get(), + holder -> holder.value() == COMPUTER_POI.get(), + com.google.common.collect.ImmutableSet.of(), + com.google.common.collect.ImmutableSet.of(), + net.minecraft.sounds.SoundEvents.VILLAGER_WORK_LIBRARIAN)); private static final DeferredRegister MOB_EFFECTS = DeferredRegister.create(Registries.MOB_EFFECT, Antarchy.MODID); private static final DeferredRegister POTIONS = DeferredRegister.create(Registries.POTION, Antarchy.MODID); private static final DeferredRegister FLUID_TYPES = DeferredRegister.create(NeoForgeRegistries.Keys.FLUID_TYPES, Antarchy.MODID); @@ -431,6 +450,8 @@ public final class AntarchyNeoforgeMisc { private AntarchyNeoforgeMisc() {} public static void register(IEventBus modEventBus) { + POI_TYPES.register(modEventBus); + VILLAGER_PROFESSIONS.register(modEventBus); MOB_EFFECTS.register(modEventBus); POTIONS.register(modEventBus); FLUID_TYPES.register(modEventBus); 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 30a52e9f..e6aefb62 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 @@ -8,8 +8,12 @@ import com.craisinlord.antarchy.content.network.ToggleTigerEyeCamouflagePayload; import com.craisinlord.antarchy.content.network.AntmailPayloadTypes; import com.craisinlord.antarchy.content.network.AntmailSetupPayload; import com.craisinlord.antarchy.content.network.AntmailStateRequestPayload; +import com.craisinlord.antarchy.content.network.AntmailMessageRequestPayload; import com.craisinlord.antarchy.content.network.AntmailSendPayload; import com.craisinlord.antarchy.content.network.AntmailReadPayload; +import com.craisinlord.antarchy.content.network.AntmailDeletePayload; +import com.craisinlord.antarchy.content.network.AntmailDraftPayload; +import com.craisinlord.antarchy.content.network.AntmailRetryPayload; import com.craisinlord.antarchy.content.network.AntmailResultPayload; import com.craisinlord.antarchy.content.network.AntmailServerHandler; import com.craisinlord.antarchy.content.item.TigerEyeArmorUtil; @@ -50,6 +54,10 @@ public class AntarchyNeoforgePayloadHandlers { (payload, ctx) -> ctx.enqueueWork(() -> { if (ctx.player() instanceof net.minecraft.server.level.ServerPlayer player) AntmailServerHandler.handle(player, payload); })); + registrar.playToServer(AntmailMessageRequestPayload.TYPE, AntmailMessageRequestPayload.STREAM_CODEC, + (payload, ctx) -> ctx.enqueueWork(() -> { + if (ctx.player() instanceof net.minecraft.server.level.ServerPlayer player) AntmailServerHandler.handle(player, payload); + })); registrar.playToServer(AntmailSendPayload.TYPE, AntmailSendPayload.STREAM_CODEC, (payload, ctx) -> ctx.enqueueWork(() -> { if (ctx.player() instanceof net.minecraft.server.level.ServerPlayer player) AntmailServerHandler.handle(player, payload); @@ -58,6 +66,18 @@ public class AntarchyNeoforgePayloadHandlers { (payload, ctx) -> ctx.enqueueWork(() -> { if (ctx.player() instanceof net.minecraft.server.level.ServerPlayer player) AntmailServerHandler.handle(player, payload); })); + registrar.playToServer(AntmailDeletePayload.TYPE, AntmailDeletePayload.STREAM_CODEC, + (payload, ctx) -> ctx.enqueueWork(() -> { + if (ctx.player() instanceof net.minecraft.server.level.ServerPlayer player) AntmailServerHandler.handle(player, payload); + })); + registrar.playToServer(AntmailDraftPayload.TYPE, AntmailDraftPayload.STREAM_CODEC, + (payload, ctx) -> ctx.enqueueWork(() -> { + if (ctx.player() instanceof net.minecraft.server.level.ServerPlayer player) AntmailServerHandler.handle(player, payload); + })); + registrar.playToServer(AntmailRetryPayload.TYPE, AntmailRetryPayload.STREAM_CODEC, + (payload, ctx) -> ctx.enqueueWork(() -> { + if (ctx.player() instanceof net.minecraft.server.level.ServerPlayer player) AntmailServerHandler.handle(player, payload); + })); registrar.playToClient(AntmailResultPayload.TYPE, AntmailResultPayload.STREAM_CODEC, (payload, ctx) -> ctx.enqueueWork(() -> com.craisinlord.antarchy.content.client.AntmailClientState.update(payload))); registrar.playToClient(