From 58e504cf1d98d85392da7d4ddb3c51afbff44896 Mon Sep 17 00:00:00 2001 From: craisinlord Date: Sun, 2 Aug 2026 21:52:56 -0500 Subject: [PATCH] WIP 1.20.1 port 2 new squirrel anims tons of stuff --- .../antarchy/config/AntarchySettings.java | 36 + .../antarchy/content/AntarchyObjects.java | 45 +- .../antarchy/content/AntarchyTags.java | 6 + ...nSpikeBlock.java => ChitinSpikeBlock.java} | 26 +- .../content/block/DreamFireBlock.java | 17 + .../content/block/LucidAnchorBlock.java | 77 + .../block/entity/LucidAnchorBlockEntity.java | 344 + .../client/TigerEyeCamouflageClientState.java | 29 + .../content/client/TigerEyeClientHooks.java | 19 + .../client/hud/CustomBossBarRenderer.java | 37 +- .../client/model/NightmareBiteModel.java | 26 + .../content/client/model/NightmareModel.java | 16 +- .../client/model/NightmarePortalModel.java | 25 + .../LucidAnchorBlockEntityRenderer.java | 127 + .../renderer/NightmareBiteRenderer.java | 13 + .../renderer/NightmarePortalRenderer.java | 37 + .../client/renderer/NightmareRenderer.java | 2 +- .../TigerEyeCamouflagePlayerLayer.java | 57 + .../TigerEyeCamouflageTextureResolver.java | 146 + .../content/creative/CreativeTabContents.java | 33 +- .../content/entity/AlphaMantisEntity.java | 20 + .../antarchy/content/entity/BedBugEntity.java | 1 + .../content/entity/ButterflyEntity.java | 1 + .../content/entity/CaterpillarEntity.java | 6 + .../antarchy/content/entity/CheepEntity.java | 6 + .../entity/ConfiguredMobSpawnUtil.java | 18 + .../content/entity/CreepingHorrorEntity.java | 6 + .../antarchy/content/entity/DorrieEntity.java | 6 + .../content/entity/EmperorScorpionEntity.java | 294 +- .../content/entity/HerculesBeetleEntity.java | 7 + .../content/entity/LurkingTerrorEntity.java | 7 + .../antarchy/content/entity/MantisEntity.java | 61 + .../content/entity/MissileSquidEntity.java | 7 + .../content/entity/MolevoreEntity.java | 7 +- .../content/entity/MolewormEntity.java | 7 + .../content/entity/OuranwoodDeerEntity.java | 1 + .../content/entity/ReverieEntity.java | 7 + .../content/entity/RollyPollyEntity.java | 7 + .../content/entity/ScorpionEntity.java | 22 + .../content/entity/ToreterrorEntity.java | 7 + .../content/entity/TriffidEntity.java | 7 + .../entity/UpwardFallingBlockEntity.java | 30 +- .../content/entity/ant/AntTeleportHelper.java | 34 + .../content/entity/ant/BaseAntEntity.java | 7 + .../content/entity/ant/RainbowAntEntity.java | 5 + .../entity/basilisk/BasiliskEntity.java | 194 +- .../entity/cloud_shark/CloudSharkEntity.java | 6 + .../flying_squirrel/FlyingSquirrelEntity.java | 57 +- .../content/entity/glimmer/GlimmerEntity.java | 6 +- .../content/entity/kraken/TentacleEntity.java | 3 +- .../content/entity/lucid/LucidEntity.java | 8 +- .../entity/nightmare/NightmareBiteEntity.java | 123 + .../entity/nightmare/NightmareEntity.java | 676 +- .../nightmare/NightmarePortalEntity.java | 186 + .../content/horde/CavarynHordeManager.java | 7 + .../content/item/GlimmerBottleItem.java | 23 +- .../content/item/InnateEnchantmentHelper.java | 77 + .../content/item/LucidAnchorBlockItem.java | 23 + .../content/item/NightmareArmorItem.java | 12 +- .../content/item/PrimordialArmorItem.java | 9 +- .../content/item/SpiritAppleItem.java | 16 + .../content/item/TigerEyeArmorItem.java | 38 + .../content/item/TigerEyeArmorUtil.java | 126 + .../TigerEyeCamouflageStatePayload.java | 24 + .../ToggleTigerEyeCamouflagePayload.java | 18 + .../tigereye/TigerEyeCamouflageAccess.java | 11 + .../TigerEyeCamouflageController.java | 102 + .../tigereye/TigerEyeCamouflageSync.java | 41 + ...ion.java => ChitinSpikeConfiguration.java} | 32 +- ...keFeature.java => ChitinSpikeFeature.java} | 28 +- .../antarchy/mixins/GrindstoneMenuMixin.java | 35 + .../mixins/TigerEyeCamouflageMixin.java | 32 + .../mixins/TigerEyeVisibilityMixin.java | 28 + .../mixins/gravity/EntityMoveMixin.java | 71 + .../resources/antarchy-common.mixins.json | 9 + .../antarchy/animations/ant.animation.json | 3093 ++++--- .../animations/flying_squirrel.animation.json | 1574 +--- .../animations/nightmare.animation.json | 7834 ++++++++++++++++- .../antarchy/blockstates/chiten_block.json | 16 - .../antarchy/blockstates/chitin_block.json | 16 + .../{chiten_spike.json => chitin_spike.json} | 20 +- .../blockstates/cut_titanium_wall.json | 40 - .../blockstates/cut_uranium_wall.json | 40 - .../antarchy/blockstates/lucid_anchor.json | 10 + .../assets/antarchy/geo/nightmare.geo.json | 20 +- .../resources/assets/antarchy/lang/de_de.json | 6 +- .../resources/assets/antarchy/lang/en_us.json | 58 +- .../resources/assets/antarchy/lang/es_es.json | 6 +- .../resources/assets/antarchy/lang/fr_fr.json | 6 +- .../resources/assets/antarchy/lang/it_it.json | 6 +- .../resources/assets/antarchy/lang/ja_jp.json | 6 +- .../resources/assets/antarchy/lang/ko_kr.json | 6 +- .../resources/assets/antarchy/lang/pt_br.json | 6 +- .../resources/assets/antarchy/lang/zh_cn.json | 6 +- .../resources/assets/antarchy/lang/zh_tw.json | 6 +- .../antarchy/models/block/chiten_block.json | 7 - .../antarchy/models/block/chitin_block.json | 7 + ..._base.json => chitin_spike_down_base.json} | 2 +- ...um.json => chitin_spike_down_frustum.json} | 2 +- ...dle.json => chitin_spike_down_middle.json} | 2 +- ...wn_tip.json => chitin_spike_down_tip.json} | 2 +- ....json => chitin_spike_down_tip_merge.json} | 2 +- ...up_base.json => chitin_spike_up_base.json} | 2 +- ...stum.json => chitin_spike_up_frustum.json} | 2 +- ...iddle.json => chitin_spike_up_middle.json} | 2 +- ...e_up_tip.json => chitin_spike_up_tip.json} | 2 +- ...ge.json => chitin_spike_up_tip_merge.json} | 2 +- .../block/cut_titanium_wall_inventory.json | 6 - .../models/block/cut_titanium_wall_post.json | 6 - .../models/block/cut_titanium_wall_side.json | 6 - .../block/cut_titanium_wall_side_tall.json | 6 - .../block/cut_uranium_wall_inventory.json | 6 - .../models/block/cut_uranium_wall_post.json | 6 - .../models/block/cut_uranium_wall_side.json | 6 - .../block/cut_uranium_wall_side_tall.json | 6 - .../antarchy/models/item/chiten_block.json | 3 - .../models/item/{chiten.json => chitin.json} | 2 +- .../antarchy/models/item/chitin_block.json | 3 + .../{chiten_spike.json => chitin_spike.json} | 2 +- .../models/item/cut_titanium_wall.json | 3 - .../models/item/cut_uranium_wall.json | 3 - .../antarchy/models/item/lucid_anchor.json | 3 + .../item/{carapace.json => tigers_eye.json} | 2 +- .../models/item/tigers_eye_boots.json | 6 + .../models/item/tigers_eye_chestplate.json | 6 + .../models/item/tigers_eye_helmet.json | 6 + .../models/item/tigers_eye_leggings.json | 6 + .../resources/assets/antarchy/sounds.json | 16 + .../antarchy/textures/block/biomite.png | Bin 435 -> 450 bytes .../antarchy/textures/block/biomite_turf.png | Bin 1164 -> 1423 bytes .../antarchy/textures/block/biowart.png | Bin 1976 -> 1266 bytes .../textures/block/biowart.png.mcmeta | 10 +- .../textures/block/biowart_tendrils.png | Bin 690 -> 1152 bytes .../antarchy/textures/block/chiten_block.png | Bin 490 -> 0 bytes .../chiten_spike/chiten_spike_down_base.png | Bin 441 -> 0 bytes .../chiten_spike_down_frustum.png | Bin 408 -> 0 bytes .../chiten_spike/chiten_spike_down_middle.png | Bin 419 -> 0 bytes .../chiten_spike/chiten_spike_down_tip.png | Bin 276 -> 0 bytes .../chiten_spike_down_tip_merge.png | Bin 299 -> 0 bytes .../chiten_spike/chiten_spike_up_base.png | Bin 420 -> 0 bytes .../chiten_spike/chiten_spike_up_frustum.png | Bin 393 -> 0 bytes .../chiten_spike/chiten_spike_up_middle.png | Bin 424 -> 0 bytes .../chiten_spike/chiten_spike_up_tip.png | Bin 241 -> 0 bytes .../chiten_spike_up_tip_merge.png | Bin 279 -> 0 bytes .../antarchy/textures/block/critter_cage.png | Bin 326 -> 318 bytes .../textures/block/myrmite_coal_ore.png | Bin 613 -> 610 bytes .../antarchy/textures/block/potent_nyxite.png | Bin 1239 -> 1447 bytes .../textures/block/potent_nyxite.png.mcmeta | 5 +- .../textures/gui/boss_bars/alpha_mantis.png | Bin 6422 -> 6186 bytes .../antarchy/textures/item/carapace.png | Bin 417 -> 0 bytes .../antarchy/textures/item/chiten_spike.png | Bin 241 -> 0 bytes .../textures/item/{chiten.png => chitin.png} | Bin .../antarchy/textures/item/chitin_spike.png | Bin 0 -> 298 bytes .../textures/item/critter_cage_item.png | Bin 313 -> 446 bytes .../item/critter_cage_item_overlay.png | Bin 267 -> 0 bytes .../antarchy/textures/item/jerry_nucleus.png | Bin 415 -> 395 bytes .../textures/mob_effect/glimmering.png | Bin 0 -> 365 bytes .../trims/color_palettes/tigers_eye.png | Bin 0 -> 120 bytes .../assets/minecraft/atlases/armor_trims.json | 3 +- .../cavaryn_moleworm_caves/awakening.json | 16 + .../cavaryn_moleworm_caves/dormant.json | 16 + .../cavaryn_moleworm_caves/final.json | 16 + .../cavaryn_moleworm_caves/wave_1.json | 15 + .../cavaryn_moleworm_caves/wave_2.json | 15 + .../cavaryn_moleworm_caves/wave_3.json | 15 + .../data/antarchy/dimension/cavaryn.json | 30 + .../{chiten_block.json => chitin_block.json} | 4 +- .../{chiten_spike.json => chitin_spike.json} | 2 +- .../loot_table/blocks/cut_titanium_wall.json | 19 - .../loot_table/blocks/cut_uranium_wall.json | 19 - .../loot_table/entities/creeping_horror.json | 4 +- .../antarchy/loot_table/entities/jerry.json | 52 - .../loot_table/entities/jumpy_bug.json | 4 +- .../loot_table/entities/lurking_terror.json | 4 +- .../loot_table/entities/spit_bug.json | 4 +- ...chiten.json => bone_meal_from_chitin.json} | 2 +- .../{chiten_block.json => chitin_block.json} | 4 +- ...ock.json => chitin_from_chitin_block.json} | 4 +- .../data/antarchy/recipe/lucid_anchor.json | 27 + .../antarchy/recipe/tigers_eye_boots.json | 17 + .../recipe/tigers_eye_chestplate.json | 18 + .../antarchy/recipe/tigers_eye_helmet.json | 17 + .../antarchy/recipe/tigers_eye_leggings.json | 18 + .../block/antimetal_inversion_blocks.json | 10 + .../tags/block/lucid_anchor_base_blocks.json | 11 + .../block/tiger_eye_camouflage_blacklist.json | 11 + .../tags/entity_type/horde_molevore.json | 5 + .../tags/entity_type/horde_moleworm.json | 5 + .../tags/entity_type/lucid_anchor_immune.json | 4 + .../tiger_eye_detection_immune.json | 9 + .../antarchy/tags/item/tigers_eye_armor.json | 9 + .../tags/worldgen/biome/is_cavaryn.json | 1 + .../antarchy/trim_material/tigers_eye.json | 9 + .../worldgen/biome/biowart_caves.json | 6 + .../worldgen/biome/brooding_tunnels.json | 20 +- .../data/antarchy/worldgen/biome/cavaryn.json | 8 +- .../biome/cavaryn_moleworm_caves.json | 93 + .../antarchy/worldgen/biome/dream_dunes.json | 9 +- .../worldgen/biome/elythia_beach.json | 6 + .../worldgen/biome/elythia_coral_spikes.json | 6 + .../worldgen/biome/elythia_lush_caves.json | 6 + .../worldgen/biome/elythia_meadow.json | 6 + .../worldgen/biome/elythia_ocean.json | 6 + .../worldgen/biome/elythia_river.json | 6 + .../biome/fungal_ouranwood_forest.json | 6 + .../worldgen/biome/glimmering_pools.json | 6 + .../worldgen/biome/glowcap_caves.json | 6 + .../antarchy/worldgen/biome/lucid_pools.json | 9 +- .../worldgen/biome/moleworm_caves.json | 6 + .../worldgen/biome/nightmare_wastes.json | 9 +- .../worldgen/biome/ouranwood_forest.json | 6 + .../antarchy/worldgen/biome/peach_forest.json | 6 + .../antarchy/worldgen/biome/rolly_caves.json | 6 + .../biome/sparse_ouranwood_forest.json | 8 +- .../antarchy/worldgen/biome/umbral_hills.json | 9 +- ...spikes.json => cavaryn_chitin_spikes.json} | 2 +- .../worldgen/noise_settings/cavaryn.json | 117 + ...spikes.json => cavaryn_chitin_spikes.json} | 2 +- .../moleworm_caves_creepvine.json | 27 + .../moleworm_caves_hanging_creeproots.json | 27 + .../resources/data/c/tags/item/foods.json | 1 + .../data/c/tags/item/foods/cooked_meat.json | 3 +- .../main/resources/data/c/tags/item/gems.json | 6 + .../tags/block/mineable/pickaxe.json | 15 +- .../minecraft/tags/block/mineable/shovel.json | 4 +- .../tags/block/needs_stone_tool.json | 6 +- .../data/minecraft/tags/block/slabs.json | 4 +- .../data/minecraft/tags/block/stairs.json | 4 +- .../minecraft/tags/item/trimmable_armor.json | 6 +- .../fabric/registry/AntarchyFabricItems.java | 3 - .../antarchy/fabric/AntarchyFabric.java | 1 + .../fabric/AntarchyFabricContent.java | 17 +- .../fabric/TigerEyeFabricManager.java | 51 + .../fabric/client/AntarchyFabricClient.java | 24 + .../client/AntarchyFabricClientBootstrap.java | 17 +- .../fabric/client/AntarchyKeyBindings.java | 11 + .../TigerEyeCamouflageClientHandler.java | 29 + .../fabric/mixin/AntimetalInversionMixin.java | 4 +- .../AntarchyFabricClientNetworking.java | 3 + .../network/AntarchyFabricNetworking.java | 35 + .../fabric/registry/AntarchyFabricBlocks.java | 60 +- .../registry/AntarchyFabricEntities.java | 16 + .../fabric/registry/AntarchyFabricItems.java | 48 +- .../fabric/registry/AntarchyFabricMisc.java | 31 +- .../fabric/registry/AntarchyFabricSounds.java | 6 + forge-1.20.1/gradle.properties | 2 +- .../forge/AntarchyConfigModuleForge.java | 4 + .../antarchy/forge/AntarchyMobsConfig.java | 20 + .../forge/registry/AntarchyForgeItems.java | 1 - gradle.properties | 2 +- .../AntarchyConfigModuleNeoforge.java | 4 + .../antarchy/neoforge/AntarchyMobsConfig.java | 20 + .../antarchy/neoforge/AntarchyNeoforge.java | 15 +- .../neoforge/client/AntarchyKeyBindings.java | 12 + .../client/AntarchyNeoForgeClient.java | 32 +- .../TigerEyeCamouflageClientHandler.java | 36 + .../registry/AntarchyNeoForgeEvents.java | 53 +- .../registry/AntarchyNeoforgeBlocks.java | 48 +- .../AntarchyNeoforgeCreativeModeTabs.java | 5 +- .../registry/AntarchyNeoforgeEntites.java | 14 + .../registry/AntarchyNeoforgeItems.java | 64 +- .../registry/AntarchyNeoforgeMisc.java | 10 +- .../AntarchyNeoforgePayloadHandlers.java | 38 + .../registry/AntarchyNeoforgeSounds.java | 2 + 264 files changed, 14996 insertions(+), 3287 deletions(-) rename common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/{ChitenSpikeBlock.java => ChitinSpikeBlock.java} (88%) create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/LucidAnchorBlock.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/LucidAnchorBlockEntity.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/TigerEyeCamouflageClientState.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/TigerEyeClientHooks.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/NightmareBiteModel.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/NightmarePortalModel.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/LucidAnchorBlockEntityRenderer.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/NightmareBiteRenderer.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/NightmarePortalRenderer.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TigerEyeCamouflagePlayerLayer.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TigerEyeCamouflageTextureResolver.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ConfiguredMobSpawnUtil.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareBiteEntity.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmarePortalEntity.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/InnateEnchantmentHelper.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/LucidAnchorBlockItem.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/TigerEyeArmorItem.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/TigerEyeArmorUtil.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/TigerEyeCamouflageStatePayload.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/ToggleTigerEyeCamouflagePayload.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/tigereye/TigerEyeCamouflageAccess.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/tigereye/TigerEyeCamouflageController.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/tigereye/TigerEyeCamouflageSync.java rename common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/{ChitenSpikeConfiguration.java => ChitinSpikeConfiguration.java} (67%) rename common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/{ChitenSpikeFeature.java => ChitinSpikeFeature.java} (92%) create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/GrindstoneMenuMixin.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/TigerEyeCamouflageMixin.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/TigerEyeVisibilityMixin.java delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/chiten_block.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/chitin_block.json rename common-1.21.1/src/main/resources/assets/antarchy/blockstates/{chiten_spike.json => chitin_spike.json} (63%) delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/cut_titanium_wall.json delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/cut_uranium_wall.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/lucid_anchor.json delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_block.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_block.json rename common-1.21.1/src/main/resources/assets/antarchy/models/block/{chiten_spike_down_base.json => chitin_spike_down_base.json} (53%) rename common-1.21.1/src/main/resources/assets/antarchy/models/block/{chiten_spike_down_frustum.json => chitin_spike_down_frustum.json} (54%) rename common-1.21.1/src/main/resources/assets/antarchy/models/block/{chiten_spike_down_middle.json => chitin_spike_down_middle.json} (54%) rename common-1.21.1/src/main/resources/assets/antarchy/models/block/{chiten_spike_down_tip.json => chitin_spike_down_tip.json} (53%) rename common-1.21.1/src/main/resources/assets/antarchy/models/block/{chiten_spike_down_tip_merge.json => chitin_spike_down_tip_merge.json} (55%) rename common-1.21.1/src/main/resources/assets/antarchy/models/block/{chiten_spike_up_base.json => chitin_spike_up_base.json} (53%) rename common-1.21.1/src/main/resources/assets/antarchy/models/block/{chiten_spike_up_frustum.json => chitin_spike_up_frustum.json} (54%) rename common-1.21.1/src/main/resources/assets/antarchy/models/block/{chiten_spike_up_middle.json => chitin_spike_up_middle.json} (53%) rename common-1.21.1/src/main/resources/assets/antarchy/models/block/{chiten_spike_up_tip.json => chitin_spike_up_tip.json} (53%) rename common-1.21.1/src/main/resources/assets/antarchy/models/block/{chiten_spike_up_tip_merge.json => chitin_spike_up_tip_merge.json} (54%) delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_inventory.json delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_post.json delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_side.json delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_side_tall.json delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_inventory.json delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_post.json delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_side.json delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_side_tall.json delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/chiten_block.json rename common-1.21.1/src/main/resources/assets/antarchy/models/item/{chiten.json => chitin.json} (63%) create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/chitin_block.json rename common-1.21.1/src/main/resources/assets/antarchy/models/item/{chiten_spike.json => chitin_spike.json} (59%) delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/cut_titanium_wall.json delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/cut_uranium_wall.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/lucid_anchor.json rename common-1.21.1/src/main/resources/assets/antarchy/models/item/{carapace.json => tigers_eye.json} (60%) create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/tigers_eye_boots.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/tigers_eye_chestplate.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/tigers_eye_helmet.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/tigers_eye_leggings.json delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_block.png delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_base.png delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_frustum.png delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_middle.png delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_tip.png delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_tip_merge.png delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_base.png delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_frustum.png delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_middle.png delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_tip.png delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_tip_merge.png delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/carapace.png delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/chiten_spike.png rename common-1.21.1/src/main/resources/assets/antarchy/textures/item/{chiten.png => chitin.png} (100%) create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/chitin_spike.png delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/critter_cage_item_overlay.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/mob_effect/glimmering.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/trims/color_palettes/tigers_eye.png create mode 100644 common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/awakening.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/dormant.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/final.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/wave_1.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/wave_2.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/wave_3.json rename common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/{chiten_block.json => chitin_block.json} (74%) rename common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/{chiten_spike.json => chitin_spike.json} (86%) delete mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/cut_titanium_wall.json delete mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/cut_uranium_wall.json rename common-1.21.1/src/main/resources/data/antarchy/recipe/{bone_meal_from_chiten.json => bone_meal_from_chitin.json} (84%) rename common-1.21.1/src/main/resources/data/antarchy/recipe/{chiten_block.json => chitin_block.json} (73%) rename common-1.21.1/src/main/resources/data/antarchy/recipe/{chiten_from_chiten_block.json => chitin_from_chitin_block.json} (67%) create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/lucid_anchor.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/tigers_eye_boots.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/tigers_eye_chestplate.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/tigers_eye_helmet.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/tigers_eye_leggings.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/tags/block/antimetal_inversion_blocks.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/tags/block/lucid_anchor_base_blocks.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/tags/block/tiger_eye_camouflage_blacklist.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/horde_molevore.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/horde_moleworm.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/lucid_anchor_immune.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/tiger_eye_detection_immune.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/tags/item/tigers_eye_armor.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/trim_material/tigers_eye.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/cavaryn_moleworm_caves.json rename common-1.21.1/src/main/resources/data/antarchy/worldgen/configured_feature/{cavaryn_chiten_spikes.json => cavaryn_chitin_spikes.json} (92%) rename common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/{cavaryn_chiten_spikes.json => cavaryn_chitin_spikes.json} (90%) create mode 100644 common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/moleworm_caves_creepvine.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/moleworm_caves_hanging_creeproots.json create mode 100644 common-1.21.1/src/main/resources/data/c/tags/item/gems.json create mode 100644 fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/TigerEyeFabricManager.java create mode 100644 fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/TigerEyeCamouflageClientHandler.java create mode 100644 neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/TigerEyeCamouflageClientHandler.java diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java index a354e105..61cf6fbf 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java @@ -10,9 +10,13 @@ public final class AntarchySettings { private static int easterBunnyNaturalSpawnChancePercent = 1; private static boolean rainbowAntsLeadToInfinityDimensions = true; private static boolean brownAntRequiresReagent = false; + private static boolean brownAntRightClickDimension = true; private static boolean redAntRequiresReagent = false; + private static boolean redAntRightClickDimension = true; private static boolean rainbowAntRequiresReagent = true; + private static boolean rainbowAntRightClickDimension = true; private static boolean termiteRequiresReagent = false; + private static boolean termiteRightClickDimension = true; private static boolean antsStealFromChests = true; private static boolean duplicatorTreeEnabled = true; private static boolean glowVinesUnderLeaves = true; @@ -461,6 +465,22 @@ public final class AntarchySettings { return rainbowAntsLeadToInfinityDimensions; } + public static boolean brownAntRightClickDimension() { + return brownAntRightClickDimension; + } + + public static boolean redAntRightClickDimension() { + return redAntRightClickDimension; + } + + public static boolean rainbowAntRightClickDimension() { + return rainbowAntRightClickDimension; + } + + public static boolean termiteRightClickDimension() { + return termiteRightClickDimension; + } + public static boolean brownAntRequiresReagent() { return brownAntRequiresReagent; } @@ -984,6 +1004,22 @@ public final class AntarchySettings { rainbowAntsLeadToInfinityDimensions = value; } + public static void setBrownAntRightClickDimension(boolean value) { + brownAntRightClickDimension = value; + } + + public static void setRedAntRightClickDimension(boolean value) { + redAntRightClickDimension = value; + } + + public static void setRainbowAntRightClickDimension(boolean value) { + rainbowAntRightClickDimension = value; + } + + public static void setTermiteRightClickDimension(boolean value) { + termiteRightClickDimension = value; + } + public static void setPermanentPortalsEnabled(boolean value) { permanentPortalsEnabled = value; } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java index 52b70cda..dfdd8fab 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java @@ -27,6 +27,8 @@ import com.craisinlord.antarchy.content.entity.MolewormEntity; import com.craisinlord.antarchy.content.entity.MantisEntity; import com.craisinlord.antarchy.content.entity.ReverieEntity; import com.craisinlord.antarchy.content.entity.ScorpionEntity; +import com.craisinlord.antarchy.content.entity.nightmare.NightmareBiteEntity; +import com.craisinlord.antarchy.content.entity.nightmare.NightmarePortalEntity; import com.craisinlord.antarchy.content.block.entity.AntNestBlockEntity; import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; import com.craisinlord.antarchy.content.block.entity.SeashellBlockEntity; @@ -66,6 +68,10 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier> OCTOPUS_BOMB = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") + public static Supplier> NIGHTMARE_PORTAL = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> NIGHTMARE_BITE = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") public static Supplier> MOLEWORM = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") public static Supplier> MANTIS = (Supplier>) UNBOUND; @@ -201,9 +207,9 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier NYXITE_SPIKE = (Supplier) UNBOUND; @SuppressWarnings("unchecked") - public static Supplier CHITEN_BLOCK = (Supplier) UNBOUND; + public static Supplier CHITIN_BLOCK = (Supplier) UNBOUND; @SuppressWarnings("unchecked") - public static Supplier CHITEN_SPIKE = (Supplier) UNBOUND; + public static Supplier CHITIN_SPIKE = (Supplier) UNBOUND; @SuppressWarnings("unchecked") public static Supplier POTENT_NYXITE = (Supplier) UNBOUND; @SuppressWarnings("unchecked") @@ -251,6 +257,8 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier> STINKY_EFFECT = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") + public static Supplier> GLIMMERING_EFFECT = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") public static Supplier LUMEN = (Supplier) UNBOUND; @SuppressWarnings("unchecked") public static Supplier FLOWING_LUMEN = (Supplier) UNBOUND; @@ -301,6 +309,8 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier CRITTER_CAGE_BLOCK = (Supplier) UNBOUND; @SuppressWarnings("unchecked") + public static Supplier LUCID_ANCHOR = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") public static Supplier> ANT_NEST_BLOCK_ENTITY = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") public static Supplier> DREAM_CAMPFIRE_BLOCK_ENTITY = (Supplier>) UNBOUND; @@ -314,6 +324,9 @@ public final class AntarchyObjects { public static Supplier> CRITTER_CAGE_BLOCK_ENTITY = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") + public static Supplier> LUCID_ANCHOR_BLOCK_ENTITY = + (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") public static Supplier STINKY_GAS = (Supplier) UNBOUND; @SuppressWarnings("unchecked") public static Supplier STINKY_FLY = (Supplier) UNBOUND; @@ -393,8 +406,8 @@ public final class AntarchyObjects { Supplier triffidGooBlock, Supplier paleNyxite, Supplier nyxiteSpike, - Supplier chitenBlock, - Supplier chitenSpike, + Supplier chitinBlock, + Supplier chitinSpike, Supplier potentNyxite, Supplier antimetal, Supplier polishedAntimetal, @@ -494,8 +507,8 @@ public final class AntarchyObjects { TRIFFID_GOO_BLOCK = triffidGooBlock; PALE_NYXITE = paleNyxite; NYXITE_SPIKE = nyxiteSpike; - CHITEN_BLOCK = chitenBlock; - CHITEN_SPIKE = chitenSpike; + CHITIN_BLOCK = chitinBlock; + CHITIN_SPIKE = chitinSpike; POTENT_NYXITE = potentNyxite; ANTIMETAL = antimetal; POLISHED_ANTIMETAL = polishedAntimetal; @@ -556,6 +569,14 @@ public final class AntarchyObjects { TENTACLE = supplier; } + public static void setNightmarePortal(Supplier> supplier) { + NIGHTMARE_PORTAL = supplier; + } + + public static void setNightmareBite(Supplier> supplier) { + NIGHTMARE_BITE = supplier; + } + public static void setLotus(Supplier supplier) { LOTUS = supplier; } @@ -608,6 +629,10 @@ public final class AntarchyObjects { SPIRIT_APPLE = supplier; } + public static void setGlimmeringEffect(Supplier> supplier) { + GLIMMERING_EFFECT = supplier; + } + public static void setElka(Supplier> supplier) { ELKA = supplier; } @@ -632,6 +657,10 @@ public final class AntarchyObjects { CRITTER_CAGE_BLOCK = supplier; } + public static void setLucidAnchor(Supplier supplier) { + LUCID_ANCHOR = supplier; + } + public static void setStarCoralBlock(Supplier supplier) { STAR_CORAL_BLOCK = supplier; } @@ -688,6 +717,10 @@ public final class AntarchyObjects { CRITTER_CAGE_BLOCK_ENTITY = supplier; } + public static void setLucidAnchorBlockEntity(Supplier> supplier) { + LUCID_ANCHOR_BLOCK_ENTITY = supplier; + } + public static void setCritterCageProjectile(Supplier> supplier) { CRITTER_CAGE_PROJECTILE = supplier; } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java index 7030f07c..bc03c33b 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java @@ -42,6 +42,9 @@ public final class AntarchyTags { public static final TagKey MINERS_DREAM_CARVABLE = TagKey.create(Registries.BLOCK, id("miners_dream_carvable")); public static final TagKey BLUESTONE_COMPONENTS = TagKey.create(Registries.BLOCK, id("bluestone_components")); public static final TagKey BLUESTONE_CONNECTABLE = TagKey.create(Registries.BLOCK, id("bluestone_connectable")); + public static final TagKey ANTIMETAL_INVERSION_BLOCKS = TagKey.create(Registries.BLOCK, id("antimetal_inversion_blocks")); + public static final TagKey TIGER_EYE_CAMOUFLAGE_BLACKLIST = TagKey.create(Registries.BLOCK, id("tiger_eye_camouflage_blacklist")); + public static final TagKey LUCID_ANCHOR_BASE_BLOCKS = TagKey.create(Registries.BLOCK, id("lucid_anchor_base_blocks")); private Blocks() { } @@ -71,6 +74,8 @@ public final class AntarchyTags { public static final TagKey> STINKY_REPELLED_HOSTILES = TagKey.create(Registries.ENTITY_TYPE, id("stinky_repelled_hostiles")); public static final TagKey> SCORPION_WHIP_IMMUNE = TagKey.create(Registries.ENTITY_TYPE, id("scorpion_whip_immune")); public static final TagKey> SCORPION_WHIP_BLACKLIST = TagKey.create(Registries.ENTITY_TYPE, id("scorpion_whip_blacklist")); + public static final TagKey> TIGER_EYE_DETECTION_IMMUNE = TagKey.create(Registries.ENTITY_TYPE, id("tiger_eye_detection_immune")); + public static final TagKey> LUCID_ANCHOR_IMMUNE = TagKey.create(Registries.ENTITY_TYPE, id("lucid_anchor_immune")); private Entities() { } @@ -110,6 +115,7 @@ public final class AntarchyTags { public static final TagKey GLIMMER_AUGMENT_ANT = TagKey.create(Registries.ITEM, id("glimmer_augment_ant")); public static final TagKey GLIMMER_AUGMENT_ELKA = TagKey.create(Registries.ITEM, id("glimmer_augment_elka")); public static final TagKey HFCS_CANNOT_AMERICANIZE = TagKey.create(Registries.ITEM, id("hfcs_cannot_americanize")); + public static final TagKey TIGER_EYE_ARMOR = TagKey.create(Registries.ITEM, id("tigers_eye_armor")); private Items() { } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/ChitenSpikeBlock.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/ChitinSpikeBlock.java similarity index 88% rename from common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/ChitenSpikeBlock.java rename to common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/ChitinSpikeBlock.java index faf02e93..192b0e96 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/ChitenSpikeBlock.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/ChitinSpikeBlock.java @@ -16,11 +16,11 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.DripstoneThickness; import net.minecraft.world.level.material.Fluids; -public class ChitenSpikeBlock extends PointedDripstoneBlock { +public class ChitinSpikeBlock extends PointedDripstoneBlock { @SuppressWarnings("rawtypes") - public static final MapCodec CODEC = (MapCodec) Block.simpleCodec(ChitenSpikeBlock::new); + public static final MapCodec CODEC = (MapCodec) Block.simpleCodec(ChitinSpikeBlock::new); - public ChitenSpikeBlock(BlockBehaviour.Properties properties) { + public ChitinSpikeBlock(BlockBehaviour.Properties properties) { super(properties); } @@ -99,14 +99,14 @@ public class ChitenSpikeBlock extends PointedDripstoneBlock { if (state.getValue(TIP_DIRECTION) == Direction.DOWN) { BlockPos.MutableBlockPos root = pos.mutable(); - while (isChitenSpikeWithDirection(level.getBlockState(root.above()), Direction.DOWN)) { + while (isChitinSpikeWithDirection(level.getBlockState(root.above()), Direction.DOWN)) { root.move(Direction.UP); } BlockPos.MutableBlockPos cursor = root.mutable(); - while (isChitenSpikeWithDirection(level.getBlockState(cursor), Direction.DOWN)) { + while (isChitinSpikeWithDirection(level.getBlockState(cursor), Direction.DOWN)) { BlockState fallingState = level.getBlockState(cursor); - if (isChitenSpikeWithDirection(fallingState, Direction.DOWN)) { + if (isChitinSpikeWithDirection(fallingState, Direction.DOWN)) { net.minecraft.world.entity.item.FallingBlockEntity.fall(level, cursor, fallingState); } cursor.move(Direction.DOWN); @@ -115,7 +115,7 @@ public class ChitenSpikeBlock extends PointedDripstoneBlock { } BlockPos.MutableBlockPos cursor = pos.mutable(); - while (isChitenSpikeWithDirection(level.getBlockState(cursor), Direction.UP)) { + while (isChitinSpikeWithDirection(level.getBlockState(cursor), Direction.UP)) { BlockState spikeState = level.getBlockState(cursor); dropResources(spikeState, level, cursor); level.removeBlock(cursor, false); @@ -135,20 +135,20 @@ public class ChitenSpikeBlock extends PointedDripstoneBlock { private static DripstoneThickness calculateDripstoneThickness(LevelReader level, BlockPos pos, Direction direction, boolean mergeTips) { Direction opposite = direction.getOpposite(); BlockState forwardState = level.getBlockState(pos.relative(direction)); - if (isChitenSpikeWithDirection(forwardState, opposite)) { + if (isChitinSpikeWithDirection(forwardState, opposite)) { return !mergeTips && forwardState.getValue(THICKNESS) != DripstoneThickness.TIP_MERGE ? DripstoneThickness.TIP : DripstoneThickness.TIP_MERGE; } - if (!isChitenSpikeWithDirection(forwardState, direction)) { + if (!isChitinSpikeWithDirection(forwardState, direction)) { return DripstoneThickness.TIP; } DripstoneThickness forwardThickness = forwardState.getValue(THICKNESS); if (forwardThickness != DripstoneThickness.TIP && forwardThickness != DripstoneThickness.TIP_MERGE) { BlockState backState = level.getBlockState(pos.relative(opposite)); - return !isChitenSpikeWithDirection(backState, direction) ? DripstoneThickness.BASE : DripstoneThickness.MIDDLE; + return !isChitinSpikeWithDirection(backState, direction) ? DripstoneThickness.BASE : DripstoneThickness.MIDDLE; } return DripstoneThickness.FRUSTUM; @@ -157,10 +157,10 @@ public class ChitenSpikeBlock extends PointedDripstoneBlock { private static boolean isValidPointedDripstonePlacement(LevelReader level, BlockPos pos, Direction direction) { BlockPos supportPos = pos.relative(direction.getOpposite()); BlockState supportState = level.getBlockState(supportPos); - return supportState.isFaceSturdy(level, supportPos, direction) || isChitenSpikeWithDirection(supportState, direction); + return supportState.isFaceSturdy(level, supportPos, direction) || isChitinSpikeWithDirection(supportState, direction); } - private static boolean isChitenSpikeWithDirection(BlockState state, Direction direction) { - return state.is(AntarchyObjects.CHITEN_SPIKE.get()) && state.getValue(TIP_DIRECTION) == direction; + private static boolean isChitinSpikeWithDirection(BlockState state, Direction direction) { + return state.is(AntarchyObjects.CHITIN_SPIKE.get()) && state.getValue(TIP_DIRECTION) == direction; } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/DreamFireBlock.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/DreamFireBlock.java index 3d10b068..eebb9677 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/DreamFireBlock.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/DreamFireBlock.java @@ -5,6 +5,8 @@ import com.craisinlord.antarchy.mixins.AccessorFireBlock; import com.mojang.serialization.MapCodec; import it.unimi.dsi.fastutil.objects.Object2IntMap; import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.FireBlock; import net.minecraft.world.level.block.state.BlockBehaviour; @@ -25,6 +27,21 @@ public class DreamFireBlock extends FireBlock { return CODEC; } + @Override + protected void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (level.getBlockState(pos.below()).is(AntarchyTags.Blocks.DREAM_FIRE_BASE_BLOCKS)) { + if (!this.canSurvive(state, level, pos)) { + level.removeBlock(pos, false); + return; + } + + level.scheduleTick(pos, this, 30 + random.nextInt(10)); + return; + } + + super.tick(state, level, pos, random); + } + @Override protected boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { return level.getBlockState(pos.below()).is(AntarchyTags.Blocks.DREAM_FIRE_BASE_BLOCKS) diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/LucidAnchorBlock.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/LucidAnchorBlock.java new file mode 100644 index 00000000..6f0a63bb --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/LucidAnchorBlock.java @@ -0,0 +1,77 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.block.entity.LucidAnchorBlockEntity; +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BaseEntityBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; + +public class LucidAnchorBlock extends BaseEntityBlock { + public static final MapCodec CODEC = Block.simpleCodec(LucidAnchorBlock::new); + public static final BooleanProperty ACTIVE = BlockStateProperties.LIT; + + public LucidAnchorBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(ACTIVE, false)); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(ACTIVE); + } + + @Override + protected RenderShape getRenderShape(BlockState state) { + return RenderShape.MODEL; + } + + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new LucidAnchorBlockEntity(pos, state); + } + + @Override + public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType blockEntityType) { + return level.isClientSide + ? null + : createTickerHelper(blockEntityType, AntarchyObjects.LUCID_ANCHOR_BLOCK_ENTITY.get(), (tickLevel, tickPos, tickState, blockEntity) -> { + if (tickLevel instanceof net.minecraft.server.level.ServerLevel serverLevel) { + LucidAnchorBlockEntity.serverTick(serverLevel, tickPos, tickState, blockEntity); + } + }); + } + + @Override + protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { + super.onPlace(state, level, pos, oldState, movedByPiston); + markStructureDirty(level, pos); + } + + @Override + protected void neighborChanged(BlockState state, Level level, BlockPos pos, Block block, BlockPos neighborPos, boolean movedByPiston) { + super.neighborChanged(state, level, pos, block, neighborPos, movedByPiston); + markStructureDirty(level, pos); + } + + private static void markStructureDirty(Level level, BlockPos pos) { + if (level.getBlockEntity(pos) instanceof LucidAnchorBlockEntity lucidAnchor) { + lucidAnchor.markStructureDirty(); + } + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/LucidAnchorBlockEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/LucidAnchorBlockEntity.java new file mode 100644 index 00000000..0b2bc23b --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/LucidAnchorBlockEntity.java @@ -0,0 +1,344 @@ +package com.craisinlord.antarchy.content.block.entity; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.content.block.LucidAnchorBlock; +import java.util.ArrayList; +import java.util.List; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Holder; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.component.DataComponents; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.IntArrayTag; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.EntitySelector; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BeaconBeamBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.AABB; + +public class LucidAnchorBlockEntity extends BlockEntity { + private static final int EFFECT_INTERVAL_TICKS = 20; + private static final int VALIDATION_INTERVAL_TICKS = 60; + private static final int EFFECT_DURATION_TICKS = 60; + private static final int EFFECT_REFRESH_THRESHOLD_TICKS = 30; + private static final int DEFAULT_BEAM_COLOR = 0xFFFF1A1A; + + private int pyramidLevel; + private boolean active; + private boolean beamPathClear; + private int beamLength; + private boolean structureDirty = true; + private long lastValidationTick = Long.MIN_VALUE; + private List beamSections = List.of(); + + public LucidAnchorBlockEntity(BlockPos pos, BlockState blockState) { + super(AntarchyObjects.LUCID_ANCHOR_BLOCK_ENTITY.get(), pos, blockState); + } + + public static void serverTick(ServerLevel level, BlockPos pos, BlockState state, LucidAnchorBlockEntity blockEntity) { + blockEntity.serverTick(level, pos, state); + } + + public void markStructureDirty() { + this.structureDirty = true; + this.setChanged(); + } + + public boolean isActive() { + return this.active; + } + + public int getPyramidLevel() { + return this.pyramidLevel; + } + + public int getBeamLength() { + return this.beamLength; + } + + public List getBeamSections() { + return this.beamSections; + } + + private void serverTick(ServerLevel level, BlockPos pos, BlockState state) { + long gameTime = level.getGameTime(); + if (this.structureDirty || gameTime - this.lastValidationTick >= VALIDATION_INTERVAL_TICKS) { + this.revalidate(level, pos, state); + this.structureDirty = false; + this.lastValidationTick = gameTime; + } + + if (this.active && gameTime % EFFECT_INTERVAL_TICKS == 0L) { + this.applyInvertedField(level, pos); + } + } + + private void revalidate(ServerLevel level, BlockPos pos, BlockState state) { + int newPyramidLevel = calculatePyramidLevel(level, pos); + BeamValidation beamValidation = validateBeamPath(level, pos); + boolean newActive = newPyramidLevel > 0 && beamValidation.clear(); + boolean stateChanged = this.pyramidLevel != newPyramidLevel + || this.beamPathClear != beamValidation.clear() + || this.active != newActive + || this.beamLength != beamValidation.length() + || !this.beamSections.equals(beamValidation.sections()); + + boolean activeChanged = this.active != newActive; + this.pyramidLevel = newPyramidLevel; + this.beamPathClear = beamValidation.clear(); + this.beamLength = beamValidation.length(); + this.beamSections = beamValidation.sections(); + this.active = newActive; + + if (state.getBlock() instanceof LucidAnchorBlock && state.getValue(LucidAnchorBlock.ACTIVE) != newActive) { + level.setBlock(pos, state.setValue(LucidAnchorBlock.ACTIVE, newActive), Block.UPDATE_CLIENTS); + state = level.getBlockState(pos); + } + + if (activeChanged) { + level.playSound(null, pos, newActive ? SoundEvents.BEACON_ACTIVATE : SoundEvents.BEACON_DEACTIVATE, SoundSource.BLOCKS, 1.0F, 1.0F); + } + + if (stateChanged) { + this.syncVisualState(state); + } + } + + private void applyInvertedField(ServerLevel level, BlockPos pos) { + if (this.pyramidLevel <= 0) { + return; + } + + int radius = 10 + this.pyramidLevel * 10; + AABB area = new AABB( + pos.getX() - radius, + level.getMinBuildHeight(), + pos.getZ() - radius, + pos.getX() + radius + 1.0D, + pos.getY() + 1.0D, + pos.getZ() + radius + 1.0D + ); + Holder invertedEffect = AntarchyObjects.INVERTED_EFFECT.get(); + for (LivingEntity entity : level.getEntitiesOfClass(LivingEntity.class, area, entity -> EntitySelector.NO_SPECTATORS.test(entity) && entity.isAlive())) { + if (entity.getType().is(AntarchyTags.Entities.LUCID_ANCHOR_IMMUNE) || entity.getType().is(AntarchyTags.Entities.INVERTED_IMMUNE)) { + continue; + } + + MobEffectInstance current = entity.getEffect(invertedEffect); + if (current != null && current.getDuration() > EFFECT_REFRESH_THRESHOLD_TICKS && current.getAmplifier() == 0) { + continue; + } + + entity.addEffect(new MobEffectInstance(invertedEffect, EFFECT_DURATION_TICKS, 0, true, true, true)); + } + } + + private void syncVisualState(BlockState state) { + this.setChanged(); + if (this.level != null) { + this.level.sendBlockUpdated(this.worldPosition, state, state, Block.UPDATE_CLIENTS); + } + } + + @Override + protected void saveAdditional(CompoundTag tag, HolderLookup.Provider registries) { + super.saveAdditional(tag, registries); + tag.putInt("PyramidLevel", this.pyramidLevel); + tag.putBoolean("Active", this.active); + tag.putBoolean("BeamPathClear", this.beamPathClear); + tag.putInt("BeamLength", this.beamLength); + tag.putBoolean("StructureDirty", this.structureDirty); + int[] colors = new int[this.beamSections.size()]; + int[] lengths = new int[this.beamSections.size()]; + for (int i = 0; i < this.beamSections.size(); i++) { + BeamSection section = this.beamSections.get(i); + colors[i] = section.color(); + lengths[i] = section.length(); + } + tag.put("BeamColors", new IntArrayTag(colors)); + tag.put("BeamLengths", new IntArrayTag(lengths)); + } + + @Override + protected void loadAdditional(CompoundTag tag, HolderLookup.Provider registries) { + super.loadAdditional(tag, registries); + this.pyramidLevel = tag.getInt("PyramidLevel"); + this.active = tag.getBoolean("Active"); + this.beamPathClear = tag.getBoolean("BeamPathClear"); + this.beamLength = tag.getInt("BeamLength"); + this.structureDirty = true; + int[] colors = tag.getIntArray("BeamColors"); + int[] lengths = tag.getIntArray("BeamLengths"); + List sections = new ArrayList<>(); + for (int i = 0; i < Math.min(colors.length, lengths.length); i++) { + if (lengths[i] > 0) { + sections.add(new BeamSection(colors[i], lengths[i])); + } + } + this.beamSections = sections.isEmpty() ? List.of() : List.copyOf(sections); + } + + @Override + public CompoundTag getUpdateTag(HolderLookup.Provider registries) { + return this.saveCustomOnly(registries); + } + + @Override + public Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + public static int calculatePyramidLevel(Level level, BlockPos anchorPos) { + int completedLayers = 0; + BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); + for (int layer = 1; layer <= 4; layer++) { + int y = anchorPos.getY() + layer; + if (y > level.getMaxBuildHeight()) { + break; + } + + boolean complete = true; + for (int x = anchorPos.getX() - layer; x <= anchorPos.getX() + layer && complete; x++) { + for (int z = anchorPos.getZ() - layer; z <= anchorPos.getZ() + layer; z++) { + cursor.set(x, y, z); + if (!level.getBlockState(cursor).is(AntarchyTags.Blocks.LUCID_ANCHOR_BASE_BLOCKS)) { + complete = false; + break; + } + } + } + + if (!complete) { + break; + } + completedLayers = layer; + } + return completedLayers; + } + + private static BeamValidation validateBeamPath(Level level, BlockPos anchorPos) { + int minBuildHeight = level.getMinBuildHeight(); + int floorTolerance = minBuildHeight + 5; + if (anchorPos.getY() <= minBuildHeight) { + return BeamValidation.inactive(); + } + + BlockPos.MutableBlockPos cursor = anchorPos.below().mutable(); + List sections = new ArrayList<>(); + int currentColor = DEFAULT_BEAM_COLOR; + int currentLength = 0; + int totalLength = 0; + boolean clear = false; + + for (int y = anchorPos.getY() - 1; y >= minBuildHeight; y--) { + cursor.set(anchorPos.getX(), y, anchorPos.getZ()); + BlockState state = level.getBlockState(cursor); + + if (state.is(Blocks.BEDROCK)) { + if (y <= floorTolerance) { + currentLength++; + totalLength++; + clear = true; + } + break; + } + + if (!isBeamPassable(level, cursor, state)) { + if (y <= floorTolerance) { + currentLength++; + totalLength++; + clear = true; + break; + } + return BeamValidation.inactive(); + } + + int encounteredColor = colorForBeamState(state, currentColor); + if (encounteredColor != currentColor && currentLength > 0) { + sections.add(new BeamSection(currentColor, currentLength)); + currentColor = encounteredColor; + currentLength = 0; + } else { + currentColor = encounteredColor; + } + + currentLength++; + totalLength++; + if (y <= floorTolerance && state.isAir()) { + clear = true; + } + if (y == minBuildHeight) { + clear = true; + } + } + + if (!clear || totalLength <= 0) { + return BeamValidation.inactive(); + } + + if (currentLength > 0) { + sections.add(new BeamSection(currentColor, currentLength)); + } + + return new BeamValidation(true, totalLength, List.copyOf(sections)); + } + + private static boolean isBeamPassable(Level level, BlockPos pos, BlockState state) { + if (state.isAir()) { + return true; + } + if (!level.getFluidState(pos).isEmpty()) { + return true; + } + if (state.getBlock() instanceof BeaconBeamBlock) { + return true; + } + return state.getLightBlock(level, pos) < 15; + } + + private static int colorForBeamState(BlockState state, int fallbackColor) { + if (!(state.getBlock() instanceof BeaconBeamBlock beamBlock)) { + return fallbackColor; + } + + int diffuse = beamBlock.getColor().getTextureDiffuseColor(); + int red = (diffuse >> 16) & 0xFF; + int green = (diffuse >> 8) & 0xFF; + int blue = diffuse & 0xFF; + if (fallbackColor == DEFAULT_BEAM_COLOR) { + return 0xFF000000 | diffuse; + } + + int fallbackRed = (fallbackColor >> 16) & 0xFF; + int fallbackGreen = (fallbackColor >> 8) & 0xFF; + int fallbackBlue = fallbackColor & 0xFF; + return 0xFF000000 + | (((fallbackRed + red) / 2) << 16) + | (((fallbackGreen + green) / 2) << 8) + | ((fallbackBlue + blue) / 2); + } + + public record BeamSection(int color, int length) { + } + + private record BeamValidation(boolean clear, int length, List sections) { + private static BeamValidation inactive() { + return new BeamValidation(false, 0, List.of()); + } + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/TigerEyeCamouflageClientState.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/TigerEyeCamouflageClientState.java new file mode 100644 index 00000000..92957109 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/TigerEyeCamouflageClientState.java @@ -0,0 +1,29 @@ +package com.craisinlord.antarchy.content.client; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +public final class TigerEyeCamouflageClientState { + public record CamouflageState(boolean active, int blockStateId) {} + + private static final Map STATES = new ConcurrentHashMap<>(); + + private TigerEyeCamouflageClientState() { + } + + public static void update(int entityId, boolean active, int blockStateId) { + if (!active) { + STATES.remove(entityId); + return; + } + STATES.put(entityId, new CamouflageState(true, blockStateId)); + } + + public static CamouflageState get(int entityId) { + return STATES.get(entityId); + } + + public static void clear() { + STATES.clear(); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/TigerEyeClientHooks.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/TigerEyeClientHooks.java new file mode 100644 index 00000000..f35ba9cf --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/TigerEyeClientHooks.java @@ -0,0 +1,19 @@ +package com.craisinlord.antarchy.content.client; + +import java.util.function.Supplier; +import net.minecraft.network.chat.Component; + +public final class TigerEyeClientHooks { + private static Supplier camouflageKeyText = () -> Component.translatable("key.antarchy.tigers_eye_camouflage"); + + private TigerEyeClientHooks() { + } + + public static void setCamouflageKeyTextSupplier(Supplier supplier) { + camouflageKeyText = supplier; + } + + public static Component camouflageKeyText() { + return camouflageKeyText.get(); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/hud/CustomBossBarRenderer.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/hud/CustomBossBarRenderer.java index aebcd057..acfa82f9 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/hud/CustomBossBarRenderer.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/hud/CustomBossBarRenderer.java @@ -7,10 +7,12 @@ import com.craisinlord.antarchy.content.entity.HerculesBeetleEntity; import com.craisinlord.antarchy.content.entity.ToreterrorEntity; import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; +import java.util.HashMap; import java.util.Map; import java.util.UUID; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.BossEvent; import net.minecraft.world.entity.Entity; @@ -19,6 +21,7 @@ public final class CustomBossBarRenderer { private static final int BAR_WIDTH = 182; private static final int BAR_HEIGHT = 5; private static final int GLOBAL_Y_OFFSET = 15; + private static final Map TEXTURES_BY_BOSS_ID = new HashMap<>(); private static final Map, Textures> BY_ENTITY_CLASS = Map.of( KrakenEntity.class, textures("blue", "kraken", 204, 56, 4), @@ -28,6 +31,14 @@ public final class CustomBossBarRenderer { HerculesBeetleEntity.class, textures("beetle", "hercules_beetle", 194, 33, 1), EmperorScorpionEntity.class, textures("purple", "scorpion", 218, 34, -2) ); + private static final Map BY_LOCALIZED_NAME_AND_COLOR = Map.of( + key(Component.translatable("entity.antarchy.kraken").getString(), BossEvent.BossBarColor.BLUE), BY_ENTITY_CLASS.get(KrakenEntity.class), + key(Component.translatable("entity.antarchy.toreterror").getString(), BossEvent.BossBarColor.GREEN), BY_ENTITY_CLASS.get(ToreterrorEntity.class), + key(Component.translatable("entity.antarchy.alpha_mantis").getString(), BossEvent.BossBarColor.GREEN), BY_ENTITY_CLASS.get(AlphaMantisEntity.class), + key(Component.translatable("entity.antarchy.brutalfly").getString(), BossEvent.BossBarColor.YELLOW), BY_ENTITY_CLASS.get(BrutalflyEntity.class), + key(Component.translatable("entity.antarchy.hercules_beetle").getString(), BossEvent.BossBarColor.RED), BY_ENTITY_CLASS.get(HerculesBeetleEntity.class), + key(Component.translatable("entity.antarchy.emperor_scorpion").getString(), BossEvent.BossBarColor.PURPLE), BY_ENTITY_CLASS.get(EmperorScorpionEntity.class) + ); private CustomBossBarRenderer() { } @@ -60,11 +71,25 @@ public final class CustomBossBarRenderer { } private static Textures lookup(BossEvent bossEvent) { - Entity entity = findEntity(bossEvent.getId()); - if (entity == null) { - return null; + Textures cached = TEXTURES_BY_BOSS_ID.get(bossEvent.getId()); + if (cached != null) { + return cached; } - return BY_ENTITY_CLASS.get(entity.getClass()); + + Entity entity = findEntity(bossEvent.getId()); + if (entity != null) { + Textures textures = BY_ENTITY_CLASS.get(entity.getClass()); + if (textures != null) { + TEXTURES_BY_BOSS_ID.put(bossEvent.getId(), textures); + return textures; + } + } + + Textures fallback = BY_LOCALIZED_NAME_AND_COLOR.get(key(bossEvent.getName().getString(), bossEvent.getColor())); + if (fallback != null) { + TEXTURES_BY_BOSS_ID.put(bossEvent.getId(), fallback); + } + return fallback; } private static Entity findEntity(UUID id) { @@ -91,6 +116,10 @@ public final class CustomBossBarRenderer { ); } + private static String key(String name, BossEvent.BossBarColor color) { + return color.name() + "|" + name; + } + private record Textures(ResourceLocation background, ResourceLocation progress, ResourceLocation overlay, int overlayWidth, int overlayHeight, int barYOffset) { } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/NightmareBiteModel.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/NightmareBiteModel.java new file mode 100644 index 00000000..9dbc7f1d --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/NightmareBiteModel.java @@ -0,0 +1,26 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.nightmare.NightmareBiteEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class NightmareBiteModel extends GeoModel { + private static final ResourceLocation PHASE_ONE_TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/vfx/nightmare_bite.png"); + private static final ResourceLocation PHASE_TWO_TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/vfx/nightmare_bite_phase_2.png"); + + @Override + public ResourceLocation getModelResource(NightmareBiteEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/nightmare_bite.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(NightmareBiteEntity animatable) { + return animatable.isPhaseTwo() ? PHASE_TWO_TEXTURE : PHASE_ONE_TEXTURE; + } + + @Override + public ResourceLocation getAnimationResource(NightmareBiteEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/nightmare_bite.animation.json"); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/NightmareModel.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/NightmareModel.java index 0b88a76c..cc86beee 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/NightmareModel.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/NightmareModel.java @@ -6,8 +6,10 @@ import net.minecraft.resources.ResourceLocation; import software.bernie.geckolib.model.GeoModel; public class NightmareModel extends GeoModel { - public static final ResourceLocation EMISSIVE_TEXTURE = - ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/nightmare_emissive.png"); + private static final ResourceLocation PHASE_ONE_TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/nightmare/nightmare.png"); + private static final ResourceLocation PHASE_TWO_TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/nightmare/nightmare_phase_2.png"); + private static final ResourceLocation PHASE_ONE_EMISSIVE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/nightmare/nightmare_emissive.png"); + private static final ResourceLocation PHASE_TWO_EMISSIVE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/nightmare/nightmare_phase_2_emissive.png"); @Override public ResourceLocation getModelResource(NightmareEntity animatable) { @@ -16,11 +18,19 @@ public class NightmareModel extends GeoModel { @Override public ResourceLocation getTextureResource(NightmareEntity animatable) { - return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/nightmare.png"); + return textureFor(animatable); } @Override public ResourceLocation getAnimationResource(NightmareEntity animatable) { return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/nightmare.animation.json"); } + + public static ResourceLocation textureFor(NightmareEntity animatable) { + return animatable.hasPhaseTwoTexture() ? PHASE_TWO_TEXTURE : PHASE_ONE_TEXTURE; + } + + public static ResourceLocation emissiveTextureFor(NightmareEntity animatable) { + return animatable.hasPhaseTwoTexture() ? PHASE_TWO_EMISSIVE : PHASE_ONE_EMISSIVE; + } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/NightmarePortalModel.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/NightmarePortalModel.java new file mode 100644 index 00000000..8f384cc7 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/NightmarePortalModel.java @@ -0,0 +1,25 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.nightmare.NightmarePortalEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class NightmarePortalModel extends GeoModel { + public static final ResourceLocation TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/vfx/nightmare_portal.png"); + + @Override + public ResourceLocation getModelResource(NightmarePortalEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/nightmare_portal.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(NightmarePortalEntity animatable) { + return TEXTURE; + } + + @Override + public ResourceLocation getAnimationResource(NightmarePortalEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/nightmare_portal.animation.json"); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/LucidAnchorBlockEntityRenderer.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/LucidAnchorBlockEntityRenderer.java new file mode 100644 index 00000000..c2de0cce --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/LucidAnchorBlockEntityRenderer.java @@ -0,0 +1,127 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.block.entity.LucidAnchorBlockEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.math.Axis; +import net.minecraft.client.renderer.LightTexture; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.resources.ResourceLocation; +import org.joml.Matrix3f; +import org.joml.Matrix4f; + +public class LucidAnchorBlockEntityRenderer implements BlockEntityRenderer { + private static final ResourceLocation BEAM_TEXTURE = ResourceLocation.withDefaultNamespace("textures/entity/beacon_beam.png"); + private static final float INNER_RADIUS = 0.14F; + private static final float OUTER_RADIUS = 0.28F; + private static final float START_OFFSET = -0.02F; + + public LucidAnchorBlockEntityRenderer(BlockEntityRendererProvider.Context context) { + } + + @Override + public void render(LucidAnchorBlockEntity blockEntity, float partialTick, PoseStack poseStack, MultiBufferSource buffer, int packedLight, int packedOverlay) { + if (!blockEntity.isActive() || blockEntity.getBeamLength() <= 0 || blockEntity.getBeamSections().isEmpty() || blockEntity.getLevel() == null) { + return; + } + + long gameTime = blockEntity.getLevel().getGameTime(); + float scroll = (gameTime + partialTick) * 0.02F; + float startY = START_OFFSET; + float endY = START_OFFSET - blockEntity.getBeamLength(); + + poseStack.pushPose(); + poseStack.translate(0.5D, 0.0D, 0.5D); + + float currentTop = startY; + for (LucidAnchorBlockEntity.BeamSection section : blockEntity.getBeamSections()) { + float sectionBottom = currentTop - section.length(); + renderBeamPrism(poseStack, buffer.getBuffer(RenderType.entityTranslucent(BEAM_TEXTURE)), currentTop, sectionBottom, INNER_RADIUS, section.color(), 1.0F, scroll); + renderBeamPrism(poseStack, buffer.getBuffer(RenderType.entityTranslucent(BEAM_TEXTURE)), currentTop, sectionBottom, OUTER_RADIUS, darken(section.color()), 0.45F, -scroll); + currentTop = sectionBottom; + } + + if (currentTop > endY) { + renderBeamPrism(poseStack, buffer.getBuffer(RenderType.entityTranslucent(BEAM_TEXTURE)), currentTop, endY, INNER_RADIUS, 0xFFFF1A1A, 1.0F, scroll); + renderBeamPrism(poseStack, buffer.getBuffer(RenderType.entityTranslucent(BEAM_TEXTURE)), currentTop, endY, OUTER_RADIUS, 0xFF7A0000, 0.45F, -scroll); + } + + poseStack.popPose(); + } + + @Override + public int getViewDistance() { + return 256; + } + + private static void renderBeamPrism(PoseStack poseStack, VertexConsumer consumer, float topY, float bottomY, float radius, int color, float alphaScale, float scroll) { + PoseStack.Pose pose = poseStack.last(); + Matrix4f matrix = pose.pose(); + Matrix3f normal = pose.normal(); + float red = ((color >> 16) & 0xFF) / 255.0F; + float green = ((color >> 8) & 0xFF) / 255.0F; + float blue = (color & 0xFF) / 255.0F; + float alpha = ((color >>> 24) & 0xFF) / 255.0F * alphaScale; + float vTop = scroll + topY * 0.25F; + float vBottom = scroll + bottomY * 0.25F; + + addFace(consumer, matrix, normal, -radius, topY, -radius, radius, topY, -radius, radius, bottomY, -radius, -radius, bottomY, -radius, red, green, blue, alpha, vTop, vBottom); + addFace(consumer, matrix, normal, radius, topY, radius, -radius, topY, radius, -radius, bottomY, radius, radius, bottomY, radius, red, green, blue, alpha, vTop, vBottom); + addFace(consumer, matrix, normal, -radius, topY, radius, -radius, topY, -radius, -radius, bottomY, -radius, -radius, bottomY, radius, red, green, blue, alpha, vTop, vBottom); + addFace(consumer, matrix, normal, radius, topY, -radius, radius, topY, radius, radius, bottomY, radius, radius, bottomY, -radius, red, green, blue, alpha, vTop, vBottom); + } + + private static void addFace( + VertexConsumer consumer, + Matrix4f matrix, + Matrix3f normal, + float x0, + float y0, + float z0, + float x1, + float y1, + float z1, + float x2, + float y2, + float z2, + float x3, + float y3, + float z3, + float red, + float green, + float blue, + float alpha, + float vTop, + float vBottom + ) { + addVertex(consumer, matrix, normal, x0, y0, z0, red, green, blue, alpha, 0.0F, vTop); + addVertex(consumer, matrix, normal, x1, y1, z1, red, green, blue, alpha, 1.0F, vTop); + addVertex(consumer, matrix, normal, x2, y2, z2, red, green, blue, alpha, 1.0F, vBottom); + addVertex(consumer, matrix, normal, x3, y3, z3, red, green, blue, alpha, 0.0F, vBottom); + + addVertex(consumer, matrix, normal, x3, y3, z3, red, green, blue, alpha, 0.0F, vBottom); + addVertex(consumer, matrix, normal, x2, y2, z2, red, green, blue, alpha, 1.0F, vBottom); + addVertex(consumer, matrix, normal, x1, y1, z1, red, green, blue, alpha, 1.0F, vTop); + addVertex(consumer, matrix, normal, x0, y0, z0, red, green, blue, alpha, 0.0F, vTop); + } + + private static void addVertex(VertexConsumer consumer, Matrix4f matrix, Matrix3f normal, float x, float y, float z, float red, float green, float blue, float alpha, float u, float v) { + consumer.addVertex(matrix, x, y, z) + .setColor(red, green, blue, alpha) + .setUv(u, v) + .setOverlay(OverlayTexture.NO_OVERLAY) + .setLight(LightTexture.FULL_BRIGHT) + .setNormal(0.0F, 1.0F, 0.0F); + } + + private static int darken(int color) { + int red = (int) (((color >> 16) & 0xFF) * 0.45F); + int green = (int) (((color >> 8) & 0xFF) * 0.2F); + int blue = (int) ((color & 0xFF) * 0.2F); + return (color & 0xFF000000) | (red << 16) | (green << 8) | blue; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/NightmareBiteRenderer.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/NightmareBiteRenderer.java new file mode 100644 index 00000000..f6cc1076 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/NightmareBiteRenderer.java @@ -0,0 +1,13 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.NightmareBiteModel; +import com.craisinlord.antarchy.content.entity.nightmare.NightmareBiteEntity; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class NightmareBiteRenderer extends GeoEntityRenderer { + public NightmareBiteRenderer(EntityRendererProvider.Context context) { + super(context, new NightmareBiteModel()); + this.shadowRadius = 0.0F; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/NightmarePortalRenderer.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/NightmarePortalRenderer.java new file mode 100644 index 00000000..10aa7709 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/NightmarePortalRenderer.java @@ -0,0 +1,37 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.NightmarePortalModel; +import com.craisinlord.antarchy.content.entity.nightmare.NightmarePortalEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.resources.ResourceLocation; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.cache.object.BakedGeoModel; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class NightmarePortalRenderer extends GeoEntityRenderer { + public NightmarePortalRenderer(EntityRendererProvider.Context context) { + super(context, new NightmarePortalModel()); + this.shadowRadius = 0.0F; + } + + @Override + public void render(NightmarePortalEntity entity, float entityYaw, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight) { + BakedGeoModel model = this.getGeoModel().getBakedModel(this.getGeoModel().getModelResource(entity)); + RenderType renderType = RenderType.eyes(NightmarePortalModel.TEXTURE); + VertexConsumer buffer = bufferSource.getBuffer(renderType); + poseStack.pushPose(); + poseStack.scale(1.0F, 1.0F, 1.0F); + this.reRender(model, poseStack, bufferSource, entity, renderType, buffer, partialTick, 0xF000F0, OverlayTexture.NO_OVERLAY, 0xFFFFFFFF); + poseStack.popPose(); + } + + @Override + public @Nullable RenderType getRenderType(NightmarePortalEntity animatable, ResourceLocation texture, @Nullable MultiBufferSource bufferSource, float partialTick) { + return RenderType.eyes(NightmarePortalModel.TEXTURE); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/NightmareRenderer.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/NightmareRenderer.java index 87bfce1e..782d0836 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/NightmareRenderer.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/NightmareRenderer.java @@ -35,7 +35,7 @@ public class NightmareRenderer extends GeoEntityRenderer { public void render(PoseStack poseStack, NightmareEntity animatable, BakedGeoModel bakedModel, @Nullable RenderType renderType, MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) { - RenderType emissiveType = RenderType.eyes(NightmareModel.EMISSIVE_TEXTURE); + RenderType emissiveType = RenderType.eyes(NightmareModel.emissiveTextureFor(animatable)); VertexConsumer emissiveBuffer = bufferSource.getBuffer(emissiveType); this.getRenderer().reRender( bakedModel, diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TigerEyeCamouflagePlayerLayer.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TigerEyeCamouflagePlayerLayer.java new file mode 100644 index 00000000..841a056c --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TigerEyeCamouflagePlayerLayer.java @@ -0,0 +1,57 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.client.TigerEyeCamouflageClientState; +import com.craisinlord.antarchy.content.item.TigerEyeArmorUtil; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.model.PlayerModel; +import net.minecraft.client.player.AbstractClientPlayer; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.LivingEntityRenderer; +import net.minecraft.client.renderer.entity.RenderLayerParent; +import net.minecraft.client.renderer.entity.layers.RenderLayer; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.Block; + +public final class TigerEyeCamouflagePlayerLayer extends RenderLayer> { + public TigerEyeCamouflagePlayerLayer(RenderLayerParent> renderer) { + super(renderer); + } + + @Override + public void render(PoseStack poseStack, MultiBufferSource buffer, int packedLight, AbstractClientPlayer player, + float limbSwing, float limbSwingAmount, float partialTick, float ageInTicks, float netHeadYaw, + float headPitch) { + if (player.isSpectator() || player.isInvisible() || player.hasEffect(AntarchyObjects.PARALYZED_EFFECT.get())) { + return; + } + if (!TigerEyeArmorUtil.hasFullSet(player)) { + return; + } + + TigerEyeCamouflageClientState.CamouflageState state = TigerEyeCamouflageClientState.get(player.getId()); + if (state == null || !state.active()) { + return; + } + + var blockState = Block.stateById(state.blockStateId()); + if (!TigerEyeArmorUtil.isValidCamouflageBlock(blockState)) { + return; + } + + poseStack.pushPose(); + poseStack.scale(1.1F, 1.1F, 1.1F); + var resolved = TigerEyeCamouflageTextureResolver.resolve(blockState, BlockPos.containing(player.position())); + VertexConsumer vertexConsumer = buffer.getBuffer(RenderType.entityCutoutNoCull(resolved.texture())); + this.getParentModel().renderToBuffer( + poseStack, + vertexConsumer, + packedLight, + LivingEntityRenderer.getOverlayCoords(player, 0.0F), + resolved.argbTint() + ); + poseStack.popPose(); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TigerEyeCamouflageTextureResolver.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TigerEyeCamouflageTextureResolver.java new file mode 100644 index 00000000..d79ed581 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TigerEyeCamouflageTextureResolver.java @@ -0,0 +1,146 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.mojang.blaze3d.platform.NativeImage; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import net.minecraft.client.Minecraft; +import net.minecraft.client.color.block.BlockColors; +import net.minecraft.client.renderer.block.BlockRenderDispatcher; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.texture.DynamicTexture; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; + +public final class TigerEyeCamouflageTextureResolver { + public record ResolvedTexture(ResourceLocation texture, int argbTint) {} + + // PlayerModel's skin layout is always laid out on a 64x64 canvas, regardless of the + // block texture's actual size, so the generated overlay texture must match that grid + // for every body part to sample the block texture at the same pixel density. + private static final int SKIN_SIZE = 64; + private static final Map CACHE = new ConcurrentHashMap<>(); + private static final ResourceLocation FALLBACK_TEXTURE = ResourceLocation.withDefaultNamespace("textures/block/stone.png"); + private static final long QUAD_SEED = 0x54EADL; + + private TigerEyeCamouflageTextureResolver() { + } + + public static ResolvedTexture resolve(BlockState state, BlockPos pos) { + int stateId = Block.getId(state); + ResolvedTexture cached = CACHE.get(stateId); + if (cached != null) { + return cached; + } + + ResolvedTexture resolved = resolveUncached(state, pos); + CACHE.put(stateId, resolved); + return resolved; + } + + public static void clearCache() { + Minecraft minecraft = Minecraft.getInstance(); + for (ResolvedTexture resolved : CACHE.values()) { + if (!resolved.texture().equals(FALLBACK_TEXTURE)) { + minecraft.getTextureManager().release(resolved.texture()); + } + } + CACHE.clear(); + } + + private static ResolvedTexture resolveUncached(BlockState state, BlockPos pos) { + Minecraft minecraft = Minecraft.getInstance(); + BlockRenderDispatcher dispatcher = minecraft.getBlockRenderer(); + var model = dispatcher.getBlockModel(state); + List upwardQuads = model.getQuads(state, Direction.UP, RandomSource.create(QUAD_SEED)); + TextureAtlasSprite sprite = firstSprite(upwardQuads); + int tintIndex = -1; + if (sprite == null) { + sprite = model.getParticleIcon(); + } else if (!upwardQuads.isEmpty()) { + tintIndex = upwardQuads.getFirst().getTintIndex(); + } + + if (sprite == null) { + return new ResolvedTexture(FALLBACK_TEXTURE, 0xFFFFFFFF); + } + + int tint = 0xFFFFFFFF; + if (tintIndex >= 0) { + BlockColors colors = minecraft.getBlockColors(); + int color = colors.getColor(state, minecraft.level, pos, tintIndex); + if (color != -1) { + tint = 0xFF000000 | color; + } + } + + ResourceLocation tiled = buildTiledSkin(minecraft, sprite.contents().name()); + return new ResolvedTexture(tiled, tint); + } + + private static ResourceLocation buildTiledSkin(Minecraft minecraft, ResourceLocation spriteId) { + ResourceLocation source = ResourceLocation.fromNamespaceAndPath( + spriteId.getNamespace(), + "textures/" + spriteId.getPath() + ".png" + ); + ResourceLocation target = ResourceLocation.fromNamespaceAndPath( + spriteId.getNamespace(), + "dynamic/tiger_eye_camouflage/" + spriteId.getPath() + ); + + try (InputStream stream = openStream(minecraft, source)) { + if (stream == null) { + return FALLBACK_TEXTURE; + } + + try (NativeImage sourceImage = NativeImage.read(stream)) { + int tileWidth = sourceImage.getWidth(); + // Animated block textures stack frames vertically below a square first frame. + int tileHeight = tileWidth <= sourceImage.getHeight() ? tileWidth : sourceImage.getHeight(); + + NativeImage canvas = new NativeImage(SKIN_SIZE, SKIN_SIZE, false); + for (int y = 0; y < SKIN_SIZE; y++) { + for (int x = 0; x < SKIN_SIZE; x++) { + canvas.setPixelRGBA(x, y, sourceImage.getPixelRGBA(x % tileWidth, y % tileHeight)); + } + } + + minecraft.getTextureManager().register(target, new DynamicTexture(canvas)); + return target; + } + } catch (IOException e) { + return FALLBACK_TEXTURE; + } + } + + private static InputStream openStream(Minecraft minecraft, ResourceLocation location) { + return minecraft.getResourceManager().getResource(location) + .map(resource -> { + try { + return resource.open(); + } catch (IOException e) { + return null; + } + }) + .orElse(null); + } + + private static TextureAtlasSprite firstSprite(List quads) { + if (quads == null || quads.isEmpty()) { + return null; + } + for (BakedQuad quad : quads) { + if (quad != null && quad.getSprite() != null) { + return quad.getSprite(); + } + } + return null; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/creative/CreativeTabContents.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/creative/CreativeTabContents.java index 3d7d8131..c57389e5 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/creative/CreativeTabContents.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/creative/CreativeTabContents.java @@ -1,6 +1,5 @@ package com.craisinlord.antarchy.content.creative; -import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant; import com.craisinlord.antarchy.content.item.GlimmerBottleItem; import com.craisinlord.antarchy.content.item.ultimate.UltimateGearHelper; @@ -21,6 +20,8 @@ import net.minecraft.world.item.alchemy.PotionContents; import net.minecraft.world.level.ItemLike; public final class CreativeTabContents { + private static final String MODID = "antarchy"; + private CreativeTabContents() {} private record CatalogEntry(String path, String neoTabPath, String insertAfterPath) {} @@ -89,6 +90,7 @@ public final class CreativeTabContents { entry("mossy_shellstone_brick_slab", "building_blocks"), entry("mossy_shellstone_brick_wall", "building_blocks"), entry("cracked_shellstone_bricks", "building_blocks"), + entry("shellstone_pillar", "building_blocks"), entry("blush_moss_block", "building_blocks"), entry("blush_moss_carpet", "building_blocks"), entry("lumen_froglight", "natural_blocks"), @@ -108,16 +110,22 @@ public final class CreativeTabContents { entry("nyxite_brick_slab", "building_blocks"), entry("nyxite_brick_wall", "building_blocks"), entry("chiseled_nyxite", "building_blocks"), + entry("nyxite_pillar", "building_blocks"), entry("pale_nyxite", "building_blocks"), entry("nyxite_spike", "building_blocks"), entry("potent_nyxite", "building_blocks"), entry("antimetal", "building_blocks"), + entry("antimetal_stairs", "building_blocks"), + entry("antimetal_slab", "building_blocks"), entry("polished_antimetal", "building_blocks"), + entry("polished_antimetal_stairs", "building_blocks"), + entry("polished_antimetal_slab", "building_blocks"), entry("antimetal_scaffolding", "building_blocks"), entry("antimetal_rail", "redstone_blocks"), entry("antimetal_powered_rail", "redstone_blocks"), entry("antimetal_detector_rail", "redstone_blocks"), entry("antimetal_activator_rail", "redstone_blocks"), + entry("upper", "redstone_blocks"), entry("umbral_moss_block", "building_blocks"), entry("umbral_moss_carpet", "building_blocks"), entry("dream_torch", "building_blocks"), @@ -134,6 +142,7 @@ public final class CreativeTabContents { entry("smooth_dream_sandstone_stairs", "building_blocks"), entry("smooth_dream_sandstone_slab", "building_blocks"), entry("cut_dream_sandstone_slab", "building_blocks"), + entry("antigravel", "natural_blocks"), entry("budding_blood_crystal", "building_blocks"), entry("blood_crystal_block", "building_blocks"), entry("blood_crystal_cluster", "building_blocks"), @@ -145,6 +154,7 @@ public final class CreativeTabContents { entry("biomite_turf", "building_blocks"), entry("biowart", "building_blocks"), entry("biowart_tendrils", "building_blocks"), + entry("loam", "natural_blocks"), entry("broodstone", "building_blocks"), entry("polished_broodstone", "building_blocks"), entry("chiseled_broodstone", "building_blocks"), @@ -158,12 +168,13 @@ public final class CreativeTabContents { entry("broodstone_brick_stairs", "building_blocks"), entry("broodstone_brick_slab", "building_blocks"), entry("broodstone_brick_wall", "building_blocks"), + entry("broodstone_pillar", "building_blocks"), entry("myrmite_coal_ore", "building_blocks"), entry("broodstone_uranium_ore", "building_blocks"), entry("broodstone_titanium_ore", "building_blocks"), entry("bile_vein", "building_blocks"), - entry("chiten_block", "building_blocks"), - entry("chiten_spike", "building_blocks"), + entry("chitin_block", "building_blocks"), + entry("chitin_spike", "building_blocks"), entry("amber_moss_block", "building_blocks"), entry("amber_moss_carpet", "building_blocks"), entry("uranium_block", "building_blocks"), @@ -180,6 +191,7 @@ public final class CreativeTabContents { entry("bluestone_repeater", "redstone_blocks"), entry("bluestone_comparator", "redstone_blocks"), entry("bluestone_torch", "redstone_blocks"), + entry("bluestone_lamp", "redstone_blocks"), entry("titanium_block", "building_blocks"), entry("raw_titanium_block", "building_blocks"), entry("cut_titanium", "building_blocks"), @@ -205,6 +217,7 @@ public final class CreativeTabContents { entry("seashell", "natural_blocks"), entry("hushweed", "natural_blocks"), entry("amber_lichen", "natural_blocks"), + entry("mucus", "natural_blocks"), entry("creepvine", "natural_blocks"), entry("hanging_creeproots", "natural_blocks"), entry("molting_vines", "natural_blocks"), @@ -243,6 +256,7 @@ public final class CreativeTabContents { entry("antiwater_bucket", "tools_and_utilities"), entry("lumen_bucket", "tools_and_utilities"), entry("cloud_bucket", "tools_and_utilities"), + entry("lucid_anchor", "tools_and_utilities"), entry("reverie_bottle", "tools_and_utilities"), entry("glimmer_bottle", "tools_and_utilities"), entry("critter_cage", "tools_and_utilities"), @@ -283,6 +297,10 @@ public final class CreativeTabContents { entry("blood_crystal_chestplate", "combat"), entry("blood_crystal_leggings", "combat"), entry("blood_crystal_boots", "combat"), + entry("tigers_eye_helmet", "combat"), + entry("tigers_eye_chestplate", "combat"), + entry("tigers_eye_leggings", "combat"), + entry("tigers_eye_boots", "combat"), entry("moggles", "combat"), entry("scorpion_whip", "combat"), entry("fallen_king_crown", "combat"), @@ -306,15 +324,15 @@ public final class CreativeTabContents { entry("mud_pie", "ingredients"), entry("lucid_eye", "ingredients"), entry("blood_crystal_shard", "ingredients"), + entry("tigers_eye", "ingredients"), entry("blood_crystal_apple", "ingredients"), entry("spirit_apple", "ingredients"), entry("mantis_claw", "combat"), entry("hercules_horn", "ingredients"), entry("king_scale", "ingredients"), entry("queen_scale", "ingredients"), - entry("chiten", "ingredients"), + entry("chitin", "ingredients"), entry("jerry_nucleus", "ingredients"), - entry("carapace", "ingredients"), entry("stink_bug", "ingredients"), entry("brutalfly_wing", "ingredients"), entry("primordial_scute", "ingredients"), @@ -323,6 +341,7 @@ public final class CreativeTabContents { entry("emperor_scorpion_stinger", "ingredients"), entry("kraken_tooth", "ingredients"), entry("kraken_tentacle", "ingredients"), + entry("kraken_kalamari", "ingredients"), entry("jumpy_bug_leg", "ingredients"), entry("cornea_ear", "ingredients"), entry("corn", "ingredients"), @@ -493,7 +512,7 @@ public final class CreativeTabContents { } private static Item item(String path) { - return BuiltInRegistries.ITEM.get(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path)); + return BuiltInRegistries.ITEM.get(ResourceLocation.fromNamespaceAndPath(MODID, path)); } private static Item vanillaItem(String path) { @@ -501,7 +520,7 @@ public final class CreativeTabContents { } private static Holder potion(String path) { - Potion potion = BuiltInRegistries.POTION.get(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path)); + Potion potion = BuiltInRegistries.POTION.get(ResourceLocation.fromNamespaceAndPath(MODID, path)); return potion == null ? null : BuiltInRegistries.POTION.wrapAsHolder(potion); } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/AlphaMantisEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/AlphaMantisEntity.java index 11d95b98..57c4c461 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/AlphaMantisEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/AlphaMantisEntity.java @@ -103,6 +103,26 @@ public class AlphaMantisEntity extends MantisEntity { return 1.05D; } + @Override + protected double configuredMaxHealth() { + return AntarchySettings.alphaMantisHealth(); + } + + @Override + protected double configuredAttackDamage() { + return AntarchySettings.alphaMantisAttackDamage(); + } + + @Override + protected double configuredMovementSpeed() { + return AntarchySettings.alphaMantisMovementSpeed(); + } + + @Override + protected double configuredFlyingSpeed() { + return AntarchySettings.alphaMantisFlyingSpeed(); + } + @Override public void tick() { super.tick(); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/BedBugEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/BedBugEntity.java index adcd7c92..5d76b4d4 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/BedBugEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/BedBugEntity.java @@ -251,6 +251,7 @@ public class BedBugEntity extends Animal implements GeoEntity { public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData spawnGroupData) { BedBugSpawnData bedBugSpawnData = spawnGroupData instanceof BedBugSpawnData data ? data : new BedBugSpawnData(); super.finalizeSpawn(level, difficulty, spawnReason, null); + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.bedBugHealth()); if (bedBugSpawnData.eggNestPos == null && (spawnReason == MobSpawnType.NATURAL || spawnReason == MobSpawnType.CHUNK_GENERATION) && this.random.nextFloat() < 0.55F) { bedBugSpawnData.eggNestPos = this.createNaturalEggNest(level); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ButterflyEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ButterflyEntity.java index a058d6ef..49289bfd 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ButterflyEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ButterflyEntity.java @@ -234,6 +234,7 @@ public class ButterflyEntity extends Animal implements FlyingAnimal, GeoEntity { @Override public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnType, @Nullable SpawnGroupData spawnGroupData) { this.assignRandomTextureVariant(); + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.butterflyHealth()); return super.finalizeSpawn(level, difficulty, spawnType, spawnGroupData); } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CaterpillarEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CaterpillarEntity.java index 7744f504..4c21b485 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CaterpillarEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CaterpillarEntity.java @@ -128,6 +128,12 @@ public class CaterpillarEntity extends Animal implements GeoEntity { .add(Attributes.FOLLOW_RANGE, 14.0D); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, net.minecraft.world.entity.MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.caterpillarHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + @Override protected PathNavigation createNavigation(Level level) { GroundPathNavigation navigation = new GroundPathNavigation(this, level) { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CheepEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CheepEntity.java index ca8ae3b5..5274e4e7 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CheepEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CheepEntity.java @@ -48,6 +48,12 @@ public class CheepEntity extends AbstractFish implements GeoEntity { .add(Attributes.MOVEMENT_SPEED, 0.5D); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, net.minecraft.world.entity.MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.cheepHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + @Override public ItemStack getBucketItemStack() { return new ItemStack(Items.WATER_BUCKET); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ConfiguredMobSpawnUtil.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ConfiguredMobSpawnUtil.java new file mode 100644 index 00000000..dbe21edf --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ConfiguredMobSpawnUtil.java @@ -0,0 +1,18 @@ +package com.craisinlord.antarchy.content.entity; + +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.ai.attributes.AttributeInstance; +import net.minecraft.world.entity.ai.attributes.Attributes; + +public final class ConfiguredMobSpawnUtil { + private ConfiguredMobSpawnUtil() { + } + + public static void applyConfiguredHealth(Mob mob, double maxHealth) { + AttributeInstance maxHealthAttribute = mob.getAttribute(Attributes.MAX_HEALTH); + if (maxHealthAttribute != null) { + maxHealthAttribute.setBaseValue(maxHealth); + } + mob.setHealth((float) maxHealth); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CreepingHorrorEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CreepingHorrorEntity.java index 108a9ac7..e68b30ef 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CreepingHorrorEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CreepingHorrorEntity.java @@ -74,6 +74,12 @@ public class CreepingHorrorEntity extends Monster implements GeoEntity { .add(Attributes.FOLLOW_RANGE, 16.0D); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, net.minecraft.world.entity.MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.creepingHorrorHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER || spawnReason == MobSpawnType.COMMAND) { return true; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/DorrieEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/DorrieEntity.java index 1cd81017..1dd63741 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/DorrieEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/DorrieEntity.java @@ -160,6 +160,12 @@ public class DorrieEntity extends Animal implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, 4.0D); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, net.minecraft.world.entity.MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.dorrieHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + public boolean hasSaddle() { return this.entityData.get(HAS_SADDLE); } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/EmperorScorpionEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/EmperorScorpionEntity.java index 69a702fa..4b9a3e9a 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/EmperorScorpionEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/EmperorScorpionEntity.java @@ -15,6 +15,7 @@ import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerBossEvent; +import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvent; import net.minecraft.util.RandomSource; @@ -37,7 +38,6 @@ import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; import net.minecraft.world.entity.ai.goal.RandomStrollGoal; import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; -import net.minecraft.server.level.ServerLevel; import net.minecraft.world.DifficultyInstance; import net.minecraft.world.entity.monster.Monster; import net.minecraft.world.entity.player.Player; @@ -55,6 +55,9 @@ import software.bernie.geckolib.animation.RawAnimation; import software.bernie.geckolib.util.GeckoLibUtil; import java.util.EnumSet; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; public class EmperorScorpionEntity extends Monster implements GeoEntity { private static final byte CLAW_ATTACK_EVENT = 4; @@ -85,6 +88,21 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { private static final float HARDEN_HEAL_AMOUNT = 2.0F; private static final int HARDEN_MIN_DURATION_TICKS = 100; private static final int HARDEN_MAX_DURATION_TICKS = 200; + private static final double CLAW_VERTICAL_TOLERANCE = 2.5D; + private static final double STING_VERTICAL_TOLERANCE = 3.25D; + private static final double CLAW_FORWARD_DOT = 0.05D; + private static final double STING_FORWARD_DOT = 0.45D; + private static final double CLAW_STRIKE_FORWARD = 2.6D; + private static final double STING_STRIKE_FORWARD = 3.4D; + private static final double CLAW_STRIKE_RADIUS = 2.35D; + private static final double STING_STRIKE_RADIUS = 2.15D; + private static final double ENCOUNTER_HOME_RADIUS = 72.0D; + private static final double ENCOUNTER_LEASH_RADIUS = 96.0D; + private static final double HOME_REACHED_RADIUS = 9.0D; + private static final double FORCED_RETURN_RADIUS = 144.0D; + private static final int RESET_DELAY_TICKS = 240; + private static final double HOME_RETURN_SPEED = 1.0D; + private static final double NEARBY_SCORPION_CHECK_RADIUS = 32.0D; private static final ResourceKey THORAXIS_KEY = ResourceKey.create(Registries.DIMENSION, @@ -113,12 +131,17 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { private int hardenDurationTicks; private int hardenHealTicks; private int hardenSummonedScorpions; + private int disengageTicks; private float hardenLockedYaw; private float hardenLockedPitch; + private float attackYaw; private boolean attackDamageApplied; private AttackType currentAttack = AttackType.NONE; private HardenPhase hardenPhase = HardenPhase.NONE; + private AttackType previousAttack = AttackType.NONE; + @Nullable private BlockPos encounterHome; @Nullable private LivingEntity attackTarget; + private final Set summonedScorpionIds = new HashSet<>(); public EmperorScorpionEntity(EntityType entityType, Level level) { super(entityType, level); @@ -137,6 +160,13 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { .add(Attributes.FOLLOW_RANGE, AntarchySettings.emperorScorpionFollowRange()); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, + MobSpawnType spawnReason, @Nullable net.minecraft.world.entity.SpawnGroupData spawnData) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.emperorScorpionHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); @@ -204,7 +234,11 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { @Override public void tick() { super.tick(); + if (!this.level().isClientSide) { + this.tickEncounterState(); + } this.bossEvent.setProgress(this.getHealth() / this.getMaxHealth()); + this.bossEvent.setVisible(this.shouldShowBossBar()); if (this.clawCooldownTicks > 0) { this.clawCooldownTicks--; @@ -271,8 +305,10 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { } this.attackTarget = target; this.currentAttack = attackType; + this.previousAttack = attackType; this.attackAnimTicks = attackType.animTicks(); this.attackDamageApplied = false; + this.attackYaw = this.getYRot(); this.getNavigation().stop(); if (attackType == AttackType.CLAW) { this.clawCooldownTicks = AntarchySettings.emperorScorpionClawCooldownTicks(); @@ -291,7 +327,12 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { return; } - this.getLookControl().setLookAt(this.attackTarget, 30.0F, 30.0F); + if (this.attackAnimTicks > this.currentAttack.commitTick()) { + this.getLookControl().setLookAt(this.attackTarget, 30.0F, 30.0F); + this.attackYaw = this.getYRot(); + } else { + this.lockAttackRotation(); + } if (!this.attackDamageApplied && this.attackAnimTicks == this.currentAttack.hitTick() && this.canHitAttackTarget(this.attackTarget, this.currentAttack)) { @@ -305,8 +346,28 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { } private boolean canHitAttackTarget(LivingEntity target, AttackType attackType) { - double range = attackType == AttackType.STING ? STING_RANGE : CLAW_RANGE; - return this.distanceToSqr(target) <= range * range && this.hasLineOfSight(target); + if (!target.isAlive() || !this.hasLineOfSight(target)) { + return false; + } + Vec3 origin = this.getStrikeOrigin(attackType); + Vec3 targetCenter = target.position().add(0.0D, target.getBbHeight() * 0.5D, 0.0D); + Vec3 offset = targetCenter.subtract(origin); + double verticalTolerance = attackType == AttackType.STING ? STING_VERTICAL_TOLERANCE : CLAW_VERTICAL_TOLERANCE; + if (Math.abs(offset.y) > verticalTolerance) { + return false; + } + Vec3 horizontal = new Vec3(offset.x, 0.0D, offset.z); + if (horizontal.lengthSqr() < 1.0E-6D) { + return true; + } + Vec3 forward = Vec3.directionFromRotation(0.0F, this.attackYaw); + double forwardDot = horizontal.normalize().dot(new Vec3(forward.x, 0.0D, forward.z).normalize()); + double minForwardDot = attackType == AttackType.STING ? STING_FORWARD_DOT : CLAW_FORWARD_DOT; + if (forwardDot < minForwardDot) { + return false; + } + double strikeRadius = attackType == AttackType.STING ? STING_STRIKE_RADIUS : CLAW_STRIKE_RADIUS; + return origin.distanceToSqr(targetCenter) <= strikeRadius * strikeRadius; } private void resetAttackState() { @@ -316,6 +377,13 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { this.attackTarget = null; } + private Vec3 getStrikeOrigin(AttackType attackType) { + Vec3 forward = Vec3.directionFromRotation(0.0F, this.attackYaw); + double forwardOffset = attackType == AttackType.STING ? STING_STRIKE_FORWARD : CLAW_STRIKE_FORWARD; + double verticalOffset = attackType == AttackType.STING ? this.getBbHeight() * 0.8D : this.getBbHeight() * 0.52D; + return this.position().add(forward.x * forwardOffset, verticalOffset, forward.z * forwardOffset); + } + private void tickHardenState() { if (this.getHardenPhase() == HardenPhase.NONE) { if (this.hardenCooldownTicks <= 0 && this.getTarget() != null && this.getTarget().isAlive()) { @@ -330,9 +398,13 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { switch (this.getHardenPhase()) { case CASTING -> { + LivingEntity target = this.getTarget(); + if (target != null) { + this.getLookControl().setLookAt(target, 20.0F, 20.0F); + } if (this.hardenCastTicks % this.hardenCastSpawnTicks == 0 && this.hardenSummonedScorpions < AntarchySettings.emperorScorpionMaxSummonedScorpions() - && this.countNearbyScorpionMinions() < AntarchySettings.emperorScorpionMaxNearbyScorpions()) { + && this.countOwnedNearbyScorpionMinions() < AntarchySettings.emperorScorpionMaxNearbyScorpions()) { this.summonScorpionMinion(); this.hardenSummonedScorpions++; if (this.hardenSummonedScorpions >= AntarchySettings.emperorScorpionMaxSummonedScorpions()) { @@ -369,7 +441,7 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { this.setDeltaMovement(0.0D, motion.y, 0.0D); if (--this.hardenStateTicks <= 0) { this.setHardenPhase(HardenPhase.NONE); - this.hardenCooldownTicks = Math.max(1, AntarchySettings.emperorScorpionSummonIntervalTicks()); + this.hardenCooldownTicks = Math.max(1, AntarchySettings.emperorScorpionHardenCooldownTicks()); } } } @@ -384,6 +456,7 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { this.hardenHealTicks = 0; this.hardenSummonedScorpions = 0; this.resetAttackState(); + this.previousAttack = AttackType.NONE; this.getNavigation().stop(); } @@ -408,13 +481,12 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { this.setAggressive(false); } - private static final double NEARBY_SCORPION_CHECK_RADIUS = 24.0D; - - private int countNearbyScorpionMinions() { + private int countOwnedNearbyScorpionMinions() { + UUID ownerId = this.getUUID(); return this.level().getEntitiesOfClass( ScorpionEntity.class, this.getBoundingBox().inflate(NEARBY_SCORPION_CHECK_RADIUS), - Entity::isAlive + scorpion -> scorpion.isAlive() && scorpion.isSummonedFor(ownerId) ).size(); } @@ -428,16 +500,19 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { return; } + Vec3 anchor = this.getTarget() != null ? this.getTarget().position() : this.position(); Vec3 ring = Vec3.directionFromRotation(0.0F, this.random.nextFloat() * 360.0F) .scale(2.75D + this.random.nextDouble() * 1.75D); - BlockPos spawnPos = BlockPos.containing(this.getX() + ring.x, this.getY(), this.getZ() + ring.z); + BlockPos spawnPos = BlockPos.containing(anchor.x + ring.x, this.getY(), anchor.z + ring.z); scorpion.moveTo(spawnPos.getX() + 0.5D, spawnPos.getY(), spawnPos.getZ() + 0.5D, this.random.nextFloat() * 360.0F, 0.0F); scorpion.finalizeSpawn(serverLevel, serverLevel.getCurrentDifficultyAt(spawnPos), MobSpawnType.MOB_SUMMONED, null); scorpion.setPersistenceRequired(); + scorpion.setSummonOwner(this.getUUID()); if (this.getTarget() instanceof LivingEntity target) { scorpion.setTarget(target); } serverLevel.addFreshEntity(scorpion); + this.summonedScorpionIds.add(scorpion.getUUID()); } private void commitLunge(LivingEntity target, double horizontalSpeed, double verticalSpeed) { @@ -447,6 +522,7 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { return; } horizontal = horizontal.normalize().scale(horizontalSpeed); + this.attackYaw = (float) (net.minecraft.util.Mth.atan2(horizontal.z, horizontal.x) * (180.0D / Math.PI)) - 90.0F; this.setDeltaMovement(this.getDeltaMovement().add(horizontal.x, verticalSpeed, horizontal.z)); this.hasImpulse = true; } @@ -509,6 +585,14 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { this.entityData.set(HARDEN_PHASE, phase.ordinal()); } + private void lockAttackRotation() { + this.setYRot(this.attackYaw); + this.setYHeadRot(this.attackYaw); + this.yBodyRot = this.attackYaw; + this.yBodyRotO = this.attackYaw; + this.yHeadRotO = this.attackYaw; + } + private void lockHardenRotation() { if (!this.isHardenSequenceActive()) { return; @@ -600,6 +684,11 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { tag.putInt("HardenDurationTicks", this.hardenDurationTicks); tag.putInt("HardenHealTicks", this.hardenHealTicks); tag.putInt("HardenSummonedScorpions", this.hardenSummonedScorpions); + if (this.encounterHome != null) { + tag.putInt("EncounterHomeX", this.encounterHome.getX()); + tag.putInt("EncounterHomeY", this.encounterHome.getY()); + tag.putInt("EncounterHomeZ", this.encounterHome.getZ()); + } } @Override @@ -631,6 +720,16 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { if (tag.contains("HardenSummonedScorpions")) { this.hardenSummonedScorpions = tag.getInt("HardenSummonedScorpions"); } + if (tag.contains("EncounterHomeX") && tag.contains("EncounterHomeY") && tag.contains("EncounterHomeZ")) { + this.encounterHome = new BlockPos(tag.getInt("EncounterHomeX"), tag.getInt("EncounterHomeY"), tag.getInt("EncounterHomeZ")); + } + this.resetAttackState(); + this.attackYaw = this.getYRot(); + if (this.getHardenPhase() == HardenPhase.CASTING) { + this.setHardenPhase(HardenPhase.NONE); + } + this.disengageTicks = 0; + this.summonedScorpionIds.clear(); } @Override @@ -653,6 +752,9 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { @Override public void remove(RemovalReason reason) { + if (!this.level().isClientSide) { + this.discardOwnedScorpions(); + } super.remove(reason); this.bossEvent.removeAllPlayers(); } @@ -661,6 +763,148 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { return this.attackAnimTicks > 0; } + private void tickEncounterState() { + if (this.encounterHome == null) { + this.encounterHome = this.blockPosition(); + } + + LivingEntity target = this.getTarget(); + if (!this.isValidEncounterTarget(target)) { + if (target != null) { + this.setTarget(null); + } + target = null; + } + + if (target != null) { + this.disengageTicks = 0; + if (this.isOutsideLeashRadius()) { + this.resetEncounter(true); + } + return; + } + + if (this.isAttackLocked() || this.isHardenSequenceActive()) { + return; + } + + if (this.hasOwnedScorpionsNearby()) { + this.disengageTicks = 0; + return; + } + + if (!this.isAtEncounterHome()) { + this.disengageTicks++; + if (this.disengageTicks >= RESET_DELAY_TICKS) { + this.resetEncounter(true); + } else { + this.navigateHome(); + } + return; + } + + this.disengageTicks = 0; + } + + private boolean isValidEncounterTarget(@Nullable LivingEntity target) { + if (target == null || !target.isAlive() || !target.level().equals(this.level())) { + return false; + } + if (target instanceof Player player && (player.isCreative() || player.isSpectator())) { + return false; + } + if (this.encounterHome == null) { + return true; + } + return target.distanceToSqr(Vec3.atCenterOf(this.encounterHome)) <= ENCOUNTER_LEASH_RADIUS * ENCOUNTER_LEASH_RADIUS; + } + + private boolean shouldShowBossBar() { + return this.getTarget() != null + || this.isAttackLocked() + || this.isHardenSequenceActive() + || this.hasOwnedScorpionsNearby() + || !this.isAtEncounterHome(); + } + + private boolean isAtEncounterHome() { + if (this.encounterHome == null) { + return true; + } + return this.distanceToSqr(Vec3.atCenterOf(this.encounterHome)) <= HOME_REACHED_RADIUS; + } + + private boolean isOutsideLeashRadius() { + if (this.encounterHome == null) { + return false; + } + return this.distanceToSqr(Vec3.atCenterOf(this.encounterHome)) > ENCOUNTER_LEASH_RADIUS * ENCOUNTER_LEASH_RADIUS; + } + + private boolean hasOwnedScorpionsNearby() { + return this.countOwnedNearbyScorpionMinions() > 0; + } + + private void navigateHome() { + if (this.encounterHome == null) { + return; + } + Vec3 homeCenter = Vec3.atCenterOf(this.encounterHome); + if (this.distanceToSqr(homeCenter) > FORCED_RETURN_RADIUS * FORCED_RETURN_RADIUS) { + this.moveTo(homeCenter.x, this.encounterHome.getY(), homeCenter.z, this.getYRot(), this.getXRot()); + this.setDeltaMovement(Vec3.ZERO); + this.hasImpulse = true; + return; + } + this.getNavigation().moveTo(homeCenter.x, this.encounterHome.getY(), homeCenter.z, HOME_RETURN_SPEED); + } + + private void resetEncounter(boolean restoreHealth) { + this.resetAttackState(); + this.getNavigation().stop(); + this.setTarget(null); + this.setAggressive(false); + this.setHardenPhase(HardenPhase.NONE); + this.hardenCastTicks = 0; + this.hardenCastSpawnTicks = 0; + this.hardenStateTicks = 0; + this.hardenDurationTicks = 0; + this.hardenHealTicks = 0; + this.hardenSummonedScorpions = 0; + this.hardenCooldownTicks = Math.max(1, AntarchySettings.emperorScorpionHardenCooldownTicks()); + this.disengageTicks = 0; + this.previousAttack = AttackType.NONE; + if (restoreHealth) { + this.setHealth(this.getMaxHealth()); + } + this.discardOwnedScorpions(); + if (this.encounterHome != null) { + Vec3 homeCenter = Vec3.atCenterOf(this.encounterHome); + this.moveTo(homeCenter.x, this.encounterHome.getY(), homeCenter.z, this.getYRot(), this.getXRot()); + this.setDeltaMovement(Vec3.ZERO); + } + } + + private void discardOwnedScorpions() { + if (!(this.level() instanceof ServerLevel serverLevel)) { + this.summonedScorpionIds.clear(); + return; + } + UUID ownerId = this.getUUID(); + for (UUID scorpionId : Set.copyOf(this.summonedScorpionIds)) { + Entity entity = serverLevel.getEntity(scorpionId); + if (entity instanceof ScorpionEntity scorpion && scorpion.isAlive() && scorpion.isSummonedFor(ownerId)) { + scorpion.remove(RemovalReason.DISCARDED); + } + } + this.level().getEntitiesOfClass( + ScorpionEntity.class, + this.getBoundingBox().inflate(NEARBY_SCORPION_CHECK_RADIUS * 2.0D), + scorpion -> scorpion.isAlive() && scorpion.isSummonedFor(ownerId) + ).forEach(scorpion -> scorpion.remove(RemovalReason.DISCARDED)); + this.summonedScorpionIds.clear(); + } + public boolean isHardenSequenceActive() { return this.getHardenPhase() != HardenPhase.NONE; } @@ -761,23 +1005,31 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { @Override public boolean isWithinMeleeAttackRange(LivingEntity target) { + if (this.encounterHome != null && target.distanceToSqr(Vec3.atCenterOf(this.encounterHome)) > ENCOUNTER_HOME_RADIUS * ENCOUNTER_HOME_RADIUS) { + return false; + } return this.distanceToSqr(target) <= STING_RANGE * STING_RANGE; } private AttackType selectAttack(LivingEntity target) { - boolean inClawRange = this.clawCooldownTicks <= 0 && this.distanceToSqr(target) <= CLAW_RANGE * CLAW_RANGE; - boolean inStingRange = this.stingCooldownTicks <= 0 && this.distanceToSqr(target) <= STING_RANGE * STING_RANGE; + double horizontalDistance = this.distanceToSqr(target); + boolean inClawRange = this.clawCooldownTicks <= 0 && horizontalDistance <= CLAW_RANGE * CLAW_RANGE; + boolean inStingRange = this.stingCooldownTicks <= 0 && horizontalDistance <= STING_RANGE * STING_RANGE; boolean canClaw = inClawRange && this.hasLineOfSight(target); boolean canSting = inStingRange && this.hasLineOfSight(target); - if (canSting && (!canClaw || this.random.nextFloat() < 0.3F)) { + if (canClaw && canSting) { + double heightDifference = target.getY() - this.getY(); + if (heightDifference > 1.25D || horizontalDistance > CLAW_RANGE * CLAW_RANGE * 0.7D) { + return this.previousAttack == AttackType.STING && this.random.nextFloat() < 0.5F ? AttackType.CLAW : AttackType.STING; + } + return this.previousAttack == AttackType.CLAW && this.random.nextFloat() < 0.55F ? AttackType.STING : AttackType.CLAW; + } + if (canSting) { return AttackType.STING; } if (canClaw) { return AttackType.CLAW; } - if (canSting) { - return AttackType.STING; - } return AttackType.NONE; } @@ -801,6 +1053,14 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { default -> 0; }; } + + private int commitTick() { + return switch (this) { + case CLAW -> Math.max(1, this.hitTick() + 3); + case STING -> Math.max(1, this.hitTick() + 4); + default -> 0; + }; + } } private enum HardenPhase { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/HerculesBeetleEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/HerculesBeetleEntity.java index a67d5f87..f265b488 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/HerculesBeetleEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/HerculesBeetleEntity.java @@ -202,6 +202,13 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl .add(Attributes.ARMOR, 12.0D); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, + MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.herculesBeetleHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER || spawnReason == MobSpawnType.COMMAND) { return true; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java index f01d8b87..b84d1d78 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java @@ -62,6 +62,13 @@ public class LurkingTerrorEntity extends Monster implements GeoEntity { .add(Attributes.FLYING_SPEED, 0.55D); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, + MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.lurkingTerrorHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER || spawnReason == MobSpawnType.COMMAND) { return true; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MantisEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MantisEntity.java index f81d7eaa..ab612f35 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MantisEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MantisEntity.java @@ -15,6 +15,7 @@ import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.MobSpawnType; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.AttributeInstance; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.goal.FloatGoal; import net.minecraft.world.entity.ai.goal.MeleeAttackGoal; @@ -24,6 +25,7 @@ import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; import net.minecraft.world.entity.ai.navigation.GroundPathNavigation; import net.minecraft.world.entity.ai.navigation.PathNavigation; import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.entity.SpawnGroupData; import net.minecraft.world.level.block.LeavesBlock; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; @@ -68,6 +70,7 @@ public class MantisEntity extends Monster implements GeoEntity { protected int flyBurstTicks; protected int flyCooldownTicks; private int debugLogTicks = 0; + private int configSyncTicks; public MantisEntity(EntityType entityType, Level level) { super(entityType, level); @@ -89,6 +92,13 @@ public class MantisEntity extends Monster implements GeoEntity { .add(Attributes.ARMOR, 4.0D); } + @Override + public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData spawnData) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, this.configuredMaxHealth()); + this.syncConfiguredAttributes(false); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER @@ -200,6 +210,11 @@ public class MantisEntity extends Monster implements GeoEntity { public void tick() { super.tick(); if (!this.level().isClientSide) { + if (this.configSyncTicks-- <= 0) { + this.configSyncTicks = 20; + this.syncConfiguredAttributes(true); + } + if (this.attackAnimationTicks > 0) { this.attackAnimationTicks--; } @@ -278,6 +293,22 @@ public class MantisEntity extends Monster implements GeoEntity { return COMBAT_SPEED; } + protected double configuredMaxHealth() { + return AntarchySettings.mantisHealth(); + } + + protected double configuredAttackDamage() { + return AntarchySettings.mantisAttackDamage(); + } + + protected double configuredMovementSpeed() { + return AntarchySettings.mantisMovementSpeed(); + } + + protected double configuredFlyingSpeed() { + return AntarchySettings.mantisFlyingSpeed(); + } + protected void onActiveTarget(LivingEntity target) { } @@ -349,6 +380,36 @@ public class MantisEntity extends Monster implements GeoEntity { return this.flyBurstTicks > 0; } + private void syncConfiguredAttributes(boolean rescaleCurrentHealth) { + syncAttribute(this.getAttribute(Attributes.MAX_HEALTH), this.configuredMaxHealth(), rescaleCurrentHealth); + syncAttribute(this.getAttribute(Attributes.ATTACK_DAMAGE), this.configuredAttackDamage(), false); + syncAttribute(this.getAttribute(Attributes.MOVEMENT_SPEED), this.configuredMovementSpeed(), false); + syncAttribute(this.getAttribute(Attributes.FLYING_SPEED), this.configuredFlyingSpeed(), false); + } + + private void syncAttribute(@Nullable AttributeInstance attributeInstance, double desiredValue, boolean rescaleCurrentHealth) { + if (attributeInstance == null) { + return; + } + + double previousValue = attributeInstance.getBaseValue(); + if (Math.abs(previousValue - desiredValue) < 1.0E-6D) { + return; + } + + attributeInstance.setBaseValue(desiredValue); + if (!rescaleCurrentHealth) { + this.setHealth((float) this.getMaxHealth()); + return; + } + + float currentHealth = this.getHealth(); + float syncedHealth = previousValue > 0.0D + ? (float) net.minecraft.util.Mth.clamp((currentHealth / (float) previousValue) * desiredValue, 0.0D, desiredValue) + : (float) desiredValue; + this.setHealth(syncedHealth); + } + private void tickDebugLog() { if (++this.debugLogTicks < 100) { return; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MissileSquidEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MissileSquidEntity.java index 19a5bb69..c28db991 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MissileSquidEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MissileSquidEntity.java @@ -109,6 +109,13 @@ public class MissileSquidEntity extends Monster implements GeoEntity { .add(Attributes.KNOCKBACK_RESISTANCE, AntarchySettings.missileSquidKnockbackResistance()); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, + MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.missileSquidHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { return level.getDifficulty() != Difficulty.PEACEFUL && pos.getY() <= level.getSeaLevel() - 10 diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MolevoreEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MolevoreEntity.java index 90b61a27..8cdf892d 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MolevoreEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MolevoreEntity.java @@ -59,6 +59,10 @@ public class MolevoreEntity extends Monster implements GeoEntity { Registries.BIOME, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "moleworm_caves") ); + private static final ResourceKey CAVARYN_MOLEWORM_CAVES = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "cavaryn_moleworm_caves") + ); private static final EntityDataAccessor ACTION_STATE = SynchedEntityData.defineId(MolevoreEntity.class, EntityDataSerializers.INT); private static final int ACTION_NONE = 0; @@ -122,7 +126,7 @@ public class MolevoreEntity extends Monster implements GeoEntity { } private static boolean hasSpawnPocket(LevelAccessor level, BlockPos pos) { - if (!level.getBiome(pos).is(MOLEWORM_CAVES)) { + if (!level.getBiome(pos).is(MOLEWORM_CAVES) && !level.getBiome(pos).is(CAVARYN_MOLEWORM_CAVES)) { return false; } @@ -180,6 +184,7 @@ public class MolevoreEntity extends Monster implements GeoEntity { @Nullable public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData spawnGroupData) { SpawnGroupData finalized = super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData); + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.molevoreHealth()); if (spawnReason != MobSpawnType.SPAWN_EGG) { this.startDigUp(); } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MolewormEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MolewormEntity.java index 8fd69153..c6239ed8 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MolewormEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MolewormEntity.java @@ -80,6 +80,13 @@ public class MolewormEntity extends Monster implements GeoEntity { .add(Attributes.ATTACK_DAMAGE, AntarchySettings.molewormAttackDamage()); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, + MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.molewormHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + @SuppressWarnings("unchecked") public static boolean canSpawn(EntityType entityType, LevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { return Silverfish.checkSilverfishSpawnRules((EntityType) (EntityType) entityType, level, spawnReason, pos, random); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/OuranwoodDeerEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/OuranwoodDeerEntity.java index b8cae22a..b2876469 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/OuranwoodDeerEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/OuranwoodDeerEntity.java @@ -160,6 +160,7 @@ public class OuranwoodDeerEntity extends Animal implements GeoEntity { public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData spawnGroupData) { DeerSpawnData deerSpawnData = spawnGroupData instanceof DeerSpawnData data ? data : new DeerSpawnData(); SpawnGroupData result = super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData); + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.ouranwoodDeerHealth()); if (spawnReason == MobSpawnType.NATURAL || spawnReason == MobSpawnType.CHUNK_GENERATION || spawnReason == MobSpawnType.SPAWN_EGG) { this.setVariant(Variant.values()[this.random.nextInt(Variant.values().length)]); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ReverieEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ReverieEntity.java index 23fefb81..6ce154af 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ReverieEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ReverieEntity.java @@ -204,6 +204,13 @@ public class ReverieEntity extends PathfinderMob implements FlyingAnimal, GeoEnt .add(Attributes.FOLLOW_RANGE, 32.0D); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, + MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.reverieHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER || spawnReason == MobSpawnType.COMMAND) { return true; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/RollyPollyEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/RollyPollyEntity.java index bef51ef8..8b1143cf 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/RollyPollyEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/RollyPollyEntity.java @@ -120,6 +120,13 @@ public class RollyPollyEntity extends TamableAnimal implements GeoEntity { .add(Attributes.FOLLOW_RANGE, 16.0D); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, + net.minecraft.world.entity.MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.rollyPollyHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ScorpionEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ScorpionEntity.java index 595e138b..ebf282cb 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ScorpionEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ScorpionEntity.java @@ -44,11 +44,14 @@ import software.bernie.geckolib.animation.RawAnimation; import software.bernie.geckolib.util.GeckoLibUtil; import org.jetbrains.annotations.Nullable; +import java.util.UUID; + public class ScorpionEntity extends Monster implements GeoEntity { private static final byte ATTACK_ANIM_EVENT = 4; private static final EntityDataAccessor TEXTURE_VARIANT = SynchedEntityData.defineId(ScorpionEntity.class, EntityDataSerializers.INT); private static final String TEXTURE_VARIANT_KEY = "TextureVariant"; + private static final String SUMMON_OWNER_KEY = "SummonOwner"; public static final int BLUE_VARIANT = 0; public static final int GREEN_VARIANT = 1; @@ -67,6 +70,7 @@ public class ScorpionEntity extends Monster implements GeoEntity { private int attackCooldownTicks = 0; private boolean attackDamageApplied = false; @Nullable private LivingEntity attackTarget; + @Nullable private UUID summonOwner; public ScorpionEntity(EntityType entityType, Level level) { super(entityType, level); @@ -115,6 +119,7 @@ public class ScorpionEntity extends Monster implements GeoEntity { @Override public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnType, @Nullable SpawnGroupData spawnGroupData) { this.assignRandomTextureVariant(); + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.scorpionHealth()); return super.finalizeSpawn(level, difficulty, spawnType, spawnGroupData); } @@ -237,6 +242,9 @@ public class ScorpionEntity extends Monster implements GeoEntity { public void addAdditionalSaveData(CompoundTag tag) { super.addAdditionalSaveData(tag); tag.putInt(TEXTURE_VARIANT_KEY, this.getTextureVariant()); + if (this.summonOwner != null) { + tag.putUUID(SUMMON_OWNER_KEY, this.summonOwner); + } } @Override @@ -247,6 +255,7 @@ public class ScorpionEntity extends Monster implements GeoEntity { } else { this.assignRandomTextureVariant(); } + this.summonOwner = tag.hasUUID(SUMMON_OWNER_KEY) ? tag.getUUID(SUMMON_OWNER_KEY) : null; } @Override @@ -277,6 +286,19 @@ public class ScorpionEntity extends Monster implements GeoEntity { this.entityData.set(TEXTURE_VARIANT, variant == GREEN_VARIANT ? GREEN_VARIANT : BLUE_VARIANT); } + public void setSummonOwner(@Nullable UUID summonOwner) { + this.summonOwner = summonOwner; + } + + @Nullable + public UUID getSummonOwner() { + return this.summonOwner; + } + + public boolean isSummonedFor(UUID ownerId) { + return ownerId.equals(this.summonOwner); + } + private void assignRandomTextureVariant() { this.setTextureVariant(this.random.nextBoolean() ? BLUE_VARIANT : GREEN_VARIANT); } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java index 815b1d84..e5414f58 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java @@ -153,6 +153,13 @@ public class ToreterrorEntity extends Monster implements GeoEntity { .add(Attributes.ARMOR_TOUGHNESS, 4.0D); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, + MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.toreterrorHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, net.minecraft.util.RandomSource random) { boolean sturdy = level.getBlockState(pos.below()).isFaceSturdy(level, pos.below(), Direction.UP); return level.getDifficulty() != Difficulty.PEACEFUL && sturdy; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/TriffidEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/TriffidEntity.java index 6d2454d8..3916b514 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/TriffidEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/TriffidEntity.java @@ -101,6 +101,13 @@ public class TriffidEntity extends Monster implements GeoEntity { .add(Attributes.MOVEMENT_SPEED, 0.0D); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, + MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData) { + ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.triffidHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + public static boolean canSpawn(EntityType entityType, LevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { if (pos.getY() < level.getMinBuildHeight() || pos.getY() + 7 >= level.getMaxBuildHeight()) { return false; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/UpwardFallingBlockEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/UpwardFallingBlockEntity.java index b7280115..4d1c6e42 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/UpwardFallingBlockEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/UpwardFallingBlockEntity.java @@ -2,7 +2,6 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.content.block.AntimetalScaffoldingBlock; import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtUtils; import net.minecraft.network.syncher.EntityDataAccessor; @@ -14,6 +13,7 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.PointedDripstoneBlock; import net.minecraft.world.level.block.state.BlockState; @@ -32,6 +32,7 @@ public class UpwardFallingBlockEntity extends Entity { private static final int MAX_TICKS = 200; public int time = 0; + private boolean breaksOnLeaves = true; public UpwardFallingBlockEntity(EntityType type, Level level) { super(type, level); @@ -48,6 +49,10 @@ public class UpwardFallingBlockEntity extends Entity { } public static void fallUp(Level level, BlockPos pos, BlockState state) { + fallUp(level, pos, state, true); + } + + public static void fallUp(Level level, BlockPos pos, BlockState state, boolean breaksOnLeaves) { if (level.isClientSide) return; // Prevent stacking multiple entities from the same block position if (!level.getEntitiesOfClass(UpwardFallingBlockEntity.class, new AABB(pos)).isEmpty()) return; @@ -55,6 +60,7 @@ public class UpwardFallingBlockEntity extends Entity { level.removeBlock(pos, false); UpwardFallingBlockEntity entity = new UpwardFallingBlockEntity(TYPE.get(), level); entity.entityData.set(DATA_BLOCK_STATE, state); + entity.breaksOnLeaves = breaksOnLeaves; entity.setPos(pos.getX() + 0.5, pos.getY(), pos.getZ() + 0.5); level.addFreshEntity(entity); } @@ -90,21 +96,35 @@ public class UpwardFallingBlockEntity extends Entity { BlockPos headPos = BlockPos.containing(getX(), getY() + getBbHeight(), getZ()); BlockState above = level().getBlockState(headPos); - // Leaves block the entity but can't hold scaffolding — drop as item - if (above.is(BlockTags.LEAVES)) { + // Leaves block the entity but can't hold scaffolding — drop as item, unless this + // instance is allowed to land on leaves like a normal falling block would + if (above.is(BlockTags.LEAVES) && this.breaksOnLeaves) { dropAndRemove(blockState); return; } - boolean hitCeiling = above.isFaceSturdy(level(), headPos, Direction.DOWN); + boolean hitCeiling = !above.isAir() && !above.getCollisionShape(level(), headPos).isEmpty(); boolean hitScaffolding = above.getBlock() instanceof AntimetalScaffoldingBlock; if (hitCeiling || hitScaffolding) { - dropAndRemove(blockState); + placeAtLanding(blockState, headPos.below()); return; } } + private void placeAtLanding(BlockState state, BlockPos landingPos) { + if (!level().isClientSide) { + BlockState existing = level().getBlockState(landingPos); + if (existing.canBeReplaced()) { + level().setBlock(landingPos, state, Block.UPDATE_ALL); + } else { + dropAndRemove(state); + return; + } + } + discard(); + } + private void damageEntitiesAlongPath(BlockState state) { float damage = getImpactDamage(state); if (damage <= 0.0F) { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/AntTeleportHelper.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/AntTeleportHelper.java index 524779ca..a4ecee6c 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/AntTeleportHelper.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/AntTeleportHelper.java @@ -125,6 +125,10 @@ public final class AntTeleportHelper { return InteractionResult.PASS; } + if (!isRightClickDimensionEnabled(entityTypeId)) { + return InteractionResult.PASS; + } + if (entityTypeId.equals(ResourceLocation.fromNamespaceAndPath("antarchy", "brown_ant"))) { return teleportToOrFromConfiguredDimension(player, AntarchySettings.brownAntDestinationDimension()); } @@ -156,6 +160,10 @@ public final class AntTeleportHelper { } static InteractionResult handleInteraction(BaseAntEntity ant, Player player, ItemStack itemStack) { + if (!isRightClickDimensionEnabled(ant)) { + return InteractionResult.PASS; + } + if (ant.requiresActivationReagent() && !ant.isTeleportActivatedState()) { if (!(player instanceof ServerPlayer serverPlayer)) { return InteractionResult.SUCCESS; @@ -184,6 +192,32 @@ public final class AntTeleportHelper { return teleportToOrFromConfiguredDimension(serverPlayer, ant.destinationDimension()); } + static boolean isRightClickDimensionEnabled(BaseAntEntity ant) { + return ant instanceof BrownAntEntity + ? AntarchySettings.brownAntRightClickDimension() + : ant instanceof RedAntEntity + ? AntarchySettings.redAntRightClickDimension() + : ant instanceof RainbowAntEntity + ? AntarchySettings.rainbowAntRightClickDimension() + : ant instanceof TermiteEntity && AntarchySettings.termiteRightClickDimension(); + } + + static boolean isRightClickDimensionEnabled(ResourceLocation entityTypeId) { + if (entityTypeId.equals(ResourceLocation.fromNamespaceAndPath("antarchy", "brown_ant"))) { + return AntarchySettings.brownAntRightClickDimension(); + } + if (entityTypeId.equals(ResourceLocation.fromNamespaceAndPath("antarchy", "red_ant"))) { + return AntarchySettings.redAntRightClickDimension(); + } + if (entityTypeId.equals(ResourceLocation.fromNamespaceAndPath("antarchy", "rainbow_ant"))) { + return AntarchySettings.rainbowAntRightClickDimension(); + } + if (entityTypeId.equals(ResourceLocation.fromNamespaceAndPath("antarchy", "termite"))) { + return AntarchySettings.termiteRightClickDimension(); + } + return true; + } + private static InteractionResult activateTeleport(BaseAntEntity ant, ServerPlayer player, ItemStack stack) { ant.setTeleportActivatedState(true); if (!player.getAbilities().instabuild) { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/BaseAntEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/BaseAntEntity.java index 65151fb6..d60bf92b 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/BaseAntEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/BaseAntEntity.java @@ -158,6 +158,13 @@ public abstract class BaseAntEntity extends Animal implements GeoEntity { super(entityType, level); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, + net.minecraft.world.entity.MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData) { + com.craisinlord.antarchy.content.entity.ConfiguredMobSpawnUtil.applyConfiguredHealth(this, this.configuredMaxHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/RainbowAntEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/RainbowAntEntity.java index 5d6d37b9..430f9aec 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/RainbowAntEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ant/RainbowAntEntity.java @@ -77,6 +77,11 @@ public class RainbowAntEntity extends BaseAntEntity implements GeoEntity { @Override public InteractionResult mobInteract(Player player, InteractionHand hand) { + if (!AntTeleportHelper.isRightClickDimensionEnabled(this)) { + ItemStack heldItem = player.getItemInHand(hand); + return this.isFood(heldItem) ? super.mobInteract(player, hand) : InteractionResult.PASS; + } + if (!AntarchySettings.rainbowAntsLeadToInfinityDimensions() || !InfinityCompat.get().isAvailable()) { return super.mobInteract(player, hand); } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/basilisk/BasiliskEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/basilisk/BasiliskEntity.java index 61abd463..fddfa012 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/basilisk/BasiliskEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/basilisk/BasiliskEntity.java @@ -7,6 +7,7 @@ import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvent; import net.minecraft.util.Mth; @@ -63,6 +64,8 @@ public class BasiliskEntity extends Monster implements GeoEntity { SynchedEntityData.defineId(BasiliskEntity.class, EntityDataSerializers.INT); private static final byte ATTACK_ENTITY_EVENT = 4; private static final int DEATH_TICKS = 25; + private static final String TAG_HISS_COOLDOWN = "BasiliskHissCooldown"; + private static final String TAG_PREY_PETRIFY_COOLDOWN = "BasiliskPreyPetrifyCooldown"; private static final int ANIM_IDLE = 0; private static final int ANIM_WALK = 1; @@ -74,13 +77,15 @@ public class BasiliskEntity extends Monster implements GeoEntity { private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenPlay("attack"); private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlay("death"); - private static final float TURN_RATE_DEG_PER_TICK = 10.0F; + private static final float MIN_TURN_RATE_DEG_PER_TICK = 5.5F; + private static final float MAX_TURN_RATE_DEG_PER_TICK = 13.5F; private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); private int attackAnimTicks = 0; private boolean attackDamagePending = false; private int attackCooldown = 0; + private float committedAttackYaw = Float.NaN; private int hissCooldown = AntarchySettings.basiliskHissCooldownTicks(); private int hissChargeTimer = 0; @@ -110,6 +115,12 @@ public class BasiliskEntity extends Monster implements GeoEntity { .add(Attributes.FOLLOW_RANGE, AntarchySettings.basiliskFollowRange()); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, net.minecraft.world.entity.MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData) { + com.craisinlord.antarchy.content.entity.ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.basiliskHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { if (spawnReason == MobSpawnType.SPAWN_EGG @@ -160,9 +171,12 @@ public class BasiliskEntity extends Monster implements GeoEntity { private void performAoeAttack() { if (this.level().isClientSide) return; - // Start the animation; damage fires later in tick() when attackAnimTicks reaches the damage threshold + this.committedAttackYaw = this.resolveCommittedAttackYaw(); this.attackAnimTicks = AntarchySettings.basiliskAttackAnimTicks(); this.attackDamagePending = true; + this.stopActiveMovement(); + this.lockBodyYaw(this.committedAttackYaw); + this.setAnimationState(ANIM_ATTACK); this.level().broadcastEntityEvent(this, ATTACK_ENTITY_EVENT); } @@ -173,33 +187,42 @@ public class BasiliskEntity extends Monster implements GeoEntity { this.attackDamagePending = false; - Vec3 forward = Vec3.directionFromRotation(0, this.yBodyRot); + float attackYaw = Float.isNaN(this.committedAttackYaw) ? this.yBodyRot : this.committedAttackYaw; + Vec3 forward = Vec3.directionFromRotation(0, attackYaw); Vec3 right = new Vec3(-forward.z, 0, forward.x); - Vec3 origin = this.position(); - double attackReach = AntarchySettings.basiliskAttackReach(); + Vec3 attackOrigin = this.position(); + double attackReach = AntarchySettings.basiliskAttackReach() + 4.0D; + double verticalMin = attackOrigin.y - 0.9D; + double verticalMax = attackOrigin.y + 2.6D; List candidates = this.level().getEntitiesOfClass( LivingEntity.class, - this.getBoundingBox().inflate(Math.max(8.0D, attackReach + 3.5D)), + new AABB(attackOrigin, attackOrigin).inflate(attackReach + 1.5D, 3.0D, attackReach + 1.5D), e -> e != this && e.isAlive() ); - boolean hitAnything = false; for (LivingEntity entity : candidates) { - Vec3 toEntity = entity.position().subtract(origin); + if (!this.canAttack(entity) || this.isAlliedTo(entity) || !this.hasLineOfSight(entity)) { + continue; + } + + AABB entityBox = entity.getBoundingBox(); + if (entityBox.maxY < verticalMin || entityBox.minY > verticalMax) { + continue; + } + + Vec3 toEntity = entityBox.getCenter().subtract(attackOrigin); double fwdDist = toEntity.dot(forward); double sideDist = toEntity.dot(right); - double upDist = toEntity.y; - if (fwdDist >= 2.0 && fwdDist <= 7.0 && Math.abs(sideDist) <= 2.25 && upDist >= -1.0 && upDist <= 3.0) { - if (entity.hurt(AntarchyDamageSources.basiliskBite(serverLevel, this), - (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE))) { - hitAnything = true; - } + double sideAllowance = 1.35D + entity.getBbWidth() * 0.5D + Math.max(0.0D, fwdDist * 0.2D); + if (fwdDist < 1.0D || fwdDist > attackReach || Math.abs(sideDist) > sideAllowance) { + continue; } - } - if (hitAnything) { - this.playSound(AntarchySoundEvents.BASILISK_BITE.get(), 1.1F, 0.95F + this.random.nextFloat() * 0.08F); + entity.hurt( + AntarchyDamageSources.basiliskBite(serverLevel, this), + (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE) + ); } } @@ -210,6 +233,12 @@ public class BasiliskEntity extends Monster implements GeoEntity { if (this.attackAnimTicks > 0) { this.attackAnimTicks--; } + if (this.level() instanceof ServerLevel && this.attackAnimTicks > 0 && !Float.isNaN(this.committedAttackYaw)) { + this.lockBodyYaw(this.committedAttackYaw); + } + if (this.attackAnimTicks <= 0) { + this.committedAttackYaw = Float.NaN; + } if (this.isDeadOrDying()) { this.updateAnimationState(); @@ -228,6 +257,10 @@ public class BasiliskEntity extends Monster implements GeoEntity { } private void tickPlayerPetrification() { + if (this.isCommittedAttackActive()) { + return; + } + if (this.hissChargeTimer > 0) { Player target = this.getPendingPlayerTarget(); if (!this.canMaintainGazeOn(target)) { @@ -236,7 +269,7 @@ public class BasiliskEntity extends Monster implements GeoEntity { return; } - this.getNavigation().stop(); + this.stopActiveMovement(); this.getLookControl().setLookAt(target, 30.0F, 30.0F); this.hissChargeTimer--; if (this.hissChargeTimer == 0) { @@ -274,7 +307,7 @@ public class BasiliskEntity extends Monster implements GeoEntity { this.pendingTargetId = target.getUUID(); this.hissChargeTimer = AntarchySettings.basiliskHissChargeTicks(); this.hissCooldown = AntarchySettings.basiliskHissCooldownTicks(); - this.getNavigation().stop(); + this.stopActiveMovement(); this.getLookControl().setLookAt(target, 30.0F, 30.0F); } @@ -284,7 +317,7 @@ public class BasiliskEntity extends Monster implements GeoEntity { return; } - if (this.getTarget() != null || this.hissChargeTimer > 0) { + if (this.getTarget() != null || this.hissChargeTimer > 0 || this.isCommittedAttackActive()) { return; } @@ -447,17 +480,34 @@ public class BasiliskEntity extends Monster implements GeoEntity { public void die(DamageSource damageSource) { if (!this.level().isClientSide) { this.setAnimationState(ANIM_DEATH); - this.attackAnimTicks = 0; - this.attackDamagePending = false; - this.attackCooldown = 0; - this.hissChargeTimer = 0; - this.pendingTargetId = null; - this.getNavigation().stop(); + this.resetTransientCombatState(); + this.hissCooldown = AntarchySettings.basiliskHissCooldownTicks(); + this.preyPetrifyCooldown = AntarchySettings.basiliskPreyPetrifyCooldownTicks(); this.setDeltaMovement(Vec3.ZERO); } super.die(damageSource); } + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putInt(TAG_HISS_COOLDOWN, this.hissCooldown); + tag.putInt(TAG_PREY_PETRIFY_COOLDOWN, this.preyPetrifyCooldown); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.hissCooldown = tag.contains(TAG_HISS_COOLDOWN) + ? Math.max(0, tag.getInt(TAG_HISS_COOLDOWN)) + : AntarchySettings.basiliskHissCooldownTicks(); + this.preyPetrifyCooldown = tag.contains(TAG_PREY_PETRIFY_COOLDOWN) + ? Math.max(0, tag.getInt(TAG_PREY_PETRIFY_COOLDOWN)) + : AntarchySettings.basiliskPreyPetrifyCooldownTicks(); + this.resetTransientCombatState(); + this.setAnimationState(ANIM_IDLE); + } + @Override protected void tickDeath() { this.deathTime++; @@ -555,7 +605,54 @@ public class BasiliskEntity extends Monster implements GeoEntity { return 0.7F; } - /** Limits body rotation to TURN_RATE_DEG_PER_TICK so the long snake turns gradually. */ + private boolean isCommittedAttackActive() { + return this.attackAnimTicks > 0; + } + + private boolean isBusyWithAction() { + return this.hissChargeTimer > 0 || this.isCommittedAttackActive(); + } + + private float resolveCommittedAttackYaw() { + LivingEntity target = this.getTarget(); + if (target != null) { + Vec3 toTarget = target.position().subtract(this.position()); + if (toTarget.horizontalDistanceSqr() > 1.0E-6D) { + return (float)(Mth.atan2(toTarget.z, toTarget.x) * (180.0D / Math.PI)) - 90.0F; + } + } + return this.yBodyRot; + } + + private void lockBodyYaw(float yaw) { + this.setYRot(yaw); + this.yRotO = yaw; + this.yBodyRot = yaw; + this.yBodyRotO = yaw; + this.yHeadRot = yaw; + this.yHeadRotO = yaw; + } + + private void stopActiveMovement() { + this.getNavigation().stop(); + if (this.getMoveControl() instanceof BasiliskMoveControl moveControl) { + moveControl.halt(); + } + this.setSpeed(0.0F); + this.setZza(0.0F); + } + + private void resetTransientCombatState() { + this.attackAnimTicks = 0; + this.attackDamagePending = false; + this.attackCooldown = 0; + this.committedAttackYaw = Float.NaN; + this.hissChargeTimer = 0; + this.pendingTargetId = null; + this.stopActiveMovement(); + } + + /** Scales turn rate by intended movement speed so the long body pivots tighter when slow and wider when fast. */ private static final class BasiliskMoveControl extends MoveControl { private BasiliskMoveControl(Mob mob) { super(mob); @@ -568,6 +665,10 @@ public class BasiliskEntity extends Monster implements GeoEntity { @Override public void tick() { + if (((BasiliskEntity) this.mob).isBusyWithAction()) { + this.mob.setZza(0.0F); + return; + } if (this.operation == MoveControl.Operation.MOVE_TO) { this.operation = MoveControl.Operation.WAIT; double dx = this.wantedX - this.mob.getX(); @@ -577,12 +678,20 @@ public class BasiliskEntity extends Monster implements GeoEntity { this.mob.setZza(0.0F); return; } + float turnRate = this.getDynamicTurnRate(); float targetYaw = (float)(Mth.atan2(dz, dx) * (180.0 / Math.PI)) - 90.0F; - this.mob.setYRot(this.rotlerp(this.mob.getYRot(), targetYaw, TURN_RATE_DEG_PER_TICK)); + this.mob.setYRot(this.rotlerp(this.mob.getYRot(), targetYaw, turnRate)); this.mob.setSpeed((float)(this.speedModifier * this.mob.getAttributeValue(Attributes.MOVEMENT_SPEED))); this.mob.setZza(1.0F); } } + + private float getDynamicTurnRate() { + double baseSpeed = Math.max(0.01D, this.mob.getAttributeValue(Attributes.MOVEMENT_SPEED)); + double intendedSpeed = Math.max(0.0D, this.speedModifier * baseSpeed); + double normalizedSpeed = Mth.clamp(intendedSpeed / (baseSpeed * 1.2D), 0.0D, 1.0D); + return Mth.lerp((float) normalizedSpeed, MAX_TURN_RATE_DEG_PER_TICK, MIN_TURN_RATE_DEG_PER_TICK); + } } private final class PersistentNearestAttackableTargetGoal extends NearestAttackableTargetGoal { @@ -599,6 +708,11 @@ public class BasiliskEntity extends Monster implements GeoEntity { @Override public void tick() { + if (BasiliskEntity.this.hissChargeTimer > 0 || BasiliskEntity.this.attackAnimTicks > 0) { + this.stopMovement(); + return; + } + LivingEntity target = BasiliskEntity.this.getTarget(); if (target != null) { BasiliskEntity.this.getLookControl().setLookAt(target, 30.0F, 30.0F); @@ -607,11 +721,6 @@ public class BasiliskEntity extends Monster implements GeoEntity { // super handles path recalc and cooldown timer super.tick(); - if (BasiliskEntity.this.hissChargeTimer > 0 || BasiliskEntity.this.attackAnimTicks > 0) { - this.stopMovement(); - return; - } - if (target != null && BasiliskEntity.this.isWithinMeleeAttackRange(target)) { this.stopMovement(); this.checkAndPerformAttack(target); @@ -619,14 +728,14 @@ public class BasiliskEntity extends Monster implements GeoEntity { } private void stopMovement() { - BasiliskEntity.this.getNavigation().stop(); - ((BasiliskMoveControl) BasiliskEntity.this.getMoveControl()).halt(); - BasiliskEntity.this.setSpeed(0.0F); - BasiliskEntity.this.setZza(0.0F); + BasiliskEntity.this.stopActiveMovement(); } @Override public boolean canUse() { + if (BasiliskEntity.this.isBusyWithAction()) { + return false; + } LivingEntity target = BasiliskEntity.this.getTarget(); if (target == null || !target.isAlive()) return false; if (target instanceof Player p && (p.isCreative() || p.isSpectator())) return false; @@ -636,7 +745,7 @@ public class BasiliskEntity extends Monster implements GeoEntity { @Override public void start() { LivingEntity target = BasiliskEntity.this.getTarget(); - if (target != null) { + if (target != null && !BasiliskEntity.this.isBusyWithAction()) { BasiliskEntity.this.getNavigation().moveTo(target, 1.2D); } BasiliskEntity.this.setAggressive(true); @@ -644,7 +753,14 @@ public class BasiliskEntity extends Monster implements GeoEntity { @Override public boolean canContinueToUse() { - return BasiliskEntity.this.attackAnimTicks > 0 || super.canContinueToUse(); + return BasiliskEntity.this.isBusyWithAction() || super.canContinueToUse(); + } + + @Override + public void stop() { + super.stop(); + BasiliskEntity.this.setAggressive(false); + this.stopMovement(); } @Override diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/cloud_shark/CloudSharkEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/cloud_shark/CloudSharkEntity.java index 4c9c26d0..71b5983f 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/cloud_shark/CloudSharkEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/cloud_shark/CloudSharkEntity.java @@ -111,6 +111,12 @@ public class CloudSharkEntity extends Monster implements GeoEntity { .add(Attributes.KNOCKBACK_RESISTANCE, AntarchySettings.cloudSharkKnockbackResistance()); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, net.minecraft.world.entity.MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData) { + com.craisinlord.antarchy.content.entity.ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.cloudSharkHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { return level.getDifficulty() != Difficulty.PEACEFUL diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/flying_squirrel/FlyingSquirrelEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/flying_squirrel/FlyingSquirrelEntity.java index 259bdbb7..cd253311 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/flying_squirrel/FlyingSquirrelEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/flying_squirrel/FlyingSquirrelEntity.java @@ -6,6 +6,7 @@ import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.block.OuranwoodAcornBlock; import com.craisinlord.antarchy.content.block.OuranwoodLeavesBlock; +import com.mojang.logging.LogUtils; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.particles.ItemParticleOption; @@ -54,12 +55,14 @@ import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; import software.bernie.geckolib.animation.*; import software.bernie.geckolib.animation.AnimationState; import software.bernie.geckolib.util.GeckoLibUtil; +import org.slf4j.Logger; import java.util.EnumSet; import java.util.Optional; import java.util.UUID; public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { + private static final Logger LOGGER = LogUtils.getLogger(); private static final ResourceKey ELYTHIA_DIMENSION = ResourceKey.create( Registries.DIMENSION, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "elythia") @@ -81,6 +84,8 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { SynchedEntityData.defineId(FlyingSquirrelEntity.class, EntityDataSerializers.OPTIONAL_UUID); private static final String PICKUP_ANIM_TICKS_KEY = "PickupAnimTicks"; + private static final String QUIRK_TICKS_KEY = "QuirkTicks"; + private static final String QUIRK_VARIANT_KEY = "QuirkVariant"; private static final String TEXTURE_VARIANT_KEY = "TextureVariant"; private static final String GLIDE_DIR_X_KEY = "GlideDirX"; private static final String GLIDE_DIR_Y_KEY = "GlideDirY"; @@ -129,6 +134,9 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { private static final RawAnimation CLIMB_ANIM = RawAnimation.begin().thenLoop("climbing"); private static final RawAnimation GLIDE_ANIM = RawAnimation.begin().thenLoop("gliding"); private static final RawAnimation PICKUP_ANIM = RawAnimation.begin().thenPlay("item_pickup"); + private static final String QUIRK_CONTROLLER = "quirk_controller"; + private static final String QUIRK_1_TRIGGER = "quirk1"; + private static final String QUIRK_2_TRIGGER = "quirk2"; private static final RawAnimation QUIRK_1_ANIM = RawAnimation.begin().thenPlay("quirk1"); private static final RawAnimation QUIRK_2_ANIM = RawAnimation.begin().thenPlay("quirk2"); @@ -178,11 +186,13 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { private ItemEntity cachedNutItem; @Nullable private BlockPos cachedHarvestableAcorn; - private int quirkCooldownTicks = MIN_QUIRK_COOLDOWN_TICKS; + private int quirkCooldownTicks; + private int lastTriggeredQuirkVariant = QUIRK_NONE; public FlyingSquirrelEntity(EntityType entityType, Level level) { super(entityType, level); this.setPathfindingMalus(PathType.LEAVES, -2.0F); + this.quirkCooldownTicks = this.nextQuirkCooldown(); } @Override @@ -253,9 +263,16 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { controllers.add(new AnimationController<>(this, "main_controller", 5, this::mainAnimController)); + controllers.add(new AnimationController<>(this, QUIRK_CONTROLLER, 0, state -> PlayState.STOP) + .triggerableAnim(QUIRK_1_TRIGGER, QUIRK_1_ANIM) + .triggerableAnim(QUIRK_2_TRIGGER, QUIRK_2_ANIM)); } private PlayState mainAnimController(AnimationState state) { + if (this.hasActiveQuirkAnimation()) { + return PlayState.STOP; + } + if (this.isPickingUpNut()) { return state.setAndContinue(PICKUP_ANIM); } @@ -273,11 +290,6 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { return state.setAndContinue(CLIMB_ANIM); } - if (this.getQuirkTicks() > 0) { - state.getController().setAnimationSpeed(1.0D); - return state.setAndContinue(this.getQuirkVariant() == QUIRK_2 ? QUIRK_2_ANIM : QUIRK_1_ANIM); - } - Vec3 motion = this.getDeltaMovement(); double horizontalSpeed = motion.horizontalDistanceSqr(); if (!this.isGliding() && !this.isClimbingTrunk() && motion.horizontalDistanceSqr() > 1.0E-4D) { @@ -303,6 +315,8 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { public void addAdditionalSaveData(CompoundTag tag) { super.addAdditionalSaveData(tag); tag.putInt(PICKUP_ANIM_TICKS_KEY, this.pickupAnimTicks); + tag.putInt(QUIRK_TICKS_KEY, this.getQuirkTicks()); + tag.putInt(QUIRK_VARIANT_KEY, this.getQuirkVariant()); tag.putInt(TEXTURE_VARIANT_KEY, this.getTextureVariant()); if (this.glideDirection != null) { tag.putDouble(GLIDE_DIR_X_KEY, this.glideDirection.x); @@ -316,6 +330,8 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { super.readAdditionalSaveData(tag); this.pickupAnimTicks = Math.max(0, tag.getInt(PICKUP_ANIM_TICKS_KEY)); this.setPickingUpNut(this.pickupAnimTicks > 0); + this.setQuirkTicks(Math.max(0, tag.getInt(QUIRK_TICKS_KEY))); + this.setQuirkVariant(tag.contains(QUIRK_VARIANT_KEY) ? tag.getInt(QUIRK_VARIANT_KEY) : QUIRK_NONE); if (tag.contains(TEXTURE_VARIANT_KEY)) { this.setTextureVariant(tag.getInt(TEXTURE_VARIANT_KEY)); } else { @@ -388,6 +404,7 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { if (!this.level().isClientSide) { this.tickPickupAnimation(); this.tickQuirkAnimation(); + this.syncQuirkAnimationTrigger(); if (this.isClimbingToShoulder()) { Player shoulderPlayer = this.shoulderPlayerId != null @@ -467,6 +484,9 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { this.tickIdleStallLogging(horizontalSpeed); } + if (this.level().isClientSide) { + this.syncQuirkAnimationTrigger(); + } if (this.isOnShoulder() && this.level().isClientSide) { Player shoulderPlayer = this.getShoulderPlayer(); if (shoulderPlayer != null) { @@ -647,6 +667,7 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { @Nullable public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData spawnGroupData) { SpawnGroupData finalized = super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData); + com.craisinlord.antarchy.content.entity.ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.flyingSquirrelHealth()); this.assignRandomTextureVariant(); this.stopGliding("spawn_initialized"); this.wanderCooldown = 40 + this.random.nextInt(60); @@ -791,14 +812,38 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { int variant = this.random.nextBoolean() ? QUIRK_1 : QUIRK_2; this.setQuirkVariant(variant); this.setQuirkTicks(variant == QUIRK_1 ? QUIRK_1_DURATION_TICKS : QUIRK_2_DURATION_TICKS); + LOGGER.info("FlyingSquirrel animation selected={} tick={}", variant == QUIRK_2 ? QUIRK_2_TRIGGER : QUIRK_1_TRIGGER, this.tickCount); this.quirkCooldownTicks = this.nextQuirkCooldown(); } private void stopQuirkAnimation() { + if (this.getQuirkVariant() != QUIRK_NONE || this.getQuirkTicks() > 0) { + LOGGER.info("FlyingSquirrel animation state cleared variant={} tick={}", this.getQuirkVariant(), this.tickCount); + } this.setQuirkTicks(0); this.setQuirkVariant(QUIRK_NONE); } + private void syncQuirkAnimationTrigger() { + int quirkVariant = this.getQuirkVariant(); + if (quirkVariant != QUIRK_NONE && this.getQuirkTicks() > 0 && this.lastTriggeredQuirkVariant != quirkVariant) { + String triggerName = quirkVariant == QUIRK_2 ? QUIRK_2_TRIGGER : QUIRK_1_TRIGGER; + if (!this.level().isClientSide) { + LOGGER.info("FlyingSquirrel triggerAnim called={} tick={}", triggerName, this.tickCount); + } + this.triggerAnim(QUIRK_CONTROLLER, triggerName); + this.lastTriggeredQuirkVariant = quirkVariant; + return; + } + if (quirkVariant == QUIRK_NONE) { + this.lastTriggeredQuirkVariant = QUIRK_NONE; + } + } + + private boolean hasActiveQuirkAnimation() { + return this.getQuirkVariant() != QUIRK_NONE && this.getQuirkTicks() > 0; + } + private int nextQuirkCooldown() { return MIN_QUIRK_COOLDOWN_TICKS + this.random.nextInt(MAX_QUIRK_COOLDOWN_TICKS - MIN_QUIRK_COOLDOWN_TICKS + 1); } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerEntity.java index c772ec0b..e9911fa6 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerEntity.java @@ -4,6 +4,7 @@ import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.advancement.AntarchyAdvancements; import com.craisinlord.antarchy.content.client.particle.GlimmerParticles; +import com.craisinlord.antarchy.content.entity.ConfiguredMobSpawnUtil; import com.craisinlord.antarchy.Antarchy; import net.minecraft.network.chat.Component; import net.minecraft.nbt.CompoundTag; @@ -133,6 +134,7 @@ public class GlimmerEntity extends TamableAnimal implements GeoEntity { public static AttributeSupplier.Builder createAttributes() { return TamableAnimal.createMobAttributes() .add(Attributes.MAX_HEALTH, AntarchySettings.glimmerHealth()) + .add(Attributes.ATTACK_DAMAGE, 1.0D) .add(Attributes.MOVEMENT_SPEED, 0.3D) .add(Attributes.FOLLOW_RANGE, 24.0D); } @@ -443,7 +445,8 @@ public class GlimmerEntity extends TamableAnimal implements GeoEntity { return InteractionResult.CONSUME; } - ItemStack filled = com.craisinlord.antarchy.content.item.GlimmerBottleItem.create(this.getVariant(), this.entityData.get(ABILITY_COOLDOWN)); + ItemStack filled = com.craisinlord.antarchy.content.item.GlimmerBottleItem.create( + this.getVariant(), this.entityData.get(ABILITY_COOLDOWN), this.entityData.get(SHEAR_COOLDOWN)); ItemStack result = net.minecraft.world.item.ItemUtils.createFilledResult(stack, player, filled); player.setItemInHand(hand, result); this.playSound(net.minecraft.sounds.SoundEvents.BOTTLE_FILL, 1.0F, 1.0F); @@ -460,6 +463,7 @@ public class GlimmerEntity extends TamableAnimal implements GeoEntity { @Nullable public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData spawnGroupData) { SpawnGroupData result = super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData); + com.craisinlord.antarchy.content.entity.ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.glimmerHealth()); if (!this.variantLocked) { this.setVariant(selectNaturalVariant(level, this.blockPosition())); this.variantLocked = true; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/TentacleEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/TentacleEntity.java index 15e842c3..0f301535 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/TentacleEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/TentacleEntity.java @@ -31,6 +31,7 @@ import java.util.UUID; public class TentacleEntity extends Mob implements GeoEntity { private static final RawAnimation GRASP_ANIM = RawAnimation.begin().thenLoop("animation"); + private static final float SPAWN_SOUND_VOLUME = 0.35F; private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); private int lifetimeTicks; @@ -82,7 +83,7 @@ public class TentacleEntity extends Mob implements GeoEntity { tentacle.ownerId = owner.getUUID(); } level.addFreshEntity(tentacle); - level.playSound(null, pos.x, pos.y, pos.z, AntarchySoundEvents.KRAKEN_ATTACK.get(), SoundSource.HOSTILE, 1.0F, 1.0F); + level.playSound(null, pos.x, pos.y, pos.z, AntarchySoundEvents.KRAKEN_ATTACK.get(), SoundSource.HOSTILE, SPAWN_SOUND_VOLUME, 1.0F); } @Override diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/lucid/LucidEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/lucid/LucidEntity.java index d5ad5e71..d57c1e9a 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/lucid/LucidEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/lucid/LucidEntity.java @@ -104,6 +104,13 @@ public class LucidEntity extends Monster implements GeoEntity { .add(Attributes.KNOCKBACK_RESISTANCE, AntarchySettings.lucidKnockbackResistance()); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, + MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData) { + com.craisinlord.antarchy.content.entity.ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.lucidHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { return level.getDifficulty() != Difficulty.PEACEFUL @@ -552,4 +559,3 @@ public class LucidEntity extends Monster implements GeoEntity { - diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareBiteEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareBiteEntity.java new file mode 100644 index 00000000..eb12455d --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareBiteEntity.java @@ -0,0 +1,123 @@ +package com.craisinlord.antarchy.content.entity.nightmare; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.EntityDataSerializers; +import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; +import software.bernie.geckolib.animatable.GeoEntity; +import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationController; +import software.bernie.geckolib.animation.AnimationState; +import software.bernie.geckolib.animation.PlayState; +import software.bernie.geckolib.animation.RawAnimation; +import software.bernie.geckolib.util.GeckoLibUtil; + +public class NightmareBiteEntity extends Entity implements GeoEntity { + private static final EntityDataAccessor PHASE_TWO = SynchedEntityData.defineId(NightmareBiteEntity.class, EntityDataSerializers.BOOLEAN); + private static final RawAnimation BITE_ANIM = RawAnimation.begin().thenPlay("bite"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private int ageTicks; + + public NightmareBiteEntity(EntityType entityType, Level level) { + super(entityType, level); + this.setInvulnerable(true); + this.noPhysics = true; + this.noCulling = true; + } + + public static NightmareBiteEntity spawnAt(ServerLevel level, Vec3 pos, float yaw, boolean phaseTwo) { + NightmareBiteEntity bite = new NightmareBiteEntity(AntarchyObjects.NIGHTMARE_BITE.get(), level); + bite.moveTo(pos.x, pos.y, pos.z, yaw, 0.0F); + bite.setPhaseTwo(phaseTwo); + level.addFreshEntity(bite); + return bite; + } + + @Override + protected void defineSynchedData(SynchedEntityData.Builder builder) { + builder.define(PHASE_TWO, false); + } + + @Override + public boolean isInvulnerableTo(DamageSource damageSource) { + return true; + } + + @Override + public boolean fireImmune() { + return true; + } + + @Override + public void lavaHurt() { + } + + @Override + public boolean isPushable() { + return false; + } + + @Override + public boolean canBeCollidedWith() { + return false; + } + + @Override + public boolean isPickable() { + return false; + } + + public boolean isPhaseTwo() { + return this.entityData.get(PHASE_TWO); + } + + private void setPhaseTwo(boolean phaseTwo) { + this.getEntityData().set(PHASE_TWO, phaseTwo); + } + + @Override + public void tick() { + super.tick(); + if (this.level().isClientSide) { + return; + } + if (++this.ageTicks >= 12) { + this.discard(); + } + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + tag.putBoolean("PhaseTwo", this.isPhaseTwo()); + tag.putInt("AgeTicks", this.ageTicks); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + this.setPhaseTwo(tag.getBoolean("PhaseTwo")); + this.ageTicks = tag.getInt("AgeTicks"); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "bite_controller", 0, this::biteController)); + } + + private PlayState biteController(AnimationState state) { + return state.setAndContinue(BITE_ANIM); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java index bc44bf3b..284bf514 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java @@ -5,7 +5,7 @@ import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; - +import com.mojang.logging.LogUtils; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.particles.ParticleTypes; @@ -22,6 +22,7 @@ import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityDimensions; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.Mob; @@ -53,14 +54,19 @@ import software.bernie.geckolib.animation.AnimationState; import software.bernie.geckolib.animation.PlayState; import software.bernie.geckolib.animation.RawAnimation; import software.bernie.geckolib.util.GeckoLibUtil; +import org.slf4j.Logger; import java.util.EnumSet; import java.util.List; public class NightmareEntity extends Monster implements GeoEntity { - + private static final Logger LOGGER = LogUtils.getLogger(); private static final EntityDataAccessor ANIMATION_STATE = SynchedEntityData.defineId(NightmareEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor ACTIVE_SPECIAL_ANIMATION = SynchedEntityData.defineId(NightmareEntity.class, EntityDataSerializers.INT); private static final EntityDataAccessor ROARING = SynchedEntityData.defineId(NightmareEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor PHASE_TWO = SynchedEntityData.defineId(NightmareEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor PHASE_TWO_TEXTURE = SynchedEntityData.defineId(NightmareEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor PHASE_TRANSITIONING = SynchedEntityData.defineId(NightmareEntity.class, EntityDataSerializers.BOOLEAN); private static final String ATTACK_COOLDOWN_KEY = "AttackCooldown"; private static final String ATTACK_ANIMATION_TICKS_KEY = "AttackAnimationTicks"; @@ -70,13 +76,33 @@ public class NightmareEntity extends Monster implements GeoEntity { private static final String INTRO_ROAR_USED_KEY = "IntroRoarUsed"; private static final String TARGETLESS_TICKS_KEY = "TargetlessTicks"; private static final String ANIMATION_STATE_KEY = "AnimationState"; + private static final String ACTIVE_SPECIAL_ANIMATION_KEY = "ActiveSpecialAnimation"; + private static final String PHASE_TWO_KEY = "PhaseTwo"; + private static final String PHASE_TWO_TEXTURE_KEY = "PhaseTwoTexture"; + private static final String PHASE_TRANSITIONING_KEY = "PhaseTransitioning"; + private static final String PHASE_TRANSITION_TICKS_KEY = "PhaseTransitionTicks"; + private static final String PORTAL_COOLDOWN_KEY = "PortalCooldown"; + private static final String PORTAL_ATTACK_TICKS_KEY = "PortalAttackTicks"; + private static final String PORTAL_ATTACK_HIT_KEY = "PortalAttackHitApplied"; + private static final String PORTAL_TRAVEL_TICKS_KEY = "PortalTravelTicks"; + private static final String PORTAL_ENTRY_ID_KEY = "PortalEntryId"; + private static final String PORTAL_EXIT_ID_KEY = "PortalExitId"; + private static final String PORTAL_EXIT_X_KEY = "PortalExitX"; + private static final String PORTAL_EXIT_Y_KEY = "PortalExitY"; + private static final String PORTAL_EXIT_Z_KEY = "PortalExitZ"; private static final int ANIM_IDLE = 0; private static final int ANIM_WALK = 1; private static final int ANIM_FLY = 2; - private static final int ANIM_ATTACK = 3; - private static final int ANIM_FLY_ATTACK = 4; - private static final int ANIM_ROAR = 5; + private static final int SPECIAL_NONE = 0; + private static final int SPECIAL_ATTACK = 1; + private static final int SPECIAL_ATTACK_P2 = 2; + private static final int SPECIAL_FLY_ATTACK = 3; + private static final int SPECIAL_FLY_ATTACK_P2 = 4; + private static final int SPECIAL_ROAR = 5; + private static final int SPECIAL_ROAR_P2 = 6; + private static final int SPECIAL_PHASE_TWO = 7; + private static final int SPECIAL_PORTAL = 8; private static final int ATTACK_TOTAL_TICKS = 20; private static final int ATTACK_DAMAGE_TICK = 10; private static final int INTRO_ROAR_TICKS = 30; @@ -88,6 +114,13 @@ public class NightmareEntity extends Monster implements GeoEntity { private static final int WEAKNESS_TICKS = 100; private static final int BLOCK_BREAK_TICKS = 10; private static final int FLIGHT_CEILING_CLEARANCE_BLOCKS = 4; + private static final int PHASE_TWO_TRANSITION_TICKS = 80; + private static final int PHASE_TWO_TEXTURE_SWAP_TICKS = 53; + private static final int PORTAL_TOTAL_TICKS = 28; + private static final int PORTAL_TELEPORT_TICK = 12; + private static final int PORTAL_DAMAGE_TICK = 18; + private static final int PORTAL_TRAVEL_INVULNERABLE_TICKS = 8; + private static final int PORTAL_LIFETIME_TICKS = 60; private static final double PATROL_SPEED = 0.34D; private static final double COMBAT_FLIGHT_SPEED = 0.725D; @@ -95,16 +128,47 @@ public class NightmareEntity extends Monster implements GeoEntity { private static final double ATTACK_START_RANGE_SQR = 42.25D; private static final double ATTACK_REACH_RADIUS = 2.65D; private static final double ATTACK_COMMIT_HORIZONTAL_RANGE = 4.2D; - private static final double FLIGHT_ENGAGE_RANGE_SQR = 100.0D; - private static final double FLIGHT_DISENGAGE_RANGE_SQR = 36.0D; + private static final double ATTACK_COMMIT_HORIZONTAL_RANGE_SQR = ATTACK_COMMIT_HORIZONTAL_RANGE * ATTACK_COMMIT_HORIZONTAL_RANGE; + private static final double FLIGHT_ENGAGE_RANGE_SQR = 42.25D; + private static final double FLIGHT_DISENGAGE_RANGE_SQR = 20.25D; + private static final double FLIGHT_ATTACK_RANGE_SQR = 49.0D; private static final double ROAR_RETRY_DISTANCE_SQR = 400.0D; + private static final double PHASE_TWO_HEALTH_FRACTION = 0.5D; + private static final double PORTAL_RANGE = 32.0D; + private static final double PORTAL_MIN_RANGE_SQR = 49.0D; + private static final double PORTAL_EXIT_OFFSET = 2.35D; + private static final double PORTAL_TRANSPORT_RADIUS = 1.25D; + private static final double FLYING_APPROACH_STRAFE_OFFSET = 2.1D; + private static final double FLYING_APPROACH_HEIGHT = 0.45D; + private static final double FLYING_APPROACH_HEIGHT_PHASE_TWO = 0.8D; + private static final double FLYING_APPROACH_TOO_CLOSE_RANGE_SQR = 9.0D; + private static final double ANIMATION_MOVEMENT_THRESHOLD_SQR = 0.01D; private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); private static final RawAnimation FLY_ANIM = RawAnimation.begin().thenLoop("fly"); - private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenPlay("attack").thenLoop("idle"); - private static final RawAnimation FLY_ATTACK_ANIM = RawAnimation.begin().thenPlay("attack2").thenLoop("fly"); - private static final RawAnimation ROAR_ANIM = RawAnimation.begin().thenPlay("roar").thenLoop("idle"); + private static final RawAnimation PHASE_TWO_IDLE_ANIM = RawAnimation.begin().thenLoop("idle_P2"); + private static final RawAnimation PHASE_TWO_WALK_ANIM = RawAnimation.begin().thenLoop("walk_P2"); + private static final RawAnimation PHASE_TWO_FLY_ANIM = RawAnimation.begin().thenLoop("fly_P2"); + private static final String LOCOMOTION_CONTROLLER = "main_controller"; + private static final String SPECIAL_CONTROLLER = "special_controller"; + private static final String SPECIAL_ATTACK_TRIGGER = "attack"; + private static final String SPECIAL_ATTACK_P2_TRIGGER = "attack_P2"; + private static final String SPECIAL_FLY_ATTACK_TRIGGER = "attack2"; + private static final String SPECIAL_FLY_ATTACK_P2_TRIGGER = "attack2_P2"; + private static final String SPECIAL_ROAR_TRIGGER = "roar"; + private static final String SPECIAL_ROAR_P2_TRIGGER = "roar_P2"; + private static final String SPECIAL_PHASE_TWO_TRIGGER = "phase2"; + private static final String SPECIAL_PORTAL_TRIGGER = "portal_out"; + private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenPlayAndHold("attack"); + private static final RawAnimation ATTACK_P2_ANIM = RawAnimation.begin().thenPlayAndHold("attack_P2"); + private static final RawAnimation FLY_ATTACK_ANIM = RawAnimation.begin().thenPlayAndHold("attack2"); + private static final RawAnimation FLY_ATTACK_P2_ANIM = RawAnimation.begin().thenPlayAndHold("attack2_P2"); + private static final RawAnimation ROAR_ANIM = RawAnimation.begin().thenPlayAndHold("roar"); + private static final RawAnimation ROAR_P2_ANIM = RawAnimation.begin().thenPlayAndHold("roar_P2"); + private static final RawAnimation PHASE_TWO_TRANSITION_ANIM = RawAnimation.begin().thenPlayAndHold("phase2"); + private static final RawAnimation PORTAL_ATTACK_ANIM = RawAnimation.begin().thenPlayAndHold("portal_out"); + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); private int attackCooldown; @@ -117,9 +181,20 @@ public class NightmareEntity extends Monster implements GeoEntity { private int groundMoveTicks; private int wingFlapCooldown; private int blockBreakCooldown; + private int phaseTransitionTicks; + private int portalCooldown; + private int portalAttackTicks; + private int portalTravelTicks; private boolean attackHitApplied; private boolean introRoarUsed; private boolean flyingToTarget; + private boolean portalAttackHitApplied; + private int lastTriggeredSpecialAnimation = SPECIAL_NONE; + private Vec3 portalExitPos; + @Nullable + private NightmarePortalEntity entryPortal; + @Nullable + private NightmarePortalEntity exitPortal; public NightmareEntity(EntityType entityType, Level level) { super(entityType, level); @@ -138,6 +213,13 @@ public class NightmareEntity extends Monster implements GeoEntity { .add(Attributes.ARMOR, 8.0D); } + @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(ServerLevelAccessor level, net.minecraft.world.DifficultyInstance difficulty, + MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData spawnData) { + com.craisinlord.antarchy.content.entity.ConfiguredMobSpawnUtil.applyConfiguredHealth(this, AntarchySettings.nightmareHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { boolean sturdy = level.getBlockState(pos.below()).isFaceSturdy(level, pos.below(), Direction.UP); boolean posEmpty = level.isEmptyBlock(pos); @@ -149,17 +231,23 @@ public class NightmareEntity extends Monster implements GeoEntity { protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); builder.define(ANIMATION_STATE, ANIM_IDLE); + builder.define(ACTIVE_SPECIAL_ANIMATION, SPECIAL_NONE); builder.define(ROARING, false); + builder.define(PHASE_TWO, false); + builder.define(PHASE_TWO_TEXTURE, false); + builder.define(PHASE_TRANSITIONING, false); } @Override protected void registerGoals() { - this.goalSelector.addGoal(1, new NightmareRoarGoal()); - this.goalSelector.addGoal(2, new NightmareFlyToTargetGoal()); - this.goalSelector.addGoal(3, new NightmareMeleeGoal()); - this.goalSelector.addGoal(5, new LookAtPlayerGoal(this, Player.class, 16.0F)); - this.goalSelector.addGoal(6, new RandomLookAroundGoal(this)); - this.goalSelector.addGoal(7, new NightmareWanderGoal()); + this.goalSelector.addGoal(1, new NightmarePhaseTransitionGoal()); + this.goalSelector.addGoal(2, new NightmarePortalGoal()); + this.goalSelector.addGoal(3, new NightmareRoarGoal()); + this.goalSelector.addGoal(4, new NightmareFlyToTargetGoal()); + this.goalSelector.addGoal(5, new NightmareMeleeGoal()); + this.goalSelector.addGoal(7, new LookAtPlayerGoal(this, Player.class, 16.0F)); + this.goalSelector.addGoal(8, new RandomLookAroundGoal(this)); + this.goalSelector.addGoal(9, new NightmareWanderGoal()); this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, this::canTargetEntity)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Mob.class, 10, true, false, this::canTargetEntity)); @@ -167,22 +255,29 @@ public class NightmareEntity extends Monster implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "main_controller", 0, this::mainAnimController)); + controllers.add(new AnimationController<>(this, LOCOMOTION_CONTROLLER, 0, this::mainAnimController)); + controllers.add(new AnimationController<>(this, SPECIAL_CONTROLLER, 0, state -> PlayState.STOP) + .triggerableAnim(SPECIAL_ATTACK_TRIGGER, ATTACK_ANIM) + .triggerableAnim(SPECIAL_ATTACK_P2_TRIGGER, ATTACK_P2_ANIM) + .triggerableAnim(SPECIAL_FLY_ATTACK_TRIGGER, FLY_ATTACK_ANIM) + .triggerableAnim(SPECIAL_FLY_ATTACK_P2_TRIGGER, FLY_ATTACK_P2_ANIM) + .triggerableAnim(SPECIAL_ROAR_TRIGGER, ROAR_ANIM) + .triggerableAnim(SPECIAL_ROAR_P2_TRIGGER, ROAR_P2_ANIM) + .triggerableAnim(SPECIAL_PHASE_TWO_TRIGGER, PHASE_TWO_TRANSITION_ANIM) + .triggerableAnim(SPECIAL_PORTAL_TRIGGER, PORTAL_ATTACK_ANIM)); } private PlayState mainAnimController(AnimationState state) { + if (this.hasActiveSpecialAnimation()) { + return PlayState.STOP; + } int animState = this.getAnimationState(); - state.getController().setAnimationSpeed(switch (animState) { - case ANIM_FLY -> 0.45D; - default -> 1.0D; - }); + state.getController().setAnimationSpeed(animState == ANIM_FLY ? 0.45D : 1.0D); + boolean phaseTwo = this.isPhaseTwo(); return switch (animState) { - case ANIM_WALK -> state.setAndContinue(WALK_ANIM); - case ANIM_FLY -> state.setAndContinue(FLY_ANIM); - case ANIM_ATTACK -> state.setAndContinue(ATTACK_ANIM); - case ANIM_FLY_ATTACK -> state.setAndContinue(FLY_ATTACK_ANIM); - case ANIM_ROAR -> state.setAndContinue(ROAR_ANIM); - default -> state.setAndContinue(IDLE_ANIM); + case ANIM_WALK -> state.setAndContinue(phaseTwo ? PHASE_TWO_WALK_ANIM : WALK_ANIM); + case ANIM_FLY -> state.setAndContinue(phaseTwo ? PHASE_TWO_FLY_ANIM : FLY_ANIM); + default -> state.setAndContinue(phaseTwo ? PHASE_TWO_IDLE_ANIM : IDLE_ANIM); }; } @@ -205,6 +300,7 @@ public class NightmareEntity extends Monster implements GeoEntity { super.tick(); if (this.level().isClientSide) { + this.syncSpecialAnimationTrigger(); this.tickClientParticles(); this.updateFlightRotation(); if (this.isRoaring()) { @@ -218,18 +314,20 @@ public class NightmareEntity extends Monster implements GeoEntity { return; } - this.setNoGravity(this.flyingToTarget && !this.isTooCloseToCeiling()); + this.setNoGravity((this.flyingToTarget || this.portalAttackTicks > 0 || this.portalTravelTicks > 0) && !this.isTooCloseToCeiling()); int prevAirborneTicks = this.airborneTicks; this.airborneTicks = this.onGround() ? 0 : this.airborneTicks + 1; if (this.onGround() && prevAirborneTicks > 5) { - this.landingCooldown = 100; + this.landingCooldown = 32; } if (this.attackCooldown > 0) this.attackCooldown--; if (this.roarCooldown > 0) this.roarCooldown--; if (this.blockBreakCooldown > 0) this.blockBreakCooldown--; if (this.landingCooldown > 0) this.landingCooldown--; + if (this.portalCooldown > 0) this.portalCooldown--; + if (this.portalTravelTicks > 0) this.portalTravelTicks--; LivingEntity target = this.getTarget(); if (!this.canTargetEntity(target)) { @@ -248,15 +346,21 @@ public class NightmareEntity extends Monster implements GeoEntity { } if (this.isDeadOrDying()) { + this.clearNightmarePortals(); this.updateFlightRotation(); return; } - if (this.attackAnimationTicks > 0) { + if (this.isPhaseTransitioning()) { + this.tickPhaseTransition(target); + } else if (this.portalAttackTicks > 0) { + this.tickPortalAttack(target); + } else if (this.attackAnimationTicks > 0) { this.tickAttack(target); } this.updateAnimationState(); + this.syncSpecialAnimationTrigger(); this.updateFlightRotation(); } @@ -271,6 +375,27 @@ public class NightmareEntity extends Monster implements GeoEntity { super.travel(travelVector); } + @Override + public boolean hurt(DamageSource source, float amount) { + if (this.isPhaseTransitioning() || this.portalTravelTicks > 0 || this.portalAttackTicks > 0) { + return false; + } + if (!this.isPhaseTwo() && amount > 0.0F) { + float threshold = (float) (this.getMaxHealth() * PHASE_TWO_HEALTH_FRACTION); + if (this.getHealth() > threshold && this.getHealth() - amount <= threshold) { + float clampedAmount = this.getHealth() - threshold; + boolean hurt = clampedAmount > 0.0F && super.hurt(source, clampedAmount); + if (hurt || clampedAmount <= 0.0F) { + this.setHealth(threshold); + this.startPhaseTransition(); + return true; + } + return false; + } + } + return super.hurt(source, amount); + } + @Override public boolean doHurtTarget(Entity target) { if (!(target instanceof LivingEntity livingTarget)) return false; @@ -358,6 +483,26 @@ public class NightmareEntity extends Monster implements GeoEntity { tag.putInt("AirborneTicks", this.airborneTicks); tag.putBoolean("Roaring", this.isRoaring()); tag.putInt(ANIMATION_STATE_KEY, this.getAnimationState()); + tag.putInt(ACTIVE_SPECIAL_ANIMATION_KEY, this.getActiveSpecialAnimation()); + tag.putBoolean(PHASE_TWO_KEY, this.isPhaseTwo()); + tag.putBoolean(PHASE_TWO_TEXTURE_KEY, this.hasPhaseTwoTexture()); + tag.putBoolean(PHASE_TRANSITIONING_KEY, this.isPhaseTransitioning()); + tag.putInt(PHASE_TRANSITION_TICKS_KEY, this.phaseTransitionTicks); + tag.putInt(PORTAL_COOLDOWN_KEY, this.portalCooldown); + tag.putInt(PORTAL_ATTACK_TICKS_KEY, this.portalAttackTicks); + tag.putBoolean(PORTAL_ATTACK_HIT_KEY, this.portalAttackHitApplied); + tag.putInt(PORTAL_TRAVEL_TICKS_KEY, this.portalTravelTicks); + if (this.portalExitPos != null) { + tag.putDouble(PORTAL_EXIT_X_KEY, this.portalExitPos.x); + tag.putDouble(PORTAL_EXIT_Y_KEY, this.portalExitPos.y); + tag.putDouble(PORTAL_EXIT_Z_KEY, this.portalExitPos.z); + } + if (this.entryPortal != null) { + tag.putUUID(PORTAL_ENTRY_ID_KEY, this.entryPortal.getUUID()); + } + if (this.exitPortal != null) { + tag.putUUID(PORTAL_EXIT_ID_KEY, this.exitPortal.getUUID()); + } } @Override @@ -371,8 +516,22 @@ public class NightmareEntity extends Monster implements GeoEntity { this.introRoarUsed = tag.getBoolean(INTRO_ROAR_USED_KEY); this.targetlessTicks = tag.getInt(TARGETLESS_TICKS_KEY); this.airborneTicks = tag.getInt("AirborneTicks"); + this.portalCooldown = tag.getInt(PORTAL_COOLDOWN_KEY); + this.portalAttackTicks = tag.getInt(PORTAL_ATTACK_TICKS_KEY); + this.portalAttackHitApplied = tag.getBoolean(PORTAL_ATTACK_HIT_KEY); + this.portalTravelTicks = tag.getInt(PORTAL_TRAVEL_TICKS_KEY); this.entityData.set(ROARING, tag.getBoolean("Roaring")); this.entityData.set(ANIMATION_STATE, tag.contains(ANIMATION_STATE_KEY) ? tag.getInt(ANIMATION_STATE_KEY) : ANIM_IDLE); + this.entityData.set(ACTIVE_SPECIAL_ANIMATION, tag.contains(ACTIVE_SPECIAL_ANIMATION_KEY) ? tag.getInt(ACTIVE_SPECIAL_ANIMATION_KEY) : SPECIAL_NONE); + this.setPhaseTwo(tag.getBoolean(PHASE_TWO_KEY)); + this.setPhaseTwoTexture(tag.contains(PHASE_TWO_TEXTURE_KEY) ? tag.getBoolean(PHASE_TWO_TEXTURE_KEY) : this.isPhaseTwo() && !this.isPhaseTransitioning()); + this.setPhaseTransitioning(tag.getBoolean(PHASE_TRANSITIONING_KEY)); + this.phaseTransitionTicks = tag.getInt(PHASE_TRANSITION_TICKS_KEY); + if (tag.contains(PORTAL_EXIT_X_KEY)) { + this.portalExitPos = new Vec3(tag.getDouble(PORTAL_EXIT_X_KEY), tag.getDouble(PORTAL_EXIT_Y_KEY), tag.getDouble(PORTAL_EXIT_Z_KEY)); + } else { + this.portalExitPos = null; + } } @Override @@ -381,9 +540,14 @@ public class NightmareEntity extends Monster implements GeoEntity { this.attackAnimationTicks = 0; this.attackCooldown = 0; this.roarTicks = 0; + this.portalAttackTicks = 0; + this.portalTravelTicks = 0; + this.phaseTransitionTicks = 0; + this.clearActiveSpecialAnimation(); this.setRoaring(false); this.setDeltaMovement(Vec3.ZERO); this.getNavigation().stop(); + this.clearNightmarePortals(); } super.die(damageSource); } @@ -405,6 +569,22 @@ public class NightmareEntity extends Monster implements GeoEntity { return this.entityData.get(ANIMATION_STATE); } + public int getActiveSpecialAnimation() { + return this.entityData.get(ACTIVE_SPECIAL_ANIMATION); + } + + public boolean isPhaseTwo() { + return this.entityData.get(PHASE_TWO); + } + + public boolean hasPhaseTwoTexture() { + return this.entityData.get(PHASE_TWO_TEXTURE); + } + + public boolean isPhaseTransitioning() { + return this.entityData.get(PHASE_TRANSITIONING); + } + private void setRoaring(boolean roaring) { this.entityData.set(ROARING, roaring); } @@ -415,13 +595,29 @@ public class NightmareEntity extends Monster implements GeoEntity { } } + private void setActiveSpecialAnimation(int specialAnimation) { + if (this.entityData.get(ACTIVE_SPECIAL_ANIMATION) != specialAnimation) { + this.entityData.set(ACTIVE_SPECIAL_ANIMATION, specialAnimation); + } + } + + private void setPhaseTwo(boolean phaseTwo) { + this.entityData.set(PHASE_TWO, phaseTwo); + } + + private void setPhaseTwoTexture(boolean phaseTwoTexture) { + this.entityData.set(PHASE_TWO_TEXTURE, phaseTwoTexture); + } + + private void setPhaseTransitioning(boolean phaseTransitioning) { + this.entityData.set(PHASE_TRANSITIONING, phaseTransitioning); + } + private boolean shouldStartRoar(LivingEntity target) { if (!this.onGround() || this.roarCooldown > 0 || !this.hasLineOfSight(target)) return false; double distanceSqr = this.distanceToSqr(target); if (distanceSqr > ROAR_RETRY_DISTANCE_SQR || !this.isInFront(target.position(), -0.1D)) return false; - boolean pressureWindow = distanceSqr > ATTACK_START_RANGE_SQR; - boolean wounded = this.getHealth() <= this.getMaxHealth() * 0.5F; - return pressureWindow || wounded; + return distanceSqr > ATTACK_START_RANGE_SQR || this.isPhaseTwo(); } private void startRoar() { @@ -431,6 +627,7 @@ public class NightmareEntity extends Monster implements GeoEntity { this.attackAnimationTicks = 0; this.attackHitApplied = false; this.setRoaring(true); + this.selectSpecialAnimation(this.isPhaseTwo() ? SPECIAL_ROAR_P2 : SPECIAL_ROAR); this.getNavigation().stop(); this.setDeltaMovement(this.getDeltaMovement().scale(0.18D)); this.playSound(AntarchySoundEvents.NIGHTMARE_ROAR.get(), 2.2F, 0.7F + this.random.nextFloat() * 0.06F); @@ -451,6 +648,7 @@ public class NightmareEntity extends Monster implements GeoEntity { if (--this.roarTicks <= 0) { this.roarTicks = 0; this.setRoaring(false); + this.clearActiveSpecialAnimation(); this.attackCooldown = Math.max(this.attackCooldown, 18); } } @@ -459,6 +657,7 @@ public class NightmareEntity extends Monster implements GeoEntity { this.attackAnimationTicks = ATTACK_TOTAL_TICKS; this.attackHitApplied = false; this.attackCooldown = ATTACK_TOTAL_TICKS + 12; + this.selectSpecialAnimation(this.selectAttackSpecialAnimation()); this.getNavigation().stop(); Vec3 lunge = target.getEyePosition().subtract(this.getEyePosition()); if (lunge.lengthSqr() > 1.0E-4D) { @@ -479,13 +678,122 @@ public class NightmareEntity extends Monster implements GeoEntity { if (!this.attackHitApplied && elapsed >= ATTACK_DAMAGE_TICK) { this.attackHitApplied = true; this.playNightmareBiteSound(); + this.spawnBiteEffect(); this.performAttackHit(); } if (--this.attackAnimationTicks <= 0) { this.attackAnimationTicks = 0; + this.clearActiveSpecialAnimation(); } } + private void startPhaseTransition() { + this.setPhaseTwo(true); + this.setPhaseTwoTexture(false); + this.setPhaseTransitioning(true); + this.selectSpecialAnimation(SPECIAL_PHASE_TWO); + this.phaseTransitionTicks = PHASE_TWO_TRANSITION_TICKS; + this.attackAnimationTicks = 0; + this.portalAttackTicks = 0; + this.portalTravelTicks = 0; + this.attackHitApplied = false; + this.portalAttackHitApplied = false; + this.portalExitPos = null; + this.clearNightmarePortals(); + this.getNavigation().stop(); + this.setRoaring(false); + this.setDeltaMovement(Vec3.ZERO); + this.roarCooldown = Math.max(this.roarCooldown, 80); + this.portalCooldown = Math.max(this.portalCooldown, 140); + } + + private void tickPhaseTransition(@Nullable LivingEntity target) { + this.getNavigation().stop(); + this.setDeltaMovement(this.getDeltaMovement().scale(0.45D)); + this.getMoveControl().setWantedPosition(this.getX(), this.getY(), this.getZ(), 0.0D); + if (target != null) { + this.getLookControl().setLookAt(target, 35.0F, 20.0F); + } + if (this.phaseTransitionTicks % 8 == 0 && this.level() instanceof ServerLevel serverLevel) { + serverLevel.sendParticles(ParticleTypes.SOUL_FIRE_FLAME, this.getX(), this.getY() + 1.9D, this.getZ(), 12, 1.0D, 0.7D, 1.0D, 0.01D); + serverLevel.sendParticles(ParticleTypes.SMOKE, this.getX(), this.getY() + 1.9D, this.getZ(), 10, 0.8D, 0.5D, 0.8D, 0.02D); + } + if (!this.hasPhaseTwoTexture() && PHASE_TWO_TRANSITION_TICKS - this.phaseTransitionTicks >= PHASE_TWO_TEXTURE_SWAP_TICKS) { + this.setPhaseTwoTexture(true); + } + if (--this.phaseTransitionTicks <= 0) { + this.phaseTransitionTicks = 0; + this.setPhaseTwoTexture(true); + this.setPhaseTransitioning(false); + this.clearActiveSpecialAnimation(); + this.attackCooldown = Math.max(this.attackCooldown, 18); + } + } + + private boolean canStartPortalAttack(LivingEntity target) { + if (!this.isPhaseTwo() || this.isPhaseTransitioning() || this.portalCooldown > 0 || this.attackAnimationTicks > 0 || this.roarTicks > 0) return false; + if (!this.hasLineOfSight(target) || this.distanceToSqr(target) > PORTAL_RANGE * PORTAL_RANGE) return false; + if (this.horizontalDistanceToSqr(target) < PORTAL_MIN_RANGE_SQR) return false; + return this.portalAttackTicks <= 0 && this.findPortalExitPos(target) != null; + } + + private void startPortalAttack(LivingEntity target) { + Vec3 exitPos = this.findPortalExitPos(target); + if (exitPos == null || !(this.level() instanceof ServerLevel serverLevel)) return; + this.clearNightmarePortals(); + this.portalExitPos = exitPos; + this.portalAttackTicks = PORTAL_TOTAL_TICKS; + this.portalTravelTicks = 0; + this.portalAttackHitApplied = false; + this.attackAnimationTicks = 0; + this.attackHitApplied = false; + this.attackCooldown = 24; + this.portalCooldown = 180 + this.random.nextInt(100); + this.selectSpecialAnimation(SPECIAL_PORTAL); + this.getNavigation().stop(); + this.entryPortal = NightmarePortalEntity.spawnAt(serverLevel, this.position().add(this.getViewVector(1.0F).multiply(1.6D, 0.0D, 1.6D)), this, this.position(), PORTAL_LIFETIME_TICKS); + this.exitPortal = NightmarePortalEntity.spawnAt(serverLevel, exitPos, this, this.position(), PORTAL_LIFETIME_TICKS); + if (this.entryPortal != null && this.exitPortal != null) { + this.entryPortal.linkTo(this.exitPortal); + this.exitPortal.linkTo(this.entryPortal); + } + } + + private void tickPortalAttack(@Nullable LivingEntity target) { + this.getNavigation().stop(); + this.setDeltaMovement(this.getDeltaMovement().scale(0.55D)); + if (target != null) { + this.getLookControl().setLookAt(target, 35.0F, 20.0F); + } + int elapsed = PORTAL_TOTAL_TICKS - this.portalAttackTicks; + if (elapsed == PORTAL_TELEPORT_TICK && this.portalExitPos != null) { + this.executePortalTeleport(target); + } + if (!this.portalAttackHitApplied && elapsed >= PORTAL_DAMAGE_TICK) { + this.portalAttackHitApplied = true; + this.spawnBiteEffect(); + this.performPortalExitHit(); + } + if (--this.portalAttackTicks <= 0) { + this.portalAttackTicks = 0; + this.portalExitPos = null; + this.clearNightmarePortals(); + this.clearActiveSpecialAnimation(); + } + } + + private void executePortalTeleport(@Nullable LivingEntity target) { + if (this.portalExitPos == null) return; + this.portalTravelTicks = PORTAL_TRAVEL_INVULNERABLE_TICKS; + this.setPortalCooldown(); + this.teleportTo(this.portalExitPos.x, this.portalExitPos.y, this.portalExitPos.z); + if (target != null) { + this.faceTowardTarget(target, 180.0F); + } + this.setDeltaMovement(Vec3.ZERO); + this.hasImpulse = true; + } + private void performAttackHit() { AABB hitBox = this.getBoundingBox() .inflate(ATTACK_REACH_RADIUS, 1.5D, ATTACK_REACH_RADIUS) @@ -505,6 +813,38 @@ public class NightmareEntity extends Monster implements GeoEntity { } } + private void performPortalExitHit() { + if (this.portalExitPos == null) return; + AABB hitBox = this.getBoundingBox().move(this.portalExitPos.subtract(this.position())).inflate(1.7D, 1.2D, 1.7D); + float damage = (float) (this.getAttributeValue(Attributes.ATTACK_DAMAGE) * 1.15F); + List victims = this.level().getEntitiesOfClass(LivingEntity.class, hitBox, this::canTargetEntity); + for (LivingEntity victim : victims) { + if (victim.hurt(this.nightmareDamageSource(), damage)) { + this.spawnBiteEffectAt(victim); + this.applyNightmareStrikeEffects(victim); + this.knockAway(victim, 1.35D, 0.35D); + } + } + if (this.level() instanceof ServerLevel serverLevel) { + serverLevel.sendParticles(ParticleTypes.SOUL_FIRE_FLAME, this.portalExitPos.x, this.portalExitPos.y + 1.0D, this.portalExitPos.z, 18, 0.9D, 0.45D, 0.9D, 0.02D); + serverLevel.sendParticles(ParticleTypes.SMOKE, this.portalExitPos.x, this.portalExitPos.y + 1.0D, this.portalExitPos.z, 14, 0.8D, 0.3D, 0.8D, 0.03D); + } + } + + private void spawnBiteEffect() { + if (!(this.level() instanceof ServerLevel serverLevel)) return; + Vec3 forward = this.getViewVector(1.0F).normalize(); + Vec3 spawnPos = this.getEyePosition().add(forward.scale(this.getBbWidth() * 0.65D)).add(0.0D, -0.45D, 0.0D); + NightmareBiteEntity.spawnAt(serverLevel, spawnPos, this.getYRot(), this.isPhaseTwo()); + } + + private void spawnBiteEffectAt(LivingEntity target) { + if (!(this.level() instanceof ServerLevel serverLevel)) return; + float yaw = target.getYRot() + 180.0F; + Vec3 spawnPos = target.getEyePosition().add(0.0D, -0.35D, 0.0D); + NightmareBiteEntity.spawnAt(serverLevel, spawnPos, yaw, this.isPhaseTwo()); + } + private void playNightmareBiteSound() { this.playSound(AntarchySoundEvents.NIGHTMARE_BITE.get(), 1.3F, 0.72F + this.random.nextFloat() * 0.08F); } @@ -564,19 +904,48 @@ public class NightmareEntity extends Monster implements GeoEntity { return entity instanceof Mob && entity.isAttackable(); } - private boolean shouldUseFlight() { - if (this.landingCooldown > 0) return false; - LivingEntity target = this.getTarget(); - return target != null - && this.distanceToSqr(target) > FLIGHT_ENGAGE_RANGE_SQR - && !this.isTooCloseToCeiling(); - } - private boolean canStartAttackOn(LivingEntity target) { if (!this.hasLineOfSight(target) || this.distanceToSqr(target) > ATTACK_START_RANGE_SQR) return false; double hdSqr = this.horizontalDistanceToSqr(target); double verticalDistance = Math.abs(target.getEyeY() - this.getEyeY()); - return hdSqr <= ATTACK_COMMIT_HORIZONTAL_RANGE * ATTACK_COMMIT_HORIZONTAL_RANGE && verticalDistance <= 4.0D; + return hdSqr <= ATTACK_COMMIT_HORIZONTAL_RANGE_SQR && verticalDistance <= 4.0D; + } + + private boolean shouldUseFlightPressure(LivingEntity target) { + if (target == null || this.isTooCloseToCeiling()) { + return false; + } + double distanceSqr = this.distanceToSqr(target); + double verticalDistance = Math.abs(target.getEyeY() - this.getEyeY()); + if (this.flyingToTarget) { + return distanceSqr > ATTACK_COMMIT_HORIZONTAL_RANGE_SQR || verticalDistance > 1.25D; + } + if (distanceSqr >= FLIGHT_ENGAGE_RANGE_SQR) { + return true; + } + return this.isPhaseTwo() && (distanceSqr >= FLIGHT_DISENGAGE_RANGE_SQR || verticalDistance > 1.5D); + } + + private Vec3 getFlightApproachPosition(LivingEntity target) { + Vec3 toTarget = target.position().subtract(this.position()).multiply(1.0D, 0.0D, 1.0D); + if (toTarget.lengthSqr() < 1.0E-4D) { + toTarget = target.getLookAngle().multiply(1.0D, 0.0D, 1.0D); + } + if (toTarget.lengthSqr() < 1.0E-4D) { + toTarget = this.getViewVector(1.0F).multiply(1.0D, 0.0D, 1.0D); + } + if (toTarget.lengthSqr() < 1.0E-4D) { + toTarget = new Vec3(0.0D, 0.0D, 1.0D); + } + Vec3 forward = toTarget.normalize(); + Vec3 right = new Vec3(-forward.z, 0.0D, forward.x); + double strafe = this.tickCount % 32 < 16 ? FLYING_APPROACH_STRAFE_OFFSET : -FLYING_APPROACH_STRAFE_OFFSET; + double height = this.isPhaseTwo() ? FLYING_APPROACH_HEIGHT_PHASE_TWO : FLYING_APPROACH_HEIGHT; + Vec3 anchor = target.position().subtract(forward.scale(1.4D)).add(right.scale(strafe)); + if (this.horizontalDistanceToSqr(target) <= FLYING_APPROACH_TOO_CLOSE_RANGE_SQR) { + anchor = target.position().subtract(forward.scale(2.4D)); + } + return new Vec3(anchor.x, target.getEyeY() + height, anchor.z); } private double horizontalDistanceToSqr(LivingEntity target) { @@ -608,7 +977,6 @@ public class NightmareEntity extends Monster implements GeoEntity { } } - private boolean isTooCloseToCeiling() { BlockPos current = BlockPos.containing(this.getX(), this.getY(), this.getZ()); for (int i = 1; i <= FLIGHT_CEILING_CLEARANCE_BLOCKS; i++) { @@ -617,8 +985,58 @@ public class NightmareEntity extends Monster implements GeoEntity { return false; } + @Nullable + private Vec3 findPortalExitPos(LivingEntity target) { + Vec3 forward = target.getLookAngle().multiply(1.0D, 0.0D, 1.0D); + if (forward.lengthSqr() < 1.0E-4D) { + forward = this.getViewVector(1.0F).multiply(1.0D, 0.0D, 1.0D); + } + if (forward.lengthSqr() < 1.0E-4D) { + forward = new Vec3(0.0D, 0.0D, 1.0D); + } + forward = forward.normalize(); + Vec3 right = new Vec3(-forward.z, 0.0D, forward.x); + Vec3[] candidates = new Vec3[] { + target.position().subtract(forward.scale(PORTAL_EXIT_OFFSET)), + target.position().subtract(forward.scale(1.4D)).add(right.scale(2.25D)), + target.position().subtract(forward.scale(1.4D)).subtract(right.scale(2.25D)), + target.position().add(forward.scale(2.4D)) + }; + for (Vec3 candidate : candidates) { + Vec3 adjusted = this.findValidPortalPosition(candidate); + if (adjusted != null && adjusted.distanceToSqr(this.position()) <= PORTAL_RANGE * PORTAL_RANGE) { + return adjusted; + } + } + return null; + } + + @Nullable + private Vec3 findValidPortalPosition(Vec3 base) { + EntityDimensions dimensions = this.getType().getDimensions(); + for (int yOffset = 1; yOffset >= -1; yOffset--) { + Vec3 candidate = new Vec3(base.x, base.y + yOffset, base.z); + AABB box = dimensions.makeBoundingBox(candidate); + if (this.level().noCollision(this, box)) { + return candidate; + } + } + return null; + } + + private void clearNightmarePortals() { + if (this.entryPortal != null && this.entryPortal.isAlive()) { + this.entryPortal.discard(); + } + if (this.exitPortal != null && this.exitPortal.isAlive()) { + this.exitPortal.discard(); + } + this.entryPortal = null; + this.exitPortal = null; + } + private void tickClientParticles() { - if ((this.isRoaring() || this.attackAnimationTicks > 0) && this.tickCount % 3 == 0) { + if ((this.isRoaring() || this.attackAnimationTicks > 0 || this.portalAttackTicks > 0 || this.isPhaseTransitioning()) && this.tickCount % 3 == 0) { this.level().addParticle( ParticleTypes.SOUL_FIRE_FLAME, this.getX() + (this.random.nextDouble() - 0.5D) * this.getBbWidth(), @@ -652,14 +1070,7 @@ public class NightmareEntity extends Monster implements GeoEntity { this.wingFlapCooldown = 0; return; } - if (this.isRoaring()) { - this.setAnimationState(ANIM_ROAR); - this.groundMoveTicks = 0; - this.wingFlapCooldown = 0; - return; - } - if (this.attackAnimationTicks > 0) { - this.setAnimationState(this.isNoGravity() || this.airborneTicks >= MIN_AIRBORNE_TICKS_FOR_FLY_ANIM ? ANIM_FLY_ATTACK : ANIM_ATTACK); + if (this.hasActiveSpecialAnimation()) { this.groundMoveTicks = 0; this.tickWingFlapSound(); return; @@ -676,7 +1087,8 @@ public class NightmareEntity extends Monster implements GeoEntity { this.tickWingFlapSound(); return; } - if (this.walkDist - this.walkDistO > 0.005F) { + Vec3 horizontalVelocity = this.getDeltaMovement().multiply(1.0D, 0.0D, 1.0D); + if (horizontalVelocity.lengthSqr() > ANIMATION_MOVEMENT_THRESHOLD_SQR) { this.groundMoveTicks = 6; } if (this.groundMoveTicks > 0) { @@ -705,6 +1117,112 @@ public class NightmareEntity extends Monster implements GeoEntity { this.wingFlapCooldown = 5 + this.random.nextInt(4); } + private boolean hasActiveSpecialAnimation() { + return this.getActiveSpecialAnimation() != SPECIAL_NONE; + } + + private int selectAttackSpecialAnimation() { + boolean flyingAttack = this.isNoGravity() || this.airborneTicks >= MIN_AIRBORNE_TICKS_FOR_FLY_ANIM || this.flyingToTarget; + if (flyingAttack) { + return this.isPhaseTwo() ? SPECIAL_FLY_ATTACK_P2 : SPECIAL_FLY_ATTACK; + } + return this.isPhaseTwo() ? SPECIAL_ATTACK_P2 : SPECIAL_ATTACK; + } + + private void selectSpecialAnimation(int specialAnimation) { + this.setActiveSpecialAnimation(specialAnimation); + if (!this.level().isClientSide) { + LOGGER.info("Nightmare animation selected={} tick={}", this.specialAnimationName(specialAnimation), this.tickCount); + } + } + + private void clearActiveSpecialAnimation() { + int specialAnimation = this.getActiveSpecialAnimation(); + if (specialAnimation != SPECIAL_NONE && !this.level().isClientSide) { + LOGGER.info("Nightmare animation state cleared={} tick={}", this.specialAnimationName(specialAnimation), this.tickCount); + } + this.setActiveSpecialAnimation(SPECIAL_NONE); + } + + private void syncSpecialAnimationTrigger() { + int activeSpecialAnimation = this.getActiveSpecialAnimation(); + if (activeSpecialAnimation != SPECIAL_NONE && this.lastTriggeredSpecialAnimation != activeSpecialAnimation) { + String triggerName = this.specialAnimationTrigger(activeSpecialAnimation); + if (triggerName != null) { + if (!this.level().isClientSide) { + LOGGER.info("Nightmare triggerAnim called={} tick={}", triggerName, this.tickCount); + } + this.triggerAnim(SPECIAL_CONTROLLER, triggerName); + } + this.lastTriggeredSpecialAnimation = activeSpecialAnimation; + return; + } + if (activeSpecialAnimation == SPECIAL_NONE) { + this.lastTriggeredSpecialAnimation = SPECIAL_NONE; + } + } + + @Nullable + private String specialAnimationTrigger(int specialAnimation) { + return switch (specialAnimation) { + case SPECIAL_ATTACK -> SPECIAL_ATTACK_TRIGGER; + case SPECIAL_ATTACK_P2 -> SPECIAL_ATTACK_P2_TRIGGER; + case SPECIAL_FLY_ATTACK -> SPECIAL_FLY_ATTACK_TRIGGER; + case SPECIAL_FLY_ATTACK_P2 -> SPECIAL_FLY_ATTACK_P2_TRIGGER; + case SPECIAL_ROAR -> SPECIAL_ROAR_TRIGGER; + case SPECIAL_ROAR_P2 -> SPECIAL_ROAR_P2_TRIGGER; + case SPECIAL_PHASE_TWO -> SPECIAL_PHASE_TWO_TRIGGER; + case SPECIAL_PORTAL -> SPECIAL_PORTAL_TRIGGER; + default -> null; + }; + } + + private String specialAnimationName(int specialAnimation) { + String triggerName = this.specialAnimationTrigger(specialAnimation); + return triggerName != null ? triggerName : "none"; + } + + private final class NightmarePhaseTransitionGoal extends Goal { + NightmarePhaseTransitionGoal() { + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK, Flag.JUMP)); + } + + @Override + public boolean canUse() { + return NightmareEntity.this.isPhaseTransitioning(); + } + + @Override + public boolean canContinueToUse() { + return NightmareEntity.this.isPhaseTransitioning(); + } + } + + private final class NightmarePortalGoal extends Goal { + NightmarePortalGoal() { + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); + } + + @Override + public boolean canUse() { + LivingEntity target = NightmareEntity.this.getTarget(); + return target != null && NightmareEntity.this.canStartPortalAttack(target); + } + + @Override + public boolean canContinueToUse() { + return NightmareEntity.this.portalAttackTicks > 0; + } + + @Override + public void start() { + LivingEntity target = NightmareEntity.this.getTarget(); + if (target != null) { + NightmareEntity.this.startPortalAttack(target); + } + } + } + private final class NightmareRoarGoal extends Goal { NightmareRoarGoal() { this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); @@ -713,7 +1231,7 @@ public class NightmareEntity extends Monster implements GeoEntity { @Override public boolean canUse() { LivingEntity target = NightmareEntity.this.getTarget(); - return target instanceof Player && NightmareEntity.this.shouldStartRoar(target); + return target instanceof Player && NightmareEntity.this.shouldStartRoar(target) && !NightmareEntity.this.isPhaseTransitioning() && NightmareEntity.this.portalAttackTicks <= 0; } @Override @@ -748,14 +1266,17 @@ public class NightmareEntity extends Monster implements GeoEntity { LivingEntity target = NightmareEntity.this.getTarget(); return target != null && NightmareEntity.this.landingCooldown <= 0 - && NightmareEntity.this.distanceToSqr(target) > FLIGHT_ENGAGE_RANGE_SQR - && !NightmareEntity.this.isTooCloseToCeiling(); + && NightmareEntity.this.shouldUseFlightPressure(target) + && !NightmareEntity.this.isPhaseTransitioning() + && NightmareEntity.this.portalAttackTicks <= 0; } @Override public boolean canContinueToUse() { LivingEntity target = NightmareEntity.this.getTarget(); - return target != null && NightmareEntity.this.distanceToSqr(target) > FLIGHT_DISENGAGE_RANGE_SQR; + return target != null + && NightmareEntity.this.shouldUseFlightPressure(target) + && NightmareEntity.this.portalAttackTicks <= 0; } @Override @@ -766,7 +1287,7 @@ public class NightmareEntity extends Monster implements GeoEntity { @Override public void stop() { NightmareEntity.this.flyingToTarget = false; - NightmareEntity.this.landingCooldown = 80; + NightmareEntity.this.landingCooldown = 18; NightmareEntity.this.getNavigation().stop(); } @@ -779,13 +1300,17 @@ public class NightmareEntity extends Monster implements GeoEntity { NightmareEntity.this.getNavigation().stop(); return; } + if (NightmareEntity.this.onGround() && NightmareEntity.this.distanceToSqr(target) >= FLIGHT_DISENGAGE_RANGE_SQR) { + NightmareEntity.this.setDeltaMovement(NightmareEntity.this.getDeltaMovement().add(0.0D, 0.38D, 0.0D)); + NightmareEntity.this.hasImpulse = true; + } if (NightmareEntity.this.attackCooldown <= 0 && NightmareEntity.this.canStartAttackOn(target)) { NightmareEntity.this.startAttack(target); return; } - NightmareEntity.this.getMoveControl().setWantedPosition( - target.getX(), target.getEyeY() + 0.5D, target.getZ(), COMBAT_FLIGHT_SPEED - ); + Vec3 approachPos = NightmareEntity.this.getFlightApproachPosition(target); + NightmareEntity.this.faceTowardTarget(target, 10.0F); + NightmareEntity.this.getMoveControl().setWantedPosition(approachPos.x, approachPos.y, approachPos.z, COMBAT_FLIGHT_SPEED); } } @@ -794,6 +1319,26 @@ public class NightmareEntity extends Monster implements GeoEntity { super(NightmareEntity.this, GROUND_APPROACH_SPEED, true); } + @Override + public boolean canUse() { + LivingEntity target = NightmareEntity.this.getTarget(); + return !NightmareEntity.this.isPhaseTransitioning() + && NightmareEntity.this.portalAttackTicks <= 0 + && target != null + && !NightmareEntity.this.shouldUseFlightPressure(target) + && super.canUse(); + } + + @Override + public boolean canContinueToUse() { + LivingEntity target = NightmareEntity.this.getTarget(); + return !NightmareEntity.this.isPhaseTransitioning() + && NightmareEntity.this.portalAttackTicks <= 0 + && target != null + && !NightmareEntity.this.shouldUseFlightPressure(target) + && super.canContinueToUse(); + } + @Override public void tick() { LivingEntity target = NightmareEntity.this.getTarget(); @@ -809,6 +1354,9 @@ public class NightmareEntity extends Monster implements GeoEntity { @Override protected void checkAndPerformAttack(LivingEntity target) { + if (NightmareEntity.this.shouldUseFlightPressure(target) && NightmareEntity.this.distanceToSqr(target) >= FLIGHT_ATTACK_RANGE_SQR) { + return; + } if (NightmareEntity.this.attackCooldown <= 0 && NightmareEntity.this.canStartAttackOn(target)) { NightmareEntity.this.startAttack(target); } @@ -816,7 +1364,9 @@ public class NightmareEntity extends Monster implements GeoEntity { } private final class NightmareWanderGoal extends Goal { - private double x, y, z; + private double x; + private double y; + private double z; private int wanderTicks; NightmareWanderGoal() { @@ -825,7 +1375,7 @@ public class NightmareEntity extends Monster implements GeoEntity { @Override public boolean canUse() { - if (NightmareEntity.this.getTarget() != null || NightmareEntity.this.isDeadOrDying()) return false; + if (NightmareEntity.this.getTarget() != null || NightmareEntity.this.isDeadOrDying() || NightmareEntity.this.isPhaseTransitioning() || NightmareEntity.this.portalAttackTicks > 0) return false; if (NightmareEntity.this.random.nextInt(40) != 0) return false; double angle = NightmareEntity.this.random.nextDouble() * Math.PI * 2; double dist = 4 + NightmareEntity.this.random.nextDouble() * 10; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmarePortalEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmarePortalEntity.java new file mode 100644 index 00000000..87516662 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmarePortalEntity.java @@ -0,0 +1,186 @@ +package com.craisinlord.antarchy.content.entity.nightmare; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.EntityDataSerializers; +import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import software.bernie.geckolib.animatable.GeoEntity; +import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationController; +import software.bernie.geckolib.animation.AnimationState; +import software.bernie.geckolib.animation.PlayState; +import software.bernie.geckolib.animation.RawAnimation; +import software.bernie.geckolib.util.GeckoLibUtil; + +import java.util.List; +import java.util.UUID; + +public class NightmarePortalEntity extends Entity implements GeoEntity { + private static final EntityDataAccessor CLOSING = SynchedEntityData.defineId(NightmarePortalEntity.class, EntityDataSerializers.BOOLEAN); + private static final RawAnimation OPEN_ANIM = RawAnimation.begin().thenPlay("open").thenLoop("idle"); + private static final RawAnimation CLOSE_ANIM = RawAnimation.begin().thenPlay("close"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private int lifetimeTicks; + private int ageTicks; + private UUID ownerId; + private UUID linkedPortalId; + private Vec3 fallbackDestination = Vec3.ZERO; + + public NightmarePortalEntity(EntityType entityType, Level level) { + super(entityType, level); + this.setInvulnerable(true); + this.noPhysics = true; + this.noCulling = true; + } + + public static NightmarePortalEntity spawnAt(ServerLevel level, Vec3 pos, NightmareEntity owner, Vec3 fallbackDestination, int lifetimeTicks) { + NightmarePortalEntity portal = new NightmarePortalEntity(AntarchyObjects.NIGHTMARE_PORTAL.get(), level); + portal.moveTo(pos.x, pos.y, pos.z, owner.getYRot(), 0.0F); + portal.ownerId = owner.getUUID(); + portal.fallbackDestination = fallbackDestination; + portal.lifetimeTicks = lifetimeTicks; + level.addFreshEntity(portal); + return portal; + } + + @Override + protected void defineSynchedData(SynchedEntityData.Builder builder) { + builder.define(CLOSING, false); + } + + @Override + public boolean isInvulnerableTo(DamageSource damageSource) { + return true; + } + + @Override + public boolean fireImmune() { + return true; + } + + @Override + public void lavaHurt() { + } + + @Override + public boolean isPushable() { + return false; + } + + @Override + public boolean canBeCollidedWith() { + return false; + } + + @Override + public boolean isPickable() { + return false; + } + + @Override + public void tick() { + super.tick(); + if (this.level().isClientSide) { + return; + } + + this.ageTicks++; + if (this.ageTicks >= this.lifetimeTicks - 10) { + this.entityData.set(CLOSING, true); + } + if (this.ageTicks >= this.lifetimeTicks) { + this.discard(); + return; + } + this.transportEntities(); + } + + private void transportEntities() { + NightmarePortalEntity other = this.getLinkedPortal(); + Vec3 destination = other != null ? other.position() : this.fallbackDestination; + AABB area = this.getBoundingBox().inflate(1.05D, 0.75D, 1.05D); + List entities = this.level().getEntitiesOfClass(LivingEntity.class, area, entity -> entity.isAlive() && !entity.isSpectator()); + for (LivingEntity entity : entities) { + if (entity.getUUID().equals(this.ownerId)) { + continue; + } + if (entity.isOnPortalCooldown()) { + continue; + } + entity.teleportTo(destination.x, destination.y, destination.z); + entity.setPortalCooldown(); + entity.setDeltaMovement(entity.getDeltaMovement().multiply(1.0D, 0.0D, 1.0D)); + entity.hurtMarked = true; + } + } + + public void linkTo(NightmarePortalEntity other) { + this.linkedPortalId = other.getUUID(); + this.fallbackDestination = other.position(); + } + + private NightmarePortalEntity getLinkedPortal() { + if (!(this.level() instanceof ServerLevel serverLevel) || this.linkedPortalId == null) { + return null; + } + Entity entity = serverLevel.getEntity(this.linkedPortalId); + return entity instanceof NightmarePortalEntity portal ? portal : null; + } + + public boolean isClosing() { + return this.getEntityData().get(CLOSING); + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + tag.putInt("LifetimeTicks", this.lifetimeTicks); + tag.putInt("AgeTicks", this.ageTicks); + if (this.ownerId != null) { + tag.putUUID("OwnerId", this.ownerId); + } + if (this.linkedPortalId != null) { + tag.putUUID("LinkedPortalId", this.linkedPortalId); + } + tag.putDouble("FallbackX", this.fallbackDestination.x); + tag.putDouble("FallbackY", this.fallbackDestination.y); + tag.putDouble("FallbackZ", this.fallbackDestination.z); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + this.lifetimeTicks = tag.getInt("LifetimeTicks"); + this.ageTicks = tag.getInt("AgeTicks"); + if (tag.hasUUID("OwnerId")) { + this.ownerId = tag.getUUID("OwnerId"); + } + if (tag.hasUUID("LinkedPortalId")) { + this.linkedPortalId = tag.getUUID("LinkedPortalId"); + } + this.fallbackDestination = new Vec3(tag.getDouble("FallbackX"), tag.getDouble("FallbackY"), tag.getDouble("FallbackZ")); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "portal_controller", 0, this::portalController)); + } + + private PlayState portalController(AnimationState state) { + return state.setAndContinue(this.isClosing() ? CLOSE_ANIM : OPEN_ANIM); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/horde/CavarynHordeManager.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/horde/CavarynHordeManager.java index ac7ed897..d8347559 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/horde/CavarynHordeManager.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/horde/CavarynHordeManager.java @@ -55,6 +55,10 @@ public final class CavarynHordeManager { Registries.BIOME, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "biowart_caves") ); + private static final ResourceKey CAVARYN_MOLEWORM_CAVES = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "cavaryn_moleworm_caves") + ); private static final ResourceLocation DORMANT_HORDE = hordeId("dormant"); private static final ResourceLocation AWAKENING_HORDE = hordeId("awakening"); private static final ResourceLocation WAVE_ONE_HORDE = hordeId("wave_1"); @@ -542,6 +546,9 @@ public final class CavarynHordeManager { if (level.getBiome(pos).is(BIOWART_CAVES)) { return ResourceLocation.fromNamespaceAndPath(horde.getNamespace(), "biowart_caves/" + horde.getPath()); } + if (level.getBiome(pos).is(CAVARYN_MOLEWORM_CAVES)) { + return ResourceLocation.fromNamespaceAndPath(horde.getNamespace(), "cavaryn_moleworm_caves/" + horde.getPath()); + } return horde; } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/GlimmerBottleItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/GlimmerBottleItem.java index 018f5845..645e5cbf 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/GlimmerBottleItem.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/GlimmerBottleItem.java @@ -26,20 +26,32 @@ import org.jetbrains.annotations.Nullable; public class GlimmerBottleItem extends Item { private static final String ABILITY_COOLDOWN_TAG = "AbilityCooldown"; + private static final String SHEAR_COOLDOWN_TAG = "ShearCooldown"; public GlimmerBottleItem() { super(new Item.Properties().stacksTo(1)); } public static ItemStack create(GlimmerVariant variant) { - return create(variant, 0); + return create(variant, 0, 0); } public static ItemStack create(GlimmerVariant variant, int abilityCooldown) { + return create(variant, abilityCooldown, 0); + } + + public static ItemStack create(GlimmerVariant variant, int abilityCooldown, int shearCooldown) { ItemStack stack = new ItemStack(AntarchyObjects.GLIMMER_BOTTLE.get()); stack.set(AntarchyObjects.GLIMMER_VARIANT_COMPONENT.get(), variant); - if (abilityCooldown > 0) { - CustomData.update(DataComponents.CUSTOM_DATA, stack, tag -> tag.putInt(ABILITY_COOLDOWN_TAG, abilityCooldown)); + if (abilityCooldown > 0 || shearCooldown > 0) { + CustomData.update(DataComponents.CUSTOM_DATA, stack, tag -> { + if (abilityCooldown > 0) { + tag.putInt(ABILITY_COOLDOWN_TAG, abilityCooldown); + } + if (shearCooldown > 0) { + tag.putInt(SHEAR_COOLDOWN_TAG, shearCooldown); + } + }); } return stack; } @@ -53,6 +65,10 @@ public class GlimmerBottleItem extends Item { return stack.getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY).copyTag().getInt(ABILITY_COOLDOWN_TAG); } + public static int getStoredShearCooldown(ItemStack stack) { + return stack.getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY).copyTag().getInt(SHEAR_COOLDOWN_TAG); + } + @Override public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { ItemStack stack = player.getItemInHand(hand); @@ -75,6 +91,7 @@ public class GlimmerBottleItem extends Item { glimmer.tame(player); glimmer.setOrderedToSit(false); glimmer.setAbilityCooldown(getStoredAbilityCooldown(stack)); + glimmer.startShearCooldown(getStoredShearCooldown(stack)); level.addFreshEntity(glimmer); GlimmerCompanionSavedData.replaceCompanion(((ServerLevel) level).getServer(), player.getUUID(), glimmer.getUUID()); GlimmerParticles.tickBurst(glimmer); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/InnateEnchantmentHelper.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/InnateEnchantmentHelper.java new file mode 100644 index 00000000..223c3dcb --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/InnateEnchantmentHelper.java @@ -0,0 +1,77 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.item.ultimate.UltimateArmorItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateBowItem; +import it.unimi.dsi.fastutil.objects.Object2IntMap; +import net.minecraft.core.Holder; +import net.minecraft.tags.EnchantmentTags; +import net.minecraft.util.Mth; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.enchantment.Enchantment; +import net.minecraft.world.item.enchantment.EnchantmentHelper; +import net.minecraft.world.item.enchantment.Enchantments; +import net.minecraft.world.item.enchantment.ItemEnchantments; + +public final class InnateEnchantmentHelper { + private InnateEnchantmentHelper() { + } + + public static boolean hasInnateNonCurseEnchantments(ItemStack stack) { + for (Object2IntMap.Entry> entry : EnchantmentHelper.getEnchantmentsForCrafting(stack).entrySet()) { + Holder enchantment = entry.getKey(); + if (!enchantment.is(EnchantmentTags.CURSE) && isInnateEnchantment(stack, enchantment, entry.getIntValue())) { + return true; + } + } + return false; + } + + public static boolean hasRemovableNonCurseEnchantments(ItemStack stack) { + for (Object2IntMap.Entry> entry : EnchantmentHelper.getEnchantmentsForCrafting(stack).entrySet()) { + Holder enchantment = entry.getKey(); + if (!enchantment.is(EnchantmentTags.CURSE) && !isInnateEnchantment(stack, enchantment, entry.getIntValue())) { + return true; + } + } + return false; + } + + public static ItemStack stripOnlyRemovableNonCurseEnchantments(ItemStack stack) { + EnchantmentHelper.updateEnchantments(stack, mutable -> + mutable.removeIf(enchantment -> + !enchantment.is(EnchantmentTags.CURSE) + && !isInnateEnchantment(stack, enchantment, mutable.getLevel(enchantment)))); + return stack; + } + + private static boolean isInnateEnchantment(ItemStack stack, Holder enchantment, int level) { + if (level <= 0) { + return false; + } + + if (stack.getItem() instanceof UltimateArmorItem) { + return AntarchySettings.ultimateArmorComesEnchanted() + && level == 5 + && (enchantment.is(Enchantments.PROTECTION) + || enchantment.is(Enchantments.FIRE_PROTECTION) + || enchantment.is(Enchantments.PROJECTILE_PROTECTION) + || enchantment.is(Enchantments.BLAST_PROTECTION)); + } + + if (stack.getItem() instanceof UltimateBowItem) { + return AntarchySettings.ultimateBowComesEnchantedWithFlame() + && level == 1 + && enchantment.is(Enchantments.FLAME); + } + + if (stack.getItem() instanceof KrakensGraspItem) { + int desiredLevel = Mth.clamp(AntarchySettings.krakensGraspInnateLoyaltyLevel(), 1, 3); + return AntarchySettings.krakensGraspInnateLoyalty() + && level == desiredLevel + && enchantment.is(Enchantments.LOYALTY); + } + + return false; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/LucidAnchorBlockItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/LucidAnchorBlockItem.java new file mode 100644 index 00000000..138c8b0c --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/LucidAnchorBlockItem.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.content.item; + +import java.util.List; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.block.Block; + +public class LucidAnchorBlockItem extends BlockItem { + public LucidAnchorBlockItem(Block block, Properties properties) { + super(block, properties); + } + + @Override + public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("tooltip.antarchy.lucid_anchor.pyramid").withStyle(ChatFormatting.DARK_RED)); + tooltipComponents.add(Component.translatable("tooltip.antarchy.lucid_anchor.path").withStyle(ChatFormatting.GRAY)); + super.appendHoverText(stack, context, tooltipComponents, tooltipFlag); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/NightmareArmorItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/NightmareArmorItem.java index e3c07ef3..94aad831 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/NightmareArmorItem.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/NightmareArmorItem.java @@ -19,10 +19,11 @@ import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.item.component.ItemAttributeModifiers; public class NightmareArmorItem extends ArmorItem { + private static final int BASE_DURABILITY_MULTIPLIER = 33; private final Type armorType; public NightmareArmorItem(Holder material, Type type, Properties properties) { - super(material, type, properties); + super(material, type, properties.stacksTo(1).durability(resolveDurability(type))); this.armorType = type; } @@ -119,4 +120,13 @@ public class NightmareArmorItem extends ArmorItem { tooltipComponents.add(Component.translatable("tooltip.antarchy.nightmare_armor_set_bonus").withStyle(ChatFormatting.DARK_RED)); super.appendHoverText(stack, context, tooltipComponents, tooltipFlag); } + + private static int resolveDurability(Type armorType) { + return switch (armorType) { + case HELMET -> Type.HELMET.getDurability(BASE_DURABILITY_MULTIPLIER); + case CHESTPLATE, BODY -> Type.CHESTPLATE.getDurability(BASE_DURABILITY_MULTIPLIER); + case LEGGINGS -> Type.LEGGINGS.getDurability(BASE_DURABILITY_MULTIPLIER); + case BOOTS -> Type.BOOTS.getDurability(BASE_DURABILITY_MULTIPLIER); + }; + } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/PrimordialArmorItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/PrimordialArmorItem.java index c9d14b47..289316a7 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/PrimordialArmorItem.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/PrimordialArmorItem.java @@ -24,6 +24,7 @@ import net.minecraft.world.item.component.ItemAttributeModifiers; import net.minecraft.world.level.Level; public class PrimordialArmorItem extends ArmorItem { + private static final int BASE_DURABILITY_MULTIPLIER = 33; private final Type armorType; public PrimordialArmorItem(Holder material, Type type, Properties properties) { @@ -144,10 +145,10 @@ public class PrimordialArmorItem extends ArmorItem { private static int resolveDurability(Type armorType) { return switch (armorType) { - case HELMET -> Type.HELMET.getDurability(37); - case CHESTPLATE, BODY -> Type.CHESTPLATE.getDurability(37); - case LEGGINGS -> Type.LEGGINGS.getDurability(37); - case BOOTS -> Type.BOOTS.getDurability(37); + case HELMET -> Type.HELMET.getDurability(BASE_DURABILITY_MULTIPLIER); + case CHESTPLATE, BODY -> Type.CHESTPLATE.getDurability(BASE_DURABILITY_MULTIPLIER); + case LEGGINGS -> Type.LEGGINGS.getDurability(BASE_DURABILITY_MULTIPLIER); + case BOOTS -> Type.BOOTS.getDurability(BASE_DURABILITY_MULTIPLIER); }; } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/SpiritAppleItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/SpiritAppleItem.java index 3e0e3a22..244ca13e 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/SpiritAppleItem.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/SpiritAppleItem.java @@ -1,21 +1,37 @@ package com.craisinlord.antarchy.content.item; +import com.craisinlord.antarchy.content.AntarchyObjects; import net.minecraft.ChatFormatting; import net.minecraft.network.chat.Component; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; import java.util.List; public class SpiritAppleItem extends Item { + public static final int GLIMMERING_DURATION_TICKS = 20 * 8; + public SpiritAppleItem(Properties properties) { super(properties); } + @Override + public ItemStack finishUsingItem(ItemStack stack, Level level, LivingEntity livingEntity) { + ItemStack result = super.finishUsingItem(stack, level, livingEntity); + if (!level.isClientSide()) { + livingEntity.addEffect(new MobEffectInstance(AntarchyObjects.GLIMMERING_EFFECT.get(), GLIMMERING_DURATION_TICKS, 0, false, false, true)); + } + return result; + } + @Override public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltipComponents, TooltipFlag tooltipFlag) { tooltipComponents.add(Component.translatable("tooltip.antarchy.spirit_apple").withStyle(ChatFormatting.GRAY)); + tooltipComponents.add(Component.translatable("tooltip.antarchy.spirit_apple.eaten").withStyle(ChatFormatting.GRAY)); super.appendHoverText(stack, context, tooltipComponents, tooltipFlag); } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/TigerEyeArmorItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/TigerEyeArmorItem.java new file mode 100644 index 00000000..347164a2 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/TigerEyeArmorItem.java @@ -0,0 +1,38 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.client.TigerEyeClientHooks; +import java.util.List; +import net.minecraft.ChatFormatting; +import net.minecraft.core.Holder; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; + +public final class TigerEyeArmorItem extends ArmorItem { + private static final int BASE_DURABILITY_MULTIPLIER = 33; + + public TigerEyeArmorItem(Holder material, Type type, Properties properties) { + super(material, type, properties.stacksTo(1).durability(resolveDurability(type))); + } + + @Override + public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("item.antarchy.tigers_eye_armor.passive").withStyle(ChatFormatting.GOLD)); + tooltipComponents.add(Component.translatable("item.antarchy.tigers_eye_armor.full_set").withStyle(ChatFormatting.YELLOW)); + tooltipComponents.add(Component.translatable("item.antarchy.tigers_eye_armor.activate", TigerEyeClientHooks.camouflageKeyText()).withStyle(ChatFormatting.GRAY)); + tooltipComponents.add(Component.translatable("item.antarchy.tigers_eye_armor.active_bonus").withStyle(ChatFormatting.DARK_AQUA)); + super.appendHoverText(stack, context, tooltipComponents, tooltipFlag); + } + + private static int resolveDurability(Type armorType) { + return switch (armorType) { + case HELMET -> Type.HELMET.getDurability(BASE_DURABILITY_MULTIPLIER); + case CHESTPLATE, BODY -> Type.CHESTPLATE.getDurability(BASE_DURABILITY_MULTIPLIER); + case LEGGINGS -> Type.LEGGINGS.getDurability(BASE_DURABILITY_MULTIPLIER); + case BOOTS -> Type.BOOTS.getDurability(BASE_DURABILITY_MULTIPLIER); + }; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/TigerEyeArmorUtil.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/TigerEyeArmorUtil.java new file mode 100644 index 00000000..789d5d67 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/TigerEyeArmorUtil.java @@ -0,0 +1,126 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageAccess; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.EmptyBlockGetter; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.phys.Vec3; + +public final class TigerEyeArmorUtil { + public static final double DETECTION_REDUCTION_PER_PIECE = 0.10D; + public static final double MAX_PASSIVE_REDUCTION = 0.40D; + public static final double WALKING_MULTIPLIER = 0.50D; + public static final double SPRINTING_MULTIPLIER = 0.25D; + public static final double ACTIVE_CAMOUFLAGE_MULTIPLIER = 2.0D; + public static final double MAX_ACTIVE_REDUCTION = 0.80D; + private static final double STATIONARY_HORIZONTAL_SPEED_SQR = 0.0009D; + + private TigerEyeArmorUtil() { + } + + public static int countEquippedPieces(Player player) { + int count = 0; + for (EquipmentSlot slot : new EquipmentSlot[]{EquipmentSlot.HEAD, EquipmentSlot.CHEST, EquipmentSlot.LEGS, EquipmentSlot.FEET}) { + if (player.getItemBySlot(slot).is(AntarchyTags.Items.TIGER_EYE_ARMOR)) { + count++; + } + } + return count; + } + + public static boolean hasFullSet(Player player) { + return player.getItemBySlot(EquipmentSlot.HEAD).is(AntarchyTags.Items.TIGER_EYE_ARMOR) + && player.getItemBySlot(EquipmentSlot.CHEST).is(AntarchyTags.Items.TIGER_EYE_ARMOR) + && player.getItemBySlot(EquipmentSlot.LEGS).is(AntarchyTags.Items.TIGER_EYE_ARMOR) + && player.getItemBySlot(EquipmentSlot.FEET).is(AntarchyTags.Items.TIGER_EYE_ARMOR); + } + + public static double getPassiveMaximumReduction(Player player) { + return Math.min(MAX_PASSIVE_REDUCTION, countEquippedPieces(player) * DETECTION_REDUCTION_PER_PIECE); + } + + public static double getMovementMultiplier(Player player) { + if (player.isCrouching()) { + return 1.0D; + } + + Vec3 delta = player.getDeltaMovement(); + double horizontalSpeedSqr = delta.x * delta.x + delta.z * delta.z; + if (horizontalSpeedSqr < STATIONARY_HORIZONTAL_SPEED_SQR) { + return 1.0D; + } + + if (player.isSprinting()) { + return SPRINTING_MULTIPLIER; + } + + return WALKING_MULTIPLIER; + } + + public static double getDetectionReduction(Player player) { + double reduction = getPassiveMaximumReduction(player) * getMovementMultiplier(player); + if (isAdaptiveCamouflageActive(player)) { + reduction = Math.min(MAX_ACTIVE_REDUCTION, reduction * ACTIVE_CAMOUFLAGE_MULTIPLIER); + } + return reduction; + } + + public static boolean mayActivateAdaptiveCamouflage(Player player) { + return hasFullSet(player) && !player.isSpectator() && player.isAlive(); + } + + public static boolean isAdaptiveCamouflageActive(Player player) { + return player instanceof TigerEyeCamouflageAccess access && access.antarchy$isTigerEyeCamouflageActive(); + } + + public static boolean isValidCamouflageBlock(BlockState state) { + if (state.isAir() || state.is(AntarchyTags.Blocks.TIGER_EYE_CAMOUFLAGE_BLACKLIST)) { + return false; + } + if (state.getRenderShape() == RenderShape.INVISIBLE) { + return false; + } + if (state.is(Blocks.BARRIER) || state.is(Blocks.STRUCTURE_VOID) || state.is(Blocks.LIGHT)) { + return false; + } + if (state.is(Blocks.NETHER_PORTAL) || state.is(Blocks.END_PORTAL) || state.is(Blocks.END_GATEWAY)) { + return false; + } + if (!Block.isShapeFullBlock(state.getShape(EmptyBlockGetter.INSTANCE, BlockPos.ZERO))) { + return false; + } + + FluidState fluidState = state.getFluidState(); + return fluidState == null || fluidState.isEmpty(); + } + + public static boolean shouldReduceDetection(Mob observer, Player player) { + if (countEquippedPieces(player) <= 0) { + return false; + } + if (observer.getType().is(AntarchyTags.Entities.TIGER_EYE_DETECTION_IMMUNE)) { + return false; + } + if (observer.getTarget() == player || observer.getLastHurtByMob() == player) { + return false; + } + if (observer instanceof net.minecraft.world.entity.NeutralMob neutralMob && neutralMob.isAngryAt(player)) { + return false; + } + return observer.canAttack(player); + } + + public static BlockPos getCamouflageSamplePos(Player player) { + double centerX = (player.getBoundingBox().minX + player.getBoundingBox().maxX) * 0.5D; + double centerZ = (player.getBoundingBox().minZ + player.getBoundingBox().maxZ) * 0.5D; + return BlockPos.containing(centerX, player.getBoundingBox().minY - 0.05D, centerZ); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/TigerEyeCamouflageStatePayload.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/TigerEyeCamouflageStatePayload.java new file mode 100644 index 00000000..bd4ba024 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/TigerEyeCamouflageStatePayload.java @@ -0,0 +1,24 @@ +package com.craisinlord.antarchy.content.network; + +import com.craisinlord.antarchy.Antarchy; +import io.netty.buffer.ByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public record TigerEyeCamouflageStatePayload(int entityId, boolean active, int blockStateId) implements CustomPacketPayload { + public static final Type TYPE = + new Type<>(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "tiger_eye_camouflage_state")); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.VAR_INT, TigerEyeCamouflageStatePayload::entityId, + ByteBufCodecs.BOOL, TigerEyeCamouflageStatePayload::active, + ByteBufCodecs.VAR_INT, TigerEyeCamouflageStatePayload::blockStateId, + TigerEyeCamouflageStatePayload::new + ); + + @Override + public Type type() { + return TYPE; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/ToggleTigerEyeCamouflagePayload.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/ToggleTigerEyeCamouflagePayload.java new file mode 100644 index 00000000..01b34258 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/ToggleTigerEyeCamouflagePayload.java @@ -0,0 +1,18 @@ +package com.craisinlord.antarchy.content.network; + +import com.craisinlord.antarchy.Antarchy; +import io.netty.buffer.ByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public record ToggleTigerEyeCamouflagePayload() implements CustomPacketPayload { + public static final Type TYPE = + new Type<>(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "toggle_tiger_eye_camouflage")); + public static final StreamCodec STREAM_CODEC = StreamCodec.unit(new ToggleTigerEyeCamouflagePayload()); + + @Override + public Type type() { + return TYPE; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/tigereye/TigerEyeCamouflageAccess.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/tigereye/TigerEyeCamouflageAccess.java new file mode 100644 index 00000000..c1b014b9 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/tigereye/TigerEyeCamouflageAccess.java @@ -0,0 +1,11 @@ +package com.craisinlord.antarchy.content.tigereye; + +public interface TigerEyeCamouflageAccess { + boolean antarchy$isTigerEyeCamouflageActive(); + + void antarchy$setTigerEyeCamouflageActive(boolean active); + + int antarchy$getTigerEyeCamouflageBlockStateId(); + + void antarchy$setTigerEyeCamouflageBlockStateId(int blockStateId); +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/tigereye/TigerEyeCamouflageController.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/tigereye/TigerEyeCamouflageController.java new file mode 100644 index 00000000..e20bdfdc --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/tigereye/TigerEyeCamouflageController.java @@ -0,0 +1,102 @@ +package com.craisinlord.antarchy.content.tigereye; + +import com.craisinlord.antarchy.content.item.TigerEyeArmorUtil; +import net.minecraft.core.BlockPos; +import net.minecraft.core.particles.BlockParticleOption; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; + +public final class TigerEyeCamouflageController { + public enum ToggleResult { + ACTIVATED, + DEACTIVATED, + FULL_SET_REQUIRED, + INVALID_BLOCK, + NO_CHANGE + } + + private TigerEyeCamouflageController() { + } + + public static ToggleResult toggle(ServerPlayer player) { + if (!(player instanceof TigerEyeCamouflageAccess access)) { + return ToggleResult.NO_CHANGE; + } + + if (access.antarchy$isTigerEyeCamouflageActive()) { + deactivate(player, true); + return ToggleResult.DEACTIVATED; + } + + if (!TigerEyeArmorUtil.mayActivateAdaptiveCamouflage(player)) { + return ToggleResult.FULL_SET_REQUIRED; + } + + BlockPos samplePos = TigerEyeArmorUtil.getCamouflageSamplePos(player); + BlockState state = player.level().getBlockState(samplePos); + if (!TigerEyeArmorUtil.isValidCamouflageBlock(state)) { + return ToggleResult.INVALID_BLOCK; + } + + access.antarchy$setTigerEyeCamouflageBlockStateId(Block.getId(state)); + access.antarchy$setTigerEyeCamouflageActive(true); + spawnEffects(player, state, true); + return ToggleResult.ACTIVATED; + } + + public static boolean validateOrDeactivate(ServerPlayer player) { + if (!(player instanceof TigerEyeCamouflageAccess access) || !access.antarchy$isTigerEyeCamouflageActive()) { + return false; + } + if (TigerEyeArmorUtil.hasFullSet(player)) { + return false; + } + deactivate(player, true); + return true; + } + + public static void deactivate(ServerPlayer player, boolean spawnEffects) { + if (!(player instanceof TigerEyeCamouflageAccess access)) { + return; + } + boolean wasActive = access.antarchy$isTigerEyeCamouflageActive(); + int blockStateId = access.antarchy$getTigerEyeCamouflageBlockStateId(); + access.antarchy$setTigerEyeCamouflageActive(false); + access.antarchy$setTigerEyeCamouflageBlockStateId(0); + if (spawnEffects && wasActive) { + spawnEffects(player, Block.stateById(blockStateId), false); + } + } + + private static void spawnEffects(ServerPlayer player, BlockState state, boolean activate) { + if (!(player.level() instanceof ServerLevel serverLevel)) { + return; + } + int count = activate ? 18 : 8; + serverLevel.sendParticles( + new BlockParticleOption(ParticleTypes.BLOCK, state), + player.getX(), + player.getY() + 1.0D, + player.getZ(), + count, + 0.35D, + 0.6D, + 0.35D, + 0.03D + ); + serverLevel.playSound( + null, + player.blockPosition(), + activate ? SoundEvents.AMETHYST_BLOCK_CHIME : SoundEvents.AMETHYST_BLOCK_HIT, + SoundSource.PLAYERS, + 0.8F, + activate ? 0.9F : 0.7F + ); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/tigereye/TigerEyeCamouflageSync.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/tigereye/TigerEyeCamouflageSync.java new file mode 100644 index 00000000..2d20353b --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/tigereye/TigerEyeCamouflageSync.java @@ -0,0 +1,41 @@ +package com.craisinlord.antarchy.content.tigereye; + +import com.craisinlord.antarchy.content.network.TigerEyeCamouflageStatePayload; +import java.util.function.BiConsumer; +import java.util.function.Consumer; +import net.minecraft.server.level.ServerPlayer; + +public final class TigerEyeCamouflageSync { + private static BiConsumer sendToPlayer = (player, payload) -> {}; + private static Consumer syncSelfAndTracking = player -> {}; + + private TigerEyeCamouflageSync() { + } + + public static void setSendToPlayer(BiConsumer sender) { + sendToPlayer = sender; + } + + public static void setSyncSelfAndTracking(Consumer syncer) { + syncSelfAndTracking = syncer; + } + + public static void sync(ServerPlayer player) { + syncSelfAndTracking.accept(player); + } + + public static void syncTo(ServerPlayer viewer, ServerPlayer target) { + sendToPlayer.accept(viewer, payload(target)); + } + + public static TigerEyeCamouflageStatePayload payload(ServerPlayer player) { + if (player instanceof TigerEyeCamouflageAccess access) { + return new TigerEyeCamouflageStatePayload( + player.getId(), + access.antarchy$isTigerEyeCamouflageActive(), + access.antarchy$getTigerEyeCamouflageBlockStateId() + ); + } + return new TigerEyeCamouflageStatePayload(player.getId(), false, 0); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitenSpikeConfiguration.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitinSpikeConfiguration.java similarity index 67% rename from common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitenSpikeConfiguration.java rename to common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitinSpikeConfiguration.java index 2160f745..4e66124d 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitenSpikeConfiguration.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitinSpikeConfiguration.java @@ -4,7 +4,7 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration; -public record ChitenSpikeConfiguration( +public record ChitinSpikeConfiguration( int floorToCeilingSearchRange, int radius, int maxColumnHeight, @@ -19,19 +19,19 @@ public record ChitenSpikeConfiguration( int largeVariantExtraHeightDeviation, float largeVariantSurfaceSpikeMultiplier ) implements FeatureConfiguration { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( - Codec.intRange(1, 128).fieldOf("floor_to_ceiling_search_range").forGetter(ChitenSpikeConfiguration::floorToCeilingSearchRange), - Codec.intRange(1, 32).fieldOf("radius").forGetter(ChitenSpikeConfiguration::radius), - Codec.intRange(1, 32).fieldOf("max_column_height").forGetter(ChitenSpikeConfiguration::maxColumnHeight), - Codec.intRange(1, 16).fieldOf("height_deviation").forGetter(ChitenSpikeConfiguration::heightDeviation), - Codec.floatRange(0.0F, 1.0F).fieldOf("chance_of_column_at_max_distance_from_center").forGetter(ChitenSpikeConfiguration::chanceOfColumnAtMaxDistanceFromCenter), - Codec.intRange(1, 64).fieldOf("max_distance_from_center_affecting_chance_of_column").forGetter(ChitenSpikeConfiguration::maxDistanceFromCenterAffectingChanceOfColumn), - Codec.intRange(1, 64).fieldOf("max_distance_from_center_affecting_height_bias").forGetter(ChitenSpikeConfiguration::maxDistanceFromCenterAffectingHeightBias), - Codec.intRange(0, 32).fieldOf("max_height_difference").forGetter(ChitenSpikeConfiguration::maxHeightDifference), - Codec.floatRange(0.0F, 1.0F).optionalFieldOf("large_variant_chance", 0.0F).forGetter(ChitenSpikeConfiguration::largeVariantChance), - Codec.intRange(0, 24).optionalFieldOf("large_variant_extra_radius", 0).forGetter(ChitenSpikeConfiguration::largeVariantExtraRadius), - Codec.intRange(0, 32).optionalFieldOf("large_variant_extra_height", 0).forGetter(ChitenSpikeConfiguration::largeVariantExtraHeight), - Codec.intRange(0, 16).optionalFieldOf("large_variant_extra_height_deviation", 0).forGetter(ChitenSpikeConfiguration::largeVariantExtraHeightDeviation), - Codec.floatRange(1.0F, 8.0F).optionalFieldOf("large_variant_surface_spike_multiplier", 1.0F).forGetter(ChitenSpikeConfiguration::largeVariantSurfaceSpikeMultiplier) - ).apply(instance, ChitenSpikeConfiguration::new)); + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + Codec.intRange(1, 128).fieldOf("floor_to_ceiling_search_range").forGetter(ChitinSpikeConfiguration::floorToCeilingSearchRange), + Codec.intRange(1, 32).fieldOf("radius").forGetter(ChitinSpikeConfiguration::radius), + Codec.intRange(1, 32).fieldOf("max_column_height").forGetter(ChitinSpikeConfiguration::maxColumnHeight), + Codec.intRange(1, 16).fieldOf("height_deviation").forGetter(ChitinSpikeConfiguration::heightDeviation), + Codec.floatRange(0.0F, 1.0F).fieldOf("chance_of_column_at_max_distance_from_center").forGetter(ChitinSpikeConfiguration::chanceOfColumnAtMaxDistanceFromCenter), + Codec.intRange(1, 64).fieldOf("max_distance_from_center_affecting_chance_of_column").forGetter(ChitinSpikeConfiguration::maxDistanceFromCenterAffectingChanceOfColumn), + Codec.intRange(1, 64).fieldOf("max_distance_from_center_affecting_height_bias").forGetter(ChitinSpikeConfiguration::maxDistanceFromCenterAffectingHeightBias), + Codec.intRange(0, 32).fieldOf("max_height_difference").forGetter(ChitinSpikeConfiguration::maxHeightDifference), + Codec.floatRange(0.0F, 1.0F).optionalFieldOf("large_variant_chance", 0.0F).forGetter(ChitinSpikeConfiguration::largeVariantChance), + Codec.intRange(0, 24).optionalFieldOf("large_variant_extra_radius", 0).forGetter(ChitinSpikeConfiguration::largeVariantExtraRadius), + Codec.intRange(0, 32).optionalFieldOf("large_variant_extra_height", 0).forGetter(ChitinSpikeConfiguration::largeVariantExtraHeight), + Codec.intRange(0, 16).optionalFieldOf("large_variant_extra_height_deviation", 0).forGetter(ChitinSpikeConfiguration::largeVariantExtraHeightDeviation), + Codec.floatRange(1.0F, 8.0F).optionalFieldOf("large_variant_surface_spike_multiplier", 1.0F).forGetter(ChitinSpikeConfiguration::largeVariantSurfaceSpikeMultiplier) + ).apply(instance, ChitinSpikeConfiguration::new)); } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitenSpikeFeature.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitinSpikeFeature.java similarity index 92% rename from common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitenSpikeFeature.java rename to common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitinSpikeFeature.java index cd73c28b..78398af6 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitenSpikeFeature.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitinSpikeFeature.java @@ -18,19 +18,19 @@ import net.minecraft.world.level.levelgen.Column; import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; -public final class ChitenSpikeFeature extends Feature { +public final class ChitinSpikeFeature extends Feature { private record ResolvedVariant(int radius, int maxColumnHeight, int heightDeviation, int surfaceSpikeAttempts) { } - public ChitenSpikeFeature(Codec codec) { + public ChitinSpikeFeature(Codec codec) { super(codec); } @Override - public boolean place(FeaturePlaceContext context) { + public boolean place(FeaturePlaceContext context) { WorldGenLevel level = context.level(); BlockPos origin = context.origin(); - ChitenSpikeConfiguration config = context.config(); + ChitinSpikeConfiguration config = context.config(); RandomSource random = context.random(); if (!level.getBlockState(origin).isAir()) { @@ -59,7 +59,7 @@ public final class ChitenSpikeFeature extends Feature return placedAny; } - private ResolvedVariant resolveVariant(ChitenSpikeConfiguration config, RandomSource random) { + private ResolvedVariant resolveVariant(ChitinSpikeConfiguration config, RandomSource random) { if (config.largeVariantChance() > 0.0F && random.nextFloat() < config.largeVariantChance()) { int radius = config.radius() + config.largeVariantExtraRadius(); int maxColumnHeight = config.maxColumnHeight() + config.largeVariantExtraHeight(); @@ -81,7 +81,7 @@ public final class ChitenSpikeFeature extends Feature int dx, int dz, double chance, - ChitenSpikeConfiguration config, + ChitinSpikeConfiguration config, ResolvedVariant variant, List placedBlocks ) { @@ -114,10 +114,10 @@ public final class ChitenSpikeFeature extends Feature boolean placedAny = false; if (ceiling.isPresent() && downLength > 0) { - placedAny |= this.growChitenColumn(level, pos.atY(ceiling.getAsInt() - 1), Direction.DOWN, downLength, placedBlocks); + placedAny |= this.growChitinColumn(level, pos.atY(ceiling.getAsInt() - 1), Direction.DOWN, downLength, placedBlocks); } if (floor.isPresent() && upLength > 0) { - placedAny |= this.growChitenColumn(level, pos.atY(floor.getAsInt() + 1), Direction.UP, upLength, placedBlocks); + placedAny |= this.growChitinColumn(level, pos.atY(floor.getAsInt() + 1), Direction.UP, upLength, placedBlocks); } return placedAny; } @@ -129,7 +129,7 @@ public final class ChitenSpikeFeature extends Feature return variant.maxColumnHeight(); } - private boolean growChitenColumn(WorldGenLevel level, BlockPos rootStart, Direction direction, int length, List placedBlocks) { + private boolean growChitinColumn(WorldGenLevel level, BlockPos rootStart, Direction direction, int length, List placedBlocks) { boolean placedAny = false; for (int offset = 0; offset < length; offset++) { BlockPos spikePos = rootStart.relative(direction, offset); @@ -142,8 +142,8 @@ public final class ChitenSpikeFeature extends Feature break; } - BlockState chitenState = AntarchyObjects.CHITEN_BLOCK.get().defaultBlockState(); - level.setBlock(spikePos, chitenState, 3); + BlockState chitinState = AntarchyObjects.CHITIN_BLOCK.get().defaultBlockState(); + level.setBlock(spikePos, chitinState, 3); placedBlocks.add(spikePos.immutable()); placedAny = true; } @@ -154,7 +154,7 @@ public final class ChitenSpikeFeature extends Feature WorldGenLevel level, RandomSource random, List placedBlocks, - ChitenSpikeConfiguration config, + ChitinSpikeConfiguration config, ResolvedVariant variant ) { boolean placedAny = false; @@ -186,7 +186,7 @@ public final class ChitenSpikeFeature extends Feature break; } - BlockState spikeState = AntarchyObjects.CHITEN_SPIKE.get().defaultBlockState() + BlockState spikeState = AntarchyObjects.CHITIN_SPIKE.get().defaultBlockState() .setValue(PointedDripstoneBlock.TIP_DIRECTION, direction) .setValue(PointedDripstoneBlock.THICKNESS, getThicknessForRootOffset(offset, length)) .setValue(PointedDripstoneBlock.WATERLOGGED, false); @@ -238,7 +238,7 @@ public final class ChitenSpikeFeature extends Feature return Mth.clamp(sampled, 1, maxHeight); } - private double getChanceOfColumn(int radius, int dx, int dz, ChitenSpikeConfiguration config) { + private double getChanceOfColumn(int radius, int dx, int dz, ChitinSpikeConfiguration config) { int remainingX = radius - Math.abs(dx); int remainingZ = radius - Math.abs(dz); int edgeDistance = Math.min(remainingX, remainingZ); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/GrindstoneMenuMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/GrindstoneMenuMixin.java new file mode 100644 index 00000000..104f118d --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/GrindstoneMenuMixin.java @@ -0,0 +1,35 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.item.InnateEnchantmentHelper; +import net.minecraft.world.inventory.GrindstoneMenu; +import net.minecraft.world.item.ItemStack; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(GrindstoneMenu.class) +public abstract class GrindstoneMenuMixin { + @Inject(method = "removeNonCursesFrom", at = @At("HEAD"), cancellable = true) + private void antarchy$preserveInnateEnchantments(ItemStack stack, CallbackInfoReturnable cir) { + if (InnateEnchantmentHelper.hasInnateNonCurseEnchantments(stack)) { + cir.setReturnValue(InnateEnchantmentHelper.stripOnlyRemovableNonCurseEnchantments(stack)); + } + } + + @Inject(method = "computeResult", at = @At("RETURN"), cancellable = true) + private void antarchy$blockInnateOnlyNoOp(ItemStack firstInput, ItemStack secondInput, CallbackInfoReturnable cir) { + if (!firstInput.isEmpty() && secondInput.isEmpty() + && InnateEnchantmentHelper.hasInnateNonCurseEnchantments(firstInput) + && !InnateEnchantmentHelper.hasRemovableNonCurseEnchantments(firstInput)) { + cir.setReturnValue(ItemStack.EMPTY); + return; + } + + if (firstInput.isEmpty() && !secondInput.isEmpty() + && InnateEnchantmentHelper.hasInnateNonCurseEnchantments(secondInput) + && !InnateEnchantmentHelper.hasRemovableNonCurseEnchantments(secondInput)) { + cir.setReturnValue(ItemStack.EMPTY); + } + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/TigerEyeCamouflageMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/TigerEyeCamouflageMixin.java new file mode 100644 index 00000000..6d444490 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/TigerEyeCamouflageMixin.java @@ -0,0 +1,32 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageAccess; +import net.minecraft.world.entity.player.Player; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; + +@Mixin(Player.class) +public abstract class TigerEyeCamouflageMixin implements TigerEyeCamouflageAccess { + @Unique private boolean antarchy$tigerEyeCamouflageActive; + @Unique private int antarchy$tigerEyeCamouflageBlockStateId; + + @Override + public boolean antarchy$isTigerEyeCamouflageActive() { + return antarchy$tigerEyeCamouflageActive; + } + + @Override + public void antarchy$setTigerEyeCamouflageActive(boolean active) { + antarchy$tigerEyeCamouflageActive = active; + } + + @Override + public int antarchy$getTigerEyeCamouflageBlockStateId() { + return antarchy$tigerEyeCamouflageBlockStateId; + } + + @Override + public void antarchy$setTigerEyeCamouflageBlockStateId(int blockStateId) { + antarchy$tigerEyeCamouflageBlockStateId = blockStateId; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/TigerEyeVisibilityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/TigerEyeVisibilityMixin.java new file mode 100644 index 00000000..3a4e5494 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/TigerEyeVisibilityMixin.java @@ -0,0 +1,28 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.item.TigerEyeArmorUtil; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.player.Player; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(LivingEntity.class) +public abstract class TigerEyeVisibilityMixin { + @Inject(method = "getVisibilityPercent", at = @At("RETURN"), cancellable = true) + private void antarchy$applyTigerEyeStealth(Entity observer, CallbackInfoReturnable cir) { + if (!((Object) this instanceof Player player)) { + return; + } + if (!(observer instanceof Mob mob)) { + return; + } + if (!TigerEyeArmorUtil.shouldReduceDetection(mob, player)) { + return; + } + cir.setReturnValue(cir.getReturnValueD() * (1.0D - TigerEyeArmorUtil.getDetectionReduction(player))); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMoveMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMoveMixin.java index a8c7401b..e187d93b 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMoveMixin.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMoveMixin.java @@ -4,12 +4,17 @@ import com.craisinlord.antarchy.content.fluid.AntarchyFluidChecks; import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; +import java.util.ArrayList; +import java.util.List; +import java.util.TreeSet; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.MoverType; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; +import net.minecraft.world.phys.shapes.VoxelShape; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.spongepowered.asm.mixin.Mixin; @@ -19,6 +24,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyArg; import org.spongepowered.asm.mixin.injection.ModifyVariable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(Entity.class) /* @@ -150,6 +156,71 @@ public abstract class EntityMoveMixin { } } + @Inject(method = "collide", at = @At("HEAD"), cancellable = true) + private void antarchy$invertedStepUp(Vec3 movement, CallbackInfoReturnable cir) { + Entity entity = (Entity) (Object) this; + if (!AntarchyGravityApi.isGravityInverted(entity)) { + return; + } + + AABB aabb = entity.getBoundingBox(); + List entityShapes = entity.level().getEntityCollisions(entity, aabb.expandTowards(movement)); + Vec3 collided = movement.lengthSqr() == 0.0 ? movement : Entity.collideBoundingBox(entity, movement, aabb, entity.level(), entityShapes); + + boolean movedX = movement.x != collided.x; + boolean movedY = movement.y != collided.y; + boolean movedZ = movement.z != collided.z; + boolean pressingIntoCeiling = movedY && movement.y > 0.0D; + float maxUpStep = entity.maxUpStep(); + + if (!(maxUpStep > 0.0F) || !(pressingIntoCeiling || entity.onGround()) || !(movedX || movedZ)) { + cir.setReturnValue(collided); + return; + } + + AABB steppedBox = pressingIntoCeiling ? aabb.move(0.0, collided.y, 0.0) : aabb; + AABB searchBox = steppedBox.expandTowards(movement.x, -(double) maxUpStep, movement.z); + if (!pressingIntoCeiling) { + searchBox = searchBox.expandTowards(0.0, 1.0E-5D, 0.0); + } + + List stepShapes = new ArrayList<>(entityShapes); + entity.level().getBlockCollisions(entity, searchBox).forEach(stepShapes::add); + + float currentStepY = (float) collided.y; + float[] candidateHeights = antarchy$collectCandidateStepDownHeights(steppedBox, stepShapes, maxUpStep, currentStepY); + for (float candidate : candidateHeights) { + Vec3 stepped = Entity.collideBoundingBox(entity, new Vec3(movement.x, -(double) candidate, movement.z), steppedBox, entity.level(), stepShapes); + if (stepped.horizontalDistanceSqr() > collided.horizontalDistanceSqr()) { + double offset = steppedBox.maxY - aabb.maxY; + cir.setReturnValue(stepped.add(0.0, offset, 0.0)); + return; + } + } + + cir.setReturnValue(collided); + } + + @Unique + private static float[] antarchy$collectCandidateStepDownHeights(AABB box, List shapes, float maxStep, float currentY) { + TreeSet heights = new TreeSet<>(); + for (VoxelShape shape : shapes) { + for (double coord : shape.getCoords(Direction.Axis.Y)) { + float height = (float) (box.maxY - coord); + if (height >= 0.0F && height != currentY && height <= maxStep) { + heights.add(height); + } + } + } + + float[] result = new float[heights.size()]; + int i = 0; + for (float height : heights) { + result[i++] = height; + } + return result; + } + @Unique private boolean antarchy$intersectsAntiwater(Entity entity, AABB box) { BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); diff --git a/common-1.21.1/src/main/resources/antarchy-common.mixins.json b/common-1.21.1/src/main/resources/antarchy-common.mixins.json index afb5109c..5a9c099a 100644 --- a/common-1.21.1/src/main/resources/antarchy-common.mixins.json +++ b/common-1.21.1/src/main/resources/antarchy-common.mixins.json @@ -21,8 +21,12 @@ "FlintAndSteelPortalIgnitionMixin", "FrogSpawnVariantMixin", "FrogVariantBootstrapMixin", + "GlimmeringDamageImmunityMixin", + "GlimmeringPushableMixin", + "GlimmeringPushEntitiesMixin", "GlowSquidLumenSpawnMixin", "GlowVinesUnderLeavesMixin", + "GrindstoneMenuMixin", "MantisClawWallClimbMixin", "MilkBucketSizeResetMixin", "MinecartItemMixin", @@ -38,6 +42,8 @@ "SpongeAntiwaterMixin", "SquidzookaEnchantMixin", "SquidzookaMultishotMixin", + "TigerEyeCamouflageMixin", + "TigerEyeVisibilityMixin", "gravity.AbstractArrowGravityMixin", "gravity.BucketItemGravityMixin", "gravity.ChunkMapAccessor", @@ -85,8 +91,11 @@ "client.MountedVehicleCameraMixin", "client.ParalyzedMouseTurnMixin", "client.ScreenEffectRendererFireVisualMixin", + "client.GlimmeringTranslucencyMixin", "client.SplashManagerMixin", "client.ThoraxisFogMixin", + "client.TigerEyeArmorHideMixin", + "client.TigerEyeNameTagHideMixin", "client.WolfRendererGrimMixin", "gravity.client.CameraGravityMixin", "gravity.client.ClientPacketListenerGravityMixin", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/animations/ant.animation.json b/common-1.21.1/src/main/resources/assets/antarchy/animations/ant.animation.json index a266f40c..407e3b75 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/animations/ant.animation.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/animations/ant.animation.json @@ -3,47 +3,1342 @@ "animations": { "idle": { "loop": true, - "animation_length": 4, + "animation_length": 2, + "bones": { + "head": { + "rotation": { + "vector": ["-math.cos(q.anim_time*90*2-130)*2", 0, 0] + } + }, + "thorax": { + "rotation": { + "vector": ["-math.cos(q.anim_time*90*2-50)", 0, 0] + }, + "position": { + "vector": [0, "math.cos(q.anim_time*90*2)/4", 0] + } + }, + "abdomen": { + "rotation": { + "vector": ["-5+math.cos(q.anim_time*90*2-80)*2", 0, 0] + } + }, + "r_antenna": { + "rotation": { + "vector": ["5-math.cos(q.anim_time*90*2-60)*2", 0, "-5+math.cos(q.anim_time*90*2-100)*3"] + } + }, + "r_leg": { + "rotation": { + "vector": [0, 0, 32.5] + } + }, + "r_leg2": { + "rotation": { + "vector": [0, 0, -90] + } + }, + "r_leg3": { + "rotation": { + "vector": [0, -12.5, 32.5] + } + }, + "r_leg4": { + "rotation": { + "vector": [0, 0, -90] + } + }, + "r_leg5": { + "rotation": { + "vector": [0, 12.5, 32.5] + } + }, + "r_leg6": { + "rotation": { + "vector": [0, 0, -90] + } + }, + "l_leg": { + "rotation": { + "vector": [0, 0, -32.5] + } + }, + "l_leg2": { + "rotation": { + "vector": [0, 0, 90] + } + }, + "l_leg3": { + "rotation": { + "vector": [0, 12.5, -32.5] + } + }, + "l_leg4": { + "rotation": { + "vector": [0, 0, 90] + } + }, + "l_leg5": { + "rotation": { + "vector": [0, -12.5, -32.5] + } + }, + "l_leg6": { + "rotation": { + "vector": [0, 0, 90] + } + }, + "r_mandibule": { + "rotation": { + "vector": [0, "math.cos(q.anim_time*90*2*3)*3+10", 0] + } + }, + "l_mandibule": { + "rotation": { + "vector": [0, "-math.cos(q.anim_time*90*2*3)*3-10", 0] + } + }, + "r_antenna2": { + "rotation": { + "vector": ["-15-math.cos(q.anim_time*90*2-110)*3", 0, 0] + } + }, + "l_antenna2": { + "rotation": { + "vector": ["-15-math.cos(q.anim_time*90*2-110)*3", 0, 0] + } + }, + "l_antenna": { + "rotation": { + "vector": ["5-math.cos(q.anim_time*90*2-60)*2", 0, "5-math.cos(q.anim_time*90*2-100)*3"] + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 0.5, + "bones": { + "head": { + "rotation": { + "vector": ["-math.cos(q.anim_time*90*4*4+80)", "math.cos(q.anim_time*90*4*2+50)*2", "math.cos(q.anim_time*90*4*2+80)*3"] + } + }, + "thorax": { + "rotation": { + "vector": ["math.cos(q.anim_time*90*4*4-50)", "math.cos(q.anim_time*90*4*2-50)*2", "-math.cos(q.anim_time*90*4*2+110)*2"] + }, + "position": { + "vector": [0, "math.cos(q.anim_time*90*4*4)/5", 0] + } + }, + "abdomen": { + "rotation": { + "vector": ["2.5-math.cos(q.anim_time*90*4*4+70)*3", "-math.cos(q.anim_time*90*4*2+40)*6", "math.cos(q.anim_time*90*4*2)*3"] + } + }, + "r_antenna": { + "rotation": { + "vector": ["5-math.cos(q.anim_time*90*4*4)*3", 0, "-7.5+math.cos(q.anim_time*90*4*4-30)*2"] + } + }, + "r_leg": { + "rotation": { + "0.0": { + "vector": [-5, -5, 17.5] + }, + "0.1667": { + "vector": [0, 15, 22.5] + }, + "0.25": { + "pre": { + "vector": [9.58, 6.67, 28.19] + }, + "post": { + "vector": [9.58, 6.67, 28.19] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [11.25, 0, 28.75] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "vector": [-7.5, -15, 15] + }, + "0.5": { + "vector": [-5, -5, 17.5] + } + } + }, + "r_leg2": { + "rotation": { + "0.0": { + "vector": [0, 0, -51.67] + }, + "0.1667": { + "vector": [0, 0, -65] + }, + "0.25": { + "pre": { + "vector": [0, 0, -78.33] + }, + "post": { + "vector": [0, 0, -78.33] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -46.25] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "vector": [0, 0, -45] + }, + "0.5": { + "vector": [0, 0, -51.67] + } + } + }, + "r_leg3": { + "rotation": { + "0.0": { + "vector": [-35, -35, 50] + }, + "0.125": { + "pre": { + "vector": [-25, -42.5, 52.5] + }, + "post": { + "vector": [-25, -42.5, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [-25, -65, 25] + }, + "0.5": { + "vector": [-35, -35, 50] + } + } + }, + "r_leg4": { + "rotation": { + "0.0": { + "vector": [0, 0, -115] + }, + "0.0833": { + "pre": { + "vector": [0, 0, -110.83] + }, + "post": { + "vector": [0, 0, -110.83] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -52.65] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [0, 0, -35] + }, + "0.5": { + "vector": [0, 0, -115] + } + } + }, + "r_leg5": { + "rotation": { + "0.0": { + "vector": [15, 65, 20] + }, + "0.125": { + "pre": { + "vector": [37.5, 46.25, 47.5] + }, + "post": { + "vector": [37.5, 46.25, 47.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [40, 42.5, 50] + }, + "0.375": { + "vector": [27.5, 58.75, 35] + }, + "0.5": { + "vector": [15, 65, 20] + } + } + }, + "r_leg6": { + "rotation": { + "0.0": { + "vector": [0, 0, -30] + }, + "0.0833": { + "pre": { + "vector": [0, 0, -39.17] + }, + "post": { + "vector": [0, 0, -39.17] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -79.22] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [0, 0, -95] + }, + "0.5": { + "vector": [0, 0, -30] + } + } + }, + "l_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [9.58, -6.67, -28.19] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [11.25, 0, -28.75] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "vector": [-7.5, 15, -15] + }, + "0.4167": { + "vector": [0, -15, -22.5] + }, + "0.5": { + "pre": { + "vector": [9.58, -6.67, -28.19] + }, + "post": { + "vector": [9.58, -6.67, -28.19] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 78.33] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 46.25] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "vector": [0, 0, 45] + }, + "0.4167": { + "vector": [0, 0, 65] + }, + "0.5": { + "pre": { + "vector": [0, 0, 78.33] + }, + "post": { + "vector": [0, 0, 78.33] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg3": { + "rotation": { + "0.0": { + "vector": [-25, 65, -25] + }, + "0.25": { + "vector": [-35, 35, -50] + }, + "0.375": { + "pre": { + "vector": [-25, 42.5, -52.5] + }, + "post": { + "vector": [-25, 42.5, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [-25, 65, -25] + } + } + }, + "l_leg4": { + "rotation": { + "0.0": { + "vector": [0, 0, 35] + }, + "0.25": { + "vector": [0, 0, 115] + }, + "0.3333": { + "pre": { + "vector": [0, 0, 110.83] + }, + "post": { + "vector": [0, 0, 110.83] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 52.65] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, 0, 35] + } + } + }, + "l_leg5": { + "rotation": { + "0.0": { + "vector": [40, -42.5, -50] + }, + "0.125": { + "vector": [27.5, -58.75, -35] + }, + "0.25": { + "vector": [15, -65, -20] + }, + "0.375": { + "pre": { + "vector": [37.5, -46.25, -47.5] + }, + "post": { + "vector": [37.5, -46.25, -47.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [40, -42.5, -50] + } + } + }, + "l_leg6": { + "rotation": { + "0.0": { + "vector": [0, 0, 95] + }, + "0.25": { + "vector": [0, 0, 30] + }, + "0.3333": { + "pre": { + "vector": [0, 0, 39.17] + }, + "post": { + "vector": [0, 0, 39.17] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 79.22] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, 0, 95] + } + } + }, + "r_mandibule": { + "rotation": { + "vector": [0, "7.5-math.cos(q.anim_time*90*4*2-80)*5", 0] + } + }, + "l_mandibule": { + "rotation": { + "vector": [0, "-7.5+math.cos(q.anim_time*90*4*2-80)*5", 0] + } + }, + "r_antenna2": { + "rotation": { + "vector": ["-55-math.cos(q.anim_time*90*4*4-60)*5", 0, 0] + } + }, + "l_antenna2": { + "rotation": { + "vector": ["-55-math.cos(q.anim_time*90*4*4-60)*5", 0, 0] + } + }, + "l_antenna": { + "rotation": { + "vector": ["5-math.cos(q.anim_time*90*4*4)*3", 0, "7.5-math.cos(q.anim_time*90*4*4-30)*2"] + } + } + } + }, + "attack": { + "animation_length": 0.625, "bones": { "head": { "rotation": { "0.0": { "post": { - "vector": [7.5, 0, 0] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "2.0": { + "0.0417": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "4.0": { + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "thorax": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [3.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "pre": { + "vector": [0, 0.5, 0] + }, + "post": { + "vector": [0, 0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "abdomen": { + "rotation": { + "vector": [-5, 0, 0] + } + }, + "r_antenna": { + "rotation": { + "vector": [5, 0, -5] + } + }, + "r_leg": { + "rotation": { + "0.0": { + "vector": [0, 0, 32.5] + }, + "0.125": { + "pre": { + "vector": [0, 0, 47.5] + }, + "post": { + "vector": [0, 0, 47.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 47.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "vector": [0, 0, 32.5] + } + } + }, + "r_leg2": { + "rotation": { + "0.0": { + "vector": [0, 0, -90] + }, + "0.1667": { + "pre": { + "vector": [0, 0, -120] + }, + "post": { + "vector": [0, 0, -120] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, -120] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, -88.78] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "vector": [0, 0, -90] + } + } + }, + "r_leg3": { + "rotation": { + "0.0": { + "vector": [0, -12.5, 32.5] + }, + "0.1667": { + "pre": { + "vector": [-25, -12.5, 62.5] + }, + "post": { + "vector": [-25, -12.5, 62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-25, -12.5, 62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "vector": [0, -12.5, 32.5] + } + } + }, + "r_leg4": { + "rotation": { + "0.0": { + "vector": [0, 0, -90] + }, + "0.1667": { + "pre": { + "vector": [0, 0, -117.5] + }, + "post": { + "vector": [0, 0, -117.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, -117.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, -87.84] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "vector": [0, 0, -90] + } + } + }, + "r_leg5": { + "rotation": { + "0.0": { + "vector": [0, 12.5, 32.5] + }, + "0.0833": { + "pre": { + "vector": [17.5, 25, 25] + }, + "post": { + "vector": [17.5, 25, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [17.5, 35, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [17.5, 35, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "vector": [0, 12.5, 32.5] + } + } + }, + "r_leg6": { + "rotation": { + "0.0": { + "vector": [0, 0, -90] + }, + "0.0833": { + "pre": { + "vector": [0, 0, -67.5] + }, + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "vector": [0, 0, -90] + } + } + }, + "l_leg": { + "rotation": { + "0.0": { + "vector": [0, 0, -32.5] + }, + "0.125": { + "pre": { + "vector": [0, 0, -47.5] + }, + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "vector": [0, 0, -32.5] + } + } + }, + "l_leg2": { + "rotation": { + "0.0": { + "vector": [0, 0, 90] + }, + "0.1667": { + "pre": { + "vector": [0, 0, 120] + }, + "post": { + "vector": [0, 0, 120] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 120] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, 88.78] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "vector": [0, 0, 90] + } + } + }, + "l_leg3": { + "rotation": { + "0.0": { + "vector": [0, 12.5, -32.5] + }, + "0.1667": { + "pre": { + "vector": [-25, 12.5, -62.5] + }, + "post": { + "vector": [-25, 12.5, -62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-25, 12.5, -62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "vector": [0, 12.5, -32.5] + } + } + }, + "l_leg4": { + "rotation": { + "0.0": { + "vector": [0, 0, 90] + }, + "0.1667": { + "pre": { + "vector": [0, 0, 117.5] + }, + "post": { + "vector": [0, 0, 117.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 117.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, 87.84] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "vector": [0, 0, 90] + } + } + }, + "l_leg5": { + "rotation": { + "0.0": { + "vector": [0, -12.5, -32.5] + }, + "0.0833": { + "pre": { + "vector": [17.5, -25, -25] + }, + "post": { + "vector": [17.5, -25, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [17.5, -35, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [17.5, -35, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "vector": [0, -12.5, -32.5] + } + } + }, + "l_leg6": { + "rotation": { + "0.0": { + "vector": [0, 0, 90] + }, + "0.0833": { + "pre": { + "vector": [0, 0, 67.5] + }, + "post": { + "vector": [0, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 47.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 47.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "vector": [0, 0, 90] + } + } + }, + "body": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "pre": { + "vector": [0, 0, -4] + }, + "post": { + "vector": [0, 0, -4] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "vector": [0, 0, 0] + } + } + }, + "r_mandibule": { + "rotation": { + "0.0": { + "vector": [0, 10, 0] + }, + "0.125": { + "pre": { + "vector": [0, 50, 0] + }, + "post": { + "vector": [0, 50, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "vector": [0, 10, 0] + } + } + }, + "l_mandibule": { + "rotation": { + "0.0": { + "vector": [0, -10, 0] + }, + "0.125": { + "pre": { + "vector": [0, -50, 0] + }, + "post": { + "vector": [0, -50, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "vector": [0, -10, 0] + } + } + }, + "r_antenna2": { + "rotation": { + "0.0": { + "vector": [-15, 0, 0] + }, + "0.0833": { + "pre": { + "vector": [-45, 0, 0] + }, + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "vector": [-15, 0, 0] + } + } + }, + "l_antenna2": { + "rotation": { + "0.0": { + "vector": [-15, 0, 0] + }, + "0.0833": { + "pre": { + "vector": [-45, 0, 0] + }, + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "vector": [-15, 0, 0] + } + } + }, + "l_antenna": { + "rotation": { + "vector": [5, 0, 5] + } + } + } + }, + "dance": { + "loop": true, + "animation_length": 1.25, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-19.51503, 29.79277, 2.81051] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-19.51503, -29.79277, -2.81051] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-24.45193, -39.15023, 1.47929] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { "post": { "vector": [7.5, 0, 0] }, "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-19.51503, 29.79277, 2.81051] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-24.45193, 39.15023, -1.47929] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-19.51503, 29.79277, 2.81051] + }, + "lerp_mode": "catmullrom" + } + } + }, + "thorax": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, -7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, 7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 7.5, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.5, 0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0.42, -0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0.5, 0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0.5, 0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-0.42, -0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-0.5, 0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-0.5, 0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-0.5, 0.25, 0] + }, + "lerp_mode": "catmullrom" } } }, "abdomen": { "rotation": { "0.0": { + "post": { + "vector": [10.86961, -34.65749, 5.22206] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [10.86961, 34.65749, -5.22206] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [15.36224, 54.16058, 1.10208] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { "post": { "vector": [-7.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "2.0": { + "0.9167": { "post": { - "vector": [2.5, 0, 0] + "vector": [10.86961, -34.65749, 5.22206] }, "lerp_mode": "catmullrom" }, - "4.0": { + "1.0833": { "post": { - "vector": [-7.5, 0, 0] + "vector": [15.36224, -54.16058, -1.10208] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [10.86961, -34.65749, 5.22206] }, "lerp_mode": "catmullrom" } @@ -53,19 +1348,31 @@ "rotation": { "0.0": { "post": { - "vector": [-25, 0, 0] + "vector": [15, 0, 0] }, "lerp_mode": "catmullrom" }, - "2.0": { + "0.375": { "post": { - "vector": [-7.5, 17.5, 0] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "4.0": { + "0.625": { "post": { - "vector": [-25, 0, 0] + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [8.54, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [15, 0, 0] }, "lerp_mode": "catmullrom" } @@ -79,7 +1386,43 @@ }, "lerp_mode": "catmullrom" }, - "4.0": { + "0.125": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 50] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { "post": { "vector": [0, 0, 37.5] }, @@ -95,7 +1438,13 @@ }, "lerp_mode": "catmullrom" }, - "4.0": { + "0.625": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { "post": { "vector": [0, 0, -115] }, @@ -106,16 +1455,40 @@ "r_leg3": { "rotation": { "0.0": { + "post": { + "vector": [-15.02, 6.95, 32.96] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { "post": { "vector": [-15.84766, -19.58991, 40.25298] }, "lerp_mode": "catmullrom" }, - "4.0": { + "0.4167": { + "post": { + "vector": [-19.65736, -15.7627, 52.74765] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { "post": { "vector": [-15.84766, -19.58991, 40.25298] }, "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-15.02145, 6.95469, 32.95502] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-15.02, 6.95, 32.96] + }, + "lerp_mode": "catmullrom" } } }, @@ -127,7 +1500,13 @@ }, "lerp_mode": "catmullrom" }, - "4.0": { + "0.625": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { "post": { "vector": [0, 0, -115] }, @@ -138,16 +1517,52 @@ "r_leg5": { "rotation": { "0.0": { + "post": { + "vector": [14.15, 17.67, 39.71] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [37.69778, 21.2842, 64.84067] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { "post": { "vector": [14.15251, 17.67415, 39.71128] }, "lerp_mode": "catmullrom" }, - "4.0": { + "0.625": { "post": { "vector": [14.15251, 17.67415, 39.71128] }, "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [14.15251, 17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [16.32495, 15.69986, 47.26579] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [14.15251, 17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [14.15, 17.67, 39.71] + }, + "lerp_mode": "catmullrom" } } }, @@ -159,7 +1574,13 @@ }, "lerp_mode": "catmullrom" }, - "4.0": { + "0.625": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { "post": { "vector": [0, 0, -115] }, @@ -175,7 +1596,43 @@ }, "lerp_mode": "catmullrom" }, - "4.0": { + "0.125": { + "post": { + "vector": [0, 0, -50] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { "post": { "vector": [0, 0, -37.5] }, @@ -191,7 +1648,13 @@ }, "lerp_mode": "catmullrom" }, - "4.0": { + "0.625": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { "post": { "vector": [0, 0, 115] }, @@ -207,7 +1670,31 @@ }, "lerp_mode": "catmullrom" }, - "4.0": { + "0.25": { + "post": { + "vector": [-15.02145, -6.95469, -32.95502] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-15.84766, 19.58991, -40.25298] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-15.84766, 19.58991, -40.25298] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-19.65736, 15.7627, -52.74765] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { "post": { "vector": [-15.84766, 19.58991, -40.25298] }, @@ -223,7 +1710,13 @@ }, "lerp_mode": "catmullrom" }, - "4.0": { + "0.625": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { "post": { "vector": [0, 0, 115] }, @@ -239,7 +1732,43 @@ }, "lerp_mode": "catmullrom" }, - "4.0": { + "0.125": { + "post": { + "vector": [14.15251, -17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [16.32495, -15.69986, -47.26579] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [14.15251, -17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [14.15251, -17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [19.25656, -11.86554, -59.51995] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [14.15251, -17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { "post": { "vector": [14.15251, -17.67415, -39.71128] }, @@ -255,7 +1784,13 @@ }, "lerp_mode": "catmullrom" }, - "4.0": { + "0.625": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { "post": { "vector": [0, 0, 115] }, @@ -263,23 +1798,147 @@ } } }, - "l_antenna": { + "body": { "rotation": { "0.0": { "post": { - "vector": [-25, 0, 0] + "vector": [0, 17.5, 0] }, "lerp_mode": "catmullrom" }, - "2.0": { + "0.25": { "post": { - "vector": [-7.5, -17.5, 0] + "vector": [0, -17.5, 0] }, "lerp_mode": "catmullrom" }, - "4.0": { + "0.4167": { "post": { - "vector": [-25, 0, 0] + "vector": [0, -17.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 17.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, 17.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 17.5, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_eye": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [1, 0.3, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [1, 0.3, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [1, 0.3, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_eye": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [1, 0.3, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [1, 0.3, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [1, 0.3, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [1, 1, 1] }, "lerp_mode": "catmullrom" } @@ -289,19 +1948,19 @@ "rotation": { "0.0": { "post": { - "vector": [-0.17995, -12.39135, 1.6575] + "vector": [-0.06, -7.44, 0.98] }, "lerp_mode": "catmullrom" }, - "2.0": { + "0.625": { "post": { - "vector": [0.17875, 0.10358, 1.61888] + "vector": [-0.06397, -7.43547, 0.98448] }, "lerp_mode": "catmullrom" }, - "4.0": { + "1.25": { "post": { - "vector": [-0.17995, -12.39135, 1.6575] + "vector": [-0.06, -7.44, 0.98] }, "lerp_mode": "catmullrom" } @@ -315,23 +1974,137 @@ }, "lerp_mode": "catmullrom" }, - "2.0": { + "0.625": { "post": { - "vector": [0.17875, -0.10358, -1.61888] + "vector": [-0.17995, 12.39135, -1.6575] }, "lerp_mode": "catmullrom" }, - "4.0": { + "1.25": { "post": { "vector": [-0.06397, 7.43547, -0.98448] }, "lerp_mode": "catmullrom" } } + }, + "r_antenna2": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [57.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-59.12, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [26.22, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_antenna2": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-73.86148, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-76.62, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [8.54, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } } } }, - "dance": { + "old_dance": { "loop": true, "animation_length": 1.5, "bones": { @@ -416,13 +2189,13 @@ }, "0.25": { "post": { - "vector": [9.72631, 0.45349, -2.99327] + "vector": [19.73, 30.45, -2.99] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [9.72631, 0.45349, -2.99327] + "vector": [19.73, 30.45, -2.99] }, "lerp_mode": "catmullrom" }, @@ -434,13 +2207,13 @@ }, "1.0": { "post": { - "vector": [12.5, -12.5, 0] + "vector": [19.73, -30.45, 2.99] }, "lerp_mode": "catmullrom" }, "1.25": { "post": { - "vector": [12.5, -12.5, 0] + "vector": [19.73, -30.45, 2.99] }, "lerp_mode": "catmullrom" }, @@ -738,7 +2511,7 @@ } } }, - "ant": { + "body": { "rotation": { "0.0": { "post": { @@ -816,28 +2589,6 @@ } } }, - "l_antenna": { - "rotation": { - "0.0": { - "post": { - "vector": [-25, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-25, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-25, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, "r_mandibule": { "rotation": { "0.0": { @@ -893,414 +2644,6 @@ "lerp_mode": "catmullrom" } } - } - } - }, - "walk": { - "loop": true, - "animation_length": 0.5, - "bones": { - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "thorax": { - "rotation": { - "0.0": { - "vector": [0, 0, 0] - }, - "0.5": { - "vector": [0, 0, 0] - } - } - }, - "abdomen": { - "rotation": { - "0.0": { - "post": { - "vector": [-7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "r_antenna": { - "rotation": { - "0.0": { - "post": { - "vector": [-25, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-25.16955, 1.29256, -14.94548] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-25, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "r_leg": { - "rotation": { - "0.0": { - "post": { - "vector": [31.33144, 34.12398, 47.33883] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [31.33144, 34.12398, 47.33883] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-14.15251, -17.67415, 62.21128] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [5.74672, 4.98753, 33.20458] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [31.33144, 34.12398, 47.33883] - }, - "lerp_mode": "catmullrom" - } - } - }, - "r_leg2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -115] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -115] - }, - "lerp_mode": "catmullrom" - } - } - }, - "r_leg3": { - "rotation": { - "0.0": { - "post": { - "vector": [-33.59794, -35.79744, 48.63781] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [12.49325, 15.74419, 39.23412] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-33.59794, -35.79744, 48.63781] - }, - "lerp_mode": "catmullrom" - } - } - }, - "r_leg4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -115] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -115] - }, - "lerp_mode": "catmullrom" - } - } - }, - "r_leg5": { - "rotation": { - "0.0": { - "post": { - "vector": [-30.04912, -35.07869, 44.72041] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [29.82269, 35.55522, 45.05671] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-30.04912, -35.07869, 44.72041] - }, - "lerp_mode": "catmullrom" - } - } - }, - "r_leg6": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -115] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -115] - }, - "lerp_mode": "catmullrom" - } - } - }, - "l_leg": { - "rotation": { - "0.0": { - "post": { - "vector": [-14.15251, 17.67415, -62.21128] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [5.74672, -4.98753, -33.20458] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [31.33144, -34.12398, -47.33883] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [31.33144, -34.12398, -47.33883] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-14.15251, 17.67415, -62.21128] - }, - "lerp_mode": "catmullrom" - } - } - }, - "l_leg2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 115] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 115] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 115] - }, - "lerp_mode": "catmullrom" - } - } - }, - "l_leg3": { - "rotation": { - "0.0": { - "post": { - "vector": [12.49325, -15.74419, -39.23412] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-33.59794, 35.79744, -48.63781] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [12.49325, -15.74419, -39.23412] - }, - "lerp_mode": "catmullrom" - } - } - }, - "l_leg4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 115] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 115] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 115] - }, - "lerp_mode": "catmullrom" - } - } - }, - "l_leg5": { - "rotation": { - "0.0": { - "post": { - "vector": [29.82269, -35.55522, -45.05671] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-30.04912, 35.07869, -44.72041] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [29.82269, -35.55522, -45.05671] - }, - "lerp_mode": "catmullrom" - } - } - }, - "l_leg6": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 115] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 115] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 115] - }, - "lerp_mode": "catmullrom" - } - } - }, - "ant": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -2] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "r_eye": { - "scale": { - "0.0": { - "vector": [1, 1, 1] - }, - "0.5": { - "vector": [1, 1, 1] - } - } - }, - "l_eye": { - "scale": { - "0.0": { - "vector": [1, 1, 1] - }, - "0.5": { - "vector": [1, 1, 1] - } - } }, "l_antenna": { "rotation": { @@ -1310,817 +2653,19 @@ }, "lerp_mode": "catmullrom" }, - "0.25": { - "post": { - "vector": [-25.16955, -1.29256, 14.94548] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-25, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "r_mandibule": { - "rotation": { - "0.0": { - "post": { - "vector": [-0.17995, -12.39135, 1.6575] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-0.17995, -12.39135, 1.6575] - }, - "lerp_mode": "catmullrom" - } - } - }, - "l_mandibule": { - "rotation": { - "0.0": { - "post": { - "vector": [-0.06397, 7.43547, -0.98448] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-0.06397, 7.43547, -0.98448] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "attack": { - "loop": true, - "animation_length": 1, - "bones": { - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [-20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "thorax": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [-15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "abdomen": { - "rotation": { - "0.0": { - "post": { - "vector": [-7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [19.92514, 0.26438, -1.96682] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [19.92514, 0.26438, -1.96682] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [30, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [30, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "r_antenna": { - "rotation": { - "0.0": { - "post": { - "vector": [-25, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [-50, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-50, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-25, 0, 0] - }, - "lerp_mode": "catmullrom" - }, "0.75": { "post": { "vector": [-25, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.0": { + "1.5": { "post": { "vector": [-25, 0, 0] }, "lerp_mode": "catmullrom" } } - }, - "r_leg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-14.15251, -17.67415, 39.71128] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-14.15251, -17.67415, 39.71128] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "r_leg2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -115] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, -115] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -115] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -115] - }, - "lerp_mode": "catmullrom" - } - } - }, - "r_leg3": { - "rotation": { - "0.0": { - "post": { - "vector": [-15.84766, -19.58991, 40.25298] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-33.59794, -35.79744, 48.63781] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-33.59794, -35.79744, 48.63781] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-15.84766, -19.58991, 40.25298] - }, - "lerp_mode": "catmullrom" - } - } - }, - "r_leg4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -115] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, -115] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -115] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -115] - }, - "lerp_mode": "catmullrom" - } - } - }, - "r_leg5": { - "rotation": { - "0.0": { - "post": { - "vector": [14.15251, 17.67415, 39.71128] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [31.33144, 34.12398, 47.33883] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [31.33144, 34.12398, 47.33883] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [31.33144, 34.12398, 47.33883] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [31.33144, 34.12398, 47.33883] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [14.15251, 17.67415, 39.71128] - }, - "lerp_mode": "catmullrom" - } - } - }, - "r_leg6": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -115] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, -115] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -115] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -115] - }, - "lerp_mode": "catmullrom" - } - } - }, - "l_leg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-14.15251, 17.67415, -39.71128] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-14.15251, 17.67415, -39.71128] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "l_leg2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 115] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 115] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 115] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 115] - }, - "lerp_mode": "catmullrom" - } - } - }, - "l_leg3": { - "rotation": { - "0.0": { - "post": { - "vector": [-15.84766, 19.58991, -40.25298] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-33.59794, 35.79744, -48.63781] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-33.59794, 35.79744, -48.63781] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-15.84766, 19.58991, -40.25298] - }, - "lerp_mode": "catmullrom" - } - } - }, - "l_leg4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 115] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 115] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 115] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 115] - }, - "lerp_mode": "catmullrom" - } - } - }, - "l_leg5": { - "rotation": { - "0.0": { - "post": { - "vector": [14.15251, -17.67415, -39.71128] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [31.33144, -34.12398, -47.33883] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [31.33144, -34.12398, -47.33883] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [31.33144, -34.12398, -47.33883] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [31.33144, -34.12398, -47.33883] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [14.15251, -17.67415, -39.71128] - }, - "lerp_mode": "catmullrom" - } - } - }, - "l_leg6": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 115] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 115] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 115] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 115] - }, - "lerp_mode": "catmullrom" - } - } - }, - "ant": { - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [0, 0, 3] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 3] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, -3] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -3] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "r_eye": { - "scale": { - "0.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [1, 0.4, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [1, 0.4, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - } - } - }, - "l_eye": { - "scale": { - "0.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [1, 0.9, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [1, 0.4, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [1, 0.4, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - } - } - }, - "l_antenna": { - "rotation": { - "0.0": { - "post": { - "vector": [-25, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [-50, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-50, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-25, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-25, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-25, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "r_mandibule": { - "rotation": { - "0.0": { - "post": { - "vector": [-0.17995, -12.39135, 1.6575] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [-0.27472, 52.98677, 1.40178] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-0.27472, 52.98677, 1.40178] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-2.2516, -39.58992, 6.25038] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-2.2516, -39.58992, 6.25038] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-0.17995, -12.39135, 1.6575] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [-0.17995, -12.39135, 1.6575] - }, - "lerp_mode": "catmullrom" - } - } - }, - "l_mandibule": { - "rotation": { - "0.0": { - "post": { - "vector": [-0.06397, 7.43547, -0.98448] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [-0.27472, -52.98677, -1.40178] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-0.27472, -52.98677, -1.40178] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-2.2516, 39.58992, -6.25038] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-2.2516, 39.58992, -6.25038] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-0.06397, 7.43547, -0.98448] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [-0.06397, 7.43547, -0.98448] - }, - "lerp_mode": "catmullrom" - } - } } } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/animations/flying_squirrel.animation.json b/common-1.21.1/src/main/resources/assets/antarchy/animations/flying_squirrel.animation.json index f6192a76..5d929a89 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/animations/flying_squirrel.animation.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/animations/flying_squirrel.animation.json @@ -7,407 +7,77 @@ "bones": { "left_leg": { "rotation": { - "vector": ["5+math.cos(q.anim_time*90*2)*2", 0, -2.5] + "vector": ["5+math.cos(query.anim_time*90*2)*2", 0, -2.5] }, "position": { - "vector": [0, "0.15+math.cos(q.anim_time*90*2)/14", "-math.cos(q.anim_time*90*2)/5"] + "vector": [0, "0.15+math.cos(query.anim_time*90*2)/14", "-math.cos(query.anim_time*90*2)/5"] } }, "right_leg": { "rotation": { - "vector": ["5+math.cos(q.anim_time*90*2)*2", 0, 2.5] + "vector": ["5+math.cos(query.anim_time*90*2)*2", 0, 2.5] }, "position": { - "vector": [0, "0.15+math.cos(q.anim_time*90*2)/14", "-math.cos(q.anim_time*90*2)/5"] + "vector": [0, "0.15+math.cos(query.anim_time*90*2)/14", "-math.cos(query.anim_time*90*2)/5"] } }, "torso": { "rotation": { - "vector": ["-math.cos(q.anim_time*90*2-60)", 0, 0] + "vector": ["-math.cos(query.anim_time*90*2-60)", 0, 0] }, "position": { - "vector": [0, "math.cos(q.anim_time*90*2)/5", 0] + "vector": [0, "math.cos(query.anim_time*90*2)/5", 0] } }, "head": { "rotation": { - "vector": ["-math.cos(q.anim_time*90*2-160)*2", 0, 0] + "vector": ["-math.cos(query.anim_time*90*2-160)*2", 0, 0] } }, "left_ear": { "rotation": { - "vector": ["math.cos(q.anim_time*90*2)*6", "math.cos(q.anim_time*90*2-40)*5", "7.5+math.cos(q.anim_time*90*2+30)*5"] + "vector": ["math.cos(query.anim_time*90*2)*6", "math.cos(query.anim_time*90*2-40)*5", "7.5+math.cos(query.anim_time*90*2+30)*5"] } }, "right_ear": { "rotation": { - "vector": ["math.cos(q.anim_time*90*2)*6", "-math.cos(q.anim_time*90*2-40)*5", "-7.5-math.cos(q.anim_time*90*2+30)*5"] + "vector": ["math.cos(query.anim_time*90*2)*6", "-math.cos(query.anim_time*90*2-40)*5", "-7.5-math.cos(query.anim_time*90*2+30)*5"] } }, "tail": { "rotation": { - "vector": ["math.cos(q.anim_time*90*2+50)*4", 0, 0] + "vector": ["math.cos(query.anim_time*90*2+50)*4", 0, 0] } }, "left_arm": { "rotation": { - "vector": ["math.cos(q.anim_time*90*2-60)*3-3", 0, -5] + "vector": ["math.cos(query.anim_time*90*2-60)*3-3", 0, -5] }, "position": { - "vector": [0, "-math.cos(q.anim_time*90*2-30)/4", "-math.cos(q.anim_time*90*2-50)/5"] + "vector": [0, "-math.cos(query.anim_time*90*2-30)/4", "-math.cos(query.anim_time*90*2-50)/5"] } }, "right_arm": { "rotation": { - "vector": ["math.cos(q.anim_time*90*2-60)*3-3", 0, 5] + "vector": ["math.cos(query.anim_time*90*2-60)*3-3", 0, 5] }, "position": { - "vector": [0, "-math.cos(q.anim_time*90*2-30)/4", "-math.cos(q.anim_time*90*2-50)/5"] + "vector": [0, "-math.cos(query.anim_time*90*2-30)/4", "-math.cos(query.anim_time*90*2-50)/5"] } }, "left_leg2": { "rotation": { - "vector": ["-5-math.cos(q.anim_time*90*2)*2", 0, 2.5] + "vector": ["-5-math.cos(query.anim_time*90*2)*2", 0, 2.5] } }, "right_leg2": { "rotation": { - "vector": ["-5-math.cos(q.anim_time*90*2)*2", 0, -2.5] + "vector": ["-5-math.cos(query.anim_time*90*2)*2", 0, -2.5] } } } }, - "climbing": { - "loop": true, - "animation_length": 1, - "bones": { - "squirrel": { - "rotation": { - "vector": [-90, 0, 0] - }, - "position": { - "vector": [0, 6.75, -5] - } - }, - "left_leg": { - "rotation": { - "0.25": { - "pre": { - "vector": [108.1133, 33.6443, 10.272] - }, - "post": { - "vector": [108.1133, 33.6443, 10.272] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [118.1133, 33.6443, 10.272] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [108.1133, 33.6443, 10.272] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [108.1133, 33.6443, 10.272] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.25": { - "pre": { - "vector": [0, 0, 0] - }, - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, -1, -2] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_arm": { - "rotation": { - "0.0": { - "post": { - "vector": [-90, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-110, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-90, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-90, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, -1.06031, 0.34202] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, -2.06, -0.66] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, -2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_flying_part": { - "scale": { - "vector": [0, 0, 0] - } - }, - "right_arm": { - "rotation": { - "0.25": { - "pre": { - "vector": [-90, 0, 0] - }, - "post": { - "vector": [-90, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-110, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-90, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-90, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.25": { - "pre": { - "vector": [0, -2, 0] - }, - "post": { - "vector": [0, -2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, -1.06031, 0.34202] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, -2.06, -0.66] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, -2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_flying_part": { - "scale": { - "vector": [0, 0, 0] - } - }, - "right_leg": { - "rotation": { - "0.0": { - "post": { - "vector": [108.1133, -33.6443, -10.272] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [118.1133, -33.6443, -10.272] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [108.1133, -33.6443, -10.272] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [108.1133, -33.6443, -10.272] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, -1, -2] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_cheeks": { - "scale": { - "vector": [0, 0, 0] - } - }, - "right_cheeks": { - "scale": { - "vector": [0, 0, 0] - } - } - } - }, - "walking": { + "walk": { "loop": true, "animation_length": 0.5, "bones": { @@ -415,51 +85,31 @@ "position": { "0.0": { "post": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, "0.0833": { "post": { - "vector": [ - 0, - 2, - 0 - ] + "vector": [0, 2, 0] }, "lerp_mode": "catmullrom" }, "0.2083": { "post": { - "vector": [ - 0, - 2, - 0 - ] + "vector": [0, 2, 0] }, "lerp_mode": "catmullrom" }, "0.3333": { "post": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } @@ -468,230 +118,126 @@ "left_leg": { "rotation": { "0.0": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] }, "0.0833": { "pre": { - "vector": [ - 40, - -5, - 0 - ] + "vector": [40, -5, 0] }, "post": { - "vector": [ - 40, - -5, - 0 - ] + "vector": [40, -5, 0] }, "lerp_mode": "catmullrom" }, "0.2083": { "post": { - "vector": [ - 47.5, - -15, - 0 - ] + "vector": [47.5, -15, 0] }, "lerp_mode": "catmullrom" }, "0.375": { "post": { - "vector": [ - -20, - -10, - -15 - ] + "vector": [-20, -10, -15] }, "lerp_mode": "catmullrom" }, "0.5": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] } }, "position": { "0.0": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] }, "0.125": { "pre": { - "vector": [ - 0, - 1, - 1 - ] + "vector": [0, 1, 1] }, "post": { - "vector": [ - 0, - 1, - 1 - ] + "vector": [0, 1, 1] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - 0, - 2.5, - -1.22 - ] + "vector": [0, 2.5, -1.22] }, "lerp_mode": "catmullrom" }, "0.375": { "post": { - "vector": [ - 0, - 1, - -0.58 - ] + "vector": [0, 1, -0.58] }, "lerp_mode": "catmullrom" }, "0.5": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] } } }, "right_leg": { "rotation": { "0.0": { - "vector": [ - -11.39, - 2.41, - 5 - ] + "vector": [-11.39, 2.41, 5] }, "0.0417": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] }, "0.125": { "pre": { - "vector": [ - 40, - 5, - 0 - ] + "vector": [40, 5, 0] }, "post": { - "vector": [ - 40, - 5, - 0 - ] + "vector": [40, 5, 0] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - 47.5, - 15, - 0 - ] + "vector": [47.5, 15, 0] }, "lerp_mode": "catmullrom" }, "0.4167": { "post": { - "vector": [ - -20, - 10, - 15 - ] + "vector": [-20, 10, 15] }, "lerp_mode": "catmullrom" }, "0.5": { - "vector": [ - -11.39, - 2.41, - 5 - ] + "vector": [-11.39, 2.41, 5] } }, "position": { "0.0": { - "vector": [ - 0, - 0.17, - -0.22 - ] + "vector": [0, 0.17, -0.22] }, "0.0417": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] }, "0.1667": { "pre": { - "vector": [ - 0, - 1, - 1 - ] + "vector": [0, 1, 1] }, "post": { - "vector": [ - 0, - 1, - 1 - ] + "vector": [0, 1, 1] }, "lerp_mode": "catmullrom" }, "0.2917": { "post": { - "vector": [ - 0, - 2.5, - -1.22 - ] + "vector": [0, 2.5, -1.22] }, "lerp_mode": "catmullrom" }, "0.4167": { "post": { - "vector": [ - 0, - 1, - -0.58 - ] + "vector": [0, 1, -0.58] }, "lerp_mode": "catmullrom" }, "0.5": { - "vector": [ - 0, - 0.17, - -0.22 - ] + "vector": [0, 0.17, -0.22] } } }, @@ -699,41 +245,25 @@ "rotation": { "0.0": { "post": { - "vector": [ - -5, - 0, - 0 - ] + "vector": [-5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.0833": { "post": { - "vector": [ - -10, - 0, - 0 - ] + "vector": [-10, 0, 0] }, "lerp_mode": "catmullrom" }, "0.2917": { "post": { - "vector": [ - 7.5, - 0, - 0 - ] + "vector": [7.5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - -5, - 0, - 0 - ] + "vector": [-5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -741,41 +271,25 @@ "position": { "0.0": { "post": { - "vector": [ - 0, - -0.71, - 0 - ] + "vector": [0, -0.71, 0] }, "lerp_mode": "catmullrom" }, "0.0833": { "post": { - "vector": [ - 0, - -1, - 0 - ] + "vector": [0, -1, 0] }, "lerp_mode": "catmullrom" }, "0.2917": { "post": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - 0, - -0.71, - 0 - ] + "vector": [0, -0.71, 0] }, "lerp_mode": "catmullrom" } @@ -785,41 +299,25 @@ "rotation": { "0.0": { "post": { - "vector": [ - 10, - 0, - 0 - ] + "vector": [10, 0, 0] }, "lerp_mode": "catmullrom" }, "0.125": { "post": { - "vector": [ - 7.5, - 0, - 0 - ] + "vector": [7.5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.2917": { "post": { - "vector": [ - -7.5, - 0, - 0 - ] + "vector": [-7.5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - 10, - 0, - 0 - ] + "vector": [10, 0, 0] }, "lerp_mode": "catmullrom" } @@ -829,61 +327,37 @@ "rotation": { "0.0": { "post": { - "vector": [ - 0, - 0, - 37.5 - ] + "vector": [0, 0, 37.5] }, "lerp_mode": "catmullrom" }, "0.0833": { "post": { - "vector": [ - 0, - 0, - 55 - ] + "vector": [0, 0, 55] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - 0, - 0, - 7.5 - ] + "vector": [0, 0, 7.5] }, "lerp_mode": "catmullrom" }, "0.3333": { "post": { - "vector": [ - 0, - 0, - 7.5 - ] + "vector": [0, 0, 7.5] }, "lerp_mode": "catmullrom" }, "0.4167": { "post": { - "vector": [ - 0, - 0, - 17.5 - ] + "vector": [0, 0, 17.5] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - 0, - 0, - 37.5 - ] + "vector": [0, 0, 37.5] }, "lerp_mode": "catmullrom" } @@ -893,61 +367,37 @@ "rotation": { "0.0": { "post": { - "vector": [ - 0, - 0, - -37.5 - ] + "vector": [0, 0, -37.5] }, "lerp_mode": "catmullrom" }, "0.0833": { "post": { - "vector": [ - 0, - 0, - -55 - ] + "vector": [0, 0, -55] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - 0, - 0, - -7.5 - ] + "vector": [0, 0, -7.5] }, "lerp_mode": "catmullrom" }, "0.3333": { "post": { - "vector": [ - 0, - 0, - -7.5 - ] + "vector": [0, 0, -7.5] }, "lerp_mode": "catmullrom" }, "0.4167": { "post": { - "vector": [ - 0, - 0, - -17.5 - ] + "vector": [0, 0, -17.5] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - 0, - 0, - -37.5 - ] + "vector": [0, 0, -37.5] }, "lerp_mode": "catmullrom" } @@ -957,41 +407,25 @@ "rotation": { "0.0": { "post": { - "vector": [ - 5.56, - 0, - 0 - ] + "vector": [5.56, 0, 0] }, "lerp_mode": "catmullrom" }, "0.1667": { "post": { - "vector": [ - -10, - 0, - 0 - ] + "vector": [-10, 0, 0] }, "lerp_mode": "catmullrom" }, "0.4167": { "post": { - "vector": [ - 10, - 0, - 0 - ] + "vector": [10, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - 5.56, - 0, - 0 - ] + "vector": [5.56, 0, 0] }, "lerp_mode": "catmullrom" } @@ -1000,125 +434,73 @@ "left_arm": { "rotation": { "0.0": { - "vector": [ - 5, - -5, - 2.5 - ] + "vector": [5, -5, 2.5] }, "0.0833": { "pre": { - "vector": [ - 27.73, - -7.5, - 10 - ] + "vector": [27.73, -7.5, 10] }, "post": { - "vector": [ - 27.73, - -7.5, - 10 - ] + "vector": [27.73, -7.5, 10] }, "lerp_mode": "catmullrom" }, "0.2083": { "post": { - "vector": [ - -80, - -12.5, - 15 - ] + "vector": [-80, -12.5, 15] }, "lerp_mode": "catmullrom" }, "0.3333": { "post": { - "vector": [ - -35, - -7.5, - 10 - ] + "vector": [-35, -7.5, 10] }, "lerp_mode": "catmullrom" }, "0.4167": { "post": { - "vector": [ - -10, - 0, - 0 - ] + "vector": [-10, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { - "vector": [ - 5, - -5, - 2.5 - ] + "vector": [5, -5, 2.5] } }, "position": { "0.0": { "post": { - "vector": [ - 0.5, - 0, - 0 - ] + "vector": [0.5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.0833": { "post": { - "vector": [ - 0.86, - 0, - 0 - ] + "vector": [0.86, 0, 0] }, "lerp_mode": "catmullrom" }, "0.2083": { "post": { - "vector": [ - 0.8, - 0, - 0 - ] + "vector": [0.8, 0, 0] }, "lerp_mode": "catmullrom" }, "0.3333": { "post": { - "vector": [ - 0.55, - 0, - 0 - ] + "vector": [0.55, 0, 0] }, "lerp_mode": "catmullrom" }, "0.4167": { "post": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - 0.5, - 0, - 0 - ] + "vector": [0.5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -1126,152 +508,88 @@ }, "left_flying_part": { "rotation": { - "vector": [ - 32.5, - 0, - 0 - ] + "vector": [32.5, 0, 0] } }, "right_arm": { "rotation": { "0.0": { - "vector": [ - -2.36, - 1.88, - -0.16 - ] + "vector": [-2.36, 1.88, -0.16] }, "0.0417": { - "vector": [ - 5, - 5, - -2.5 - ] + "vector": [5, 5, -2.5] }, "0.125": { "pre": { - "vector": [ - 27.73, - 7.5, - -10 - ] + "vector": [27.73, 7.5, -10] }, "post": { - "vector": [ - 27.73, - 7.5, - -10 - ] + "vector": [27.73, 7.5, -10] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - -80, - 12.5, - -15 - ] + "vector": [-80, 12.5, -15] }, "lerp_mode": "catmullrom" }, "0.375": { "post": { - "vector": [ - -35, - 7.5, - -10 - ] + "vector": [-35, 7.5, -10] }, "lerp_mode": "catmullrom" }, "0.4583": { "post": { - "vector": [ - -10, - 0, - 0 - ] + "vector": [-10, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { - "vector": [ - -2.36, - 1.88, - -0.16 - ] + "vector": [-2.36, 1.88, -0.16] } }, "position": { "0.0": { "post": { - "vector": [ - -0.19, - 0, - 0 - ] + "vector": [-0.19, 0, 0] }, "lerp_mode": "catmullrom" }, "0.0417": { "post": { - "vector": [ - -0.5, - 0, - 0 - ] + "vector": [-0.5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.125": { "post": { - "vector": [ - -0.86, - 0, - 0 - ] + "vector": [-0.86, 0, 0] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - -0.8, - 0, - 0 - ] + "vector": [-0.8, 0, 0] }, "lerp_mode": "catmullrom" }, "0.375": { "post": { - "vector": [ - -0.55, - 0, - 0 - ] + "vector": [-0.55, 0, 0] }, "lerp_mode": "catmullrom" }, "0.4583": { "post": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - -0.19, - 0, - 0 - ] + "vector": [-0.19, 0, 0] }, "lerp_mode": "catmullrom" } @@ -1279,16 +597,12 @@ }, "right_flying_part": { "rotation": { - "vector": [ - 32.5, - 0, - 0 - ] + "vector": [32.5, 0, 0] } } } }, - "gliding": { + "fly": { "loop": true, "animation_length": 1, "bones": { @@ -1296,102 +610,62 @@ "rotation": { "0.0": { "post": { - "vector": [ - 7.5, - 0, - -2.5 - ] + "vector": [7.5, 0, -2.5] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - 10, - 0, - 0 - ] + "vector": [10, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - 7.5, - 0, - 2.5 - ] + "vector": [7.5, 0, 2.5] }, "lerp_mode": "catmullrom" }, "0.75": { "post": { - "vector": [ - 5, - 0, - 0 - ] + "vector": [5, 0, 0] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [ - 7.5, - 0, - -2.5 - ] + "vector": [7.5, 0, -2.5] }, "lerp_mode": "catmullrom" } }, "position": { - "vector": [ - 0, - 0, - 0 - ] + "vector": [0, 0, 0] } }, "left_leg": { "rotation": { "0.0": { "post": { - "vector": [ - 92.5, - 12.5, - -15 - ] + "vector": [92.5, 12.5, -15] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - 85, - 12.5, - -15 - ] + "vector": [85, 12.5, -15] }, "lerp_mode": "catmullrom" }, "0.75": { "post": { - "vector": [ - 100, - 12.5, - -15 - ] + "vector": [100, 12.5, -15] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [ - 92.5, - 12.5, - -15 - ] + "vector": [92.5, 12.5, -15] }, "lerp_mode": "catmullrom" } @@ -1401,51 +675,31 @@ "rotation": { "0.0": { "post": { - "vector": [ - 95.83, - -12.5, - 15 - ] + "vector": [95.83, -12.5, 15] }, "lerp_mode": "catmullrom" }, "0.0833": { "post": { - "vector": [ - 92.5, - -12.5, - 15 - ] + "vector": [92.5, -12.5, 15] }, "lerp_mode": "catmullrom" }, "0.3333": { "post": { - "vector": [ - 85, - -12.5, - 15 - ] + "vector": [85, -12.5, 15] }, "lerp_mode": "catmullrom" }, "0.8333": { "post": { - "vector": [ - 100, - -12.5, - 15 - ] + "vector": [100, -12.5, 15] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [ - 95.83, - -12.5, - 15 - ] + "vector": [95.83, -12.5, 15] }, "lerp_mode": "catmullrom" } @@ -1455,41 +709,25 @@ "rotation": { "0.0": { "post": { - "vector": [ - -1.84, - 0, - 1.84 - ] + "vector": [-1.84, 0, 1.84] }, "lerp_mode": "catmullrom" }, "0.375": { "post": { - "vector": [ - 2.5, - 0, - -2.5 - ] + "vector": [2.5, 0, -2.5] }, "lerp_mode": "catmullrom" }, "0.875": { "post": { - "vector": [ - -2.5, - 0, - 2.5 - ] + "vector": [-2.5, 0, 2.5] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [ - -1.84, - 0, - 1.84 - ] + "vector": [-1.84, 0, 1.84] }, "lerp_mode": "catmullrom" } @@ -1499,102 +737,62 @@ "rotation": { "0.0": { "post": { - "vector": [ - -79.17, - 0, - 0 - ] + "vector": [-79.17, 0, 0] }, "lerp_mode": "catmullrom" }, "0.3333": { "post": { - "vector": [ - -67.5, - 0, - 0 - ] + "vector": [-67.5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.8333": { "post": { - "vector": [ - -85, - 0, - 0 - ] + "vector": [-85, 0, 0] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [ - -79.17, - 0, - 0 - ] + "vector": [-79.17, 0, 0] }, "lerp_mode": "catmullrom" } }, "position": { - "vector": [ - 0, - 3, - 0 - ] + "vector": [0, 3, 0] } }, "left_arm": { "rotation": { "0.0": { "post": { - "vector": [ - -27.5, - 0, - -92.5 - ] + "vector": [-27.5, 0, -92.5] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - -27.5, - 0, - -90 - ] + "vector": [-27.5, 0, -90] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - -27.5, - 0, - -92.5 - ] + "vector": [-27.5, 0, -92.5] }, "lerp_mode": "catmullrom" }, "0.75": { "post": { - "vector": [ - -27.5, - 0, - -90 - ] + "vector": [-27.5, 0, -90] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [ - -27.5, - 0, - -92.5 - ] + "vector": [-27.5, 0, -92.5] }, "lerp_mode": "catmullrom" } @@ -1604,131 +802,79 @@ "rotation": { "0.0": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "0.0833": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "0.1667": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "0.3333": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "0.4167": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "0.5833": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "0.6667": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "0.75": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "0.8333": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "0.9167": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" } @@ -1738,51 +884,31 @@ "rotation": { "0.0": { "post": { - "vector": [ - -27.5, - 0, - 92.5 - ] + "vector": [-27.5, 0, 92.5] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - -27.5, - 0, - 90 - ] + "vector": [-27.5, 0, 90] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - -27.5, - 0, - 92.5 - ] + "vector": [-27.5, 0, 92.5] }, "lerp_mode": "catmullrom" }, "0.75": { "post": { - "vector": [ - -27.5, - 0, - 90 - ] + "vector": [-27.5, 0, 90] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [ - -27.5, - 0, - 92.5 - ] + "vector": [-27.5, 0, 92.5] }, "lerp_mode": "catmullrom" } @@ -1792,131 +918,79 @@ "rotation": { "0.0": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "0.0833": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "0.1667": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "0.3333": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "0.4167": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "0.5833": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "0.6667": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "0.75": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "0.8333": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" }, "0.9167": { "post": { - "vector": [ - 27.5, - -5, - 0 - ] + "vector": [27.5, -5, 0] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [ - 27.5, - 5, - 0 - ] + "vector": [27.5, 5, 0] }, "lerp_mode": "catmullrom" } @@ -1924,306 +998,6 @@ } } }, - "item_pickup": { - "animation_length": 3, - "bones": { - "body": { - "rotation": { - "0.0": { - "post": { - "vector": [-65, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-65, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_arm": { - "rotation": { - "0.25": { - "pre": { - "vector": [0, 0, 0] - }, - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [-44.8924, 3.2116, 26.3342] - }, - "lerp_mode": "catmullrom" - }, - "1.375": { - "post": { - "vector": [-49.8924, 3.2116, 26.3342] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-42.3924, 3.2116, 26.3342] - }, - "lerp_mode": "catmullrom" - }, - "1.625": { - "post": { - "vector": [-44.8924, 3.2116, 26.3342] - }, - "lerp_mode": "catmullrom" - }, - "1.75": { - "post": { - "vector": [-49.8924, 3.2116, 26.3342] - }, - "lerp_mode": "catmullrom" - }, - "1.875": { - "post": { - "vector": [-42.3924, 3.2116, 26.3342] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-44.8924, 3.2116, 26.3342] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.25": { - "pre": { - "vector": [0, 0, 0] - }, - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail": { - "rotation": { - "0.0": { - "post": { - "vector": [42.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [60, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -1.0425, -1.31366] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_flying_part": { - "scale": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_arm": { - "rotation": { - "0.25": { - "pre": { - "vector": [0, 0, 0] - }, - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [-44.8924, -3.2116, -26.3342] - }, - "lerp_mode": "catmullrom" - }, - "1.375": { - "post": { - "vector": [-49.8924, -3.2116, -26.3342] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-42.3924, -3.2116, -26.3342] - }, - "lerp_mode": "catmullrom" - }, - "1.625": { - "post": { - "vector": [-44.8924, -3.2116, -26.3342] - }, - "lerp_mode": "catmullrom" - }, - "1.75": { - "post": { - "vector": [-49.8924, -3.2116, -26.3342] - }, - "lerp_mode": "catmullrom" - }, - "1.875": { - "post": { - "vector": [-42.3924, -3.2116, -26.3342] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-44.8924, -3.2116, -26.3342] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.25": { - "pre": { - "vector": [0, 0, 0] - }, - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_flying_part": { - "scale": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_cheeks": { - "scale": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.125": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_cheeks": { - "scale": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.125": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "quirk1": { "animation_length": 2, "bones": { @@ -2704,7 +1478,7 @@ "vector": [0, 0, 0] }, "0.7917": { - "vector": ["-math.cos(q.anim_time*90*32-60)*20", "-math.cos(q.anim_time*90*32)*20", "math.cos(q.anim_time*90*32-50)*20"] + "vector": ["-math.cos(query.anim_time*90*32-60)*20", "-math.cos(query.anim_time*90*32)*20", "math.cos(query.anim_time*90*32-50)*20"] }, "0.9167": { "vector": [0, 0, 0] @@ -2717,7 +1491,7 @@ "vector": [0, 0, 0] }, "0.4583": { - "vector": ["-math.cos(q.anim_time*90*32-60)*20", "math.cos(q.anim_time*90*32)*20", "-math.cos(q.anim_time*90*32-50)*20"] + "vector": ["-math.cos(query.anim_time*90*32-60)*20", "math.cos(query.anim_time*90*32)*20", "-math.cos(query.anim_time*90*32-50)*20"] }, "0.5833": { "vector": [0, 0, 0] @@ -2726,7 +1500,7 @@ "vector": [0, 0, 0] }, "1.2917": { - "vector": ["-math.cos(q.anim_time*90*32-60)*20", "math.cos(q.anim_time*90*32)*20", "-math.cos(q.anim_time*90*32-50)*20"] + "vector": ["-math.cos(query.anim_time*90*32-60)*20", "math.cos(query.anim_time*90*32)*20", "-math.cos(query.anim_time*90*32-50)*20"] }, "1.4167": { "vector": [0, 0, 0] @@ -2773,13 +1547,13 @@ }, "1.0": { "post": { - "vector": [67.5, "-math.cos(q.anim_time*90*16)*10", "-17.5+math.cos(q.anim_time*90*16-60)*10"] + "vector": [67.5, "-math.cos(query.anim_time*90*16)*10", "-17.5+math.cos(query.anim_time*90*16-60)*10"] }, "lerp_mode": "catmullrom" }, "1.1667": { "post": { - "vector": [67.5, "-math.cos(q.anim_time*90*16)*10", "-17.5+math.cos(q.anim_time*90*16-60)*10"] + "vector": [67.5, "-math.cos(query.anim_time*90*16)*10", "-17.5+math.cos(query.anim_time*90*16-60)*10"] }, "lerp_mode": "catmullrom" }, @@ -3371,13 +2145,13 @@ }, "0.5": { "post": { - "vector": ["85-math.clamp(math.cos(q.anim_time*90*10-80)*10,0,10)", "math.cos(q.anim_time*90*8)*20", "math.cos(q.anim_time*90*8-80)*10"] + "vector": ["85-math.clamp(math.cos(query.anim_time*90*10-80)*10,0,10)", "math.cos(query.anim_time*90*8)*20", "math.cos(query.anim_time*90*8-80)*10"] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": ["85-math.clamp(math.cos(q.anim_time*90*10-80)*10,0,10)", "math.cos(q.anim_time*90*8)*20", "math.cos(q.anim_time*90*8-80)*10"] + "vector": ["85-math.clamp(math.cos(query.anim_time*90*10-80)*10,0,10)", "math.cos(query.anim_time*90*8)*20", "math.cos(query.anim_time*90*8-80)*10"] }, "lerp_mode": "catmullrom" }, diff --git a/common-1.21.1/src/main/resources/assets/antarchy/animations/nightmare.animation.json b/common-1.21.1/src/main/resources/assets/antarchy/animations/nightmare.animation.json index 13782188..74d958b0 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/animations/nightmare.animation.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/animations/nightmare.animation.json @@ -528,6 +528,568 @@ "lerp_mode": "catmullrom" } } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, -13, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, -20, 0] + } + } + } + }, + "idle_P2": { + "loop": true, + "animation_length": 4, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-17, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [-13, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-15.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 6] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -3, 6] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 1, 6] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, -1, 6] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, -17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-32.5, -17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-17.5, -17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-20, -17.5, -5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.5, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_foot": { + "rotation": { + "vector": [-20, 0, 5] + } + }, + "Tail": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, -15, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [7.5, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [7.5, -15, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, -4.69, 1.87] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-7.5, -12.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [-7.5, 12.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-7.5, -4.69, 1.87] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, -0.83, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [7.5, -10, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.9167": { + "post": { + "vector": [7.5, 10, -5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [7.5, -0.83, 0.42] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-32.5, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-17.5, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0.5, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_foot": { + "rotation": { + "vector": [-20, 0, -5] + } + }, + "L_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [12.5, 30, -5] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [12.5, 10, -5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, -42.5, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-17.5, -17.5, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [12.5, -30, 5] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [12.5, -10, 5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, 42.5, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-17.5, 17.5, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, -0.75, 1.75] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [0, 0, -0.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } } } }, @@ -1358,6 +1920,868 @@ "lerp_mode": "catmullrom" } } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, -13, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, -20, 0] + } + } + } + }, + "walk_P2": { + "loop": true, + "animation_length": 2, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [15, 2.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [15, -2.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [15, -2.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [15, 2.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [15, 2.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "pre": { + "vector": [0, 7.5, 0] + }, + "post": { + "vector": [0, 7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-5, 3.87, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [8.73, -0.63, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, 0] + }, + "1.375": { + "pre": { + "vector": [0, -7.5, 0] + }, + "post": { + "vector": [0, -7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [-5, -3.87, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [8.73, 0.63, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 0, 0] + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "vector": [-2.5, 0, 0] + }, + "0.125": { + "pre": { + "vector": [0.68, -2.5, 0] + }, + "post": { + "vector": [0.68, -2.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-0.99, -4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-2.44, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [2.5, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-4.79, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "vector": [-2.5, 0, 0] + }, + "1.125": { + "pre": { + "vector": [0.68, 2.5, 0] + }, + "post": { + "vector": [0.68, 2.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-0.99, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-2.44, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [2.5, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [-4.79, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 2, 5] + }, + "0.0833": { + "vector": [0, -1, 4.5] + }, + "0.1667": { + "vector": [0, 4, 4.25] + }, + "0.25": { + "vector": [0, 1, 4.75] + }, + "0.375": { + "vector": [0, 2, 6.5] + }, + "0.5417": { + "pre": { + "vector": [0, 3.83, 9] + }, + "post": { + "vector": [0, 3.83, 9] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 7, 9] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 7, 7] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 2, 5] + }, + "1.0833": { + "vector": [0, -1, 4.5] + }, + "1.1667": { + "vector": [0, 4, 4.25] + }, + "1.25": { + "vector": [0, 1, 4.75] + }, + "1.375": { + "vector": [0, 2, 6.5] + }, + "1.5417": { + "pre": { + "vector": [0, 3.83, 9] + }, + "post": { + "vector": [0, 3.83, 9] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 7, 9] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [0, 7, 7] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 2, 5] + } + } + }, + "L_Tight": { + "rotation": { + "0.0": { + "vector": [20, -5, 0] + }, + "0.5": { + "pre": { + "vector": [15.94, -5, 0] + }, + "post": { + "vector": [15.94, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [-17.5, -5, 0] + }, + "2.0": { + "vector": [20, -5, 0] + } + }, + "position": { + "0.0": { + "vector": [0, -3.75, 5] + }, + "0.2917": { + "pre": { + "vector": [0, -1.73, 2.79] + }, + "post": { + "vector": [0, -1.73, 2.79] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 4.96, -5.58] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 4.96, -5.58] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, -0.25, -6] + }, + "1.0417": { + "vector": [0, -2.14, -5.54] + }, + "1.0833": { + "vector": [0, 0.96, -5.08] + }, + "1.1667": { + "vector": [0, -0.93, -4.12] + }, + "1.25": { + "vector": [0, -0.12, -3.25] + }, + "1.375": { + "vector": [0, 0.03, -1.87] + }, + "1.5": { + "vector": [0, -0.33, -0.5] + }, + "1.625": { + "vector": [0, -0.93, 0.88] + }, + "1.75": { + "vector": [0, -2.04, 2.25] + }, + "1.875": { + "vector": [0, -2.64, 3.63] + }, + "2.0": { + "vector": [0, -3.75, 5] + } + } + }, + "L_leg": { + "rotation": { + "0.0": { + "vector": [22.5, 0, 0] + }, + "0.5": { + "pre": { + "vector": [62.5, 0, 0] + }, + "post": { + "vector": [62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [7.5, 0, 0] + }, + "2.0": { + "vector": [22.5, 0, 0] + } + } + }, + "L_foot": { + "rotation": { + "0.0": { + "vector": [-42.5, 0, 0] + }, + "0.2917": { + "pre": { + "vector": [-37.19, 0, 0] + }, + "post": { + "vector": [-37.19, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-28.85, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-20.35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-20.35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [10, 0, 0] + }, + "2.0": { + "vector": [-42.5, 0, 0] + } + } + }, + "Tail": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -12.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -3.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -3.33, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Tight": { + "rotation": { + "0.0": { + "vector": [-17.5, 5, 0] + }, + "1.0": { + "vector": [20, 5, 0] + }, + "1.5": { + "pre": { + "vector": [15.94, 5, 0] + }, + "post": { + "vector": [15.94, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [-17.5, 5, 0] + } + }, + "position": { + "0.0": { + "vector": [0, -0.25, -6] + }, + "0.0417": { + "vector": [0, -2.14, -5.54] + }, + "0.0833": { + "vector": [0, 0.96, -5.08] + }, + "0.1667": { + "vector": [0, -0.93, -4.12] + }, + "0.25": { + "vector": [0, -0.12, -3.25] + }, + "0.375": { + "vector": [0, 0.03, -1.87] + }, + "0.5": { + "vector": [0, -0.33, -0.5] + }, + "0.625": { + "vector": [0, -0.93, 0.88] + }, + "0.75": { + "vector": [0, -2.04, 2.25] + }, + "0.875": { + "vector": [0, -2.64, 3.63] + }, + "1.0": { + "vector": [0, -3.75, 5] + }, + "1.2917": { + "pre": { + "vector": [0, -1.73, 2.79] + }, + "post": { + "vector": [0, -1.73, 2.79] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 4.96, -5.58] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [0, 4.96, -5.58] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, -0.25, -6] + } + } + }, + "R_leg": { + "rotation": { + "0.0": { + "vector": [7.5, 0, 0] + }, + "1.0": { + "vector": [22.5, 0, 0] + }, + "1.5": { + "pre": { + "vector": [62.5, 0, 0] + }, + "post": { + "vector": [62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [7.5, 0, 0] + } + } + }, + "R_foot": { + "rotation": { + "0.0": { + "vector": [10, 0, 0] + }, + "1.0": { + "vector": [-42.5, 0, 0] + }, + "1.2917": { + "pre": { + "vector": [-37.19, 0, 0] + }, + "post": { + "vector": [-37.19, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [-28.85, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [-20.35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [-20.35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [10, 0, 0] + } + } + }, + "L_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, 15, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, 30, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [10, 15, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [12.5, 5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-1.88, -21.88, 21.26] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, -20, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-5, -25, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -20, 21.67] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, -20, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [-5, -25, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-1.88, -21.88, 21.26] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, -30, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, -15, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, -5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [10, -15, -5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [12.5, -30, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 20, -21.67] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 20, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-5, 25, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 20, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [-5, 25, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 20, -21.67] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } } } }, @@ -1527,7 +2951,7 @@ }, "0.7917": { "post": { - "vector": [27.5, 0, 0] + "vector": [-17.5, 0, 0] }, "lerp_mode": "catmullrom" }, @@ -1846,6 +3270,526 @@ "lerp_mode": "catmullrom" } } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, -20, 0] + } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, -13, 0] + } + } + } + }, + "fly_P2": { + "loop": true, + "animation_length": 1, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [10, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [9.31, -4.68, 2.04] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [20, -7.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-18.06, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-18.06, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "vector": [0, -1, -3] + } + }, + "L_leg": { + "rotation": { + "vector": [47.5, 0, 0] + } + }, + "L_foot": { + "rotation": { + "vector": [122.5, 0, 0] + } + }, + "Tail": { + "rotation": { + "0.0": { + "vector": [15, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [-30, 0, 0] + }, + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "vector": [-22.86, 0, 0] + }, + "0.7083": { + "pre": { + "vector": [27.5, 0, 0] + }, + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [15, 0, 0] + } + } + }, + "Tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [5.58, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "vector": [0, -1, -3] + } + }, + "R_leg": { + "rotation": { + "vector": [47.5, 0, 0] + } + }, + "R_foot": { + "rotation": { + "vector": [122.5, 0, 0] + } + }, + "L_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.5, 20, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-30, 40, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [25, 27.5, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-22.5, 20, -40] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [22.5, -30, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -45, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-2.67, -13.15, 55.66] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.5, -20, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-30, -40, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [25, -27.5, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-22.5, -20, 40] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [22.5, 30, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 45, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-2.67, 13.15, -55.66] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [10, 0, 2.5] + }, + "post": { + "vector": [10, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [2.5, 5, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-7.5, 5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 14, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 11.68, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, -7, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } } } }, @@ -2438,6 +4382,630 @@ "lerp_mode": "catmullrom" } } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, -13, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, -20, 0] + } + } + } + }, + "attack_P2": { + "animation_length": 1, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [10.78, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-28, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-37.01, 0, 16.84] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "vector": [-33, 0, 15] + }, + "0.6667": { + "vector": [-5, 0, 0] + }, + "0.7083": { + "pre": { + "vector": [2.5, 0, 0] + }, + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-10.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 6] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, -17.5, -5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_foot": { + "rotation": { + "vector": [-20, 0, 5] + } + }, + "Tail": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [7.5, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [7.5, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [7.5, 7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-7.5, -4.26, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-7.5, -21.89, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-7.5, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-7.5, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [7.5, -6.9, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [7.5, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [7.5, -18.28, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [7.5, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-1.25, 17.5, 11.25] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-17.5, 17.5, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2.25, 0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [3, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "vector": [0, -4, 0] + }, + "0.7083": { + "vector": [0, 0, 0] + }, + "0.7917": { + "vector": [0, -2, 0] + }, + "0.9167": { + "pre": { + "vector": [0, -1, 0] + }, + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_foot": { + "rotation": { + "vector": [-20, 0, -5] + } + }, + "L_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [12.5, 30, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [12.5, 7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [12.5, 13.88, -3.19] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, -10, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-12.66, -23.37, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [12.5, -30, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [12.5, -7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [12.5, -13.88, 3.19] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, 10, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-12.66, 23.37, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } } } }, @@ -3197,6 +5765,797 @@ "lerp_mode": "catmullrom" } } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, -13, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, -20, 0] + } + } + } + }, + "attack2_P2": { + "animation_length": 1, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "vector": [0, -1, -3] + } + }, + "L_leg": { + "rotation": { + "0.0": { + "vector": [47.5, 0, 0] + }, + "0.2083": { + "pre": { + "vector": [45, 0, 0] + }, + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [26.56, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [47.5, 0, 0] + } + } + }, + "L_foot": { + "rotation": { + "0.0": { + "vector": [122.5, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [94.12, 0, 0] + }, + "post": { + "vector": [94.12, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [122.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail": { + "rotation": { + "0.0": { + "vector": [15, 0, 0] + }, + "0.125": { + "pre": { + "vector": [-27.5, 0, 0] + }, + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [15, 0, 0] + } + } + }, + "Tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "vector": [0, -1, -3] + } + }, + "R_leg": { + "rotation": { + "0.0": { + "vector": [47.5, 0, 0] + }, + "0.2083": { + "pre": { + "vector": [45, 0, 0] + }, + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [26.56, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [47.5, 0, 0] + } + } + }, + "R_foot": { + "rotation": { + "0.0": { + "vector": [122.5, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [94.12, 0, 0] + }, + "post": { + "vector": [94.12, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [122.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.5, 20, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [40, 37.5, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-72.5, -22.5, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-72.5, -47.5, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-17.5, 35, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-17.5, 35, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-22.5, 20, -40] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, -60] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -50] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 23.75] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.5, -20, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [40, -37.5, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-72.5, 22.5, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-72.5, 47.5, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-17.5, -35, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-17.5, -35, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-22.5, -20, 40] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 60] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 50] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -23.75] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "pre": { + "vector": [-5, 0, 0] + }, + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 25, 14] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 17, 21] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, -5, -41] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 1.75, -23.95] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 4.44, -5.56] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } } } }, @@ -3636,6 +6995,4479 @@ "lerp_mode": "catmullrom" } } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, -13, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, -20, 0] + } + } + } + }, + "roar_P2": { + "animation_length": 1.5, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-25.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [1.71, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-11.46, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-15.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 6] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, -17.5, -5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_foot": { + "rotation": { + "vector": [-20, 0, 5] + } + }, + "Tail": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_foot": { + "rotation": { + "vector": [-20, 0, -5] + } + }, + "L_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [12.5, 37.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [12.5, -12.5, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [12.5, -17.5, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-12.5, -55, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [12.5, -37.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [12.5, 12.5, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [12.5, 17.5, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-12.5, 55, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [26.09, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + } + } + } + }, + "phase2": { + "animation_length": 4, + "bones": { + "head": { + "rotation": { + "0.0": { + "vector": [15, 0, 0] + }, + "0.125": { + "pre": { + "vector": [-7.5, 0, 0] + }, + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [15, 0, 0] + }, + "0.625": { + "pre": { + "vector": [-7.5, 0, 0] + }, + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [15, 0, 0] + }, + "1.125": { + "pre": { + "vector": [-7.5, 0, 0] + }, + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.1667": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.375": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.7083": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "vector": [15, 0, 0] + } + } + }, + "neck": { + "rotation": { + "0.0": { + "vector": [12.5, 0, 0] + }, + "0.0417": { + "vector": [17.59, 0, 0] + }, + "0.125": { + "pre": { + "vector": [-12.5, 0, 0] + }, + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-9.54, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [12.5, 0, 0] + }, + "0.5417": { + "vector": [17.59, 0, 0] + }, + "0.625": { + "pre": { + "vector": [-12.5, 0, 0] + }, + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-9.54, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [12.5, 0, 0] + }, + "1.0417": { + "vector": [17.59, 0, 0] + }, + "1.125": { + "pre": { + "vector": [-12.5, 0, 0] + }, + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-9.54, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [5.69, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0417": { + "post": { + "vector": [-3.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0.08, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [12.53, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [-17.47, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.9583": { + "post": { + "vector": [-17.47, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [20.03, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.75": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "vector": [12.5, 0, 0] + } + } + }, + "torso": { + "rotation": { + "0.0": { + "vector": [-17.5, 0, 0] + }, + "0.0833": { + "pre": { + "vector": [-30, -2.5, 10] + }, + "post": { + "vector": [-30, -2.5, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [-17.5, 0, 7.5] + }, + "0.5833": { + "pre": { + "vector": [-30, -2.5, 10] + }, + "post": { + "vector": [-30, -2.5, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [-17.5, 0, 7.5] + }, + "1.0833": { + "pre": { + "vector": [-30, -2.5, 10] + }, + "post": { + "vector": [-30, -2.5, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [1.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [-1.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [-12.81, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5417": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.9583": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.125": { + "post": { + "vector": [3.86, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [-8.24, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.4583": { + "post": { + "vector": [-15.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.6667": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "vector": [-17.5, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, -1, 6] + }, + "0.125": { + "pre": { + "vector": [0, 4, 6] + }, + "post": { + "vector": [0, 4, 6] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 4, 6] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, "-1+math.cos(query.anim_time*90*32)*2", 6] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, -1, 6] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, -1, 6] + }, + "0.625": { + "pre": { + "vector": [0, 4, 6] + }, + "post": { + "vector": [0, 4, 6] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 4, 6] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, "-1+math.cos(query.anim_time*90*32)*2", 6] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, -1, 6] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, -1, 6] + }, + "1.125": { + "pre": { + "vector": [0, 4, 6] + }, + "post": { + "vector": [0, 4, 6] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 4, 6] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [0, "-1+math.cos(query.anim_time*90*32)*2", 6] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [0, -3, 6] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, -1, 6] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [0, 1, 6] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 1, 6] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [0, 0, 6] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [0, 0, 6] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, -2, 6] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [0, -2.5, 6] + }, + "lerp_mode": "catmullrom" + }, + "3.2083": { + "post": { + "vector": [0, -2.5, 6] + }, + "lerp_mode": "catmullrom" + }, + "3.5833": { + "post": { + "vector": [0, -1, 6] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "vector": [0, -1, 6] + } + } + }, + "L_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, -17.5, -5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_foot": { + "rotation": { + "vector": [-20, 0, 5] + } + }, + "Tail": { + "rotation": { + "vector": [-10, 0, 0] + } + }, + "Tail2": { + "rotation": { + "vector": [5, 0, 0] + } + }, + "Tail3": { + "rotation": { + "vector": [12.5, 0, 0] + } + }, + "R_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [-13.15, 13.8, 10.19] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-47.5, 5, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-47.5, 5, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-13.15, 13.8, 10.19] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-47.5, 5, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-47.5, 5, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [-13.15, 13.8, 10.19] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-47.5, 5, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-47.5, 5, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "vector": [-10, 17.5, 5] + }, + "2.6667": { + "vector": [-20, 17.5, 5] + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [3, 4, -4] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [3, 7, -7] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-1, -1, -6] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-1, -1, -6] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [3, 4, -4] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [3, 7, -7] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-1, -1, -6] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-1, -1, -6] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [3, 4, -4] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [3, 7, -7] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-1, -1, -6] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-1, -1, -6] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-1, -1, -6] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [-1, -1, -6] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [-0.5, 4, -3] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "vector": [0, -1, 0] + } + } + }, + "R_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [80, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [40, 15, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [80, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [40, 15, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [80, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [40, 15, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_foot": { + "rotation": { + "0.0": { + "vector": [-20, 0, -5] + }, + "0.0417": { + "pre": { + "vector": [-42.5, 0, -5] + }, + "post": { + "vector": [-42.5, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-20, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [-20, 0, -5] + }, + "0.5": { + "vector": [-20, 0, -5] + }, + "0.5417": { + "pre": { + "vector": [-42.5, 0, -5] + }, + "post": { + "vector": [-42.5, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-20, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "vector": [-20, 0, -5] + }, + "1.0": { + "vector": [-20, 0, -5] + }, + "1.0417": { + "pre": { + "vector": [-42.5, 0, -5] + }, + "post": { + "vector": [-42.5, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-20, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "vector": [-20, 0, -5] + } + } + }, + "L_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [5, 7.5, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [10, 12.5, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [10, 12.5, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [5, 7.5, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [10, 12.5, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [10, 12.5, 20] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [5, 7.5, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [10, 12.5, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [17.5, 17.5, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [25, 32.5, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [25, 32.5, 25] + }, + "lerp_mode": "catmullrom" + }, + "2.3333": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [12.5, 17.5, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.7917": { + "post": { + "vector": [15, 35, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [17.5, 40, 15] + }, + "lerp_mode": "catmullrom" + }, + "3.125": { + "post": { + "vector": [17.5, 40, 15] + }, + "lerp_mode": "catmullrom" + }, + "3.5417": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [-30, -60, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-12.5, -20, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -57.5, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-30, -60, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-12.5, -20, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, -57.5, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [-30, -60, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-12.5, -20, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, -57.5, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, -82.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [-2.5, -87.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [-2.5, -87.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [-10, -30, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [0, -2.5, -15] + }, + "lerp_mode": "catmullrom" + }, + "3.125": { + "post": { + "vector": [0, -2.5, -15] + }, + "lerp_mode": "catmullrom" + }, + "3.5417": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [5, -7.5, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [10, -12.5, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [10, -12.5, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [5, -7.5, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [10, -12.5, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [10, -12.5, -20] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [5, -7.5, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [10, -12.5, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [17.5, -17.5, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [25, -32.5, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [25, -32.5, -25] + }, + "lerp_mode": "catmullrom" + }, + "2.3333": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [12.5, -17.5, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.7917": { + "post": { + "vector": [15, -35, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [17.5, -40, -15] + }, + "lerp_mode": "catmullrom" + }, + "3.125": { + "post": { + "vector": [17.5, -40, -15] + }, + "lerp_mode": "catmullrom" + }, + "3.5417": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [-30, 60, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-12.5, 20, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 57.5, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-30, 60, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-12.5, 20, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 57.5, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [-30, 60, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-12.5, 20, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 57.5, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 82.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [-2.5, 87.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [-2.5, 87.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [-10, 30, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [0, 2.5, 15] + }, + "lerp_mode": "catmullrom" + }, + "3.125": { + "post": { + "vector": [0, 2.5, 15] + }, + "lerp_mode": "catmullrom" + }, + "3.5417": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [0, 0, 0] + }, + "0.2917": { + "pre": { + "vector": [17.5, 0, 0] + }, + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.625": { + "vector": [0, 0, 0] + }, + "0.7917": { + "pre": { + "vector": [17.5, 0, 0] + }, + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, 0] + }, + "1.125": { + "vector": [0, 0, 0] + }, + "1.2917": { + "pre": { + "vector": [17.5, 0, 0] + }, + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": ["35-math.cos(query.anim_time*90*32-50)*5", 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": ["35-math.cos(query.anim_time*90*32-50)*5", 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.125": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.8333": { + "vector": [0, 0, 0] + } + } + }, + "spike2": { + "rotation": { + "0.0": { + "vector": [22.5, 0, 0] + }, + "2.625": { + "vector": [22.5, 0, 0] + }, + "2.7083": { + "vector": [0, 0, 0] + }, + "2.7917": { + "pre": { + "vector": [22.5, 0, 0] + }, + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.9583": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, -13, 0] + }, + "2.6667": { + "vector": [0, -13, 0] + }, + "2.75": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "spike": { + "rotation": { + "0.0": { + "vector": [-22.5, 0, 0] + }, + "2.6667": { + "vector": [-22.5, 0, 0] + }, + "2.75": { + "vector": [0, 0, 0] + }, + "2.8333": { + "pre": { + "vector": [-22.5, 0, 0] + }, + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, -20, 0] + }, + "2.7083": { + "vector": [0, -20, 0] + }, + "2.7917": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.9583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "pose": { + "animation_length": 0.0417, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 6] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, -17.5, -5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_foot": { + "rotation": { + "vector": [-20, 0, 5] + } + }, + "Tail": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_foot": { + "rotation": { + "vector": [-20, 0, -5] + } + }, + "L_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "vector": [0, 0, 0] + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + }, + "position": { + "vector": [0, -13, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + }, + "position": { + "vector": [0, -20, 0] + } + } + } + }, + "portal_enter": { + "animation_length": 1.75, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-6.4, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-20.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-57.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-77.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 6] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, -17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [25, -17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [45, -17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [52.5, -7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [80.98, -6.9, 0.3] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-5, -7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [-32.5, -7.5, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, -6, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [40, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [40, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [57.5, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_foot": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [37.5, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [47.5, 0, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [14.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [24.43, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [34.86, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [36.98, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [1.22, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [2.82, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [32.84, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [14.39, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [25, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [45, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [52.5, 7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [80.98, 6.9, -0.3] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-5, 7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [-32.5, 7.5, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, -6, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [40, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [40, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [57.5, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_foot": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [37.5, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [47.5, 0, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [55, -30, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [55, -30, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 42.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-17.5, -70, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -22.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, -22.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [2.5, -87.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [55, 30, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [55, 30, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, -42.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-17.5, 70, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 22.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 22.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [2.5, 87.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-85, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-127.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-167.14, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-190, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-222.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [-255, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-327.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [-345, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [-345, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 16.59, -67.19] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 49, -88] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 95, -91] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 135, -65] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 153, -18] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 148, 17] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 129.74, 40.11] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 105, 54.44] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 77.49, 57.29] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [0, 39, 37] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [0, 25.59, -18.71] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 22, -63] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [0, 22, -63] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "1.3333": { + "vector": [1, 1, 1] + }, + "1.4583": { + "pre": { + "vector": [0.8, 0.8, 1.4] + }, + "post": { + "vector": [0.8, 0.8, 1.4] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + } + } + } + }, + "portal_out": { + "animation_length": 1.125, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 6] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [25, -17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [33.76, -17.98, -5.24] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-37.5, -17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-45, -17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [12.5, -17.5, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [5, -17.5, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-20, -17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-20, -17.5, -5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [13.32, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-2.57, 0.42, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_foot": { + "rotation": { + "0.0": { + "vector": [-20, 0, 5] + }, + "0.0417": { + "pre": { + "vector": [70, 0, 5] + }, + "post": { + "vector": [70, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [21.57, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-17.24, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [43.95, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [5.26, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-20, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-20, 0, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-36.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-39.69, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [33.76, 17.98, 5.24] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-37.5, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-45, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [12.5, 17.5, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [5, 17.5, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [57.5, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [13.32, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-2.57, -0.42, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_foot": { + "rotation": { + "0.0": { + "vector": [-20, 0, -5] + }, + "0.0417": { + "pre": { + "vector": [70, 0, -5] + }, + "post": { + "vector": [70, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [21.57, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-17.24, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [43.95, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [5.26, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-20, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-20, 0, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-32.5, 60, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-24.38, 41.8, 1.1] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, -12.5, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 20, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [2.5, -87.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [2.5, -45, -47.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [2.5, -2.5, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2.5, -30, 62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [2.5, 0, 62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [3.75, -7.03, 29.22] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [2.5, -32.5, -45] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [5, -30, -20] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-32.5, -60, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-24.38, -41.8, -1.1] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 12.5, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -20, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [2.5, 87.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [2.5, 45, 47.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [2.5, 2.5, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2.5, 30, -62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [2.5, 0, -62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [3.75, 7.03, -29.22] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [2.5, 32.5, 45] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [5, 30, 20] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [19.17, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [6.02, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 22, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 24, -107] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 47, -87] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 58, -68] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 63, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 64, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 44.06, -19.06] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0.75, 0.75, 1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "spike2": { + "rotation": { + "vector": [22.5, 0, 0] + } + }, + "spike": { + "rotation": { + "vector": [-22.5, 0, 0] + } } } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/chiten_block.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/chiten_block.json deleted file mode 100644 index 651df798..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/chiten_block.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "variants": { - "axis=x": { - "model": "antarchy:block/chiten_block", - "x": 90, - "y": 90 - }, - "axis=y": { - "model": "antarchy:block/chiten_block" - }, - "axis=z": { - "model": "antarchy:block/chiten_block", - "x": 90 - } - } -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/chitin_block.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/chitin_block.json new file mode 100644 index 00000000..97a967f0 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/chitin_block.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/chitin_block", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/chitin_block" + }, + "axis=z": { + "model": "antarchy:block/chitin_block", + "x": 90 + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/chiten_spike.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/chitin_spike.json similarity index 63% rename from common-1.21.1/src/main/resources/assets/antarchy/blockstates/chiten_spike.json rename to common-1.21.1/src/main/resources/assets/antarchy/blockstates/chitin_spike.json index 4cef7a2b..35e0fe28 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/chiten_spike.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/chitin_spike.json @@ -1,14 +1,14 @@ { "variants": { - "thickness=base,vertical_direction=down": { "model": "antarchy:block/chiten_spike_down_base" }, - "thickness=base,vertical_direction=up": { "model": "antarchy:block/chiten_spike_up_base" }, - "thickness=frustum,vertical_direction=down": { "model": "antarchy:block/chiten_spike_down_frustum" }, - "thickness=frustum,vertical_direction=up": { "model": "antarchy:block/chiten_spike_up_frustum" }, - "thickness=middle,vertical_direction=down": { "model": "antarchy:block/chiten_spike_down_middle" }, - "thickness=middle,vertical_direction=up": { "model": "antarchy:block/chiten_spike_up_middle" }, - "thickness=tip,vertical_direction=down": { "model": "antarchy:block/chiten_spike_down_tip" }, - "thickness=tip,vertical_direction=up": { "model": "antarchy:block/chiten_spike_up_tip" }, - "thickness=tip_merge,vertical_direction=down": { "model": "antarchy:block/chiten_spike_down_tip_merge" }, - "thickness=tip_merge,vertical_direction=up": { "model": "antarchy:block/chiten_spike_up_tip_merge" } + "thickness=base,vertical_direction=down": { "model": "antarchy:block/chitin_spike_down_base" }, + "thickness=base,vertical_direction=up": { "model": "antarchy:block/chitin_spike_up_base" }, + "thickness=frustum,vertical_direction=down": { "model": "antarchy:block/chitin_spike_down_frustum" }, + "thickness=frustum,vertical_direction=up": { "model": "antarchy:block/chitin_spike_up_frustum" }, + "thickness=middle,vertical_direction=down": { "model": "antarchy:block/chitin_spike_down_middle" }, + "thickness=middle,vertical_direction=up": { "model": "antarchy:block/chitin_spike_up_middle" }, + "thickness=tip,vertical_direction=down": { "model": "antarchy:block/chitin_spike_down_tip" }, + "thickness=tip,vertical_direction=up": { "model": "antarchy:block/chitin_spike_up_tip" }, + "thickness=tip_merge,vertical_direction=down": { "model": "antarchy:block/chitin_spike_down_tip_merge" }, + "thickness=tip_merge,vertical_direction=up": { "model": "antarchy:block/chitin_spike_up_tip_merge" } } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/cut_titanium_wall.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/cut_titanium_wall.json deleted file mode 100644 index 182e05d8..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/cut_titanium_wall.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "multipart": [ - { - "when": { "up": "true" }, - "apply": { "model": "antarchy:block/cut_titanium_wall_post" } - }, - { - "when": { "north": "low" }, - "apply": { "model": "antarchy:block/cut_titanium_wall_side", "uvlock": true } - }, - { - "when": { "east": "low" }, - "apply": { "model": "antarchy:block/cut_titanium_wall_side", "y": 90, "uvlock": true } - }, - { - "when": { "south": "low" }, - "apply": { "model": "antarchy:block/cut_titanium_wall_side", "y": 180, "uvlock": true } - }, - { - "when": { "west": "low" }, - "apply": { "model": "antarchy:block/cut_titanium_wall_side", "y": 270, "uvlock": true } - }, - { - "when": { "north": "tall" }, - "apply": { "model": "antarchy:block/cut_titanium_wall_side_tall", "uvlock": true } - }, - { - "when": { "east": "tall" }, - "apply": { "model": "antarchy:block/cut_titanium_wall_side_tall", "y": 90, "uvlock": true } - }, - { - "when": { "south": "tall" }, - "apply": { "model": "antarchy:block/cut_titanium_wall_side_tall", "y": 180, "uvlock": true } - }, - { - "when": { "west": "tall" }, - "apply": { "model": "antarchy:block/cut_titanium_wall_side_tall", "y": 270, "uvlock": true } - } - ] -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/cut_uranium_wall.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/cut_uranium_wall.json deleted file mode 100644 index c1083213..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/cut_uranium_wall.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "multipart": [ - { - "when": { "up": "true" }, - "apply": { "model": "antarchy:block/cut_uranium_wall_post" } - }, - { - "when": { "north": "low" }, - "apply": { "model": "antarchy:block/cut_uranium_wall_side", "uvlock": true } - }, - { - "when": { "east": "low" }, - "apply": { "model": "antarchy:block/cut_uranium_wall_side", "y": 90, "uvlock": true } - }, - { - "when": { "south": "low" }, - "apply": { "model": "antarchy:block/cut_uranium_wall_side", "y": 180, "uvlock": true } - }, - { - "when": { "west": "low" }, - "apply": { "model": "antarchy:block/cut_uranium_wall_side", "y": 270, "uvlock": true } - }, - { - "when": { "north": "tall" }, - "apply": { "model": "antarchy:block/cut_uranium_wall_side_tall", "uvlock": true } - }, - { - "when": { "east": "tall" }, - "apply": { "model": "antarchy:block/cut_uranium_wall_side_tall", "y": 90, "uvlock": true } - }, - { - "when": { "south": "tall" }, - "apply": { "model": "antarchy:block/cut_uranium_wall_side_tall", "y": 180, "uvlock": true } - }, - { - "when": { "west": "tall" }, - "apply": { "model": "antarchy:block/cut_uranium_wall_side_tall", "y": 270, "uvlock": true } - } - ] -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/lucid_anchor.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/lucid_anchor.json new file mode 100644 index 00000000..ce302016 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/lucid_anchor.json @@ -0,0 +1,10 @@ +{ + "variants": { + "lit=false": { + "model": "antarchy:block/lucid_anchor" + }, + "lit=true": { + "model": "antarchy:block/lucid_anchor" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/geo/nightmare.geo.json b/common-1.21.1/src/main/resources/assets/antarchy/geo/nightmare.geo.json index f724110b..47b39246 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/geo/nightmare.geo.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/geo/nightmare.geo.json @@ -105,6 +105,14 @@ {"origin": [-3, 30, 56], "size": [6, 7, 21], "uv": [70, 0]} ] }, + { + "name": "spike", + "parent": "torso", + "pivot": [0, 39, 2.5], + "cubes": [ + {"origin": [-3.5, 29, -3], "size": [7, 20, 11], "uv": [148, 128]} + ] + }, { "name": "neck", "parent": "torso", @@ -113,6 +121,14 @@ {"origin": [-9, 13, -24], "size": [18, 19, 16], "uv": [0, 42]} ] }, + { + "name": "spike2", + "parent": "neck", + "pivot": [0, 30, -14.5], + "cubes": [ + {"origin": [-3.5, 30, -19], "size": [7, 14, 9], "uv": [129, 49]} + ] + }, { "name": "head", "parent": "neck", @@ -123,11 +139,13 @@ {"origin": [-8, 22, -42], "size": [16, 5, 19], "uv": [0, 0]}, {"origin": [0, 27, -42], "size": [0, 13, 9], "uv": [0, 75]}, {"origin": [0, 27, -52], "size": [0, 4, 9], "uv": [0, 70]}, + {"origin": [-11, 28, -36], "size": [0, 4, 9], "uv": [0, 70]}, + {"origin": [11, 28, -36], "size": [0, 4, 9], "uv": [0, 70], "mirror": true}, {"origin": [-15, 24, -36], "size": [9, 4, 12], "uv": [0, 202]}, {"origin": [6, 24, -36], "size": [9, 4, 12], "uv": [0, 202], "mirror": true}, {"origin": [-6, 18, -54], "size": [12, 5, 12], "inflate": 0.1, "uv": [68, 179]}, {"origin": [-6, 21, -54], "size": [12, 6, 12], "uv": [0, 24]}, - {"origin": [-3, 27, -55], "size": [6, 6, 0], "uv": [53, 51]} + {"origin": [-3, 27, -53.75], "size": [6, 6, 0], "uv": [53, 51]} ] }, { diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/de_de.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/de_de.json index fdee7c26..b4b0b248 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/de_de.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/de_de.json @@ -869,8 +869,8 @@ "advancements.antarchy.gravity_gun_craft.description": "Stelle eine Gravitationskanone her.", "block.antarchy.cavaryn_portal": "Cavaryn-Portal", "block.antarchy.termite_nest": "Termite-Nest", - "block.antarchy.chiten_spike": "Chitin-Stachel", - "block.antarchy.chiten_block": "Chitin-Block", + "block.antarchy.chitin_spike": "Chitin-Stachel", + "block.antarchy.chitin_block": "Chitin-Block", "block.antarchy.myrmite": "Myrmite", "block.antarchy.broodstone": "Broodstone", "block.antarchy.amber_moss_block": "Bernsteinmoosblock", @@ -896,7 +896,7 @@ "item.antarchy.creeping_horror_spawn_egg": "Kriechender Schrecken-Spawn-Ei", "item.antarchy.lurking_terror_spawn_egg": "Lauernder Terror-Spawn-Ei", "item.antarchy.hercules_beetle_spawn_egg": "Herkuleskäfer-Spawn-Ei", - "item.antarchy.chiten": "Chitin", + "item.antarchy.chitin": "Chitin", "block.antarchy.polished_broodstone": "Poliert Broodstone", "block.antarchy.chiseled_broodstone": "Gemeißelt Broodstone", "block.antarchy.broodstone_bricks": "Broodstoneziegel", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/en_us.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/en_us.json index 5bb3bfad..ef545166 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/en_us.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/en_us.json @@ -46,6 +46,7 @@ "item.antarchy.critter_cage": "Critter Cage", "block.antarchy.giant_lily_pad": "Giant Lily Pad", "block.antarchy.seashell": "Seashell", + "block.antarchy.lucid_anchor": "Lucid Anchor", "block.antarchy.critter_cage_block": "Critter Cage", "block.antarchy.hushweed": "Hushweed", "block.antarchy.umbral_moss_block": "Umbral Moss Block", @@ -60,6 +61,7 @@ "block.antarchy.polished_nyxite": "Polished Nyxite", "block.antarchy.chiseled_nyxite": "Chiseled Nyxite", "block.antarchy.nyxite_bricks": "Nyxite Bricks", + "block.antarchy.nyxite_pillar": "Nyxite Pillar", "block.antarchy.shellstone": "Shellstone", "block.antarchy.polished_shellstone": "Polished Shellstone", "block.antarchy.shellstone_bricks": "Shellstone Bricks", @@ -69,6 +71,7 @@ "block.antarchy.mossy_shellstone_brick_slab": "Mossy Shellstone Brick Slab", "block.antarchy.mossy_shellstone_brick_wall": "Mossy Shellstone Brick Wall", "block.antarchy.cracked_shellstone_bricks": "Cracked Shellstone Bricks", + "block.antarchy.shellstone_pillar": "Shellstone Pillar", "block.antarchy.shellstone_stairs": "Shellstone Stairs", "block.antarchy.shellstone_slab": "Shellstone Slab", "block.antarchy.shellstone_wall": "Shellstone Wall", @@ -97,12 +100,18 @@ "block.antarchy.cloud_block": "Cloud Block", "block.antarchy.thoraxis_portal": "Thoraxis Portal", "block.antarchy.antimetal": "Antimetal", + "block.antarchy.antimetal_stairs": "Antimetal Stairs", + "block.antarchy.antimetal_slab": "Antimetal Slab", "block.antarchy.polished_antimetal": "Polished Antimetal", + "block.antarchy.polished_antimetal_stairs": "Polished Antimetal Stairs", + "block.antarchy.polished_antimetal_slab": "Polished Antimetal Slab", "block.antarchy.antimetal_scaffolding": "Antimetal Scaffolding", "block.antarchy.antimetal_rail": "Antimetal Rail", "block.antarchy.antimetal_powered_rail": "Antimetal Powered Rail", "block.antarchy.antimetal_detector_rail": "Antimetal Detector Rail", "block.antarchy.antimetal_activator_rail": "Antimetal Activator Rail", + "block.antarchy.upper": "Upper", + "container.antarchy.upper": "Upper", "block.antarchy.cornea_stalk": "Cornea Stalk", "block.antarchy.corn_crop": "Corn Crop", "block.antarchy.dream_torch": "Dream Torch", @@ -118,6 +127,8 @@ "block.antarchy.large_blood_crystal_bud": "Large Blood Crystal Bud", "block.antarchy.blood_crystal_cluster": "Blood Crystal Cluster", "block.antarchy.dream_sand": "Dream Sand", + "block.antarchy.antigravel": "Antigravel", + "block.antarchy.loam": "Loam", "block.antarchy.dream_sandstone": "Dream Sandstone", "block.antarchy.chiseled_dream_sandstone": "Chiseled Dream Sandstone", "block.antarchy.cut_dream_sandstone": "Cut Dream Sandstone", @@ -142,6 +153,7 @@ "block.antarchy.bluestone_repeater": "Bluestone Repeater", "block.antarchy.bluestone_comparator": "Bluestone Comparator", "block.antarchy.bluestone_torch": "Bluestone Torch", + "block.antarchy.bluestone_lamp": "Bluestone Lamp", "block.antarchy.uranium_block": "Block of Uranium", "block.antarchy.titanium_block": "Block of Titanium", "block.antarchy.raw_uranium_block": "Block of Raw Uranium", @@ -236,6 +248,7 @@ "tooltip.antarchy.critter_cage.place": "Shift + click to place", "item.antarchy.kraken_tooth": "Kraken Tooth", "item.antarchy.kraken_tentacle": "Kraken Tentacle", + "item.antarchy.kraken_kalamari": "Kraken Calamari", "item.antarchy.krakens_grasp": "Kraken's Grasp", "entity.antarchy.tentacle": "Tentacle", "item.antarchy.basilisk_fang": "Basilisk Fang", @@ -376,7 +389,6 @@ "key.antarchy.dorrie_charge_jump": "Dorrie Charge Jump", "key.antarchy.hercules_beetle_charge": "Hercules Beetle Charge", "key.antarchy.hercules_beetle_flight_toggle": "Hercules Beetle Flight Toggle", - "item.antarchy.carapace": "Carapace", "item.antarchy.jumpy_bug_leg": "Jumpy Bug Leg", "item.antarchy.jumpy_boots": "Jumpy Boots", "tooltip.antarchy.jumpy_boots": "Sneak to charge, then jump to spring upward.", @@ -459,6 +471,7 @@ "item.antarchy.ouranwood_deer_spawn_egg": "Ouranwood Deer Spawn Egg", "item.antarchy.spirit_apple": "Spirit Apple", "tooltip.antarchy.spirit_apple": "Tames a Glimmer", + "tooltip.antarchy.spirit_apple.eaten": "Grants Glimmering when eaten", "item.antarchy.elka_spawn_egg": "Elka Spawn Egg", "item.antarchy.glimmer_bottle": "Bottle of Glimmer", "item.antarchy.glimmer_bottle.contains": "Contains: %s", @@ -568,6 +581,8 @@ "effect.antarchy.growth": "Growth", "effect.antarchy.bloodglass_ward": "Bloodglass Ward", "effect.antarchy.bloodglass_ward.description": "Gives hearts that shatter, absorbing an entire hit of damage. They regenerate over time.", + "effect.antarchy.glimmering": "Glimmering", + "effect.antarchy.glimmering.description": "Passes through entities and attacks unharmed, like a spirit.", "death.attack.triffid_mauling": "%1$s was mauled to death by a plant", "death.attack.triffid_mauling.player": "%1$s was mauled to death by a plant", "death.attack.triffid_swallow": "%1$s was swallowed by a triffid", @@ -606,9 +621,9 @@ "advancements.antarchy.fallen_kingdom_castle.description": "Discover the Fallen Kingdom Castle.", "advancements.antarchy.fallen_king_crown.title": "Chunks would load when I gave the word...", "advancements.antarchy.fallen_king_crown.description": "Obtain the Fallen King\u0027s Crown.", - "advancements.antarchy.the_lab.title": "Hello Everyone, Dan Here!", + "advancements.antarchy.the_lab.title": "Hey everyone, Dan here", "advancements.antarchy.the_lab.description": "Discover Dr. Trayaurus\u0027 lab.", - "advancements.antarchy.sweater_dreams.title": "Sweater Dreams", + "advancements.antarchy.sweater_dreams.title": "Sweeter Dreams", "advancements.antarchy.sweater_dreams.description": "Defeat the Nightmare.", "advancements.antarchy.stone_cold.title": "Stone Cold", "advancements.antarchy.stone_cold.description": "Defeat a Basilisk.", @@ -899,15 +914,22 @@ "advancements.antarchy.rocket_powered_octopus.description": "Craft an R.P.O. Launcher.", "advancements.antarchy.gravity_gun_craft.title": "Pick Up Artist", "advancements.antarchy.gravity_gun_craft.description": "Craft a Gravity Gun.", + "advancements.antarchy.upper_craft.title": "Uppies?? Uppies!!!", + "advancements.antarchy.upper_craft.description": "Craft an Upper.", + "advancements.antarchy.mucus_obtained.title": "Gazuntite!", + "advancements.antarchy.mucus_obtained.description": "Obtain some Mucus.", "block.antarchy.cavaryn_portal": "Cavaryn Portal", + "biome.antarchy.cavaryn_moleworm_caves": "Moleworm Caves", "block.antarchy.termite_nest": "Termite Nest", - "block.antarchy.chiten_spike": "Chiten Spike", - "block.antarchy.chiten_block": "Chiten Block", + "block.antarchy.chitin_spike": "Chitin Spike", + "block.antarchy.chitin_block": "Chitin Block", "block.antarchy.myrmite": "Myrmite", "block.antarchy.broodstone": "Broodstone", "block.antarchy.amber_moss_block": "Amber Moss Block", "block.antarchy.amber_moss_carpet": "Amber Moss Carpet", "block.antarchy.amber_lichen": "Amber Lichen", + "block.antarchy.mucus": "Mucus", + "tooltip.antarchy.mucus_slippery": "Makes the block it's on slippery like ice", "block.antarchy.bile_vein": "Bile Vein", "block.antarchy.creepvine": "Creepvine", "block.antarchy.creeping_horror_egg": "Creeping Horror Egg", @@ -928,7 +950,7 @@ "item.antarchy.creeping_horror_spawn_egg": "Creeping Horror Spawn Egg", "item.antarchy.lurking_terror_spawn_egg": "Lurking Terror Spawn Egg", "item.antarchy.hercules_beetle_spawn_egg": "Hercules Beetle Spawn Egg", - "item.antarchy.chiten": "Chiten", + "item.antarchy.chitin": "Chitin", "block.antarchy.polished_broodstone": "Polished Broodstone", "block.antarchy.chiseled_broodstone": "Chiseled Broodstone", "block.antarchy.broodstone_bricks": "Broodstone Bricks", @@ -941,6 +963,7 @@ "block.antarchy.broodstone_brick_stairs": "Broodstone Brick Stairs", "block.antarchy.broodstone_brick_slab": "Broodstone Brick Slab", "block.antarchy.broodstone_brick_wall": "Broodstone Brick Wall", + "block.antarchy.broodstone_pillar": "Broodstone Pillar", "block.antarchy.myrmite_coal_ore": "Myrmite Coal Ore", "block.antarchy.broodstone_uranium_ore": "Broodstone Uranium Ore", "block.antarchy.broodstone_titanium_ore": "Broodstone Titanium Ore", @@ -1001,5 +1024,26 @@ "advancements.antarchy.beetle_buddies.title": "Beetle Buddies", "advancements.antarchy.beetle_buddies.description": "Tame a Hercules Beetle.", "advancements.antarchy.herculean_task.title": "Herculean Task", - "advancements.antarchy.herculean_task.description": "Slay a Hercules Beetle." + "advancements.antarchy.herculean_task.description": "Slay a Hercules Beetle.", + "item.antarchy.tigers_eye": "Tiger's Eye", + "item.antarchy.tigers_eye_helmet": "Tiger's Eye Helmet", + "item.antarchy.tigers_eye_chestplate": "Tiger's Eye Chestplate", + "item.antarchy.tigers_eye_leggings": "Tiger's Eye Leggings", + "item.antarchy.tigers_eye_boots": "Tiger's Eye Boots", + "trim_material.antarchy.tigers_eye": "Tiger's Eye", + "item.antarchy.tigers_eye_armor.passive": "Up to 10% detection reduction", + "item.antarchy.tigers_eye_armor.full_set": "Full Set: Adaptive Camouflage", + "item.antarchy.tigers_eye_armor.activate": "Press %s to mimic the block beneath you", + "item.antarchy.tigers_eye_armor.active_bonus": "Doubles detection reduction while active", + "key.antarchy.tigers_eye_camouflage": "Adaptive Camouflage", + "message.antarchy.tiger_eye_camouflage.activated": "Adaptive Camouflage activated", + "message.antarchy.tiger_eye_camouflage.disabled": "Adaptive Camouflage disabled", + "message.antarchy.tiger_eye_camouflage.full_set_required": "A full set of Tiger's Eye armor is required", + "message.antarchy.tiger_eye_camouflage.invalid_block": "There is no suitable block beneath you", + "music.antarchy.lucid_lullaby": "Lucid Lullaby", + "music.antarchy.lucid_lullaby.credit": "hewo_", + "music.antarchy.venenatus": "Venenatus", + "music.antarchy.venenatus.credit": "hewo_", + "tooltip.antarchy.lucid_anchor.pyramid": "Requires an Antimetal Beacon pyramid above it", + "tooltip.antarchy.lucid_anchor.path": "Projects Inverted downward while it has an unobstructed path to the world below" } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/es_es.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/es_es.json index 8d6efdf1..263534e8 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/es_es.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/es_es.json @@ -869,8 +869,8 @@ "advancements.antarchy.gravity_gun_craft.description": "Fabrica una pistola gravitatoria.", "block.antarchy.cavaryn_portal": "Portal de Cavaryn", "block.antarchy.termite_nest": "Nido de Termita", - "block.antarchy.chiten_spike": "Púa de Quitina", - "block.antarchy.chiten_block": "Bloque de Quitina", + "block.antarchy.chitin_spike": "Púa de Quitina", + "block.antarchy.chitin_block": "Bloque de Quitina", "block.antarchy.myrmite": "Myrmite", "block.antarchy.broodstone": "Broodstone", "block.antarchy.amber_moss_block": "Bloque de musgo ámbar", @@ -896,7 +896,7 @@ "item.antarchy.creeping_horror_spawn_egg": "Huevo generador de Horror rastrero", "item.antarchy.lurking_terror_spawn_egg": "Huevo generador de Terror acechante", "item.antarchy.hercules_beetle_spawn_egg": "Huevo generador de Escarabajo hércules", - "item.antarchy.chiten": "Quitina", + "item.antarchy.chitin": "Quitina", "block.antarchy.polished_broodstone": "Broodstone pulido", "block.antarchy.chiseled_broodstone": "Broodstone cincelado", "block.antarchy.broodstone_bricks": "Ladrillos de Broodstone", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/fr_fr.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/fr_fr.json index 92426d80..90486b95 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/fr_fr.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/fr_fr.json @@ -869,8 +869,8 @@ "advancements.antarchy.gravity_gun_craft.description": "Fabriquez un canon à gravité.", "block.antarchy.cavaryn_portal": "Portail de Cavaryn", "block.antarchy.termite_nest": "Nid de Termite", - "block.antarchy.chiten_spike": "Pointe de Chitine", - "block.antarchy.chiten_block": "Bloc de Chitine", + "block.antarchy.chitin_spike": "Pointe de Chitine", + "block.antarchy.chitin_block": "Bloc de Chitine", "block.antarchy.myrmite": "Myrmite", "block.antarchy.broodstone": "Broodstone", "block.antarchy.amber_moss_block": "Bloc de mousse ambrée", @@ -896,7 +896,7 @@ "item.antarchy.creeping_horror_spawn_egg": "Œuf d’apparition de Horreur rampante", "item.antarchy.lurking_terror_spawn_egg": "Œuf d’apparition de Terreur tapie", "item.antarchy.hercules_beetle_spawn_egg": "Œuf d’apparition de Scarabée Hercule", - "item.antarchy.chiten": "Chitine", + "item.antarchy.chitin": "Chitine", "block.antarchy.polished_broodstone": "Broodstone poli", "block.antarchy.chiseled_broodstone": "Broodstone ciselé", "block.antarchy.broodstone_bricks": "Briques de Broodstone", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/it_it.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/it_it.json index 00b59863..8cae2bf2 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/it_it.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/it_it.json @@ -869,8 +869,8 @@ "advancements.antarchy.gravity_gun_craft.description": "Fabbrica un Cannone gravitazionale.", "block.antarchy.cavaryn_portal": "Portale per Cavaryn", "block.antarchy.termite_nest": "Nido di Termite", - "block.antarchy.chiten_spike": "Spuntone di Chiten", - "block.antarchy.chiten_block": "Blocco di Chiten", + "block.antarchy.chitin_spike": "Spuntone di Chiten", + "block.antarchy.chitin_block": "Blocco di Chiten", "block.antarchy.myrmite": "Myrmite", "block.antarchy.broodstone": "Broodstone", "block.antarchy.amber_moss_block": "Blocco di muschio ambrato", @@ -896,7 +896,7 @@ "item.antarchy.creeping_horror_spawn_egg": "Uovo generatore di Orrore strisciante", "item.antarchy.lurking_terror_spawn_egg": "Uovo generatore di Terrore in agguato", "item.antarchy.hercules_beetle_spawn_egg": "Uovo generatore di Scarabeo Ercole", - "item.antarchy.chiten": "Chiten", + "item.antarchy.chitin": "Chiten", "block.antarchy.polished_broodstone": "Broodstone levigato", "block.antarchy.chiseled_broodstone": "Broodstone cesellato", "block.antarchy.broodstone_bricks": "Mattoni di Broodstone", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/ja_jp.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/ja_jp.json index 7ac05450..a0888c20 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/ja_jp.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/ja_jp.json @@ -869,8 +869,8 @@ "advancements.antarchy.gravity_gun_craft.description": "重力銃をクラフトする。", "block.antarchy.cavaryn_portal": "カヴァリンのポータル", "block.antarchy.termite_nest": "シロアリの巣", - "block.antarchy.chiten_spike": "キチンのトゲ", - "block.antarchy.chiten_block": "キチンのブロック", + "block.antarchy.chitin_spike": "キチンのトゲ", + "block.antarchy.chitin_block": "キチンのブロック", "block.antarchy.myrmite": "ミルマイト", "block.antarchy.broodstone": "ブルードストーン", "block.antarchy.amber_moss_block": "琥珀色の苔ブロック", @@ -896,7 +896,7 @@ "item.antarchy.creeping_horror_spawn_egg": "這い寄る恐怖のスポーンエッグ", "item.antarchy.lurking_terror_spawn_egg": "潜む恐怖のスポーンエッグ", "item.antarchy.hercules_beetle_spawn_egg": "ヘラクレスオオカブトのスポーンエッグ", - "item.antarchy.chiten": "キチン", + "item.antarchy.chitin": "キチン", "block.antarchy.polished_broodstone": "磨かれたブルードストーン", "block.antarchy.chiseled_broodstone": "模様入りのブルードストーン", "block.antarchy.broodstone_bricks": "ブルードストーンレンガ", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/ko_kr.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/ko_kr.json index bb5facc5..712792fe 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/ko_kr.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/ko_kr.json @@ -869,8 +869,8 @@ "advancements.antarchy.gravity_gun_craft.description": "중력총을 제작하세요.", "block.antarchy.cavaryn_portal": "카바린 차원문", "block.antarchy.termite_nest": "흰개미 둥지", - "block.antarchy.chiten_spike": "치텐 가시", - "block.antarchy.chiten_block": "치텐 블록", + "block.antarchy.chitin_spike": "치텐 가시", + "block.antarchy.chitin_block": "치텐 블록", "block.antarchy.myrmite": "미르마이트", "block.antarchy.broodstone": "브루드스톤", "block.antarchy.amber_moss_block": "호박색 이끼 블록", @@ -896,7 +896,7 @@ "item.antarchy.creeping_horror_spawn_egg": "기어오는 공포 생성 알", "item.antarchy.lurking_terror_spawn_egg": "도사린 공포 생성 알", "item.antarchy.hercules_beetle_spawn_egg": "헤라클레스장수풍뎅이 생성 알", - "item.antarchy.chiten": "치텐", + "item.antarchy.chitin": "치텐", "block.antarchy.polished_broodstone": "윤나는 브루드스톤", "block.antarchy.chiseled_broodstone": "조각된 브루드스톤", "block.antarchy.broodstone_bricks": "브루드스톤 벽돌", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/pt_br.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/pt_br.json index ef307900..1527e9eb 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/pt_br.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/pt_br.json @@ -869,8 +869,8 @@ "advancements.antarchy.gravity_gun_craft.description": "Fabrique uma arma gravitacional.", "block.antarchy.cavaryn_portal": "Portal de Cavaryn", "block.antarchy.termite_nest": "Ninho de Cupim", - "block.antarchy.chiten_spike": "Espinho de Quitina", - "block.antarchy.chiten_block": "Bloco de Quitina", + "block.antarchy.chitin_spike": "Espinho de Quitina", + "block.antarchy.chitin_block": "Bloco de Quitina", "block.antarchy.myrmite": "Myrmite", "block.antarchy.broodstone": "Broodstone", "block.antarchy.amber_moss_block": "Bloco de Musgo Âmbar", @@ -896,7 +896,7 @@ "item.antarchy.creeping_horror_spawn_egg": "Ovo Gerador de Horror Rastejante", "item.antarchy.lurking_terror_spawn_egg": "Ovo Gerador de Terror à Espreita", "item.antarchy.hercules_beetle_spawn_egg": "Ovo Gerador de Besouro-hércules", - "item.antarchy.chiten": "Quitina", + "item.antarchy.chitin": "Quitina", "block.antarchy.polished_broodstone": "Broodstone polido", "block.antarchy.chiseled_broodstone": "Broodstone talhado", "block.antarchy.broodstone_bricks": "Tijolos de Broodstone", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/zh_cn.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/zh_cn.json index 03490d88..09d5e643 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/zh_cn.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/zh_cn.json @@ -869,8 +869,8 @@ "advancements.antarchy.gravity_gun_craft.description": "合成重力枪。", "block.antarchy.cavaryn_portal": "卡瓦林传送门", "block.antarchy.termite_nest": "白蚁巢", - "block.antarchy.chiten_spike": "甲壳素尖刺", - "block.antarchy.chiten_block": "甲壳素块", + "block.antarchy.chitin_spike": "甲壳素尖刺", + "block.antarchy.chitin_block": "甲壳素块", "block.antarchy.myrmite": "米尔迈特", "block.antarchy.broodstone": "布鲁德斯通", "block.antarchy.amber_moss_block": "琥珀苔藓块", @@ -896,7 +896,7 @@ "item.antarchy.creeping_horror_spawn_egg": "爬行恐魔刷怪蛋", "item.antarchy.lurking_terror_spawn_egg": "潜伏恐魔刷怪蛋", "item.antarchy.hercules_beetle_spawn_egg": "赫拉克勒斯甲虫刷怪蛋", - "item.antarchy.chiten": "甲壳素", + "item.antarchy.chitin": "甲壳素", "block.antarchy.polished_broodstone": "磨制布鲁德斯通", "block.antarchy.chiseled_broodstone": "雕纹布鲁德斯通", "block.antarchy.broodstone_bricks": "布鲁德斯通砖块", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/zh_tw.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/zh_tw.json index a9ca7ebe..0d3e7a3e 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/zh_tw.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/zh_tw.json @@ -869,8 +869,8 @@ "advancements.antarchy.gravity_gun_craft.description": "合成重力槍。", "block.antarchy.cavaryn_portal": "卡瓦林傳送門", "block.antarchy.termite_nest": "白蟻巢", - "block.antarchy.chiten_spike": "甲殼素尖刺", - "block.antarchy.chiten_block": "甲殼素塊", + "block.antarchy.chitin_spike": "甲殼素尖刺", + "block.antarchy.chitin_block": "甲殼素塊", "block.antarchy.myrmite": "米爾邁特", "block.antarchy.broodstone": "布魯德斯通", "block.antarchy.amber_moss_block": "琥珀苔蘚塊", @@ -896,7 +896,7 @@ "item.antarchy.creeping_horror_spawn_egg": "爬行恐魔刷怪蛋", "item.antarchy.lurking_terror_spawn_egg": "潛伏恐魔刷怪蛋", "item.antarchy.hercules_beetle_spawn_egg": "赫拉克勒斯甲蟲刷怪蛋", - "item.antarchy.chiten": "甲殼素", + "item.antarchy.chitin": "甲殼素", "block.antarchy.polished_broodstone": "磨製布魯德斯通", "block.antarchy.chiseled_broodstone": "雕紋布魯德斯通", "block.antarchy.broodstone_bricks": "布魯德斯通磚塊", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_block.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_block.json deleted file mode 100644 index c3d21bb3..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_block.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column", - "textures": { - "end": "antarchy:block/chiten_block", - "side": "antarchy:block/chiten_block" - } -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_block.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_block.json new file mode 100644 index 00000000..e74bec2a --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_block.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "antarchy:block/chitin_block", + "side": "antarchy:block/chitin_block" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_down_base.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_base.json similarity index 53% rename from common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_down_base.json rename to common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_base.json index 5bb4d70a..4ec45128 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_down_base.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_base.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/pointed_dripstone", "textures": { - "cross": "antarchy:block/chiten_spike/chiten_spike_down_base" + "cross": "antarchy:block/chitin_spike/chitin_spike_down_base" } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_down_frustum.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_frustum.json similarity index 54% rename from common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_down_frustum.json rename to common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_frustum.json index c94fcdb5..5ad13746 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_down_frustum.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_frustum.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/pointed_dripstone", "textures": { - "cross": "antarchy:block/chiten_spike/chiten_spike_down_frustum" + "cross": "antarchy:block/chitin_spike/chitin_spike_down_frustum" } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_down_middle.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_middle.json similarity index 54% rename from common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_down_middle.json rename to common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_middle.json index 8cd7d902..9e3fd73e 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_down_middle.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_middle.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/pointed_dripstone", "textures": { - "cross": "antarchy:block/chiten_spike/chiten_spike_down_middle" + "cross": "antarchy:block/chitin_spike/chitin_spike_down_middle" } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_down_tip.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_tip.json similarity index 53% rename from common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_down_tip.json rename to common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_tip.json index d8b89d9b..9f3622fb 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_down_tip.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_tip.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/pointed_dripstone", "textures": { - "cross": "antarchy:block/chiten_spike/chiten_spike_down_tip" + "cross": "antarchy:block/chitin_spike/chitin_spike_down_tip" } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_down_tip_merge.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_tip_merge.json similarity index 55% rename from common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_down_tip_merge.json rename to common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_tip_merge.json index 3941f02d..e1325f39 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_down_tip_merge.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_down_tip_merge.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/pointed_dripstone", "textures": { - "cross": "antarchy:block/chiten_spike/chiten_spike_down_tip_merge" + "cross": "antarchy:block/chitin_spike/chitin_spike_down_tip_merge" } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_up_base.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_base.json similarity index 53% rename from common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_up_base.json rename to common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_base.json index a896ccbb..2fa8eca9 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_up_base.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_base.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/pointed_dripstone", "textures": { - "cross": "antarchy:block/chiten_spike/chiten_spike_up_base" + "cross": "antarchy:block/chitin_spike/chitin_spike_up_base" } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_up_frustum.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_frustum.json similarity index 54% rename from common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_up_frustum.json rename to common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_frustum.json index e3e84f52..75aeda2b 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_up_frustum.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_frustum.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/pointed_dripstone", "textures": { - "cross": "antarchy:block/chiten_spike/chiten_spike_up_frustum" + "cross": "antarchy:block/chitin_spike/chitin_spike_up_frustum" } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_up_middle.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_middle.json similarity index 53% rename from common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_up_middle.json rename to common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_middle.json index ba4e46f2..dd2baeff 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_up_middle.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_middle.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/pointed_dripstone", "textures": { - "cross": "antarchy:block/chiten_spike/chiten_spike_up_middle" + "cross": "antarchy:block/chitin_spike/chitin_spike_up_middle" } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_up_tip.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_tip.json similarity index 53% rename from common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_up_tip.json rename to common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_tip.json index 25dda590..34d704ce 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_up_tip.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_tip.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/pointed_dripstone", "textures": { - "cross": "antarchy:block/chiten_spike/chiten_spike_up_tip" + "cross": "antarchy:block/chitin_spike/chitin_spike_up_tip" } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_up_tip_merge.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_tip_merge.json similarity index 54% rename from common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_up_tip_merge.json rename to common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_tip_merge.json index 6349e79a..6d0e4964 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/chiten_spike_up_tip_merge.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/chitin_spike_up_tip_merge.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/pointed_dripstone", "textures": { - "cross": "antarchy:block/chiten_spike/chiten_spike_up_tip_merge" + "cross": "antarchy:block/chitin_spike/chitin_spike_up_tip_merge" } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_inventory.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_inventory.json deleted file mode 100644 index 91807bc1..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_inventory.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_inventory", - "textures": { - "wall": "antarchy:block/titanium/titanium_block" - } -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_post.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_post.json deleted file mode 100644 index fefb11fe..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_post.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_post", - "textures": { - "wall": "antarchy:block/titanium/titanium_block" - } -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_side.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_side.json deleted file mode 100644 index 6c784c47..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_side.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_side", - "textures": { - "wall": "antarchy:block/titanium/titanium_block" - } -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_side_tall.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_side_tall.json deleted file mode 100644 index bcddc58e..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_titanium_wall_side_tall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_side_tall", - "textures": { - "wall": "antarchy:block/titanium/titanium_block" - } -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_inventory.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_inventory.json deleted file mode 100644 index 68cb60c7..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_inventory.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_inventory", - "textures": { - "wall": "antarchy:block/uranium/uranium_block" - } -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_post.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_post.json deleted file mode 100644 index 8ac993de..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_post.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_post", - "textures": { - "wall": "antarchy:block/uranium/uranium_block" - } -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_side.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_side.json deleted file mode 100644 index e95dcf78..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_side.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_side", - "textures": { - "wall": "antarchy:block/uranium/uranium_block" - } -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_side_tall.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_side_tall.json deleted file mode 100644 index 363da0fb..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/block/cut_uranium_wall_side_tall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_side_tall", - "textures": { - "wall": "antarchy:block/uranium/uranium_block" - } -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/chiten_block.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/chiten_block.json deleted file mode 100644 index 47e06517..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/item/chiten_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "antarchy:block/chiten_block" -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/chiten.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/chitin.json similarity index 63% rename from common-1.21.1/src/main/resources/assets/antarchy/models/item/chiten.json rename to common-1.21.1/src/main/resources/assets/antarchy/models/item/chitin.json index 20b2e019..8c0fb56b 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/item/chiten.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/chitin.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "antarchy:item/chiten" + "layer0": "antarchy:item/chitin" } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/chitin_block.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/chitin_block.json new file mode 100644 index 00000000..af0eb6ea --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/chitin_block.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/chitin_block" +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/chiten_spike.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/chitin_spike.json similarity index 59% rename from common-1.21.1/src/main/resources/assets/antarchy/models/item/chiten_spike.json rename to common-1.21.1/src/main/resources/assets/antarchy/models/item/chitin_spike.json index 0a70c0e9..0204bc60 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/item/chiten_spike.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/chitin_spike.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "antarchy:item/chiten_spike" + "layer0": "antarchy:item/chitin_spike" } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/cut_titanium_wall.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/cut_titanium_wall.json deleted file mode 100644 index c3db6023..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/item/cut_titanium_wall.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "antarchy:block/cut_titanium_wall_inventory" -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/cut_uranium_wall.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/cut_uranium_wall.json deleted file mode 100644 index 3bdb1efd..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/item/cut_uranium_wall.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "antarchy:block/cut_uranium_wall_inventory" -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/lucid_anchor.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/lucid_anchor.json new file mode 100644 index 00000000..00045879 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/lucid_anchor.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/lucid_anchor" +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/carapace.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/tigers_eye.json similarity index 60% rename from common-1.21.1/src/main/resources/assets/antarchy/models/item/carapace.json rename to common-1.21.1/src/main/resources/assets/antarchy/models/item/tigers_eye.json index 33c0b13e..a3eb2d1b 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/models/item/carapace.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/tigers_eye.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "antarchy:item/carapace" + "layer0": "antarchy:item/tigers_eye" } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/tigers_eye_boots.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/tigers_eye_boots.json new file mode 100644 index 00000000..d7e69c26 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/tigers_eye_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/tigers_eye/tigers_eye_boots" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/tigers_eye_chestplate.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/tigers_eye_chestplate.json new file mode 100644 index 00000000..32f5bdf2 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/tigers_eye_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/tigers_eye/tigers_eye_chestplate" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/tigers_eye_helmet.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/tigers_eye_helmet.json new file mode 100644 index 00000000..6bd539db --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/tigers_eye_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/tigers_eye/tigers_eye_helmet" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/tigers_eye_leggings.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/tigers_eye_leggings.json new file mode 100644 index 00000000..bb9a8c56 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/tigers_eye_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/tigers_eye/tigers_eye_leggings" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/sounds.json b/common-1.21.1/src/main/resources/assets/antarchy/sounds.json index 9c31a672..cfdb304d 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/sounds.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/sounds.json @@ -916,6 +916,22 @@ } ] }, + "lucid_lullaby": { + "sounds": [ + { + "name": "antarchy:music/game/thoraxis/lucid_lullaby", + "stream": true + } + ] + }, + "venenatus": { + "sounds": [ + { + "name": "antarchy:music/game/cavaryn/venenatus", + "stream": true + } + ] + }, "lucid_ambient": { "subtitle": "subtitles.antarchy.lucid_ambient", "sounds": [ diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/biomite.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/biomite.png index 02f43731a00cd5533551a1860462a7b63f66f282..db068cdf62d2ba23c26013649a4f2e567c76cd82 100644 GIT binary patch delta 425 zcmV;a0apIA1HuE4BYyw^b5ch_0Itp)=>Px$d`Uz>R5*=glg*BtFc5@4W1AnZAks*i zJ*~92JVxIC8FI-vhgF6s2GcRl0qgSwttR&DGUUL+VbnK;x3-n zYLLh*ky)T!5<{&Rmu>J0V3zpA-dfF@>ltdr*B4X%4YfK+tnx=5F%!)a8ERDs{aUPI zToSXyO+qP31a!HS0l^2xWixjc$1IP!)g8v_4v7=@2;d5V#EEe+r4zti{AnxWk}$W% z@ELXz@h5$=#DCN18JuOky4?d;sneyr#tfD?@x?lBjXA9__<+e>vf~e<44>iOQ?Rnh z*+}EpR5TseI1rdc?cO{aog15LOpneVkHiU2x05{N87>*mz*%B3^%(8rd$GFP2#&gr zV5>WBjk$P}%GO+^Fh|h!HM&Zj(inW$$+p!4R5>WE)gq_SxTNu9aIJ8a!mo+{)(r|U TPKqws00000NkvXXu0mjfju_5x delta 410 zcmV;L0cHNe1G58=BYy#CNklO-ch%5Cq`oBND~m>@+7(@B(fP;?9lW#w)mW z=Na9403o`IKM@TE#`y+nNCG|ex~r;R_e|>D*`&EYziNUxPfjk@>fs+Qubao4+Xm9s z(cYlUzLo`+_P4z|?9NAnjq*JED{srD;~{RiztyTrf$|!&M1TCu7X@ml2{rTSXw$JQ zK7V_pt;nv@KGGGD#*7-t)kT`LmQp=L2uN%Km}!#JPG7%EbX9k|5-Y|)I6mI#cTJrx z%}ieP??syoxbe*gdg|NpxB@0I`n00v1!K~w_(%M%wzD1^$!qyPW_07*qoM6N<$ Eg7KWeXaE2J diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/biomite_turf.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/biomite_turf.png index 10cf07b2904e9e3f5c1c7eaaeb6efed0198ba97c..7ed82ebc043aef05739793f411bbcdcb4918a178 100644 GIT binary patch delta 1416 zcmV;31$X+436Beq8Gi-<000wx_m%(v1w=_iK~#7F?AJ?c+*K3+@Y9=29@9+HCZW|< z>a$|2V3k&EMYNy=QCuiU#Z{MG`>p&Gf~ZJAy3s|YT1tzik2KH8d&c>la6{6hDBTFs zz{$Pm-1EBUb^lW?ef?qg%S&%3e17qCuJG-9I6%Ab+1al3@_*%XT~LPFi{Wo|X*~vp z`)#A{4-AzU8gC^ym|tx~-`ZkW;mghaQD&AqDS&u?c3Kt za%DOR+`Ik9LVrB?>3+(N{I-!RLpJTJE3v$`k)Dw)h|T>2F}v0d1dNodZ7ik2JB#bd zeCLN-iMKo57(6phETOn_y&DQfE1+=lotEtuJlAUEp3&iJoha@DL8YkCH=LH>H@};+ zB#bqhfp@Su7>91GByFX=62*OBhnt(0s)dSEDqwg3A%DPg*DLM>86DV{mRXn>>ju18 zHfhV#^MQ}Cxz%m}aY8FBLI_sZq!AN~Vj|~)N`MmJ3}hCni(I=qvz$@KBr}-q{k$Av zV^0bCpI070BNb#F^a4_?$~7iJV!_J_in`E0y4d_9#if4tO@Edh=uC` zH28KUTYp&?YV?JBVq)3KU8}2Ew=1FCc{%dI!5Dd~8RPGb#-Vf1#Eb7Aj+ZWs$BB=Q z#_3NdW8~u_2^+5u1n8U^j@gr=p}_DJ5wGpr>a}a#v#1NL+SY1LNIAYk2M5Bu*mIyb z00e>FufkGJ355(4JqO>&6_O@Oj^01s^p;)ofWnMHwQ&5vD867t4;Uz1 zeShPtSAr3TsuJAoH61*!K)}5av~>U3)<4dJ@@jt$-ZJ*#3xc)QrBRbn=qgX< zL4>G_M~#u8vSS{Y1!jU7pn#6OI~pf?^FY5(o*&D3&^SMl^FW5ogd@E<;yg>awkj*F ze=!s4ERd~KprQx^hgM1-H4~hh1!hHlAAfjA5NR|A>?zgr0JB=qP$)g`@y3_hL_n)gn5bn^?1aP_)yjUXn1(nA=NprQ+& zX>3mr-POBvHWpnU(g-v`}OV{xK41Gax3m<#$JY;5~J zFe6TWG7+y`e0K9;kxzHh!u9*0?tc&L@tXm!4$XG<^eQWRM-ABzkQ1ezeZ(N1zFMM$fIbSJ#15y4N146a`b*8jd93yym9%%LE zslnKq2L!q230wbhK7UkTA`G$yI{(jkP;>pbzZd=n00960z9dXv00006NklWXqNYdHV_002ovPDHLkU;%wK~zYI<(6M>8$}Sn=l0gRGri0Csv{&( zqR7cn5~{SMzyr-cSwwbuuu6p#2^2m7--1W@6hNQ)gwmHbs@fzDRYdy)DUF1i3vRGa z$t7pUZtRoqZqa(2Q)Ju%4@eQLfNc_08#Dh3_erpfkfzDubX?Afrr!%%H|hlxZMM@+F)42Fk=C!1l^KYA=2 z9ts5usxP=uDh7v+Kx0Id&yk@dDOj+-&v2+D{xfN20*#-98;xYqLakxMqR&l;~<}O=|*&;)>)Q zH828hl^-LnNRe;!;7SevuC}szOncuDYE?ElDdg6|sL$txXWNilVSgj0_-q@VY=#93MojTvlG(lqpK#H)(o;9RNZ`3EiawoAD8>-$%GKiqg354Xz?+KArT zy?>LD)4EFkPdu0=3r{f6JBq`XC&l3cygSbY@y2H~pXaxEv&q>&fL2y`|K1hh=S{Y> z6n=7p2!uU)%+<~g4-*~r0h93+Jm?+u0sq0SJV0w%XMMmuDo%*1*f4f(D`jT=Ih<xXi_x*^6V(A3{h?6rkRvN@K{%QZW%i3sMkrYD-JilJ^dYeONYUel@ z(qiuzV9qZ$efRy#*}L6mWpCa- zt!vO9&6VC(Zhvo-2^>zB+qKi9X0$$8 zU2FZ|N7GgUsX&k+@kMwf zB1x33l)wlCmVXh5h&54b{>{6qRX)FXrzFTxjhi2vIZ=LOSyjak!^DVnfl{8Id739k z-6&3M#K1+Q0|IFtf@71_JjBP_OLfU$#KmIWgb32fx5EZRkYCn&Taz|s6c5g6bXkD2 zKSBig2qBDFkrBOx%-4C}40e=9=$uK^~&tMUWxuJa30~0{m z5dp1LMv&i{A*#w8t^_R3o1jwfKiO_OkJjrH&SR{*_YQ2KADLV0zA;TyscPVC#a+1Y zgCf8XnLUR*Zb^bO9~9XT1b@s`b7#x4KDxoelmN%LFM&eOe>lSV&~g&6s)%q2gbXNX1T4_}A0Wue<_nfE ze?4aedqog1ssbs745x{F$i}KbfN}WMZnS2I%$%vf+PA>*)-k$`e&2J*49EZx%rmM0 zMt{Yud(!~AFKCX)kcb<_5E)FYJ8O#o5v`HLmEDi{o_d!RgJ0)GiI%>&?L=KMxN%)Fkni7X?4k3}dkK6Cx? zZmNl#%yAi!{0d{Lb25n;5he6Zs0uVAWfDLFG#`x*md}=bBkB~gA3-31%mLjG#viQX zbwZ2hY+r&Z2^j&<2yBE?zO}I`5J0w9%}EuN{elmQ1pho|WCR(FL^TP}s4_kkNPhs& z7SCBwNiGzEEUI!M#t@Ok2)byCUn~}!g2a%JJ*beyU_2}s$J~J|9G#L784|yEvRd;8 z%U>T94*PagM1X*0H_9w4VI){4R;OU0c^sq3ZjDHcaIo;^C7^kL&Q>-AYvzM8Rs{)s|3-cW%*Wu|Sg-QR z=WKhjAu?M*BMFFx0?N$Km6)r!+@%Y}KlwM}O&{rV;S_FX9^VsDI3NFpli zx%Zc4?U;%sM1QqyL4@4=0TsW2I}vf$mByeh?72jAe_5_9JH?WYMn!hlHBHUg$8XTk zuouN2P~z9W?=wwp+oG_CN)U=DyNeL1BuaYnSQ~>#GP~=>CZ+nrAA6p^Kr7DoQM)Y- z1E-q}5ucSOr+9wveWjFm@>qvWRoHh?bmF$i=e0ke3V(ZUy{=P9b%d?j5@0X6_B1@^mAu(_P>6Ocr$>7a$nJi19t)VgBSqo9GU8jQs zX_{!ozy;K8S+dtBYIRxIciU~;5DW@+?dRtf=H<{Z<#M{P?;aiE<&#qi2F2zE-ZTt) z{gNEVU4Kfea+!QY#9U}L#LZi>+wY~c%IwONT;#wFzH=9+v%79I3Yx4e zJKRctK&6r(Qni9#KraSzXc(tsli!1#-E~t*Wtw_*&EY6Sqy~Q?2QG+aQ*5rgi;Kwq z`3roFL`1tSuU)5JA3E0S6C6eIz150i4CIX+(bZnUl}!vzBhR<nj%jrbJ?2*W0}y1hA;u>>rYxn^y|g<%0S&5=H+@V5 zrsvV2=7u_s8;Ky9U=Th1@+*9uo|1@a+vvbj8abqrisi-+L==sB2t=c3gZi=Ai(X3I z>l2v_*cJ@p{bC9IVNVDK@#E%(d)Dd{&3}omu0bDM2J?><8|%1}ZHo>XgrYk%^r%Ke zOKFwMAqR$bbq&VB_Foh6H#br zdP=f?T^<$d>wvP^gis9w5`FfR!hfcUM8G#B5Dp1;04}ClahOhQ4y$X<{blbMisqkk zIrN*g%Vl(<#5z90_yB3y2V4vT9(vaDY<(%M9zAlD0_TVzG{*4XDg<(5S0dM0`eWZa_@Tu6A3_&3_42TkPNyQJ`v2dtsO8Br#s7h1%18Q^K z9UTJ*E6W%H!60VTmtVQv`AbB#x=h>_;8L~X+`I))?xk@e9KtgXLe^um0R&7_dzxkn zSeBf43x($MIC^xbEell5c7NvL-X3Ll&|LA({5g)=oh)o&Y{?AYy^blduR+uI(nx@1 z)qRJZfnE9LEzgNj^vIjO(J=^jVP3ATIqYIQe=%g0@bv&3cAYzSrRN&##9iO#*nH<| zXEHP!;?7+}1h-8S%2-+c{`7ZFql+cP;&v5FAgI!B^cV)Qe0gv12Y=M3pE#BUf>@S3 zIKZ5qo`Nl$oRWI$XFY{|_k15TGCLO z%T9qN?t{YhI@Yg8kDP%E=m#cHK93e{ZPV}&J$s5hgoF75>iXMYd#w(+heJY0jnyF% z!GNn);5_kJq#mD*zsuiaLIkpxa^{Z>>Z)_3`#iUFK zNc89cra%N=;bn)X(dGuYXm#4f|L*Jv)NsBJU%014*j?hYvb!>EZeW36F<}$%2UKTq z@g_rT5^Ez*pzN+24#6RZhQUIH*t1IBL;l}0yQs&$TMzj!RDZ+ch+T+hWV3-ba1LBF z-v)0Djrn-WKYRdyA3lIe!lvr)mx%=NJ~{Ub%!5Dw$$j<8RRcfjx#&lVt^dG)hc1e< z7G~60OJ5q1mq*2`S8lB?yML*_{I&PvkD&Mde#qeZ+t^+g=4Gu8Yq>On2eu3$I|lym z|H{Qh_3SCtzb?TB+-}SG4f^l{*Ktq}pEgbX`~~oiP0IfPaq8OtRC>=G00000NkvXX Hu0mjfHPh63 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/biowart.png.mcmeta b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/biowart.png.mcmeta index 6714e205..e96a96aa 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/biowart.png.mcmeta +++ b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/biowart.png.mcmeta @@ -1,6 +1,6 @@ { - "animation": { - "frametime": 16, - "interpolate": true - } -} + "animation": { + "frametime": 20, + "interpolate": true + } +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/biowart_tendrils.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/biowart_tendrils.png index 6aac53fa77a8d55d71079d4a089e25a203beb12e..818afa2b271c45ee9fed648e47b7bbdaa77c7eec 100644 GIT binary patch delta 1132 zcmV-y1e5!+1%L^VBYy-nNklE9Gs0xXv3=qys%Gt+x7eL5S zEaV3>!dP%V>jEa5*jC`o+y}~9GcCR5{u+_k5(&0+7k|K;fbulaB*tn)m9^N#8&_Kc z)%dKV1Q2Rq$-nsh+aY*X=Q0o)qsgxRJp(O$?bh{`U9=8T0Chh|jsSl2N z#VfB7nSYIBrKpxw15f3)_>gvI4c6$7FbQ$YIUVu@%UXpb0F3` zfv@}YL>7!=6NtJ6Bf+N)5#o}J@%DuRtPNvc&2z8|LZe9gLUGRQqAv76Jr{8a#=8Kw z9YGMOituGcT4zlFfrwt`Gk!25j0NYjE?}~WZ3X_V`#{;Uu@>~fh}C(o1D&YuBVs&J zDSuPd4@Q=s4YaYofGt_yK}dFjsPnXM-GyBpYG>qtwQ1l)^1rjomDtGXJFs9h8G}VE z$$~cls?MKd2=Zm*$F#B?RgoruKm>u$_`!@Y7M#zzfXODd6*%?xf!C@Ul`((G+G|8& zBLSwx{RgWu$GCYDKr*S8#VQZ3)QzJx0e>WQZ&3)^+FfA#Vzr#ZF*X4Xf}PYxajE#k z7sFwaR8AKNSjo8$bN;2>Gy#jXsiVjea|C$KAHl?pO+Z$pWD?*zJ3l4?K?#F30TUt! ze8vxEgt6d!)&)#9v8}+FxDUKq^{0r8!cAaDse@?L?0NBGG*Jh zxR!Ldtr7*syFfC|f)pReiv`HxeDj<2fY{7?dfMfnY` zM*aHvr4Hw(AIYj!FbMyJzl9eF#3!) z8^75duGU9~y(9}7;Ot_petP_7lVNU*1X;Yj{zdmD!#HFU13(t*8$I<|WpJ8}83678 zL1|_(ST+EDv2lP&WnJXFFmkq*xbZUPm=HDIgb5&d%7(ETb1cBLsVY%{)8~Oyn09w6 zVVcQAJb)WuK!2A9@VqiZdR=(1Tx!foy0M%)1u*>q6;6%`=piHvVs*Bd;PN2n4LnKX zcyuVV0$Y>8h)|aj9SZdZS^z5HR{o&y!1pcl(ZW=UYbQ1SZw3|%nAyg?fMf#789v87 z1AQds*0ntY2A2B-CTEKYn89FB2X()Y^9HSeBKHaw4}Z3IR#+x3P`o`u@dw2pBx>{# zntsECs>cGC2ObNO0MaL*D~F1#nF|&m#{{gzTJ>fQMe_$pBj}%OZC1<|L?Y!_AejI+ zkSvH9ct9!r1N#qN{K2f5*op^QUs1LLwFPC%NO^!P$jO-b1H7P2Kn_?iVL;J*f`p0L z!N{eGfqyj?wB~`9W$_2I)A9#I(ga?{G!1T3!f(jJt z7=V`hq<;W|T8XC}e%LQ*ryTBn0lX3VgTez{o6Dd^k4p3T4W@S9sQHD)=Z#urX2sPy zZ_M=$On+dVH>&3g8WS)Gwfm9@+47FNm6`M42NYhME9(WT4KV-!002ovPDHLkV1lPO BH;n)Q diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_block.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_block.png deleted file mode 100644 index bee3628b97be563ffdade87178141d3df26a3ce2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 490 zcmVPx$q)9|UR5*=olgn!3FcgNraZFstMk1F*FvyTaA+s7N^tt9e<^lRr1BI>{n1#WD z(nZoDVK+{}%q-F)lxfe(1|9uZeY^Yh^RGKNeD8UBdFRv}8M}daCgl|XS(#HUrZlY! z-wANBoRv8@x7T6u=JuK&-wm5u1JJaNu^XrsQ%r40Y-?#+2f(J*Y|RSa`|$63k6vm_ zZKxJg#%^G?o}&tdJ2=vqj;Rgq;COm@XHs6F3WZ*tk=?l zg{cjCsj;mkD|1qzDF>Sm8Di2`m&S}zF-}H0@bGv>kY0$Xapap?lL}4S+Tea{?9T3a z>juVd;QsfY(2uOlQH3HEbX6#t4_&e>+5u+kIortCo!#SmPx}9@aViq)Y(1x1OfNi; zR;FJqe#$+HPNa%AX`F408XFZelIEV@h9=3%Jmf8PjT4D`5|>FNBr&>P>Wi3UY-`!s geR!?1oRvBM0GOdIXYu?}xBvhE07*qoM6N<$g8Y-=6#xJL diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_base.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_base.png deleted file mode 100644 index 49c5d6a170bb0c2b303e1999d291c17d5ff685e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 441 zcmV;q0Y?6bP)nMrDVbdn9CKo0T*FpVD2JJFi?sTB_jVzkMr5A z-AlQL~L!IyLA9OX_J9}N4^UC%juZ7xDA{LFDL`}?F z-~b9D&d%@C+v7{d;YFi0b)E$jO|IkQ#6X^`1`g`CqJ|=1DjcHM3Jcg5P37dLP!Zq& z_8&M<+t36KLXaqmfawb00^!1Ra1dCBBH)IIMtPty^50?+U>|JPTbP;|$zPo^WfjGv(2oRu7 zJw4g=F<1kXi34y%4`` zr~da|Ywf+Rwf5RQ|I5#Be|Noeu(wm$-dgQ!EH70y*H$`WVE?3*DljrMl324&kN1|r zsjDcz$bQ z`E&`Wx-c_QRPGxd$eE^k970DYr~l$t0m%uniNq)73jC~WRDs;zip#6VqForC$`XE4 z1yr?Z#oX*@QCSQsXMle`qpEErxkf~EpcC;nwF5zw+lUdFUz}_Pse=gGLzjRK1i|)< zW`T5ICiX)WI5<3Ro<<@ZP+cPUXxscMz|nrz*lAzfAi)k@0)k1@MXn$Y)xi!`z&}w^ zaKIG|4F;$>?1d^Ikm_vJ;pxKf>dt)w00960VdsAc00006Nkl$TVT8@!cU_!a*fwJ;b2E6RKP1m3Q{I>D(`(G>KMH~KcvYecGKvmt1u~NTW z$!FtiOZUJ7Ppit0uKuvgcAuZy0)-Hf1<_Llza8Iv|7<*ij}gK- diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_tip_merge.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_tip_merge.png deleted file mode 100644 index 9c78714ddd43b538b89ee4381f3bd955488e5a22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 299 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`4?JBQLn;{OOfuvN$@`;Sx7^i9 zihljnX3-fr5eJ^lFC8v@sM`}{H>W2kC*H@wbloI&4zKQKMHX>YzCWye8Tb@B?%bOB z+k-LhyZ?&$U;WplvTzk?I^<0d^n1QKOMX4mi8)*J554eYGzju=>2dy&!lWVek#A4Z zyV(qK7g&|_PqJ)ST@vt%slk_lKjr%+`-bx@C)PQf*z5m-Nn?VbRVjnyMaGRP#VlM) uW(Y=9|6*cb`2YXi-K`&heq{ssm6<`qGV<_5FZb<05e83JKbLh*2~7aZ8F1(T diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_base.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_base.png deleted file mode 100644 index f9eab88eec5ae4511cfe4f318b7219a590fbb881..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 420 zcmV;V0bBlwP)}KtbVVZAi z?X~t=>$lFFsnXzccCuHWpB~pNjt+Nf>~C$>O%8UqYYfU#ZlE9nVHamd6IRye6GmF& z36T$*8#uJ5+Du~MaQF0;g74l(f;d7&X&{L1YnRE5D8Og$y-bfLW37pNuQX5y6EANc z6Zlsb4|#GFs%rYBfduKRojGpdzr9Pc@013L`{(@C1mp{7g2{!M6o{iVARnX$RJs*2(_`Ia34YX2XhHPyiRe zw}ziiK_CZbw(@hqfeIE;%m)P?CioEl0RRC1|1GtTvj6}921!IgR09C~y5RXJ1OVdz O00005QX7J!RxZ32#TN}7>KW6rl}YRf|%$7n2S%~E1C%kVjzmkdIeec8>pdsdc}XM zy1MJs>6w{Ioxhu_lhN(<^HGGSz5N{OR(F-|Ihajp3ud<@dY%1o2T&)@Jn(l%BCrrPBML>AVU z6V$sD0v?(M(*sxd8GaSl$VCbP&H1Kg>q*wtQ3xoo9S}5KJ?OrXLO`Q~xqWL)_vYH? z;HqjU1Qaxj_YdzWpY9r7C-QnFzy;z1V%ZzufN(@PS^=M~0=S3=Xl)_~@`!S@0u~y5 z2bwjpi*6HF&Z8Az8@_+I0_(_a=XoJudX7!gkvoucXCIXVE^J_DZ!N_{ksIV!_y+(0 n|NkU!v&8@a00v1!K~w_(lzyX!EZL!M00000NkvXXu0mjfg2t#? diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_middle.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_middle.png deleted file mode 100644 index 37c8e4d2daefc6f93229d1350ac47c0f974af55f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 424 zcmV;Z0ayNsP)>)3heD}6xd!{E$ZxSt{3R1rCflc``TqH=4VC{ zCg!G7Fx(ugV)egVpmTiEXic_K;LzRESNiO|SG?Unr|;fJg; zQ4wtzq@nT$xqut%I3PI^LIHoBT)@o&EUs@}s@KN{1Ej$E^z6LBA{THw2Mc}c7kZ~a z{5QFPTO(*qe(beDfqhtOgQFm@k27p8Ab}%@?IqIn*iG&oOfK;P9Mmz|PD*bFWBd@rLc?$KUOqd-LY0t&C?T$%*_- z|MNdC`Bb|2hASQ`xOc>UTjQA~K4GqrGsBl!`&dc6hWkv1HlNa4ke8jj!fl_YLry{@ z@4{=76&d?~o4z>yQjruo;MLRrz;@cP?UD_yh03ZcJk@{> l{r|s?QHB@DU<0|BnW0qP#QOVUD`fNmZHW#Lo5Bnb?uj*CaWZ#*Yh!; z>*X|v5=%=!`)jRWv)|gR1__|SA;d}{0Nc&3NvQk&Rj=hkfZN6aF+i&hh7dp<&CH7& z91m-=&lYe1NU7?;U8rXAA%K-#xS>!f1mr6NQqANG!2Nc%n+L>2p;7^u7rsBerPNUt z0QQV+7w@%`C;+zHH01VccOeAOJTVgX5i#=rL+lCxe9Rkt3z3r%00960`Mq|a00006 dNkl{?yi! z`Fsl}&kw)BGJjdm<0Ee}jtQPgur^cIEonV_VnKIp)r8=`Ukbj)`H7jF{(HTi(R2eF W|G8PBmw^sq@O1TKby??>&;$T&++gPb delta 234 zcmdnTbc|_&W1M<`Pl&6jscA$+L{U+ZkFI=}iSmsbH~#;HZ0s>+DSfEEWnK?lyDNhdTI3hr)sE%KgQgFpBAl%FCjo4?Mv z9Bt%KUR}ZJXbvP6R_>9^bo`mRWWi)ZF?Qz%ClxA;Ivz|vcw>G3v5LRpc~{qOefLX0 Y%aJ3h#${VC&@l|2u6{1-oDvwD0Qmf34gdfE diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/myrmite_coal_ore.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/myrmite_coal_ore.png index 2f24f39820eeb79d22461ff0a9efe95375f5e0ba..a2c6baedc7f49ce4a91869c5596da65fcde3faca 100644 GIT binary patch delta 586 zcmV-Q0=50+1mXmcBYyw^b5ch_0Itp)=>Px%97#k$R5*=olhI4tP#DF3GpR{zlC=iI zFi_m4pva(u$pqQNHy`#tk1+B0 z`}BVAcgt&F_%=_SeoxQ|9Sq+li6sE*+aZP2%(Dq*5P4XhLw_MP{hr`1|Ap%|$#ccw zhaEuh{qh!o{q6<;<5)0~QvjC!6|V-XrVi-)&dNvIXSxmz;&Ad?1Ubfo{{Mp=Ji11%PE=u3($3& z4DSX6-3?C8u5jHZ%a+A`QIO{fV{;7#8s9N7x8JUpKw^Pn20)%GKE8SVq_~1vK{Us) z;Ci4J;;Z5UShg(EBn4RD(+M3`qIPMaI*)0uMD72;K7Zz;mEy?X#q^yrh?kq?)_FE5 zOA-tAyBl@M#&KDw%2NDbrEcOl78t&b;oDqX-omh?z7u+kLP!i(!K6HW%y^QkO-tJcmpRT2F|zQe^J)noq^y{PYHZPUtK)v5Js~ zxQ-5X=|lGfd#_$#_%`RKH~5Z8Cv+IeX_-P*+3L4ho>SkeH^aB-_XNIU(()RNpF07*qoM6N<$f)aro0{{R3 delta 589 zcmV-T0%Xm8R7NNEeUNK5IP z4qEJ};7oAlFLUM}(1{OpAVhGWLPQ}^iAdr*#waS+`)xVF3n%xUeb(A*?{#+EzmEga z@bAyj$p2r_w|D)WMcl{y`QO3sQ5c5N=*XbqiMz-7lpf@JRe#wy6i@Ipt-Y%YowTo% zNF@pBsClXDlXGPgUHb9ih0bb++OIV&?f{jSb_}?Ae4yFsl3J~n?Jt^brIYt8*;c)6 zB!ox^peNNW#|LY1V~v+GnT%e)DX93e*HjfhBw<0|O?7;CrSIP+09+^()Mzvm1c8-G z$#<1}tGT|cRe!}97)L*fpDzPN4gL9~_qiTZrsOy*Po!1$w1qlVfN}g_2tLpsdlsca zhB#lUXl#61lQS#i5T)}0#`X2*L|L@)ESn^5C8FZVVKHOg&>m$QDE8jD-ARDc`7iBPr~(E3jk2zfU@G`HUsS6K7YxoTCEBUEfMoABH$RBY7AgV za29pmm`fG3=gq|{PX>pO&B5@{PjemxNH|Oq)JO!8J?GvtaGX1O+$q;Py#b~TlAs0= zHOQC>mfIMgSTK$YA3m~CB^w0FTHdXT8}W%ygUnSPx)VM#OlS*o1;*gFM#&lp{JxyPr5dc+jAx+H~cuQqE zW5Zkr?23w}F90sgFQaQB_|~Cjym`qBqI#OC8G}>R#q=h}#o=6%+;3-m7=XS&<0fSV zV_3NwI8M8>0e?Uw$>1yGv_yLYQ_+faU$gQCdb7Y6n_U%J&pCJ-Ht1Fc&Y%Q+R6&p*AKHRlQl%XSo32^B5z2xghyQkiqh9?IPnI2|%lesD(D zi0Wx-6bB(|LQEveGJSzYRK>+tqrcIq4|B_1!D8A#$`9_04~s7z2nD9yBicOe`*LM^%Sr$!NF@y19+{K=QbKd_EqTx#3zJG1^z3ii!~^NJ zmVe=%{VV{N#_kdV&h7E7yE&*9(OOw6cwn0A=EMlnz4|pC^z3h5%c3mC(MgksroVq!I=#(%W3HA0eX6 zWBI<~aQ3`v$L*0xB@80kJU8k;+?EG7Cq_88$0uAVUG%$!?1(ncm(_KY=LK$D>4-K@ z2ylC3kU_d&KeDdQ?pTUlf%{+)`^90o*?#t6_rLiQY^4(uUbjQNn*op_;u`oURn}nj9 z6C=1iGCfk0m`Yc}dt7_?>v|rTwY65(ZsNh^Cl3g!Me8~rnv084EZNf^WKH92$Ae3c z?usPlWo}RIjAiG2u=76Hc^~Y&4}Vra31AHCOWy~k6Qg>XE?XWC%!O%*N9g|_9@MN_ zcS|1BC=Qwxbz2^^toC6m9!O(YxfM7rYVA#q3lEsdniX{&4@`4y;(=MKdE?sVsjtU_ zkJ8f|RqXg>8-CgL`aH--SpF88i!`8XjA4a0-2Pd>)vK^-><>OWnkS_-pW>MsbMXt$1Md zcxtbF@%JN2(n&&rV|dF-SXr@QlM5Mg>|uF2#@W;agR;Vle+{PQW~oh0P&XZAP*$+q wsXCY)!^-_YgRttx5gvU!C>tiUt~5Q(f4w{uJva{SHUIzs07*qoM6N<$g4PDKJOBUy delta 1232 zcmV;>1TXui3)cyd7k@Aa1^@s67+?BV000DxNkl-{Fq z<)$#O?C$K$nKNhS-<#TZ=yc=3o;{5-C$2P(AHLYIH`~AN>wgP-U(?56dwTHT3jex) zTYnked7(_sPM4{L$>J~P@uel(vc9uB=I*sUWm~PW=HI<`U8&b6o)zQT{QClI`^Mg4 zT>AN{j4dn#Fh^(nZmix{o^Lr>_}~2frqs`ii{*aL*)p)^K)L#DsGR!#qGWKpqu`e_ zGX{cJS4goti{%AAy;95uR5<>jql#ZNz26E#G{02=Cyf&ghIj?Rf~&Ovyh z#(RLK;B+!`NN0|@#+HDR0I#wTM%@%9oEc4e0OrU}BcHueQ?vM-)qJgEZ|gk(NO>Ai zT%ZAP`J0(;wR(KcNk^}vN=c3>b*VS&cFaPCI9Nph{B?CTuI- z1L$ZvP!=|oUhoxxaUIg&>!qpwBP$N^1GKnQ9tGhlY*V60nPttB8iV{i)`)F_zR$>`LYn-vXf=Fc|Jwm!+e%K`ZA<&9kZ|2IAdbe>i?4Jro?$Zf(el zopK~(tAd~sO4ltn(*OTIaIQ>)4k2P9Dn&my^mEU_8E^vA2xAPD11v-ofSLgH6MxUZ z%o)0R!k*v~DaXEA`2WDhS|B~tXU`5CvkayUJ6r2L*wxX|yzid)G97XP0uU=;e&X1b z1(YpXnRtS{JbGNs_MFY?HK(1w`pxxLV>Eu+-3COpwu5luj14V_={q1M&}by$abQpv zkzV( uv$fm$3jhHB|7jafRR91021!IgR09Aw4>T*EH}n^cmf z#v;YkL=BB?iA`#?uTURot0+^4p65?%U&&-Q7BeU zXVXjGIQv`gd3tq7i>}1#VMRn>wP;qvHjF!Q^wB%V7+rcyxJvBx2<(4F^9Qe*EwI-^ zwRa};;P2|<*6h9=4;L*OfA4s(4`#8Sun(qQ&XoIC(L`X6*mz8VCu8Bb4O1X}8;MWe zC)=-i`{ADMKSeVPZYIdQg%i59sFu^_1be&v{M%;V{(Bth=TV8+YER2T4mE#LD->an7Ri+YgaHWZ+el9=gO@$m$+Zd-0?1BE0 z(XJ=@*4eIG9}l{*LW^TJwrKno?9{lWgE3d#zaed3q4GjDWUt8PpcU!WGMzg6i1TW3 z82+P2OIZl?x|oy*5d!rO7RvH0XwqPnF z4k@R9{^5rNr&K%aA=n4~1;OutbyyGRTc@ONfhR6~HW!L9xpC~-AN~CuE5B%7{`}eU z`1ax~)En&Q9#aaPq0lD5kSzDjY?*_vfAj8==*o>Vz7LYe=7YXOgZYZ*y3-Gyg%^MB z|EA!~zkPJ-kY^rTo^sM5<+eXsTYoBJPKBUQ5_nyZ(Zj#?;T?56JM6K`K9~>a%|R3j zfB6m8VLhPVw{ARky0OX_YP&MDF4<=N30)b z9`TNIibNRamRc-b-sT6kj<0tSN$Z}0uG*~xeEVON$ z^ywwKG`{iLF+_aoel^VQem0_g*PUnPm0dK>NE@O;o;SFC>8_)mm4;0B!Z&TZu3T}= zHA7A*$FEyE2QNDHnPon#KYC4p68}jAkTB3Dfdqq4tG9$T0nb0Zlz>D%hm+{Ns|hTZ#lc@F&iG=!2tzp-109dk8 z3_JGFQkDwia^odI7vvJFg`@+rPn>*lfm7~$Unw5c>r+;{LxoY!OBcK<84W0xpWb(AFWCKZ< zkenZR*2VR;cZn-cZ{d7%;QLeG_Q~?@!{fOuCQuyF6vcALTXD}P|{%fuu-8Q)$@sQgGZ-o*zd=ex~ zAKGL~rz9p_^GR6#j1^ACW|;7ozTra!@*zL%bX#(IP-VmMwV#J581tFe{QTfginZx8 zSsy0F06$};Wxo&Nov;u5F>mgVep@iPpSizPzJd>nE1FseFD&yG0v*^8dapin@{+4g z6xC#n!P~G6{m(MnuK#h|`rJ8HzSMlfIiYY~^H*;v5@tTMZb*bgHyI=hIE!X$Y@2lG zM9zu+yR$DZHE|-LYYfkLZYej$ItT+t9rBa{ia}unYt9FsoF0r6*inQK_RV8H^4145 zbp37DV_nc)`#H_`S!^WI{-jp?`9ptF!PI^H{GC&EUn#a&%+0&~tn5$GE596OkS*vNL=Wh`?yULql?~{zvvAQE$eGiRF2!UfO+zUo zf91)g-1b091}(WUkmK07XX{*BgAof~W&Z5bQ&p9{Q%)+&DI6OP`F2R#f(#@<7i}_K zaO~ih25yBC5)v{|`D%<-LVM0AgP)j{GEDjhcRW^(TYF@A!>iA$w`p|GzWK6p%D-J! zv}jiua(eXfMhJWCvX7VZr4Rgp^iiu=_)j;{T`O7~ppB2dd9-9e7Y`O)Fgs!^?V~|Y zSyL8uwUJZC$SH}x`F^7Zkb`m&=nc4oJER3}onr*4T?S4W1kaaG~qKx=UP%pIj<;pAC@vjb`Gan9LCK#Vol zk!u!RIPd(IchpzV-UzK9zFO9z`;hnkZOg$-MlBjL@gyYt`c0P=pabOeMsVVQV0_@J zUx;HV|9-=b^){^%acI}=DnuUalKRDXF~A(cJmv%Q1Al-FhN`2hB3-<8o!Re;3!b?}ntu0O7nEF8I| z2td4YTol{%XChCHY<1)-gq)}kO!V>R@;JyC2?w-Y*gyr7i%=ZK(Mz7b!g*#SyT0VF zZ3M)dk`3!iaW9M4pq_=|Y&5!*Ta+NYI10A!iZi@j%Uc7t3Sd*gCMQfIaa!PA^P{WE z*S1|f2k!e@IE(+@ZI>A`g0ntIT1>XJZiQSGMpv77CgJ0y?|x~yf6GHuM!4&zuNd`p z$m!9q&qQMI*w*@%j$JxAk9o}x_z8aUxAkAYZ=Kd}9GflhGIm<=1n~v(>Z6W*0DbT* zs$lFL|Nr-1+yP>L>pl;tT}SyKFP?T-sV53qd*gRXX~)YuBOZ@~+)_Bvtp%nvAO78O zmt!0rY={$k<}6WPEpr=22eR=)`Zz$6<;lPh#qjLdYjfE%< zS0I;4#gT;+T4GZ`d!@m#gCWr z`g6vfWinvSI_oy=taB}P4tm`=`e=GfL7$Dq^7`iKj*SqP_iTAuEgl8Z0-xNNt}VPS zx;ic0)tyAQW4isNj#)^*mD_LoZoQcY`t{a5@tvt2ZmP^|otlYucc2EO=THL| zub6ko9Q%WfZ+zqWso!7w!&*3sqy;|t{;-bS;bVz?ulwJV7g)Pxj$sbVX}LWew{xRs zA9)XI02B^HjYK(cVTddo6^9kYQ=cK?@}(M8C1;6t8@w@#vqx)h?CjDC4uHPGcQyIlzg{@9{qXgrK-9>1(XbIrR~`d_ zp`*`uVZA+aIis>CkpZe_nK;|*$+=c-ukZ-O{?|MRH#0AyyGK59+Z9Ky%Xzs!n#e_D zSQmJ6iv~BaechS@o3Hz9d0^A6<SZ&xXtH3uZua0qBft=&jGLsaTQjR& zE-pIcrL!NuJ>FCdJ#iKh7;jFNYjb}dCk!6;XST){mq93$M3C{`<@Q3Zzdx^Y*}lgc zRQVxK!~o=vJX)^J%wah#x3|A>W2s+q%6*87M!k5b3Gls5OdRD9$NXUWEs$dIy4hO; zZxA4iY(M=Og>jSQ6FVGZ$5Rjv;o2gf`<=ETb)Gyby000NmNkl;cvb}iJFlLm)aTir@$NXXd{CWV?LF9dT z-C3o=cbQQmyNV`=`Xe{q_^t-@A>Sax>*%&{h-wkVq)Tm$O?>pXAFbV`+E_@x8l7-x z$4*eG>{c)PRWLjxPdjAQ2E7of;_yIML4X430w0FzV~w#3p&iiGZDsmhdD3K%v=$BB zK6+2UT$wNWu$+17IK>mWTMGum^NUvDfEtkdS|H!Fd1_bD1TlK>Ap`>;ilu<7(D3(8 zY;$(|E6*$yUL0g!8xK;P83UcTTD|42lgkAsom)1({rlzmzj$_e?VBDcWolx}Q z$EQq}F7R6zlbB?`<)eZvU{Z@8z01yDE3@O$mQJAcJy5aXr`y3>yJpwlLA>|M=1&YlR{Y2lj6o;Z zVMF1vV;-`0?vw>jkbw$+q4whpqlL5HbxukA%oRV6RiU5!%4iOfBuSU~?9Mig{XbVWeekgI<$LZZm%ME7 z&$1RWh2TCibm~Kx;OQp>nT|OC-_=l?GIo*<|F(a7W(o-cRof_>nKKV6*WPhQx%p4O zR&nh=-CQymzkJbu6g1sFWCD>%8enI>F?1&(?Xi<{^G)LBnDiHIt{j6lPCFk`zpIOH z-H_wym;;ihrK=^^CNi#-j+oa(v=89ePdD&FOj^qO_|o%E)?O+udOW#rkt_s54Pxo`4eduKao5w zUh3*6*yl5l^FeD2q@ET{2KspP6E)76r1rpm*cS@+NDKI2Khcwri7z+kcuW`;l>CuL z^68>)om575N&bYy+>xiXc#ZqiEv4SU=nrkW+8_%*_{f*m$10qASbEW<4UT>3j;ZP> zp2cXv-$tM%y8xym783FY9yqw%@F$0rk9}opxn#>H2R7Qm@z&0pi_jhWq@85)Vbga9 zlm#oe0W~<1@nJwsJU)2Q^9r;{*{9rI0rWvqOQ5cPpA4_Xq_M57qdt3YB*R06Z%1A6 z?b?^zsngoi@7heBG5kzgKW(I4GVaxKSGci7&(dDp+jQdw-619BbRT*(W^QY!j6fPOaA$;JA`S4>%-)C_}V63@9UeZo zqFMiF?0g-20`-I&XZSu{``Gg7<3Y=x&|g$uO&GgW_R@-Gsn%Ql;o?2KK`VN~eYOR8 z9z)aq^_-Bm-%CiicH>*R_Tzb?ww@(o>_VTaYs^r;OB+Ap(Mt^V$zi0^;ZKr{^wXYp zICdl((hJ%c>W#+r*=l&~LB=)Xj5i1N$X>x5;qn>s2_{(B?d-i*G>z+{7XS@!Pj=gl z^lG%lQs%8^SOc1~FY-V}Uo6{r@9EgMMUzi^dY;z)J}H{kfxXf98nla?x83xG`qO{E zsf_T4UmpApZ|2?ux)sN6Y|;2nRvZvT)3*IyCVjD@qIG$_G-~wvEz$VE~PH1 zPv)Smu5Ir|Kt9PU`L#D@{(k@f0RR7gKjQ)b000I_L_t&o0O`;etj*^qb^rhX07*qo IM6N<$f_GYI5C8xG literal 6422 zcmWkycRUU#(w0sxShy`rMF zytS*P4Xdt-0_&qE;^NPE0N_zV%BL>%K5eS-E(WFkFZ%df8*bb>+D>ylF>1z9tOgZ| ziB)QfDV7v2)xkGpaV|_ID}h+tDn0Ti1OeFnWg&{8#1Ep^&$8FW8OK2dmh;(RI$>yo zigz;!)u_=$nm1`!aLu%$cNJa$8Mixx z=Cd}QwgFexkX0m^lWHx@2P~WuenOo5HF)KEJnNPo_YSZOO8oC<&b;^dbr4Dt)wbS} zN^6zYHwJz2!wgrh-0;uo+h`#?koydzoAIaMvY<)^U6gR9w;-@^*ZcI{8+6bzcxCVu1VS0~G`}Yw?5aCU_MNac4IB<@Yet zyg4j9uB&Vh?G(~u!Z2P&UhG+In^^>_m|w2*>tKo?KKqQj)u<8sLxBIEaCFgu@SDx7 zajxfmz1X8uK1&bqD=4dEcrTsPJxcz`nn7e7|LqF4yzq?#;Mw9676H)3k4;kHAfTFo zjqz@z>qT@-la+~{r}So)a+zy+{)*66N!5zvd-fg z#^||s!30pJv&<)Jy@;yH_Cq;dt+vqsu)968bv0~+Fy_!nWnH{%|}Buh;tM#j6!eHLWT5vb_-n@Z1V zBqVR#Lh8+D(X&Q|d9yvXiiJe;5$Q00BGM%zT(>Qi7JlM0AT(a4CZ~5K+-zOlpVD0x zNi^oB!D~(*@$E4BU+9k-dm$nSF%&=7KpBP!yA zJPi7r3%GXj-1=C=XRjj!6s1f#CdnaW5Y8W6a`O}9q*JE`$m0ifYc%H<1q|f9T3i^a z#@#~)6n|%XpNh|6?`h7n2+$D)gbVUQV*T!Kf9DX2x@?FwoysNIPwRH*1B&#!16 z{oNyrnzuuUKj+h?cP%-3qWfZiG!`<3qv7 zYN0iduLku#3Bsj5F+BEslhTl0m->dC*ApWjcr>jPU2uU#*OI10%k%;CqeF%#M-?&4 zDSl7$zQE4g-)-NgBJ5da&%BB1FOY%i`1(=ufh%Oeq+Ma!HTN(w=_j;(DH>*BQD~ z$=~aC@U$C_57T9{^&+SE3fZmbD$M+>>eaCMa(HMO`c-JVuS5!mBN|;$!p#-OJWD7a zwN1DNUlk#(-XQsQ%PQ>%J!kZq%{!?lQY0}|HRcK*DXd0V&GE9Fw0BO@CW2)nQH0+1 zeBXGP!rjn&VisyKm7Xsq0!h}mXuc6mi&0x(c#m12CS99Zp#%MNjRi4~bW*C+M@p)t zLEDpPx7M#?Che%08WyX5=+IZ9i@||!mjz^Luz(ihw*|0kn9fQn)KPcs)qyK{2GU98Zj8x?OuIViBna*c{VwryjUol8rt#|FDwn*kIi1Eg%F8RX^@2)nk5+O7I+7ZK2-5Yves8`!aj} z?1C|KVcI%H00xb~nMmvXpiK`vfDKLK{NZ@CU<3m0ypP5kESz0(RMagJ?d&b`>p(g7;^=*zS&Q0}x$Q3jG^Q#ie!u9DgP9;e%{S7=;@+LAuxQJ% zV&wNIsn&02`h?s@o8ZgX7gwca4@~>a0xs^}tQ>;bW>JbJevCQgK@rCIUYQQ*_(_2! z4@vUFA^N?wI)*H2S_1=EX+ukA?dt;?Ji{g@f6kfk{jj3efsJ3xTZ96M4*=z=6O-5e z49f{^o>hh8l>6ut5gqEm9IK=zkwv}#Fp-D!h$gZaQ3U}8yo7?~>@mX*%1elkv<(9s zJ;DQ{w+E8(x_S}XnGE)$)RxWX^b8KW3O55-iWLQoLKvvsqf-_#vDST2p|)8p%xfgT z)zl1LLc&w?FRV#kMf<;Y)Ie%aK1nzLa&@QCI|_jaA+DW8^2-si_rcO1KV=v-H|Sh0 zC(?exECIRkV@8$IiEyM75ymV+aU|r65w1><4)c`fqh33wvw=?o&!~H?_4xn2BzIif z{9^0R_phQDEuI*K8ZtI-y}ZUat1?>C*C|_N-2DUSG>v=PsC#Jz{|wCG*21FNNm`BZ zdV)4U=0<#Q!H|Z$h-qkfV&tUw!It*pVGQb5*@&S--xroTvVpOT+p3`C?T`T&NSOJD1_J?e%Nm1D*C(_?c5qz7cf#;v&P4%$s z8C8cGx*0WJQofnp`_YOG9p8W_Moi@`=9IOY0|EQM&1@HpF&LEv?NRECWdl3Xo$QH=KL`j;i@o@bY@)Xi`z9P8G!%6y+K3Gh zHtNIs-&2wRSf6iOz$ocPTs|Rs*lmFUjbnGDBy+J zWlseF?>C;e-=9w6HCng)HTY^@@UgH?(31{^T>6~o093X?-BHa3lbgeSjEziLjCVJ| z`XoS|ocsl27Od0!yCf!hyv-u`lkw;$-Wz$~P`TMV1U(9aixJI|^1I zK~#GBy<#H3;2@25=k%ipD-YV!3+QU9+GpkSsK7n4{pLv1AO>)e-R0bwRGk~4JKtBb zN=~+YQHZox52Q(6!bxocdOMtS<#`%7WM~>1x)L#;+-SQ!wvS;YCJ+UH^Jiq?tuS0? z2(O|}Ubacl-A2DG|ByF{8d3LiK5G5UgA&)fZ@7O#5ChzGL)@`aj^^&;KhD`ypOnoeBcced7Tv5}+Kwu1+4z|#^WnA)Bz9gLG z-~F)ffe9~Ku9Nc&y9nN|>e3KMWhsK@br-={4p#XR=O!R*A z&!h56sHQvldg7`*t%+4mUk3qCC7yQxn^!;psPhYGn~LU3DI$@9NKOWYNwUw+@?Ww= z(gsuJCVaSxp{mc7id<`acV$|={4R_e-;0gaAr@{gblJ2efS`4ZT&c)Yt^C&j*N^G2O$foUP%ePuLs zai^(g@bJnW{p?o0UyvmvSG1(grHiQzi=yX|IKe=4Z)&A0>W~pOK{$+@i!`sfqzX(#>RhNL%xw2TiJwfs}@(mia zgni`ZO@Ne%imm}YVK-yLfFfdqO)#G@^LXNeK>K{bKrvW&`rAhU_ZbX}Wa*aelDJYX ze=tUo$K}vro{JKu@EuU7HV$qP5+DB-K9Zp-!?%3O)fUK5p1}&Pi$A=C)YLj22(sT z)8In4f}oS5Gv_2+0lcmc!7`HY)tWb3J1R0i+znP_W#pMG*EYX9MqP;|`Z`V4&~hq7 zndWltKjcjf*p~|WJX)JYUfMaF9L?2dy)xQfrj0WXL7CsE)3ObOj(IxJ#lO6;C z%cM>}C-#F@3Wt&`n>_z}QvTeOi@sE*oYzR&l75(;NN3J@_xxjCYKXO9dC15NZ4yNk z>?S{F@-Bj?Py(1qPGpRfQQppiAu>)d;#r+il%%oPC4~0RPMlMl{8ho*#Ik4+@6Czf z%M(xH{_KSDa%}lIZ--{miH+8hWK4z_c&Yg1!TzL+9JnLlE&m!htQ3t#eX?2?I1aI@ zrR*}B8I{b4XNc7OhABX4-AUxgonQRgB@YYoZwudWI@k)#i#%^LsTKI7f=8mWOCsi6_Q2%vZZc9*kSdUG>svmr8}U0!jCwP7 z>(Wp%*8GxuFnM}}$=zdlP5Lo$`#ayi1rK#GBQZk|Ls&&cI+Q9AR2%WV-VUeC#(f=x zP{!8Pvhd_`g_y>cx~*S8XHz54wFKF0!yEMVjgk`#UxsUIbrrnKS9K~|z*Q?DNzf3n zgUSGIjb3Uk{SR7$0(AjNM6)hMM$OyPw>o9e2ws^v`4LTf<(>Yw(pf<@4_bmV!#23h z(wJj>=JJQFXMbWm{V*Eqi{1R6_H~TI^|v!iNgb}UolPlB-L=LV0ay{|r~(lq#OH22 z1vH@h161O{`x#T=)Q1ZO|9uwJVBCAD4P+%%+*-Jk-s}qu*Jwyt38D%y5&ipC^otA& zH)Xa>#51e1lRIWj5okxKGUv!mRjSn6U*hc_E#wMvw@7Gg-e$X#(FdmoQ~ zw-W9wFh1xt=h%@K4E>i+k8hG1b_*CXU_zMUW>RmyGU2}lF{anS%VTGq!T>VJ^JPBz zg?e2qrLqR;jY?WqXNd5!_0yMRrL)Tm;~vrTk00N)uNRam)N{>hzBc`;u!pGxOpeXA zZK_2B9@}6#r3>ex3`gQ*Ofv<=icqKEo&C;Zl#!7)H9~Rp4-0{XgBc-*}=vt+emryWCs01iKFBWGcT7 zPvy_MsG98NVW);JXDc{imz_{(?F_zYbh)IEx$e~^iwx-LT)O%Vmqyh%`>Ce=LziLU3!x-}D(a`S-GFwrVK5F^l63 zMR%$;mqtX2C~($uzRT*g=PJe~r)dC&eYY8T`?31V$%>?348{&AP)BtZQ9lp11o2q? zrWA;Jw_3v%#;j8sgI_1*+<*-5J3p8co|A~(pLTp*lci(2MeW5Nu|4Gp!Ctz~J~ZJU zM{HFtlVJKc9rTW?37FMV2l*&i2*)ym`DowPKDXY*dfk|}4Rl}>0I(*c`1Z}XsVsAG z%hl7Q*U1GIrz_%Y%Tsowcw=c9iD3b~-@}|CNliQVLDfXAKJ-Ud{8mQ%)nu?EegFLV zF|l3UyG-KQiett+$y8;t5lI}LN-b}auSdZoX@qC`G8qfQWT>QdeBWSC2Atc(4Nc?J z^f3GXNSwbFV_z;ogXyLy8H*uHrv0Y(HKG?b(j$PX!1?_}b)#gsfY?#7*&o@s`<$o5 T7k3$$zx05bk|wlT!Q#XJyca*A diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/carapace.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/carapace.png deleted file mode 100644 index e6b73ca2c647935f1bd242c51bcaec84aaf367c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 417 zcmV;S0bc%zP)5PKehXTWoK1`i-&$&$B_O1fahLQw&u4rAQ%my$P?#wX9BAO0icWvDz5sJ|d&{aTb=x~Sv{JcZ zbL*St-p2kx;xWU#hbX|sU$s%MC9T=Dh7R(O0K!R~cBr9dtF2nCRm?pZKd;BDrr2li zT{VFCAnCVf=Qh2t_-py{_`;TVckK24PD{MFCjUfNpaHH=Pb`Xh8bmufH!b7jbdM0A z02+vVev&c*e8NT=Lqh=!47pC{FT)*#1J_>NQvd?c?IqIn*iG&oOfK;P9Mmz|PD*bFWBd@rLc?$KUOqd-LY0t&C?T$%*_- z|MNdC`Bb|2hASQ`xOc>UTjQA~K4GqrGsBl!`&dc6hWkv1HlNa4ke8jj!fl_YLry{@ z@4{=76&d?~o4z>yQjruo;MLRrz;@cP?UD_yh03ZcJk@{> l{r|s?QHB@DU<0|BnW0qP#QOVPx#blfMdrP!z^LD>O;EpiM%%@6cAOv<2a!Z_wBy2+h$;1U*7qQ_w6l z3elj&6-#QlEnNum-caaU&pAK7^AGs9!g;`C@rEq8TFj)yKLIqQ$Zi>?~1!T7j zr^~axgK)V~oPH0Qp$lC|0bCqX8Q^;^i{eBImjY~41pq{Gf=6DI=Cnk`e1+W(#bJM} z?trEg06;7P09bE#N+kzToWOanQl?TWm+!gkkr&Vm9ryFK)P=Bxa2_z*RG}FHq)$07*qoM6N<$g2t|Tg8%>k literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/critter_cage_item.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/critter_cage_item.png index 5de2b4725c46660a643ae02089239e34bc81ebbb..ff3e575da897fbe1ba81fd034e7c352500ee8de8 100644 GIT binary patch delta 431 zcmV;g0Z{(A0=@%~8Gi-<001BJ|6u?C00DDSM?wIu&K&6g00DSOL_t(Ijm47BNYkNqpST_=fJB}cilz8lqaQn8Z z$x68GSp(qe?tjV1#6xm#YeU=8BZQEn(U+`LDl!}nYl4|PmbuG>gP4j2q?tUH>L)G$ z+jgd$iHD>jmr6BK(SXbrs)n*zD%Iwq ZegJ#{$DDw35d#1K002ovPDHLkV1jr9!_xo& delta 297 zcmdnTypw5yWIZzj1A~Sxe=v|@EDmyaVpw-h<|UBBlJ4m1$iT3%pZiZDE08Z2;1l9n zR8(Z5D0<_@4MkDj6)RR0x$1?QDk_Wd9XxmtsN}(l(k(!Wt0c%T_&*FVY&xTJ9w^FL z;1OBOz`(Z*gc;lKtjq@rN|e;QMwA5SrX~<6`)&zT zl;!E-7@`pz+waJC#DIgj@yLeH|M|mBGB<0nJ18Hx@uQ`7H+x0TPkxmTe$ppS>amMV zJ+ZaniG%CH41t%dXM{4OE<1W!Mn*`c=)1^=C`$-E+wPSonmaYT>`TzMGfJP^pYJM( h>%U)AbY|~5ea7ePwNvgS=K-x{@O1TaS?83{1OP~SZc_jN diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/critter_cage_item_overlay.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/critter_cage_item_overlay.png deleted file mode 100644 index aabed591b5e4a05bc7b82cfda38ef018488c7802..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 267 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|^0G|-ogoK2KhK7j~Cx(TERaI31h4pxMu>dKyk|4j}{~*AydH<6AKoQOY zkH}&M2EJt=%-DWsWj;_)qQo_#Bsf2xP`XRapn@;z zz|>!_LM{ZX%RE{AjOX6Qaxb~JT~YS+k){k;UM!ujj3a=?GB9|$`njxgN@xNA3-DG| diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/jerry_nucleus.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/jerry_nucleus.png index c37a4bd569ce992e28080344f6f10eac9698448e..689c8f824def1fdcb92f84efd848935a6da48a77 100644 GIT binary patch delta 369 zcmV-%0gnEk1B(NYBYyw^b5ch_0Itp)=>Px$MM*?KR5*>rkxfp*P!xr~@?+kBrU}M0 zqyrNY8wPX%4o%zvn_vw4aLm*VxC_Gq>Yyocs7M53(<-%~&jGv#rC>}Pct-8XJ3sec z_-`1y#O;MA{d569cNiFo1Mt&@<`gQsV%rk9ts2pIN#ASAvwzwVwk5C{6U9eH*4 zpiN4LkO(v^4;rTFQB=`7wq!YWnhf0eGp zwk5ckzU6|nL3bD!y|yFW)a24O*R=&R1ZVfK>Yn;U@| zVU%Q=+rEFnV4Wa2JtmA}I@B2@Sz&1h4RR)cZ*J~=sQ!=WwH^73XMe{x6+M}$1Zb4X P00000NkvXXu0mjfK7FfS delta 389 zcmV;00eb$61D^wsBYy!@Nkl*S)?@ZG4ij z6cw%I5z?FhN!+|^zzunb&N-&+_KnE z44Dh?LWkY@rjF_xx}DBK`#UXdt<^};-l}Bd`~78SmSrzI_k(v`4L)&Qq?fGw6>eVp z8XDXEv7f@@0)C9o9Sgh|8$4MdmRR44KcoaGJ1$^^7i3(?&^Z(@27^GtXrU8H_2&O) zO!34z!&Sir2-p-Z!j=&N@W5g+B&s;M05OvIifEs2w00000NkvXXu0mjfCO)aG diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/mob_effect/glimmering.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/mob_effect/glimmering.png new file mode 100644 index 0000000000000000000000000000000000000000..21567e8981655deafc07b674f0af647a3660d375 GIT binary patch literal 365 zcmV-z0h0cSP)(NItl_HbyX)h=J3Gh;NN%bofa!AoymN-$ze=NZ~ zm&-!7ih;Zp5L4YWg9gPA5Fpt~J|Gn!0YZ756A(iPRLlqF3}pq11V~8E+jv@)bdyY=)1#Ca zC??BK6)^R>fyA7qO|7^BTE%VhzW@LL|Nn)%E5-l-00v1!K~w_(hy2YUNDtNp00000 LNkvXXu0mjf0+gFh literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/trims/color_palettes/tigers_eye.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/trims/color_palettes/tigers_eye.png new file mode 100644 index 0000000000000000000000000000000000000000..e99d57c63a2eb52871c0b602563bb5ffebb8dfe8 GIT binary patch literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^96-#-!3HEBGrV^OQo5cljv*C{42lf*{xiK^Z2$jN zv*Q2f38Mcmgp2&&9U$_5riH}+Vk6oA8LE>1f$IPNXWv*l6Ubl#X=G+F4-ky~sMtLp PD8k_B>gTe~DWM4f;+iEs literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/minecraft/atlases/armor_trims.json b/common-1.21.1/src/main/resources/assets/minecraft/atlases/armor_trims.json index 8c1050d9..e8a9a58d 100644 --- a/common-1.21.1/src/main/resources/assets/minecraft/atlases/armor_trims.json +++ b/common-1.21.1/src/main/resources/assets/minecraft/atlases/armor_trims.json @@ -46,7 +46,8 @@ "uranium": "antarchy:trims/color_palettes/uranium", "titanium": "antarchy:trims/color_palettes/titanium", "blood_crystal": "antarchy:trims/color_palettes/blood_crystal", - "nightmare_scale": "antarchy:trims/color_palettes/nightmare_scale" + "nightmare_scale": "antarchy:trims/color_palettes/nightmare_scale", + "tigers_eye": "antarchy:trims/color_palettes/tigers_eye" } } ] diff --git a/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/awakening.json b/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/awakening.json new file mode 100644 index 00000000..82ae7c0e --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/awakening.json @@ -0,0 +1,16 @@ +{ + "entries": [ + { + "entity_tag": "antarchy:horde_moleworm", + "base_count": 3, + "per_player_count": 1 + }, + { + "entity_tag": "antarchy:horde_molevore", + "base_count": 1, + "per_players": 2, + "per_players_count": 1, + "min_count": 1 + } + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/dormant.json b/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/dormant.json new file mode 100644 index 00000000..8096d520 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/dormant.json @@ -0,0 +1,16 @@ +{ + "max_active": 8, + "entries": [ + { + "entity_tag": "antarchy:horde_moleworm", + "base_count": 1, + "high_attention_base_count": 2 + }, + { + "entity_tag": "antarchy:horde_molevore", + "base_count": 0, + "high_attention_base_count": 1, + "max_count": 1 + } + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/final.json b/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/final.json new file mode 100644 index 00000000..24d1395b --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/final.json @@ -0,0 +1,16 @@ +{ + "entries": [ + { + "entity_tag": "antarchy:horde_moleworm", + "base_count": 14, + "per_player_count": 3 + }, + { + "entity_tag": "antarchy:horde_molevore", + "base_count": 4, + "per_players": 2, + "per_players_count": 1, + "max_count": 6 + } + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/wave_1.json b/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/wave_1.json new file mode 100644 index 00000000..f178ea41 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/wave_1.json @@ -0,0 +1,15 @@ +{ + "entries": [ + { + "entity_tag": "antarchy:horde_moleworm", + "base_count": 8, + "per_player_count": 2 + }, + { + "entity_tag": "antarchy:horde_molevore", + "base_count": 1, + "per_players": 2, + "per_players_count": 1 + } + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/wave_2.json b/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/wave_2.json new file mode 100644 index 00000000..4ce192f8 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/wave_2.json @@ -0,0 +1,15 @@ +{ + "entries": [ + { + "entity_tag": "antarchy:horde_moleworm", + "base_count": 10, + "per_player_count": 2 + }, + { + "entity_tag": "antarchy:horde_molevore", + "base_count": 2, + "per_players": 2, + "per_players_count": 1 + } + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/wave_3.json b/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/wave_3.json new file mode 100644 index 00000000..0f757113 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/cavaryn_hordes/cavaryn_moleworm_caves/wave_3.json @@ -0,0 +1,15 @@ +{ + "entries": [ + { + "entity_tag": "antarchy:horde_moleworm", + "base_count": 12, + "per_player_count": 3 + }, + { + "entity_tag": "antarchy:horde_molevore", + "base_count": 3, + "per_players": 2, + "per_players_count": 1 + } + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/dimension/cavaryn.json b/common-1.21.1/src/main/resources/data/antarchy/dimension/cavaryn.json index 2e514481..95fe35bc 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/dimension/cavaryn.json +++ b/common-1.21.1/src/main/resources/data/antarchy/dimension/cavaryn.json @@ -96,6 +96,36 @@ }, "biome": "antarchy:biowart_caves" }, + { + "parameters": { + "temperature": [ + -1.0, + 1.0 + ], + "humidity": [ + 0.15, + 1.0 + ], + "continentalness": [ + -1.0, + 1.0 + ], + "erosion": [ + -1.0, + 1.0 + ], + "weirdness": [ + -0.25, + 0.65 + ], + "depth": [ + 0.35, + 2.0 + ], + "offset": 0.0 + }, + "biome": "antarchy:cavaryn_moleworm_caves" + }, { "parameters": { "temperature": [ diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/chiten_block.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/chitin_block.json similarity index 74% rename from common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/chiten_block.json rename to common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/chitin_block.json index c53e8175..dee0af3b 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/chiten_block.json +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/chitin_block.json @@ -10,11 +10,11 @@ "entries": [ { "type": "minecraft:item", - "name": "antarchy:chiten_block" + "name": "antarchy:chitin_block" } ], "rolls": 1.0 } ], - "random_sequence": "antarchy:blocks/chiten_block" + "random_sequence": "antarchy:blocks/chitin_block" } diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/chiten_spike.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/chitin_spike.json similarity index 86% rename from common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/chiten_spike.json rename to common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/chitin_spike.json index b1d9fae3..ded89868 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/chiten_spike.json +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/chitin_spike.json @@ -6,7 +6,7 @@ "entries": [ { "type": "minecraft:item", - "name": "antarchy:chiten_spike" + "name": "antarchy:chitin_spike" } ], "conditions": [ diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/cut_titanium_wall.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/cut_titanium_wall.json deleted file mode 100644 index 6e1ae02c..00000000 --- a/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/cut_titanium_wall.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:cut_titanium_wall" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/cut_uranium_wall.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/cut_uranium_wall.json deleted file mode 100644 index 7360e0cf..00000000 --- a/common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/cut_uranium_wall.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:cut_uranium_wall" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/creeping_horror.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/creeping_horror.json index 513e710d..a6a1b354 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/creeping_horror.json +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/creeping_horror.json @@ -1,4 +1,4 @@ -{ +{ "type": "minecraft:entity", "pools": [ { @@ -6,7 +6,7 @@ "entries": [ { "type": "minecraft:item", - "name": "antarchy:chiten", + "name": "antarchy:chitin", "functions": [ { "function": "minecraft:set_count", diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/jerry.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/jerry.json index efe5ce89..2a746c8b 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/jerry.json +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/jerry.json @@ -33,58 +33,6 @@ "condition": "minecraft:killed_by_player" } ] - }, - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:carapace", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - }, - { - "function": "minecraft:enchanted_count_increase", - "enchantment": "minecraft:looting", - "count": { - "type": "minecraft:uniform", - "min": 0.0, - "max": 1.0 - } - } - ] - } - ], - "conditions": [ - { - "condition": "minecraft:killed_by_player" - }, - { - "condition": "minecraft:any_of", - "terms": [ - { - "condition": "minecraft:entity_properties", - "entity": "this", - "predicate": { - "nbt": "{JerryStage:\"alpha\"}" - } - }, - { - "condition": "minecraft:entity_properties", - "entity": "this", - "predicate": { - "nbt": "{JerryStage:\"gamma\"}" - } - } - ] - } - ] } ], "random_sequence": "antarchy:entities/jerry" diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/jumpy_bug.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/jumpy_bug.json index ac0ff303..7bb37ad8 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/jumpy_bug.json +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/jumpy_bug.json @@ -1,4 +1,4 @@ -{ +{ "type": "minecraft:entity", "pools": [ { @@ -34,7 +34,7 @@ "entries": [ { "type": "minecraft:item", - "name": "antarchy:chiten", + "name": "antarchy:chitin", "functions": [ { "function": "minecraft:set_count", diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/lurking_terror.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/lurking_terror.json index ee2d7233..fa23ca8f 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/lurking_terror.json +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/lurking_terror.json @@ -1,4 +1,4 @@ -{ +{ "type": "minecraft:entity", "pools": [ { @@ -6,7 +6,7 @@ "entries": [ { "type": "minecraft:item", - "name": "antarchy:chiten", + "name": "antarchy:chitin", "functions": [ { "function": "minecraft:set_count", diff --git a/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/spit_bug.json b/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/spit_bug.json index 286621a3..15863bcc 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/spit_bug.json +++ b/common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/spit_bug.json @@ -1,4 +1,4 @@ -{ +{ "type": "minecraft:entity", "pools": [ { @@ -6,7 +6,7 @@ "entries": [ { "type": "minecraft:item", - "name": "antarchy:chiten", + "name": "antarchy:chitin", "functions": [ { "function": "minecraft:set_count", diff --git a/common-1.21.1/src/main/resources/data/antarchy/recipe/bone_meal_from_chiten.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/bone_meal_from_chitin.json similarity index 84% rename from common-1.21.1/src/main/resources/data/antarchy/recipe/bone_meal_from_chiten.json rename to common-1.21.1/src/main/resources/data/antarchy/recipe/bone_meal_from_chitin.json index 1b4f069e..f8e96c09 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/recipe/bone_meal_from_chiten.json +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/bone_meal_from_chitin.json @@ -3,7 +3,7 @@ "category": "misc", "ingredients": [ { - "item": "antarchy:chiten" + "item": "antarchy:chitin" } ], "result": { diff --git a/common-1.21.1/src/main/resources/data/antarchy/recipe/chiten_block.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/chitin_block.json similarity index 73% rename from common-1.21.1/src/main/resources/data/antarchy/recipe/chiten_block.json rename to common-1.21.1/src/main/resources/data/antarchy/recipe/chitin_block.json index 749134a9..9a22bc0b 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/recipe/chiten_block.json +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/chitin_block.json @@ -3,7 +3,7 @@ "category": "building", "key": { "#": { - "item": "antarchy:chiten" + "item": "antarchy:chitin" } }, "pattern": [ @@ -12,7 +12,7 @@ "###" ], "result": { - "id": "antarchy:chiten_block", + "id": "antarchy:chitin_block", "count": 1 } } diff --git a/common-1.21.1/src/main/resources/data/antarchy/recipe/chiten_from_chiten_block.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/chitin_from_chitin_block.json similarity index 67% rename from common-1.21.1/src/main/resources/data/antarchy/recipe/chiten_from_chiten_block.json rename to common-1.21.1/src/main/resources/data/antarchy/recipe/chitin_from_chitin_block.json index 6047f3cb..8ac1b4d7 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/recipe/chiten_from_chiten_block.json +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/chitin_from_chitin_block.json @@ -3,11 +3,11 @@ "category": "misc", "ingredients": [ { - "item": "antarchy:chiten_block" + "item": "antarchy:chitin_block" } ], "result": { - "id": "antarchy:chiten", + "id": "antarchy:chitin", "count": 9 } } diff --git a/common-1.21.1/src/main/resources/data/antarchy/recipe/lucid_anchor.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/lucid_anchor.json new file mode 100644 index 00000000..1fcd5ea6 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/lucid_anchor.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "pattern": [ + "AAA", + "BNB", + "BLB" + ], + "key": { + "A": { + "item": "antarchy:polished_antimetal" + }, + "B": { + "item": "antarchy:blood_crystal_shard" + }, + "N": { + "item": "minecraft:nether_star" + }, + "L": { + "item": "antarchy:lucid_eye" + } + }, + "result": { + "id": "antarchy:lucid_anchor", + "count": 1 + } +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/recipe/tigers_eye_boots.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/tigers_eye_boots.json new file mode 100644 index 00000000..dc67d407 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/tigers_eye_boots.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "S S", + "S S" + ], + "key": { + "S": { + "item": "antarchy:tigers_eye" + } + }, + "result": { + "id": "antarchy:tigers_eye_boots", + "count": 1 + } +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/recipe/tigers_eye_chestplate.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/tigers_eye_chestplate.json new file mode 100644 index 00000000..659ce168 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/tigers_eye_chestplate.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "S S", + "SSS", + "SSS" + ], + "key": { + "S": { + "item": "antarchy:tigers_eye" + } + }, + "result": { + "id": "antarchy:tigers_eye_chestplate", + "count": 1 + } +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/recipe/tigers_eye_helmet.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/tigers_eye_helmet.json new file mode 100644 index 00000000..9a6cceef --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/tigers_eye_helmet.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "SSS", + "S S" + ], + "key": { + "S": { + "item": "antarchy:tigers_eye" + } + }, + "result": { + "id": "antarchy:tigers_eye_helmet", + "count": 1 + } +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/recipe/tigers_eye_leggings.json b/common-1.21.1/src/main/resources/data/antarchy/recipe/tigers_eye_leggings.json new file mode 100644 index 00000000..b43d1e71 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/recipe/tigers_eye_leggings.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "SSS", + "S S", + "S S" + ], + "key": { + "S": { + "item": "antarchy:tigers_eye" + } + }, + "result": { + "id": "antarchy:tigers_eye_leggings", + "count": 1 + } +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/tags/block/antimetal_inversion_blocks.json b/common-1.21.1/src/main/resources/data/antarchy/tags/block/antimetal_inversion_blocks.json new file mode 100644 index 00000000..9ae6d24b --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/tags/block/antimetal_inversion_blocks.json @@ -0,0 +1,10 @@ +{ + "values": [ + "antarchy:antimetal", + "antarchy:polished_antimetal", + "antarchy:antimetal_stairs", + "antarchy:antimetal_slab", + "antarchy:polished_antimetal_stairs", + "antarchy:polished_antimetal_slab" + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/tags/block/lucid_anchor_base_blocks.json b/common-1.21.1/src/main/resources/data/antarchy/tags/block/lucid_anchor_base_blocks.json new file mode 100644 index 00000000..b68760f5 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/tags/block/lucid_anchor_base_blocks.json @@ -0,0 +1,11 @@ +{ + "replace": false, + "values": [ + "antarchy:antimetal", + "antarchy:polished_antimetal", + "antarchy:antimetal_stairs", + "antarchy:antimetal_slab", + "antarchy:polished_antimetal_stairs", + "antarchy:polished_antimetal_slab" + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/tags/block/tiger_eye_camouflage_blacklist.json b/common-1.21.1/src/main/resources/data/antarchy/tags/block/tiger_eye_camouflage_blacklist.json new file mode 100644 index 00000000..7d4a90b8 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/tags/block/tiger_eye_camouflage_blacklist.json @@ -0,0 +1,11 @@ +{ + "replace": false, + "values": [ + "minecraft:barrier", + "minecraft:light", + "minecraft:structure_void", + "minecraft:end_portal", + "minecraft:end_gateway", + "minecraft:nether_portal" + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/horde_molevore.json b/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/horde_molevore.json new file mode 100644 index 00000000..ece7739d --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/horde_molevore.json @@ -0,0 +1,5 @@ +{ + "values": [ + "antarchy:molevore" + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/horde_moleworm.json b/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/horde_moleworm.json new file mode 100644 index 00000000..8d9eb37b --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/horde_moleworm.json @@ -0,0 +1,5 @@ +{ + "values": [ + "antarchy:moleworm" + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/lucid_anchor_immune.json b/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/lucid_anchor_immune.json new file mode 100644 index 00000000..5d341ba2 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/lucid_anchor_immune.json @@ -0,0 +1,4 @@ +{ + "replace": false, + "values": [] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/tiger_eye_detection_immune.json b/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/tiger_eye_detection_immune.json new file mode 100644 index 00000000..6becc3cd --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/tiger_eye_detection_immune.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "antarchy:kraken", + "antarchy:nightmare", + "antarchy:toreterror", + "antarchy:emperor_scorpion" + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/tags/item/tigers_eye_armor.json b/common-1.21.1/src/main/resources/data/antarchy/tags/item/tigers_eye_armor.json new file mode 100644 index 00000000..e2b2f6b2 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/tags/item/tigers_eye_armor.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "antarchy:tigers_eye_helmet", + "antarchy:tigers_eye_chestplate", + "antarchy:tigers_eye_leggings", + "antarchy:tigers_eye_boots" + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/tags/worldgen/biome/is_cavaryn.json b/common-1.21.1/src/main/resources/data/antarchy/tags/worldgen/biome/is_cavaryn.json index 8f87b48f..f94ddcb5 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/tags/worldgen/biome/is_cavaryn.json +++ b/common-1.21.1/src/main/resources/data/antarchy/tags/worldgen/biome/is_cavaryn.json @@ -1,6 +1,7 @@ { "values": [ "antarchy:cavaryn", + "antarchy:cavaryn_moleworm_caves", "antarchy:glowcap_caves", "antarchy:biowart_caves", "antarchy:brooding_tunnels", diff --git a/common-1.21.1/src/main/resources/data/antarchy/trim_material/tigers_eye.json b/common-1.21.1/src/main/resources/data/antarchy/trim_material/tigers_eye.json new file mode 100644 index 00000000..d4e61197 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/trim_material/tigers_eye.json @@ -0,0 +1,9 @@ +{ + "asset_name": "tigers_eye", + "ingredient": "antarchy:tigers_eye", + "item_model_index": 0.82, + "description": { + "color": "#C7882C", + "translate": "trim_material.antarchy.tigers_eye" + } +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/biowart_caves.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/biowart_caves.json index c5b8bd84..282f26fd 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/biowart_caves.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/biowart_caves.json @@ -21,6 +21,12 @@ "options": { "type": "antarchy:orange_ash" } + }, + "music": { + "sound": "antarchy:venenatus", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": { diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/brooding_tunnels.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/brooding_tunnels.json index c9b515a3..3b891866 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/brooding_tunnels.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/brooding_tunnels.json @@ -20,17 +20,15 @@ "options": { "type": "antarchy:orange_ash" } + }, + "music": { + "sound": "antarchy:venenatus", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": { - "antarchy:jumpy_bug": { - "energy_budget": 0.4, - "charge": 7 - }, - "antarchy:spit_bug": { - "energy_budget": 0.9, - "charge": 2 - } }, "carvers": { "air": [], @@ -65,12 +63,6 @@ "creature_spawn_probability": 0.12, "spawners": { "monster": [ - { - "type": "antarchy:jumpy_bug", - "weight": 95, - "minCount": 1, - "maxCount": 3 - } ], "creature": [ { diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/cavaryn.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/cavaryn.json index c68563b6..d8893daa 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/cavaryn.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/cavaryn.json @@ -20,6 +20,12 @@ "options": { "type": "antarchy:orange_ash" } + }, + "music": { + "sound": "antarchy:venenatus", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": { @@ -48,7 +54,7 @@ [ "antarchy:cavaryn_bile_veins", "antarchy:cavaryn_bile_cysts", - "antarchy:cavaryn_chiten_spikes", + "antarchy:cavaryn_chitin_spikes", "antarchy:cavaryn_terror_egg_patch", "antarchy:termite_nest_cavaryn" ], diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/cavaryn_moleworm_caves.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/cavaryn_moleworm_caves.json new file mode 100644 index 00000000..6527b4f1 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/cavaryn_moleworm_caves.json @@ -0,0 +1,93 @@ +{ + "has_precipitation": false, + "temperature": 0.77, + "downfall": 0.96, + "effects": { + "fog_color": 8084735, + "water_color": 5021432, + "water_fog_color": 2502722, + "sky_color": 8084735, + "foliage_color": 2867501, + "grass_color": 4566565, + "grass_color_modifier": "none", + "particle": { + "probability": 0.009, + "options": { + "type": "minecraft:ash" + } + }, + "music": { + "sound": "antarchy:venenatus", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true + } + }, + "spawn_costs": { + "antarchy:molevore": { + "energy_budget": 0.9, + "charge": 2.2 + } + }, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [], + [], + [], + [], + [], + [ + "antarchy:myrmite_coal_ore", + "antarchy:broodstone_uranium_ore", + "antarchy:broodstone_titanium_ore" + ], + [ + "minecraft:large_dripstone", + "minecraft:pointed_dripstone" + ], + [ + "antarchy:cavaryn_bile_veins", + "antarchy:cavaryn_bile_cysts" + ], + [ + "antarchy:moleworm_caves_creepvine", + "antarchy:moleworm_caves_hanging_creeproots" + ], + [] + ], + "creature_spawn_probability": 0.08, + "spawners": { + "monster": [ + { + "type": "antarchy:molevore", + "weight": 28, + "minCount": 1, + "maxCount": 2 + }, + { + "type": "antarchy:moleworm", + "weight": 20, + "minCount": 2, + "maxCount": 4 + } + ], + "creature": [], + "ambient": [ + { + "type": "minecraft:bat", + "weight": 12, + "minCount": 4, + "maxCount": 8 + } + ], + "axolotls": [], + "underground_water_creature": [], + "water_creature": [], + "water_ambient": [], + "misc": [] + } +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/dream_dunes.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/dream_dunes.json index 0f86fe53..61f0be87 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/dream_dunes.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/dream_dunes.json @@ -23,6 +23,12 @@ "tick_delay": 8572, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "antarchy:lucid_lullaby", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": { @@ -51,7 +57,8 @@ ], [ "antarchy:nyxite_spikes", - "antarchy:patch_ceiling_fire" + "antarchy:patch_ceiling_fire", + "antarchy:patch_ceiling_antigravel" ], [ "antarchy:cornea_stalk_patch", diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_beach.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_beach.json index 2f185cc5..00681984 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_beach.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_beach.json @@ -15,6 +15,12 @@ "tick_delay": 7000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "minecraft:music.game", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": {}, diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_coral_spikes.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_coral_spikes.json index a22516ec..c5bf77d3 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_coral_spikes.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_coral_spikes.json @@ -15,6 +15,12 @@ "tick_delay": 6000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "minecraft:music.game", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": {}, diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_lush_caves.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_lush_caves.json index 48be0038..43edad79 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_lush_caves.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_lush_caves.json @@ -21,6 +21,12 @@ "tick_delay": 60000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "minecraft:music.game", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": {}, diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_meadow.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_meadow.json index 6ec3d4da..6f1dd61b 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_meadow.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_meadow.json @@ -15,6 +15,12 @@ "tick_delay": 8000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "minecraft:music.game", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": { diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_ocean.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_ocean.json index da6adc89..97b97bfd 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_ocean.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_ocean.json @@ -15,6 +15,12 @@ "tick_delay": 6000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "minecraft:music.game", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": {}, diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_river.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_river.json index b31c4bd8..ae74314c 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_river.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/elythia_river.json @@ -15,6 +15,12 @@ "tick_delay": 7000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "minecraft:music.game", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": {}, diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/fungal_ouranwood_forest.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/fungal_ouranwood_forest.json index 567e1843..640f61b8 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/fungal_ouranwood_forest.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/fungal_ouranwood_forest.json @@ -21,6 +21,12 @@ "tick_delay": 6000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "minecraft:music.game", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": { diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/glimmering_pools.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/glimmering_pools.json index 1aab1a79..300543e7 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/glimmering_pools.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/glimmering_pools.json @@ -15,6 +15,12 @@ "tick_delay": 6000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "minecraft:music.game", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": {}, diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/glowcap_caves.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/glowcap_caves.json index 0addf183..e08f3352 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/glowcap_caves.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/glowcap_caves.json @@ -21,6 +21,12 @@ "options": { "type": "antarchy:orange_ash" } + }, + "music": { + "sound": "antarchy:venenatus", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": {}, diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/lucid_pools.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/lucid_pools.json index 5d904267..cd2ba45b 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/lucid_pools.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/lucid_pools.json @@ -23,6 +23,12 @@ "tick_delay": 12000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "antarchy:lucid_lullaby", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "carvers": { @@ -56,7 +62,8 @@ "antarchy:red_ant_nest_magma", "antarchy:nyxite_spikes", "antarchy:patch_fire_sparse", - "antarchy:patch_ceiling_fire" + "antarchy:patch_ceiling_fire", + "antarchy:patch_ceiling_antigravel" ], [], [ diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/moleworm_caves.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/moleworm_caves.json index 7efaca3e..693e4356 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/moleworm_caves.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/moleworm_caves.json @@ -15,6 +15,12 @@ "options": { "type": "minecraft:ash" } + }, + "music": { + "sound": "minecraft:music.game", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": { diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/nightmare_wastes.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/nightmare_wastes.json index 19120521..314d5549 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/nightmare_wastes.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/nightmare_wastes.json @@ -23,6 +23,12 @@ "tick_delay": 8572, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "antarchy:lucid_lullaby", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "carvers": { @@ -58,7 +64,8 @@ "antarchy:bed_bug_nest", "antarchy:nyxite_spikes", "antarchy:patch_fire_sparse", - "antarchy:patch_ceiling_fire" + "antarchy:patch_ceiling_fire", + "antarchy:patch_ceiling_antigravel" ], [ "antarchy:cornea_stalk_patch", diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/ouranwood_forest.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/ouranwood_forest.json index bcc3929b..4891f0d6 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/ouranwood_forest.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/ouranwood_forest.json @@ -21,6 +21,12 @@ "tick_delay": 6000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "minecraft:music.game", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": { diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/peach_forest.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/peach_forest.json index 06c3a159..63f4cf94 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/peach_forest.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/peach_forest.json @@ -15,6 +15,12 @@ "tick_delay": 6000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "minecraft:music.game", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": { diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/rolly_caves.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/rolly_caves.json index 33d8d16b..195a8563 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/rolly_caves.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/rolly_caves.json @@ -20,6 +20,12 @@ "options": { "type": "minecraft:spore_blossom_air" } + }, + "music": { + "sound": "antarchy:venenatus", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": {}, diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/sparse_ouranwood_forest.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/sparse_ouranwood_forest.json index d3018dd7..a29da3e7 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/sparse_ouranwood_forest.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/sparse_ouranwood_forest.json @@ -21,7 +21,13 @@ "tick_delay": 6000, "block_search_extent": 8, "offset": 2.0 - } + }, + "music": { + "sound": "minecraft:music.game", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true + } }, "spawn_costs": { diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/umbral_hills.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/umbral_hills.json index ff541751..48773b92 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/umbral_hills.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/biome/umbral_hills.json @@ -23,6 +23,12 @@ "tick_delay": 6000, "block_search_extent": 8, "offset": 2.0 + }, + "music": { + "sound": "antarchy:lucid_lullaby", + "min_delay": 12000, + "max_delay": 24000, + "replace_current_music": true } }, "spawn_costs": { @@ -52,7 +58,8 @@ "antarchy:bed_bug_surface_cluster", "antarchy:nyxite_spikes", "antarchy:patch_fire_sparse", - "antarchy:patch_ceiling_fire" + "antarchy:patch_ceiling_fire", + "antarchy:patch_ceiling_antigravel" ], [], [ diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_chiten_spikes.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_chitin_spikes.json similarity index 92% rename from common-1.21.1/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_chiten_spikes.json rename to common-1.21.1/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_chitin_spikes.json index cb963a90..4272b51d 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_chiten_spikes.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_chitin_spikes.json @@ -1,5 +1,5 @@ { - "type": "antarchy:cavaryn_chiten_spikes", + "type": "antarchy:cavaryn_chitin_spikes", "config": { "floor_to_ceiling_search_range": 10, "radius": 4, diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/noise_settings/cavaryn.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/noise_settings/cavaryn.json index 5f4002c4..c576e96a 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/noise_settings/cavaryn.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/noise_settings/cavaryn.json @@ -203,6 +203,123 @@ ] } }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": ["antarchy:cavaryn_moleworm_caves"] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "offset": 0, + "surface_type": "floor", + "add_surface_depth": false, + "secondary_depth_range": 0 + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "antarchy:surface_blend", + "min_threshold": -1.0, + "max_threshold": -0.18 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:podzol", + "Properties": { + "snowy": "false" + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "antarchy:surface_blend", + "min_threshold": -0.055, + "max_threshold": 0.195 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:rooted_dirt" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "antarchy:surface_blend", + "min_threshold": 0.32, + "max_threshold": 0.68 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:coarse_dirt" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:coarse_dirt" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": -1, + "surface_depth_multiplier": 2, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:rooted_dirt" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": -4, + "surface_depth_multiplier": 3, + "add_stone_depth": true + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:coarse_dirt" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:rooted_dirt" + } + } + ] + } + }, { "type": "minecraft:condition", "if_true": { diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_chiten_spikes.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_chitin_spikes.json similarity index 90% rename from common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_chiten_spikes.json rename to common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_chitin_spikes.json index f4e08187..d78c77b1 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_chiten_spikes.json +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_chitin_spikes.json @@ -1,5 +1,5 @@ { - "feature": "antarchy:cavaryn_chiten_spikes", + "feature": "antarchy:cavaryn_chitin_spikes", "placement": [ { "type": "minecraft:count", diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/moleworm_caves_creepvine.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/moleworm_caves_creepvine.json new file mode 100644 index 00000000..61470bd2 --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/moleworm_caves_creepvine.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:cavaryn_creepvine", + "placement": [ + { + "type": "minecraft:count", + "count": 22 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 12 + }, + "max_inclusive": { + "below_top": 12 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/moleworm_caves_hanging_creeproots.json b/common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/moleworm_caves_hanging_creeproots.json new file mode 100644 index 00000000..f5e407dc --- /dev/null +++ b/common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/moleworm_caves_hanging_creeproots.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:hanging_creeproots", + "placement": [ + { + "type": "minecraft:count", + "count": 24 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 12 + }, + "max_inclusive": { + "below_top": 12 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common-1.21.1/src/main/resources/data/c/tags/item/foods.json b/common-1.21.1/src/main/resources/data/c/tags/item/foods.json index 35048616..cbbbf1bc 100644 --- a/common-1.21.1/src/main/resources/data/c/tags/item/foods.json +++ b/common-1.21.1/src/main/resources/data/c/tags/item/foods.json @@ -12,6 +12,7 @@ "antarchy:cooked_bug_meat", "antarchy:raw_venison", "antarchy:cooked_venison", + "antarchy:kraken_kalamari", "antarchy:mud_pie", "antarchy:high_fructose_corn_syrup", "antarchy:spirit_apple", diff --git a/common-1.21.1/src/main/resources/data/c/tags/item/foods/cooked_meat.json b/common-1.21.1/src/main/resources/data/c/tags/item/foods/cooked_meat.json index e3f95c3d..fce61011 100644 --- a/common-1.21.1/src/main/resources/data/c/tags/item/foods/cooked_meat.json +++ b/common-1.21.1/src/main/resources/data/c/tags/item/foods/cooked_meat.json @@ -2,6 +2,7 @@ "replace": false, "values": [ "antarchy:cooked_venison", - "antarchy:cooked_bug_meat" + "antarchy:cooked_bug_meat", + "antarchy:kraken_kalamari" ] } diff --git a/common-1.21.1/src/main/resources/data/c/tags/item/gems.json b/common-1.21.1/src/main/resources/data/c/tags/item/gems.json new file mode 100644 index 00000000..f61a414f --- /dev/null +++ b/common-1.21.1/src/main/resources/data/c/tags/item/gems.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:tigers_eye" + ] +} diff --git a/common-1.21.1/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json b/common-1.21.1/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json index 4b1b099a..513c94bf 100644 --- a/common-1.21.1/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json +++ b/common-1.21.1/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ + "antarchy:upper", "antarchy:uranium_ore", "antarchy:deepslate_uranium_ore", "antarchy:titanium_ore", @@ -106,12 +107,20 @@ "antarchy:broodstone_titanium_ore", "antarchy:biomite", "antarchy:biomite_turf", - "antarchy:chiten_block", - "antarchy:chiten_spike", + "antarchy:chitin_block", + "antarchy:chitin_spike", "antarchy:antimetal", "antarchy:polished_antimetal", + "antarchy:antimetal_stairs", + "antarchy:antimetal_slab", + "antarchy:polished_antimetal_stairs", + "antarchy:polished_antimetal_slab", "antarchy:dream_lantern", "antarchy:bluestone_ore", - "antarchy:bluestone_block" + "antarchy:bluestone_block", + "antarchy:bluestone_lamp", + "antarchy:shellstone_pillar", + "antarchy:nyxite_pillar", + "antarchy:broodstone_pillar" ] } diff --git a/common-1.21.1/src/main/resources/data/minecraft/tags/block/mineable/shovel.json b/common-1.21.1/src/main/resources/data/minecraft/tags/block/mineable/shovel.json index 5346432f..ccec4d78 100644 --- a/common-1.21.1/src/main/resources/data/minecraft/tags/block/mineable/shovel.json +++ b/common-1.21.1/src/main/resources/data/minecraft/tags/block/mineable/shovel.json @@ -7,6 +7,8 @@ "antarchy:rainbow_ant_nest", "antarchy:termite_nest", "antarchy:dream_sand", - "antarchy:cloud_block" + "antarchy:cloud_block", + "antarchy:antigravel", + "antarchy:loam" ] } diff --git a/common-1.21.1/src/main/resources/data/minecraft/tags/block/needs_stone_tool.json b/common-1.21.1/src/main/resources/data/minecraft/tags/block/needs_stone_tool.json index e85a4f54..8a635a20 100644 --- a/common-1.21.1/src/main/resources/data/minecraft/tags/block/needs_stone_tool.json +++ b/common-1.21.1/src/main/resources/data/minecraft/tags/block/needs_stone_tool.json @@ -20,7 +20,7 @@ "antarchy:shellstone_brick_slab", "antarchy:shellstone_brick_wall", "antarchy:myrmite_coal_ore", - "antarchy:chiten_block", + "antarchy:chitin_block", "antarchy:broodstone", "antarchy:polished_broodstone", "antarchy:chiseled_broodstone", @@ -37,6 +37,8 @@ "antarchy:biomite", "antarchy:biomite_turf", "antarchy:bluestone_ore", - "antarchy:bluestone_block" + "antarchy:bluestone_block", + "antarchy:shellstone_pillar", + "antarchy:broodstone_pillar" ] } diff --git a/common-1.21.1/src/main/resources/data/minecraft/tags/block/slabs.json b/common-1.21.1/src/main/resources/data/minecraft/tags/block/slabs.json index 9a281d20..9bd75693 100644 --- a/common-1.21.1/src/main/resources/data/minecraft/tags/block/slabs.json +++ b/common-1.21.1/src/main/resources/data/minecraft/tags/block/slabs.json @@ -15,6 +15,8 @@ "antarchy:cut_titanium_slab", "antarchy:broodstone_slab", "antarchy:polished_broodstone_slab", - "antarchy:broodstone_brick_slab" + "antarchy:broodstone_brick_slab", + "antarchy:antimetal_slab", + "antarchy:polished_antimetal_slab" ] } diff --git a/common-1.21.1/src/main/resources/data/minecraft/tags/block/stairs.json b/common-1.21.1/src/main/resources/data/minecraft/tags/block/stairs.json index b8de10dc..8dae86d4 100644 --- a/common-1.21.1/src/main/resources/data/minecraft/tags/block/stairs.json +++ b/common-1.21.1/src/main/resources/data/minecraft/tags/block/stairs.json @@ -14,6 +14,8 @@ "antarchy:cut_uranium_stairs", "antarchy:broodstone_stairs", "antarchy:polished_broodstone_stairs", - "antarchy:broodstone_brick_stairs" + "antarchy:broodstone_brick_stairs", + "antarchy:antimetal_stairs", + "antarchy:polished_antimetal_stairs" ] } diff --git a/common-1.21.1/src/main/resources/data/minecraft/tags/item/trimmable_armor.json b/common-1.21.1/src/main/resources/data/minecraft/tags/item/trimmable_armor.json index 62754ec1..d4c8c904 100644 --- a/common-1.21.1/src/main/resources/data/minecraft/tags/item/trimmable_armor.json +++ b/common-1.21.1/src/main/resources/data/minecraft/tags/item/trimmable_armor.json @@ -15,6 +15,10 @@ "antarchy:nightmare_helmet", "antarchy:primordial_helmet", "antarchy:blood_crystal_helmet", - "antarchy:jumpy_boots" + "antarchy:jumpy_boots", + "antarchy:tigers_eye_helmet", + "antarchy:tigers_eye_chestplate", + "antarchy:tigers_eye_leggings", + "antarchy:tigers_eye_boots" ] } diff --git a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java index 4e0f1604..12f18e9e 100644 --- a/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java +++ b/fabric-1.20.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java @@ -730,9 +730,6 @@ public final class AntarchyFabricItems { .build()))); - public static final DeferredItem CARAPACE = ITEMS.registerSimpleItem("carapace", new Item.Properties().rarity(Rarity.UNCOMMON)); - - public static final DeferredItem STINK_BUG_ITEM = ITEMS.registerSimpleItem("stink_bug", new Item.Properties().rarity(Rarity.UNCOMMON)); diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java index 177867f5..8ee6fde0 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java @@ -152,6 +152,7 @@ public final class AntarchyFabric implements ModInitializer { registerWorldgenFeatures(); AntarchyFabricEvents.register(); BloodglassManager.register(); + TigerEyeFabricManager.register(); Antarchy.init(); BloodCrystalShardItem.SYNC_BLOODGLASS = BloodglassManager::syncBloodglass; registerTradeReloadListener(); diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java index 1b3f2159..577ffbec 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java @@ -16,6 +16,7 @@ import com.craisinlord.antarchy.content.item.ScorpionWhipTetherSync; import com.craisinlord.antarchy.content.network.ImpactShakeSync; import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakeSync; import com.craisinlord.antarchy.content.network.HordeIntensitySync; +import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageSync; import com.craisinlord.antarchy.content.portal.PermanentPortalType; import net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistryBuilder; import net.minecraft.core.Holder; @@ -90,6 +91,11 @@ public final class AntarchyFabricContent { builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.CLOUD_SHARK_FIN.get()), net.minecraft.world.item.alchemy.Potions.SLOW_FALLING); builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.JUMPY_BUG_LEG.get()), Potions.LEAPING); builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.CORNEA_EAR.get()), net.minecraft.world.item.alchemy.Potions.NIGHT_VISION); + // These two use registerItemRecipe (not registerPotionRecipe) purely to mark corn/syrup + // as valid brewing-stand ingredients; the actual water-only output logic still comes + // from PotionBrewingMixin -> CustomBrewingRecipes so it stays consistent with NeoForge. + builder.registerItemRecipe(Items.POTION, Ingredient.of(AntarchyFabricItems.CORN.get()), AntarchyFabricItems.HIGH_FRUCTOSE_CORN_SYRUP.get()); + builder.registerItemRecipe(AntarchyFabricItems.HIGH_FRUCTOSE_CORN_SYRUP.get(), Ingredient.of(com.craisinlord.antarchy.content.recipe.CustomBrewingRecipes.rootsTag()), AntarchyFabricItems.ROOT_BEER.get()); }); AntarchyFabricSounds.SOUND_EVENTS.register(); @@ -287,6 +293,8 @@ public final class AntarchyFabricContent { AntarchyObjects.setOctopusBomb(AntarchyFabricEntities.OCTOPUS_BOMB); AntarchyObjects.setTentacle(AntarchyFabricEntities.TENTACLE); + AntarchyObjects.setNightmarePortal(AntarchyFabricEntities.NIGHTMARE_PORTAL); + AntarchyObjects.setNightmareBite(AntarchyFabricEntities.NIGHTMARE_BITE); AntarchyObjects.setKrakensGraspTrident(AntarchyFabricEntities.KRAKENS_GRASP_TRIDENT); AntarchyObjects.setLotus(() -> AntarchyFabricBlocks.LOTUS.get()); AntarchyObjects.setKrakenTentacle(() -> AntarchyFabricItems.KRAKEN_TENTACLE.get()); @@ -294,6 +302,7 @@ public final class AntarchyFabricContent { AntarchyObjects.setOuranwoodDeer(AntarchyFabricEntities.OURANWOOD_DEER); AntarchyObjects.setGlimmer(AntarchyFabricEntities.GLIMMER); AntarchyObjects.setSpiritApple(() -> AntarchyFabricItems.SPIRIT_APPLE.get()); + AntarchyObjects.setGlimmeringEffect(() -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.GLIMMERING)); AntarchyObjects.setElka(AntarchyFabricEntities.ELKA); AntarchyObjects.setPeach(() -> AntarchyFabricItems.PEACH.get()); AntarchyObjects.setCorn(() -> AntarchyFabricItems.CORN.get()); @@ -316,7 +325,9 @@ public final class AntarchyFabricContent { AntarchyObjects.setDorrieInventoryMenu(AntarchyFabricMisc.DORRIE_INVENTORY_MENU); AntarchyObjects.setCritterCage(() -> AntarchyFabricItems.CRITTER_CAGE.get()); AntarchyObjects.setCritterCageBlock(() -> AntarchyFabricBlocks.CRITTER_CAGE_BLOCK.get()); + AntarchyObjects.setLucidAnchor(() -> AntarchyFabricBlocks.LUCID_ANCHOR.get()); AntarchyObjects.setCritterCageBlockEntity(() -> AntarchyFabricBlocks.CRITTER_CAGE_BLOCK_ENTITY.get()); + AntarchyObjects.setLucidAnchorBlockEntity(() -> AntarchyFabricBlocks.LUCID_ANCHOR_BLOCK_ENTITY.get()); AntarchyObjects.setCritterCageProjectile(() -> AntarchyFabricEntities.CRITTER_CAGE_PROJECTILE.get()); AntarchyObjects.setCritterCageEntityTypeComponent(() -> AntarchyFabricMisc.CRITTER_CAGE_ENTITY_TYPE_COMPONENT.get()); AntarchyObjects.setCritterCagePrimaryColorComponent(() -> AntarchyFabricMisc.CRITTER_CAGE_PRIMARY_COLOR_COMPONENT.get()); @@ -374,8 +385,8 @@ public final class AntarchyFabricContent { () -> AntarchyFabricBlocks.TRIFFID_GOO_BLOCK.get(), () -> AntarchyFabricBlocks.PALE_NYXITE.get(), () -> AntarchyFabricBlocks.NYXITE_SPIKE.get(), - () -> AntarchyFabricBlocks.CHITEN_BLOCK.get(), - () -> AntarchyFabricBlocks.CHITEN_SPIKE.get(), + () -> AntarchyFabricBlocks.CHITIN_BLOCK.get(), + () -> AntarchyFabricBlocks.CHITIN_SPIKE.get(), () -> AntarchyFabricBlocks.POTENT_NYXITE.get(), () -> AntarchyFabricBlocks.ANTIMETAL.get(), () -> AntarchyFabricBlocks.POLISHED_ANTIMETAL.get(), @@ -434,6 +445,8 @@ public final class AntarchyFabricContent { HerculesBeetleImpactShakeSync.setSink((player, ticks) -> net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking.send(player, new com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakePayload(ticks))); ImpactShakeSync.setSink((player, payload) -> net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking.send(player, payload)); HordeIntensitySync.setSink((player, payload) -> net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking.send(player, payload)); + TigerEyeCamouflageSync.setSendToPlayer((player, payload) -> net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking.send(player, payload)); + TigerEyeCamouflageSync.setSyncSelfAndTracking(AntarchyFabricNetworking::syncTigerEyeCamouflage); BloodCrystalKatanaItem.setTrailCallback(AntarchyFabricNetworking::syncKatanaTrail); com.craisinlord.antarchy.content.gravity.AntarchyGravityApi.setSyncDispatcher(AntarchyFabricNetworking::syncGravityEntity); AntarchyFabricEvents.register(); diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/TigerEyeFabricManager.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/TigerEyeFabricManager.java new file mode 100644 index 00000000..83aa077e --- /dev/null +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/TigerEyeFabricManager.java @@ -0,0 +1,51 @@ +package com.craisinlord.antarchy.fabric; + +import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageController; +import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageSync; +import net.fabricmc.fabric.api.entity.event.v1.ServerEntityWorldChangeEvents; +import net.fabricmc.fabric.api.entity.event.v1.ServerLivingEntityEvents; +import net.fabricmc.fabric.api.entity.event.v1.ServerPlayerEvents; +import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; +import net.fabricmc.fabric.api.networking.v1.EntityTrackingEvents; +import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; + +public final class TigerEyeFabricManager { + private TigerEyeFabricManager() { + } + + public static void register() { + ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> TigerEyeCamouflageSync.sync(handler.player)); + ServerPlayConnectionEvents.DISCONNECT.register((handler, server) -> + TigerEyeCamouflageController.deactivate(handler.player, false)); + ServerPlayerEvents.AFTER_RESPAWN.register((oldPlayer, newPlayer, alive) -> { + TigerEyeCamouflageController.deactivate(newPlayer, false); + TigerEyeCamouflageSync.sync(newPlayer); + }); + ServerEntityWorldChangeEvents.AFTER_PLAYER_CHANGE_WORLD.register((player, origin, destination) -> { + TigerEyeCamouflageController.deactivate(player, false); + TigerEyeCamouflageSync.sync(player); + }); + EntityTrackingEvents.START_TRACKING.register((trackedEntity, player) -> { + if (trackedEntity instanceof ServerPlayer trackedPlayer) { + TigerEyeCamouflageSync.syncTo(player, trackedPlayer); + } + }); + ServerLivingEntityEvents.AFTER_DEATH.register((entity, damageSource) -> { + if (entity instanceof ServerPlayer player) { + TigerEyeCamouflageController.deactivate(player, false); + TigerEyeCamouflageSync.sync(player); + } + }); + ServerTickEvents.END_SERVER_TICK.register(server -> { + for (ServerLevel level : server.getAllLevels()) { + for (ServerPlayer player : level.players()) { + if (TigerEyeCamouflageController.validateOrDeactivate(player)) { + TigerEyeCamouflageSync.sync(player); + } + } + } + }); + } +} diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClient.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClient.java index 4570a6e8..ee14787f 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClient.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClient.java @@ -1,7 +1,18 @@ package com.craisinlord.antarchy.fabric.client; +import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.fabric.network.AntarchyFabricClientNetworking; import net.fabricmc.api.ClientModInitializer; +import net.fabricmc.fabric.api.resource.IdentifiableResourceReloadListener; +import net.fabricmc.fabric.api.resource.ResourceManagerHelper; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.packs.PackType; +import net.minecraft.server.packs.resources.PreparableReloadListener; +import net.minecraft.server.packs.resources.ResourceManager; +import net.minecraft.util.profiling.ProfilerFiller; + +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Executor; public final class AntarchyFabricClient implements ClientModInitializer { @Override @@ -9,6 +20,19 @@ public final class AntarchyFabricClient implements ClientModInitializer { AntarchyFabricClientNetworking.register(); AntarchyFabricClientNetworking.bootstrapMultipartClient(); AntarchyFabricClientBootstrap.register(); + ResourceManagerHelper.get(PackType.CLIENT_RESOURCES).registerReloadListener(new IdentifiableResourceReloadListener() { + @Override + public ResourceLocation getFabricId() { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "tiger_eye_camouflage_client_cache"); + } + + @Override + public CompletableFuture reload(PreparableReloadListener.PreparationBarrier barrier, ResourceManager manager, + ProfilerFiller prepareProfiler, ProfilerFiller applyProfiler, + Executor prepareExecutor, Executor applyExecutor) { + return barrier.wait(null).thenRunAsync(TigerEyeCamouflageClientHandler::clearClientCaches, applyExecutor); + } + }); } } diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java index ac4f0cb3..17b45669 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java @@ -8,6 +8,7 @@ import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.client.CameraShakeClientState; import com.craisinlord.antarchy.content.client.HerculesBeetleImpactShakeClientState; import com.craisinlord.antarchy.content.client.HordeClientState; +import com.craisinlord.antarchy.content.client.TigerEyeClientHooks; import com.craisinlord.antarchy.content.client.renderer.*; import com.craisinlord.antarchy.content.client.particle.*; import com.craisinlord.antarchy.content.client.renderer.AntiwaterFluidRenderer; @@ -78,6 +79,10 @@ public final class AntarchyFabricClientBootstrap { (net.minecraft.world.level.block.entity.BlockEntityType) AntarchyFabricBlocks.SEASHELL_BLOCK_ENTITY.get(), (BlockEntityRendererProvider) SeashellRenderer::new ); + BlockEntityRendererRegistry.register( + (net.minecraft.world.level.block.entity.BlockEntityType) AntarchyFabricBlocks.LUCID_ANCHOR_BLOCK_ENTITY.get(), + (BlockEntityRendererProvider) LucidAnchorBlockEntityRenderer::new + ); BlockEntityRendererRegistry.register( (net.minecraft.world.level.block.entity.BlockEntityType) AntarchyFabricBlocks.CRITTER_CAGE_BLOCK_ENTITY.get(), (BlockEntityRendererProvider) CritterCageRenderer::new @@ -114,6 +119,8 @@ public final class AntarchyFabricClientBootstrap { EntityRendererRegistry.register(AntarchyFabricEntities.MISSILE_SQUID.get(), MissileSquidRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.OCTOPUS_BOMB.get(), OctopusBombRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.NIGHTMARE.get(), NightmareRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.NIGHTMARE_PORTAL.get(), NightmarePortalRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.NIGHTMARE_BITE.get(), NightmareBiteRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.LUCID.get(), LucidRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.BED_BUG.get(), BedBugRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.WASP.get(), WaspRenderer::new); @@ -303,6 +310,7 @@ public final class AntarchyFabricClientBootstrap { BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.ORANGE_MILKWEED.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.PINK_MILKWEED.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.AMBER_LICHEN.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.MUCUS.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.CREEPVINE.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.CAMELLIA.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.SPIDER_LILY.get(), RenderType.cutout()); @@ -320,7 +328,7 @@ public final class AntarchyFabricClientBootstrap { BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.ANTIMETAL_SCAFFOLDING.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.UMBRAL_MOSS_CARPET.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.NYXITE_SPIKE.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.CHITEN_SPIKE.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.CHITIN_SPIKE.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.STAR_CORAL.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.STAR_CORAL_FAN.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.STAR_CORAL_WALL_FAN.get(), RenderType.cutout()); @@ -354,6 +362,7 @@ public final class AntarchyFabricClientBootstrap { BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.URANIUM_BARS.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.TITANIUM_BARS.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.CLOUD_BLOCK.get(), RenderType.translucent()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.LUCID_ANCHOR.get(), RenderType.translucent()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.JUMPY_BUG_EGG.get(), RenderType.translucent()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.SPIT_BUG_EGG.get(), RenderType.translucent()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.JERRY_EGG.get(), RenderType.translucent()); @@ -431,7 +440,9 @@ public final class AntarchyFabricClientBootstrap { if (entityType == EntityType.PLAYER) { if (renderer instanceof net.minecraft.client.renderer.entity.player.PlayerRenderer playerRenderer) { registrationHelper.register(new ParalyzedStonePlayerLayer(playerRenderer)); + registrationHelper.register(new TigerEyeCamouflagePlayerLayer(playerRenderer)); registrationHelper.register(new GoopedLivingLayer(playerRenderer)); + registrationHelper.register(new GlimmeringLivingLayer(playerRenderer)); registrationHelper.register(new BrutalflyElytraLayer(playerRenderer)); registrationHelper.register(new FallenKingCrownLayer(playerRenderer)); } @@ -450,10 +461,12 @@ public final class AntarchyFabricClientBootstrap { } registrationHelper.register(new ParalyzedStoneLivingLayer(renderer)); registrationHelper.register(new GoopedLivingLayer(renderer)); + registrationHelper.register(new GlimmeringLivingLayer(renderer)); }); } private static void registerClientCallbacks() { + TigerEyeClientHooks.setCamouflageKeyTextSupplier(() -> AntarchyKeyBindings.TIGERS_EYE_CAMOUFLAGE.getTranslatedKeyMessage()); ClientTickEvents.END_CLIENT_TICK.register(client -> { CameraShakeClientState.tick(); HerculesBeetleImpactShakeClientState.tick(); @@ -466,6 +479,7 @@ public final class AntarchyFabricClientBootstrap { DiamondMinecartClientHandler.tick(); ParalyzedClientHandler.tick(); DreadClientHandler.tick(); + TigerEyeCamouflageClientHandler.tick(); BloodCrystalKatanaTrailHandler.tick(); ScorpionWhipTetherRenderHandler.tick(); DorrieJumpClientHandler.tick(); @@ -484,6 +498,7 @@ public final class AntarchyFabricClientBootstrap { DreadHudRenderer.render(guiGraphics); com.craisinlord.antarchy.content.client.HordeHudRenderer.render(guiGraphics); com.craisinlord.antarchy.content.client.GoopedHudRenderer.render(guiGraphics); + com.craisinlord.antarchy.content.client.GlimmeringHudRenderer.render(guiGraphics); ParalyzedHudRenderer.render(guiGraphics); BrutalflyElytraHudRenderer.render(guiGraphics); JumpyBootsHudRenderer.render(guiGraphics); diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyKeyBindings.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyKeyBindings.java index 955d42cb..e185db07 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyKeyBindings.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyKeyBindings.java @@ -37,6 +37,12 @@ public final class AntarchyKeyBindings { GLFW.GLFW_KEY_R, CATEGORY ); + public static final KeyMapping TIGERS_EYE_CAMOUFLAGE = new KeyMapping( + "key.antarchy.tigers_eye_camouflage", + InputConstants.Type.KEYSYM, + InputConstants.UNKNOWN.getValue(), + CATEGORY + ); private AntarchyKeyBindings() {} @@ -45,6 +51,7 @@ public final class AntarchyKeyBindings { KeyBindingHelper.registerKeyBinding(DORRIE_CHARGE_JUMP); KeyBindingHelper.registerKeyBinding(HERCULES_BEETLE_CHARGE); KeyBindingHelper.registerKeyBinding(HERCULES_BEETLE_FLIGHT_TOGGLE); + KeyBindingHelper.registerKeyBinding(TIGERS_EYE_CAMOUFLAGE); } public static boolean isBrutalflyFlapPressed() { @@ -62,4 +69,8 @@ public final class AntarchyKeyBindings { public static boolean isHerculesBeetleFlightTogglePressed() { return Minecraft.getInstance().screen == null && HERCULES_BEETLE_FLIGHT_TOGGLE.isDown(); } + + public static boolean consumeTigerEyeCamouflagePressed() { + return Minecraft.getInstance().screen == null && TIGERS_EYE_CAMOUFLAGE.consumeClick(); + } } diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/TigerEyeCamouflageClientHandler.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/TigerEyeCamouflageClientHandler.java new file mode 100644 index 00000000..a70ca398 --- /dev/null +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/TigerEyeCamouflageClientHandler.java @@ -0,0 +1,29 @@ +package com.craisinlord.antarchy.fabric.client; + +import com.craisinlord.antarchy.content.client.TigerEyeCamouflageClientState; +import com.craisinlord.antarchy.content.client.renderer.TigerEyeCamouflageTextureResolver; +import com.craisinlord.antarchy.content.network.ToggleTigerEyeCamouflagePayload; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +import net.minecraft.client.Minecraft; + +public final class TigerEyeCamouflageClientHandler { + private TigerEyeCamouflageClientHandler() { + } + + public static void tick() { + Minecraft minecraft = Minecraft.getInstance(); + if (minecraft.player == null || minecraft.level == null) { + TigerEyeCamouflageClientState.clear(); + return; + } + + while (AntarchyKeyBindings.consumeTigerEyeCamouflagePressed()) { + ClientPlayNetworking.send(new ToggleTigerEyeCamouflagePayload()); + } + } + + public static void clearClientCaches() { + TigerEyeCamouflageClientState.clear(); + TigerEyeCamouflageTextureResolver.clearCache(); + } +} diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntimetalInversionMixin.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntimetalInversionMixin.java index c534a6dc..6a6f0ae2 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntimetalInversionMixin.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntimetalInversionMixin.java @@ -1,6 +1,7 @@ package com.craisinlord.antarchy.fabric.mixin; import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; import com.craisinlord.antarchy.content.gravity.AntarchyGravityTransition; @@ -50,8 +51,7 @@ public abstract class AntimetalInversionMixin { for (int y = minY; y <= maxY; y++) { for (int z = minZ; z <= maxZ; z++) { BlockPos above = new BlockPos(x, y + 1, z); - if (entity.level().getBlockState(above).is(AntarchyObjects.ANTIMETAL.get()) - || entity.level().getBlockState(above).is(AntarchyObjects.POLISHED_ANTIMETAL.get())) { + if (entity.level().getBlockState(above).is(AntarchyTags.Blocks.ANTIMETAL_INVERSION_BLOCKS)) { return true; } } diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricClientNetworking.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricClientNetworking.java index d83a1a1c..a6a0256f 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricClientNetworking.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricClientNetworking.java @@ -4,6 +4,7 @@ import com.craisinlord.antarchy.content.client.BloodglassClientState; import com.craisinlord.antarchy.content.client.BrutalflyElytraClientState; import com.craisinlord.antarchy.content.client.HordeClientState; import com.craisinlord.antarchy.content.client.ScorpionWhipTetherClientState; +import com.craisinlord.antarchy.content.client.TigerEyeCamouflageClientState; import com.craisinlord.antarchy.content.client.ThoraxisWeatherClientState; import com.craisinlord.antarchy.content.entity.multipart.MultipartFramework; import com.craisinlord.antarchy.content.entity.multipart.network.MultipartAttackPayload; @@ -40,6 +41,8 @@ public final class AntarchyFabricClientNetworking { context.client().execute(() -> AntarchyFabricNetworking.handleGravityState(context.player(), payload))); ClientPlayNetworking.registerGlobalReceiver(BloodglassStatePayload.TYPE, (payload, context) -> context.client().execute(() -> BloodglassClientState.update(payload.shieldsActive(), payload.shieldsMax()))); + ClientPlayNetworking.registerGlobalReceiver(TigerEyeCamouflageStatePayload.TYPE, (payload, context) -> + context.client().execute(() -> TigerEyeCamouflageClientState.update(payload.entityId(), payload.active(), payload.blockStateId()))); ClientPlayNetworking.registerGlobalReceiver(BloodCrystalKatanaTrailPayload.TYPE, (payload, context) -> context.client().execute(() -> BloodCrystalKatanaTrailClientState.trigger(payload.entityId(), payload.durationTicks()))); ClientPlayNetworking.registerGlobalReceiver(ScorpionWhipTetherPayload.TYPE, (payload, context) -> diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java index 5c908e15..0a6ef05f 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java @@ -17,7 +17,10 @@ import com.craisinlord.antarchy.content.item.JumpyBootsHelper; import com.craisinlord.antarchy.fabric.util.JumpyBootsFabricHelper; import com.craisinlord.antarchy.content.item.JumpyBootsItem; import com.craisinlord.antarchy.content.item.GravityGunItem; +import com.craisinlord.antarchy.content.item.TigerEyeArmorUtil; import com.craisinlord.antarchy.content.network.*; +import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageController; +import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageSync; import com.craisinlord.antarchy.content.entity.DorrieEntity; import com.craisinlord.antarchy.content.network.DorrieJumpInputPayload; import com.craisinlord.antarchy.content.network.JumpyBootsLaunchPayload; @@ -70,6 +73,7 @@ public final class AntarchyFabricNetworking { private static void registerPayloadTypes() { PayloadTypeRegistry.playS2C().register(GravityStatePayload.TYPE, GravityStatePayload.STREAM_CODEC); PayloadTypeRegistry.playS2C().register(BloodglassStatePayload.TYPE, BloodglassStatePayload.STREAM_CODEC); + PayloadTypeRegistry.playS2C().register(TigerEyeCamouflageStatePayload.TYPE, TigerEyeCamouflageStatePayload.STREAM_CODEC); PayloadTypeRegistry.playS2C().register(BloodCrystalKatanaTrailPayload.TYPE, BloodCrystalKatanaTrailPayload.STREAM_CODEC); PayloadTypeRegistry.playS2C().register(ScorpionWhipTetherPayload.TYPE, ScorpionWhipTetherPayload.STREAM_CODEC); PayloadTypeRegistry.playS2C().register(BrutalflyElytraAnimationPayload.TYPE, BrutalflyElytraAnimationPayload.STREAM_CODEC); @@ -81,6 +85,7 @@ public final class AntarchyFabricNetworking { PayloadTypeRegistry.playC2S().register(GravityGunPrimaryPayload.TYPE, GravityGunPrimaryPayload.STREAM_CODEC); PayloadTypeRegistry.playC2S().register(GravityGunScrollPayload.TYPE, GravityGunScrollPayload.STREAM_CODEC); PayloadTypeRegistry.playC2S().register(BigBerthaModeCyclePayload.TYPE, BigBerthaModeCyclePayload.STREAM_CODEC); + PayloadTypeRegistry.playC2S().register(ToggleTigerEyeCamouflagePayload.TYPE, ToggleTigerEyeCamouflagePayload.STREAM_CODEC); PayloadTypeRegistry.playC2S().register(DiamondMinecartInputPayload.TYPE, DiamondMinecartInputPayload.STREAM_CODEC); PayloadTypeRegistry.playC2S().register(BrutalflyElytraFlapPayload.TYPE, BrutalflyElytraFlapPayload.STREAM_CODEC); PayloadTypeRegistry.playC2S().register(JumpyBootsLaunchPayload.TYPE, JumpyBootsLaunchPayload.STREAM_CODEC); @@ -101,6 +106,8 @@ public final class AntarchyFabricNetworking { context.server().execute(() -> handleGravityGunScroll(context.player(), payload))); ServerPlayNetworking.registerGlobalReceiver(BigBerthaModeCyclePayload.TYPE, (payload, context) -> context.server().execute(() -> handleBigBerthaModeCycle(context.player(), payload))); + ServerPlayNetworking.registerGlobalReceiver(ToggleTigerEyeCamouflagePayload.TYPE, (payload, context) -> + context.server().execute(() -> handleTigerEyeCamouflageToggle(context.player()))); ServerPlayNetworking.registerGlobalReceiver(DiamondMinecartInputPayload.TYPE, (payload, context) -> context.server().execute(() -> handleDiamondMinecartInput(context.player(), payload))); ServerPlayNetworking.registerGlobalReceiver(BrutalflyElytraFlapPayload.TYPE, (payload, context) -> @@ -158,6 +165,14 @@ public final class AntarchyFabricNetworking { ServerPlayNetworking.send(player, new BloodglassStatePayload(shieldsActive, shieldsMax)); } + public static void syncTigerEyeCamouflage(ServerPlayer player) { + TigerEyeCamouflageStatePayload payload = TigerEyeCamouflageSync.payload(player); + for (ServerPlayer tracking : PlayerLookup.tracking(player)) { + ServerPlayNetworking.send(tracking, payload); + } + ServerPlayNetworking.send(player, payload); + } + public static void syncKatanaTrail(Entity entity, int durationTicks) { BloodCrystalKatanaTrailPayload payload = new BloodCrystalKatanaTrailPayload(entity.getId(), durationTicks); for (ServerPlayer player : PlayerLookup.tracking(entity)) { @@ -420,4 +435,24 @@ public final class AntarchyFabricNetworking { payload.radius() ); } + + private static void handleTigerEyeCamouflageToggle(ServerPlayer player) { + TigerEyeCamouflageController.ToggleResult result = TigerEyeCamouflageController.toggle(player); + if (result != TigerEyeCamouflageController.ToggleResult.NO_CHANGE) { + syncTigerEyeCamouflage(player); + } + + String messageKey = switch (result) { + case ACTIVATED -> "message.antarchy.tiger_eye_camouflage.activated"; + case DEACTIVATED -> "message.antarchy.tiger_eye_camouflage.disabled"; + case FULL_SET_REQUIRED -> TigerEyeArmorUtil.countEquippedPieces(player) > 0 + ? "message.antarchy.tiger_eye_camouflage.full_set_required" + : null; + case INVALID_BLOCK -> "message.antarchy.tiger_eye_camouflage.invalid_block"; + case NO_CHANGE -> null; + }; + if (messageKey != null) { + player.displayClientMessage(net.minecraft.network.chat.Component.translatable(messageKey), true); + } + } } diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricBlocks.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricBlocks.java index 259c86b1..31a5d37e 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricBlocks.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricBlocks.java @@ -8,8 +8,10 @@ import com.craisinlord.antarchy.content.block.entity.AntNestBlockEntity; import com.craisinlord.antarchy.content.block.entity.CritterCageBlockEntity; import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; +import com.craisinlord.antarchy.content.block.entity.LucidAnchorBlockEntity; import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity; import com.craisinlord.antarchy.content.block.entity.SeashellBlockEntity; +import com.craisinlord.antarchy.content.block.entity.UpperBlockEntity; import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; import com.craisinlord.antarchy.content.fluid.BileLiquidBlock; import com.craisinlord.antarchy.content.fluid.LumenLiquidBlock; @@ -149,6 +151,8 @@ public final class AntarchyFabricBlocks { () -> new net.minecraft.world.level.block.FlowerPotBlock(LOTUS.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.POTTED_DANDELION))); public static final DeferredBlock SEASHELL = BLOCKS.register("seashell", () -> new SeashellBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.TURTLE_EGG).noOcclusion())); + public static final DeferredBlock LUCID_ANCHOR = BLOCKS.register("lucid_anchor", + () -> new LucidAnchorBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BEACON).strength(3.0F))); public static final DeferredBlock CRITTER_CAGE_BLOCK = BLOCKS.register("critter_cage_block", () -> new CritterCageBlock(BlockBehaviour.Properties.of().strength(5.0F, 6.0F).sound(net.minecraft.world.level.block.SoundType.METAL).noOcclusion())); @@ -328,6 +332,10 @@ public final class AntarchyFabricBlocks { () -> new net.minecraft.world.level.block.WallBlock(nyxiteProperties())); + public static final DeferredBlock NYXITE_PILLAR = BLOCKS.register("nyxite_pillar", + () -> new RotatedPillarBlock(nyxiteProperties())); + + public static final DeferredBlock SHELLSTONE = BLOCKS.register("shellstone", () -> new Block(AntarchyObjects.shellstoneProperties())); @@ -400,6 +408,10 @@ public final class AntarchyFabricBlocks { () -> new net.minecraft.world.level.block.WallBlock(AntarchyObjects.shellstoneProperties())); + public static final DeferredBlock SHELLSTONE_PILLAR = BLOCKS.register("shellstone_pillar", + () -> new RotatedPillarBlock(AntarchyObjects.shellstoneProperties())); + + public static final DeferredBlock TRIFFID_GOO_BLOCK = BLOCKS.register("triffid_goo_block", () -> new com.craisinlord.antarchy.content.block.TriffidGooBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SLIME_BLOCK).noOcclusion().isViewBlocking((s, l, p) -> false).isSuffocating((s, l, p) -> false))); @@ -431,8 +443,8 @@ public final class AntarchyFabricBlocks { () -> new NyxiteSpikeBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POINTED_DRIPSTONE))); - public static final DeferredBlock CHITEN_SPIKE = BLOCKS.register("chiten_spike", - () -> new ChitenSpikeBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POINTED_DRIPSTONE))); + public static final DeferredBlock CHITIN_SPIKE = BLOCKS.register("chitin_spike", + () -> new ChitinSpikeBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POINTED_DRIPSTONE))); public static final DeferredBlock POTENT_NYXITE = BLOCKS.register("potent_nyxite", @@ -518,6 +530,10 @@ public final class AntarchyFabricBlocks { () -> new WallBlock(broodstoneProperties())); + public static final DeferredBlock BROODSTONE_PILLAR = BLOCKS.register("broodstone_pillar", + () -> new RotatedPillarBlock(broodstoneProperties())); + + public static final DeferredBlock BROODSTONE_URANIUM_ORE = BLOCKS.register("broodstone_uranium_ore", () -> createOre(Blocks.DEEPSLATE_EMERALD_ORE, 4, 8, MapColor.COLOR_YELLOW)); @@ -526,7 +542,7 @@ public final class AntarchyFabricBlocks { () -> createOre(Blocks.DEEPSLATE_DIAMOND_ORE, 4, 8, MapColor.COLOR_LIGHT_BLUE)); - public static final DeferredBlock CHITEN_BLOCK = BLOCKS.register("chiten_block", + public static final DeferredBlock CHITIN_BLOCK = BLOCKS.register("chitin_block", () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BONE_BLOCK).requiresCorrectToolForDrops())); @@ -730,6 +746,8 @@ public final class AntarchyFabricBlocks { () -> new BluestoneComparatorBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.COMPARATOR).mapColor(MapColor.COLOR_BLUE).noCollission(), AntarchyFabricBlocks::bluestoneComparatorBlockEntityType)); public static final DeferredBlock BLUESTONE_TORCH = BLOCKS.register("bluestone_torch", () -> new BluestoneTorchBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.REDSTONE_TORCH).mapColor(MapColor.COLOR_BLUE).lightLevel(state -> state.getValue(BluestoneTorchBlock.LIT) ? 7 : 0).noCollission().instabreak())); + public static final DeferredBlock BLUESTONE_LAMP = BLOCKS.register("bluestone_lamp", + () -> new com.craisinlord.antarchy.content.block.BluestoneLampBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.REDSTONE_LAMP).mapColor(MapColor.COLOR_BLUE))); public static final DeferredBlock URANIUM_BLOCK = BLOCKS.register("uranium_block", @@ -818,12 +836,22 @@ public final class AntarchyFabricBlocks { public static final DeferredBlock POLISHED_ANTIMETAL = BLOCKS.register("polished_antimetal", () -> new net.minecraft.world.level.block.RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POLISHED_BASALT))); + public static final DeferredBlock ANTIMETAL_STAIRS = BLOCKS.register("antimetal_stairs", + () -> new StairBlock(ANTIMETAL.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.BASALT))); + public static final DeferredBlock ANTIMETAL_SLAB = BLOCKS.register("antimetal_slab", + () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BASALT))); + public static final DeferredBlock POLISHED_ANTIMETAL_STAIRS = BLOCKS.register("polished_antimetal_stairs", + () -> new StairBlock(POLISHED_ANTIMETAL.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.POLISHED_BASALT))); + public static final DeferredBlock POLISHED_ANTIMETAL_SLAB = BLOCKS.register("polished_antimetal_slab", + () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POLISHED_BASALT))); public static final DeferredBlock ANTIMETAL_SCAFFOLDING = BLOCKS.register("antimetal_scaffolding", () -> new com.craisinlord.antarchy.content.block.AntimetalScaffoldingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SCAFFOLDING))); + public static final DeferredBlock UPPER = BLOCKS.register("upper", + () -> new UpperBlock(AntarchyFabricBlocks::upperBlockEntityType, BlockBehaviour.Properties.ofFullCopy(Blocks.HOPPER))); public static final DeferredBlock ANTIMETAL_RAIL = BLOCKS.register("antimetal_rail", () -> new com.craisinlord.antarchy.content.block.AntimetalRailBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.RAIL))); @@ -905,6 +933,18 @@ public final class AntarchyFabricBlocks { () -> new DreamSandBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SAND))); + public static final DeferredBlock ANTIGRAVEL = BLOCKS.register("antigravel", + () -> new com.craisinlord.antarchy.content.block.AntigravelBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.GRAVEL))); + + + public static final DeferredBlock LOAM = BLOCKS.register("loam", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.MUD))); + + + public static final DeferredBlock MUCUS = BLOCKS.register("mucus", + () -> new com.craisinlord.antarchy.content.block.MucusBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.GLOW_LICHEN).friction(0.98F).lightLevel(state -> 0).sound(SoundType.SLIME_BLOCK))); + + public static final DeferredBlock DREAM_SANDSTONE = BLOCKS.register("dream_sandstone", () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.SANDSTONE))); @@ -1018,6 +1058,11 @@ public final class AntarchyFabricBlocks { SeashellBlockEntity::new, SEASHELL.get() ).build(null)); + public static final DeferredHolder, BlockEntityType> LUCID_ANCHOR_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("lucid_anchor", + () -> BlockEntityType.Builder.of( + LucidAnchorBlockEntity::new, + LUCID_ANCHOR.get() + ).build(null)); public static final DeferredHolder, BlockEntityType> CRITTER_CAGE_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("critter_cage_block", () -> BlockEntityType.Builder.of( CritterCageBlockEntity::new, @@ -1028,6 +1073,11 @@ public final class AntarchyFabricBlocks { (pos, state) -> new com.craisinlord.antarchy.content.block.entity.BluestoneComparatorBlockEntity(pos, state, AntarchyFabricBlocks::bluestoneComparatorBlockEntityType), BLUESTONE_COMPARATOR.get() ).build(null)); + public static final DeferredHolder, BlockEntityType> UPPER_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("upper", + () -> BlockEntityType.Builder.of( + (pos, state) -> new UpperBlockEntity(pos, state, AntarchyFabricBlocks::upperBlockEntityType), + UPPER.get() + ).build(null)); @@ -1055,6 +1105,10 @@ public final class AntarchyFabricBlocks { return BLUESTONE_COMPARATOR_BLOCK_ENTITY.get(); } + private static BlockEntityType upperBlockEntityType() { + return UPPER_BLOCK_ENTITY.get(); + } + private static Block smallBloodCrystalBudBlock() { diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java index d9100353..3338e776 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java @@ -32,6 +32,8 @@ import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity; import com.craisinlord.antarchy.content.entity.EmperorScorpionEntity; import com.craisinlord.antarchy.content.entity.ScorpionEntity; import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; +import com.craisinlord.antarchy.content.entity.nightmare.NightmarePortalEntity; +import com.craisinlord.antarchy.content.entity.nightmare.NightmareBiteEntity; import com.craisinlord.antarchy.content.entity.ToreterrorEntity; import com.craisinlord.antarchy.content.entity.WaterBombEntity; import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; @@ -328,6 +330,20 @@ public final class AntarchyFabricEntities { .clientTrackingRange(12) .build("nightmare")); + public static final DeferredHolder, EntityType> NIGHTMARE_PORTAL = ENTITY_TYPES.register("nightmare_portal", + () -> EntityType.Builder.of(NightmarePortalEntity::new, MobCategory.MISC) + .sized(2.5F, 3.0F) + .clientTrackingRange(10) + .updateInterval(1) + .build("nightmare_portal")); + + public static final DeferredHolder, EntityType> NIGHTMARE_BITE = ENTITY_TYPES.register("nightmare_bite", + () -> EntityType.Builder.of(NightmareBiteEntity::new, MobCategory.MISC) + .sized(2.5F, 2.0F) + .clientTrackingRange(10) + .updateInterval(1) + .build("nightmare_bite")); + public static final DeferredHolder, EntityType> LUCID = ENTITY_TYPES.register("lucid", () -> EntityType.Builder.of(LucidEntity::new, MobCategory.MONSTER) diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java index 3bb7d40c..0ac1d170 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java @@ -7,6 +7,7 @@ import com.craisinlord.antarchy.content.item.BloodCrystalAppleItem; import com.craisinlord.antarchy.content.item.BloodCrystalKatanaItem; import com.craisinlord.antarchy.content.item.CritterCageItem; import com.craisinlord.antarchy.fabric.item.DeferredSpawnEggItem; +import com.craisinlord.antarchy.content.item.LucidAnchorBlockItem; import com.craisinlord.antarchy.content.item.LucidEyeItem; import com.craisinlord.antarchy.content.item.LucidPearlItem; import com.craisinlord.antarchy.content.item.PrimordialArmorItem; @@ -221,6 +222,8 @@ public final class AntarchyFabricItems { public static final DeferredItem GIANT_LILY_PAD_ITEM = ITEMS.register("giant_lily_pad", () -> new com.craisinlord.antarchy.content.item.GiantLilyPadItem(AntarchyFabricBlocks.GIANT_LILY_PAD.get(), new Item.Properties())); public static final DeferredItem SEASHELL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SEASHELL); + public static final DeferredItem LUCID_ANCHOR_ITEM = ITEMS.register("lucid_anchor", + () -> new LucidAnchorBlockItem(AntarchyFabricBlocks.LUCID_ANCHOR.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); public static final DeferredItem LOTUS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.LOTUS); @@ -295,6 +298,7 @@ public final class AntarchyFabricItems { () -> new CeilingPlacementTooltipBlockItem(AntarchyFabricBlocks.BLUESTONE_COMPARATOR.get(), new Item.Properties())); public static final DeferredItem BLUESTONE_TORCH_ITEM = ITEMS.register("bluestone_torch", () -> new CeilingPlacementTooltipBlockItem(AntarchyFabricBlocks.BLUESTONE_TORCH.get(), new Item.Properties())); + public static final DeferredItem BLUESTONE_LAMP_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BLUESTONE_LAMP); public static final DeferredItem URANIUM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.URANIUM_BLOCK, new Item.Properties().rarity(Rarity.UNCOMMON)); @@ -365,6 +369,14 @@ public final class AntarchyFabricItems { public static final DeferredItem POLISHED_ANTIMETAL_ITEM = ITEMS.register("polished_antimetal", () -> new AntimetalBlockItem(AntarchyFabricBlocks.POLISHED_ANTIMETAL.get(), new Item.Properties())); + public static final DeferredItem ANTIMETAL_STAIRS_ITEM = ITEMS.register("antimetal_stairs", + () -> new AntimetalBlockItem(AntarchyFabricBlocks.ANTIMETAL_STAIRS.get(), new Item.Properties())); + public static final DeferredItem ANTIMETAL_SLAB_ITEM = ITEMS.register("antimetal_slab", + () -> new AntimetalBlockItem(AntarchyFabricBlocks.ANTIMETAL_SLAB.get(), new Item.Properties())); + public static final DeferredItem POLISHED_ANTIMETAL_STAIRS_ITEM = ITEMS.register("polished_antimetal_stairs", + () -> new AntimetalBlockItem(AntarchyFabricBlocks.POLISHED_ANTIMETAL_STAIRS.get(), new Item.Properties())); + public static final DeferredItem POLISHED_ANTIMETAL_SLAB_ITEM = ITEMS.register("polished_antimetal_slab", + () -> new AntimetalBlockItem(AntarchyFabricBlocks.POLISHED_ANTIMETAL_SLAB.get(), new Item.Properties())); public static final DeferredItem ANTIMETAL_SCAFFOLDING_ITEM = ITEMS.register("antimetal_scaffolding", @@ -379,6 +391,7 @@ public final class AntarchyFabricItems { () -> new CeilingPlacementTooltipBlockItem(AntarchyFabricBlocks.ANTIMETAL_DETECTOR_RAIL.get(), new Item.Properties())); public static final DeferredItem ANTIMETAL_ACTIVATOR_RAIL_ITEM = ITEMS.register("antimetal_activator_rail", () -> new CeilingPlacementTooltipBlockItem(AntarchyFabricBlocks.ANTIMETAL_ACTIVATOR_RAIL.get(), new Item.Properties())); + public static final DeferredItem UPPER_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.UPPER); public static final DeferredItem SMALL_BLOOD_CRYSTAL_BUD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SMALL_BLOOD_CRYSTAL_BUD); @@ -401,6 +414,10 @@ public final class AntarchyFabricItems { public static final DeferredItem DREAM_SAND_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DREAM_SAND); + public static final DeferredItem ANTIGRAVEL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ANTIGRAVEL); + public static final DeferredItem LOAM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.LOAM); + public static final DeferredItem MUCUS_ITEM = ITEMS.register("mucus", + () -> new com.craisinlord.antarchy.content.item.MucusBlockItem(AntarchyFabricBlocks.MUCUS.get(), new Item.Properties())); public static final DeferredItem DREAM_SANDSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DREAM_SANDSTONE); @@ -482,6 +499,7 @@ public final class AntarchyFabricItems { public static final DeferredItem BROODSTONE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BROODSTONE_BRICK_STAIRS); public static final DeferredItem BROODSTONE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BROODSTONE_BRICK_SLAB); public static final DeferredItem BROODSTONE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BROODSTONE_BRICK_WALL); + public static final DeferredItem BROODSTONE_PILLAR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BROODSTONE_PILLAR); public static final DeferredItem MYRMITE_COAL_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MYRMITE_COAL_ORE); public static final DeferredItem BROODSTONE_URANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BROODSTONE_URANIUM_ORE, new Item.Properties().rarity(Rarity.UNCOMMON)); public static final DeferredItem BROODSTONE_TITANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BROODSTONE_TITANIUM_ORE, new Item.Properties().rarity(Rarity.UNCOMMON)); @@ -494,7 +512,7 @@ public final class AntarchyFabricItems { public static final DeferredItem NYXITE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NYXITE_BRICKS); - public static final DeferredItem CHITEN_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CHITEN_BLOCK); + public static final DeferredItem CHITIN_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CHITIN_BLOCK); public static final DeferredItem NYXITE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NYXITE_STAIRS); @@ -525,6 +543,7 @@ public final class AntarchyFabricItems { public static final DeferredItem NYXITE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NYXITE_BRICK_WALL); + public static final DeferredItem NYXITE_PILLAR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NYXITE_PILLAR); public static final DeferredItem SHELLSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SHELLSTONE); @@ -579,6 +598,7 @@ public final class AntarchyFabricItems { public static final DeferredItem SHELLSTONE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SHELLSTONE_BRICK_WALL); + public static final DeferredItem SHELLSTONE_PILLAR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SHELLSTONE_PILLAR); public static final DeferredItem TRIFFID_GOO_BLOCK_ITEM = ITEMS.register("triffid_goo_block", @@ -589,7 +609,7 @@ public final class AntarchyFabricItems { public static final DeferredItem NYXITE_SPIKE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NYXITE_SPIKE); - public static final DeferredItem CHITEN_SPIKE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CHITEN_SPIKE); + public static final DeferredItem CHITIN_SPIKE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CHITIN_SPIKE); public static final DeferredItem POTENT_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.POTENT_NYXITE); @@ -696,6 +716,16 @@ public final class AntarchyFabricItems { public static final DeferredItem BLOOD_CRYSTAL_BOOTS = ITEMS.register("blood_crystal_boots", () -> new BloodCrystalArmorItem(net.minecraft.core.Holder.direct(AntarchyFabricMisc.BLOOD_CRYSTAL_ARMOR_MATERIAL.get()), ArmorItem.Type.BOOTS, new Item.Properties().rarity(Rarity.RARE))); + public static final DeferredItem TIGERS_EYE = ITEMS.registerSimpleItem("tigers_eye", new Item.Properties().rarity(Rarity.UNCOMMON)); + public static final DeferredItem TIGERS_EYE_HELMET = ITEMS.register("tigers_eye_helmet", + () -> new com.craisinlord.antarchy.content.item.TigerEyeArmorItem(net.minecraft.core.Holder.direct(AntarchyFabricMisc.TIGERS_EYE_ARMOR_MATERIAL.get()), ArmorItem.Type.HELMET, new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem TIGERS_EYE_CHESTPLATE = ITEMS.register("tigers_eye_chestplate", + () -> new com.craisinlord.antarchy.content.item.TigerEyeArmorItem(net.minecraft.core.Holder.direct(AntarchyFabricMisc.TIGERS_EYE_ARMOR_MATERIAL.get()), ArmorItem.Type.CHESTPLATE, new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem TIGERS_EYE_LEGGINGS = ITEMS.register("tigers_eye_leggings", + () -> new com.craisinlord.antarchy.content.item.TigerEyeArmorItem(net.minecraft.core.Holder.direct(AntarchyFabricMisc.TIGERS_EYE_ARMOR_MATERIAL.get()), ArmorItem.Type.LEGGINGS, new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem TIGERS_EYE_BOOTS = ITEMS.register("tigers_eye_boots", + () -> new com.craisinlord.antarchy.content.item.TigerEyeArmorItem(net.minecraft.core.Holder.direct(AntarchyFabricMisc.TIGERS_EYE_ARMOR_MATERIAL.get()), ArmorItem.Type.BOOTS, new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem BLOOD_CRYSTAL_KATANA = ITEMS.register("blood_crystal_katana", () -> new BloodCrystalKatanaItem( @@ -719,7 +749,7 @@ public final class AntarchyFabricItems { () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); - public static final DeferredItem CHITEN = ITEMS.registerSimpleItem("chiten", new Item.Properties().rarity(Rarity.UNCOMMON)); + public static final DeferredItem CHITIN = ITEMS.registerSimpleItem("chitin", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final DeferredItem JERRY_NUCLEUS = ITEMS.register("jerry_nucleus", @@ -730,9 +760,6 @@ public final class AntarchyFabricItems { .build()))); - public static final DeferredItem CARAPACE = ITEMS.registerSimpleItem("carapace", new Item.Properties().rarity(Rarity.UNCOMMON)); - - public static final DeferredItem STINK_BUG_ITEM = ITEMS.registerSimpleItem("stink_bug", new Item.Properties().rarity(Rarity.UNCOMMON)); @@ -1225,6 +1252,14 @@ public final class AntarchyFabricItems { "kraken_tentacle", new Item.Properties().rarity(Rarity.RARE) ); + public static final DeferredItem KRAKEN_KALAMARI = ITEMS.register("kraken_kalamari", + () -> new Item(new Item.Properties() + .rarity(Rarity.EPIC) + .food(new FoodProperties.Builder() + .nutrition(20) + .saturationModifier(1.2F) + .alwaysEdible() + .build()))); public static final DeferredItem KRAKENS_GRASP = ITEMS.register("krakens_grasp", () -> new KrakensGraspItem( @@ -1461,6 +1496,7 @@ public final class AntarchyFabricItems { .food(new FoodProperties.Builder() .nutrition(4) .saturationModifier(0.3F) + .alwaysEdible() .build()))); diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java index a039eb50..7f63b415 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java @@ -56,8 +56,8 @@ import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeConfiguration; import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeFeature; import com.craisinlord.antarchy.content.worldgen.elythia.TriffidPatchFeature; import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynEggPatchFeature; -import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeConfiguration; -import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitinSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitinSpikeFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugNestFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugSurfaceClusterFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.CloudSeaCalciteFeature; @@ -250,6 +250,16 @@ public final class AntarchyFabricMisc { 0.0F, 0.0F )); + public static final DeferredHolder TIGERS_EYE_ARMOR_MATERIAL = ARMOR_MATERIALS.register("tigers_eye", + () -> new ArmorMaterial( + createDiamondArmorDefense(), + 18, + SoundEvents.ARMOR_EQUIP_GOLD, + () -> Ingredient.of(AntarchyFabricItems.TIGERS_EYE.get()), + List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "tigers_eye"))), + 2.0F, + 0.0F + )); public static final DeferredHolder MOGGLES_ARMOR_MATERIAL = ARMOR_MATERIALS.register("moggles", @@ -352,6 +362,9 @@ public final class AntarchyFabricMisc { public static final DeferredHolder BLOODGLASS_WARD = MOB_EFFECTS.register("bloodglass_ward", com.craisinlord.antarchy.content.effect.BloodglassWardEffect::new); + public static final DeferredHolder GLIMMERING = MOB_EFFECTS.register("glimmering", com.craisinlord.antarchy.content.effect.GlimmeringMobEffect::new); + + public static final DeferredHolder BLOODGLASS_MAX_HEARTS = ATTRIBUTES.register( "bloodglass_max_hearts", () -> new net.minecraft.world.entity.ai.attributes.RangedAttribute("attribute.antarchy.bloodglass_max_hearts", 0.0, 0.0, 8.0).setSyncable(true) @@ -676,8 +689,8 @@ public final class AntarchyFabricMisc { () -> new NyxiteSpikeFeature(NyxiteSpikeConfiguration.CODEC)); - public static final DeferredHolder, ChitenSpikeFeature> CAVARYN_CHITEN_SPIKES = FEATURES.register("cavaryn_chiten_spikes", - () -> new ChitenSpikeFeature(ChitenSpikeConfiguration.CODEC)); + public static final DeferredHolder, ChitinSpikeFeature> CAVARYN_CHITIN_SPIKES = FEATURES.register("cavaryn_chitin_spikes", + () -> new ChitinSpikeFeature(ChitinSpikeConfiguration.CODEC)); public static final DeferredHolder, CavarynBileVeinFeature> CAVARYN_BILE_VEINS = FEATURES.register("cavaryn_bile_veins", @@ -852,6 +865,16 @@ public final class AntarchyFabricMisc { return defense; } + private static java.util.EnumMap createDiamondArmorDefense() { + java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); + defense.put(ArmorItem.Type.BOOTS, 3); + defense.put(ArmorItem.Type.LEGGINGS, 6); + defense.put(ArmorItem.Type.CHESTPLATE, 8); + defense.put(ArmorItem.Type.HELMET, 3); + defense.put(ArmorItem.Type.BODY, 11); + return defense; + } + private static java.util.EnumMap createMogglesArmorDefense() { diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSounds.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSounds.java index 6a95a440..656c8e13 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSounds.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSounds.java @@ -157,6 +157,9 @@ public final class AntarchyFabricSounds { public static final DeferredHolder THORAXIS_LUCID_POOLS_MOOD = registerSoundEvent("thoraxis_lucid_pools_mood"); + public static final DeferredHolder LUCID_LULLABY = registerSoundEvent("lucid_lullaby"); + + public static final DeferredHolder LUCID_AMBIENT = registerSoundEvent("lucid_ambient"); @@ -388,6 +391,9 @@ public final class AntarchyFabricSounds { public static final DeferredHolder CAVARYN_HEARTBEAT = registerSoundEvent("cavaryn_heartbeat"); + public static final DeferredHolder VENENATUS = registerSoundEvent("venenatus"); + + public static final DeferredHolder ROLLY_POLLY_IDLE = registerSoundEvent("rolly_polly_idle"); public static final DeferredHolder ROLLY_POLLY_WHEEL_MODE = registerSoundEvent("rolly_polly_wheel_mode"); public static final DeferredHolder ROLLY_POLLY_NORMAL_MODE = registerSoundEvent("rolly_polly_normal_mode"); diff --git a/forge-1.20.1/gradle.properties b/forge-1.20.1/gradle.properties index af3a5742..7813e356 100644 --- a/forge-1.20.1/gradle.properties +++ b/forge-1.20.1/gradle.properties @@ -6,7 +6,7 @@ mod_name=Antarchy mod_description=ANTS! ANTS! ANTS! ANTS! mod_authors=CraisinLord mod_group_id=com.craisinlord -mod_version=1.0.3 +mod_version=1.0.4 mod_license=All Rights Reserved minecraft_version=1.20.1 diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyConfigModuleForge.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyConfigModuleForge.java index ed6611c8..63a2f4a2 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyConfigModuleForge.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyConfigModuleForge.java @@ -57,24 +57,28 @@ public final class AntarchyConfigModuleForge { AntarchySettings.setAntsStealFromChests(AntarchyMobsConfig.antsStealFromChests()); AntarchySettings.setBrownAntRequiresReagent(AntarchyMobsConfig.brownAntRequiresReagent()); + AntarchySettings.setBrownAntRightClickDimension(AntarchyMobsConfig.brownAntRightClickDimension()); AntarchySettings.setBrownAntHealth(AntarchyMobsConfig.brownAntHealth()); AntarchySettings.setBrownAntMovementSpeed(AntarchyMobsConfig.brownAntMovementSpeed()); AntarchySettings.setBrownAntAttackDamage(AntarchyMobsConfig.brownAntAttackDamage()); AntarchySettings.setBrownAntDestinationDimension(AntarchyMobsConfig.brownAntDestinationDimension()); AntarchySettings.setRedAntRequiresReagent(AntarchyMobsConfig.redAntRequiresReagent()); + AntarchySettings.setRedAntRightClickDimension(AntarchyMobsConfig.redAntRightClickDimension()); AntarchySettings.setRedAntHealth(AntarchyMobsConfig.redAntHealth()); AntarchySettings.setRedAntMovementSpeed(AntarchyMobsConfig.redAntMovementSpeed()); AntarchySettings.setRedAntAttackDamage(AntarchyMobsConfig.redAntAttackDamage()); AntarchySettings.setRedAntDestinationDimension(AntarchyMobsConfig.redAntDestinationDimension()); AntarchySettings.setRainbowAntRequiresReagent(AntarchyMobsConfig.rainbowAntRequiresReagent()); + AntarchySettings.setRainbowAntRightClickDimension(AntarchyMobsConfig.rainbowAntRightClickDimension()); AntarchySettings.setRainbowAntHealth(AntarchyMobsConfig.rainbowAntHealth()); AntarchySettings.setRainbowAntMovementSpeed(AntarchyMobsConfig.rainbowAntMovementSpeed()); AntarchySettings.setRainbowAntAttackDamage(AntarchyMobsConfig.rainbowAntAttackDamage()); AntarchySettings.setRainbowAntNonInfinityFallbackDimension(AntarchyMobsConfig.rainbowAntNonInfinityFallbackDimension()); AntarchySettings.setTermiteRequiresReagent(AntarchyMobsConfig.termiteRequiresReagent()); + AntarchySettings.setTermiteRightClickDimension(AntarchyMobsConfig.termiteRightClickDimension()); AntarchySettings.setTermiteHealth(AntarchyMobsConfig.termiteHealth()); AntarchySettings.setTermiteMovementSpeed(AntarchyMobsConfig.termiteMovementSpeed()); AntarchySettings.setTermiteAttackDamage(AntarchyMobsConfig.termiteAttackDamage()); diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyMobsConfig.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyMobsConfig.java index 90073afa..75927b00 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyMobsConfig.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/AntarchyMobsConfig.java @@ -11,24 +11,28 @@ public final class AntarchyMobsConfig { private static final ForgeConfigSpec.BooleanValue ANTS_STEAL_FROM_CHESTS; private static final ForgeConfigSpec.BooleanValue BROWN_ANT_REQUIRES_REAGENT; + private static final ForgeConfigSpec.BooleanValue BROWN_ANT_RIGHT_CLICK_DIMENSION; private static final ForgeConfigSpec.DoubleValue BROWN_ANT_HEALTH; private static final ForgeConfigSpec.DoubleValue BROWN_ANT_MOVEMENT_SPEED; private static final ForgeConfigSpec.DoubleValue BROWN_ANT_ATTACK_DAMAGE; private static final ForgeConfigSpec.ConfigValue BROWN_ANT_DESTINATION_DIMENSION; private static final ForgeConfigSpec.BooleanValue RED_ANT_REQUIRES_REAGENT; + private static final ForgeConfigSpec.BooleanValue RED_ANT_RIGHT_CLICK_DIMENSION; private static final ForgeConfigSpec.DoubleValue RED_ANT_HEALTH; private static final ForgeConfigSpec.DoubleValue RED_ANT_MOVEMENT_SPEED; private static final ForgeConfigSpec.DoubleValue RED_ANT_ATTACK_DAMAGE; private static final ForgeConfigSpec.ConfigValue RED_ANT_DESTINATION_DIMENSION; private static final ForgeConfigSpec.BooleanValue RAINBOW_ANT_REQUIRES_REAGENT; + private static final ForgeConfigSpec.BooleanValue RAINBOW_ANT_RIGHT_CLICK_DIMENSION; private static final ForgeConfigSpec.DoubleValue RAINBOW_ANT_HEALTH; private static final ForgeConfigSpec.DoubleValue RAINBOW_ANT_MOVEMENT_SPEED; private static final ForgeConfigSpec.DoubleValue RAINBOW_ANT_ATTACK_DAMAGE; private static final ForgeConfigSpec.ConfigValue RAINBOW_ANT_NON_INFINITY_FALLBACK_DIMENSION; private static final ForgeConfigSpec.BooleanValue TERMITE_REQUIRES_REAGENT; + private static final ForgeConfigSpec.BooleanValue TERMITE_RIGHT_CLICK_DIMENSION; private static final ForgeConfigSpec.DoubleValue TERMITE_HEALTH; private static final ForgeConfigSpec.DoubleValue TERMITE_MOVEMENT_SPEED; private static final ForgeConfigSpec.DoubleValue TERMITE_ATTACK_DAMAGE; @@ -278,6 +282,9 @@ public final class AntarchyMobsConfig { "Breeding foods tag: data/antarchy/tags/item/brown_ant_breeding_foods.json" ) .define("requiresReagent", false); + BROWN_ANT_RIGHT_CLICK_DIMENSION = b + .comment("If false, right-clicking brown ants will never teleport players.") + .define("rightClickDimension", true); BROWN_ANT_HEALTH = b.comment("Base max health.") .defineInRange("health", 5.0D, 0.1D, 1024.0D); BROWN_ANT_MOVEMENT_SPEED = b.comment("Base movement speed.") .defineInRange("movementSpeed", 0.28D, 0.0D, 10.0D); BROWN_ANT_ATTACK_DAMAGE = b.comment("Base attack damage.") .defineInRange("attackDamage", 1.0D, 0.0D, 1024.0D); @@ -294,6 +301,9 @@ public final class AntarchyMobsConfig { "Breeding foods tag: data/antarchy/tags/item/red_ant_breeding_foods.json" ) .define("requiresReagent", false); + RED_ANT_RIGHT_CLICK_DIMENSION = b + .comment("If false, right-clicking red ants will never teleport players.") + .define("rightClickDimension", true); RED_ANT_HEALTH = b.comment("Base max health.") .defineInRange("health", 5.0D, 0.1D, 1024.0D); RED_ANT_MOVEMENT_SPEED = b.comment("Base movement speed.") .defineInRange("movementSpeed", 0.30D, 0.0D, 10.0D); RED_ANT_ATTACK_DAMAGE = b.comment("Base attack damage.") .defineInRange("attackDamage", 3.0D, 0.0D, 1024.0D); @@ -310,6 +320,9 @@ public final class AntarchyMobsConfig { "Breeding foods tag: data/antarchy/tags/item/rainbow_ant_breeding_foods.json" ) .define("requiresReagent", true); + RAINBOW_ANT_RIGHT_CLICK_DIMENSION = b + .comment("If false, right-clicking rainbow ants will never teleport players.") + .define("rightClickDimension", true); RAINBOW_ANT_HEALTH = b.comment("Base max health.") .defineInRange("health", 5.0D, 0.1D, 1024.0D); RAINBOW_ANT_MOVEMENT_SPEED = b.comment("Base movement speed.") .defineInRange("movementSpeed", 0.28D, 0.0D, 10.0D); RAINBOW_ANT_ATTACK_DAMAGE = b.comment("Base attack damage.") .defineInRange("attackDamage", 1.0D, 0.0D, 1024.0D); @@ -326,6 +339,9 @@ public final class AntarchyMobsConfig { "Breeding foods tag: data/antarchy/tags/item/termite_breeding_foods.json" ) .define("requiresReagent", false); + TERMITE_RIGHT_CLICK_DIMENSION = b + .comment("If false, right-clicking termites will never teleport players.") + .define("rightClickDimension", true); TERMITE_HEALTH = b.comment("Base max health.") .defineInRange("health", 5.0D, 0.1D, 1024.0D); TERMITE_MOVEMENT_SPEED = b.comment("Base movement speed.") .defineInRange("movementSpeed", 0.28D, 0.0D, 10.0D); TERMITE_ATTACK_DAMAGE = b.comment("Base attack damage.") .defineInRange("attackDamage", 1.0D, 0.0D, 1024.0D); @@ -625,24 +641,28 @@ public final class AntarchyMobsConfig { static boolean antsStealFromChests() { return ANTS_STEAL_FROM_CHESTS.get(); } static boolean brownAntRequiresReagent() { return BROWN_ANT_REQUIRES_REAGENT.get(); } + static boolean brownAntRightClickDimension() { return BROWN_ANT_RIGHT_CLICK_DIMENSION.get(); } static double brownAntHealth() { return BROWN_ANT_HEALTH.get(); } static double brownAntMovementSpeed() { return BROWN_ANT_MOVEMENT_SPEED.get(); } static double brownAntAttackDamage() { return BROWN_ANT_ATTACK_DAMAGE.get(); } static String brownAntDestinationDimension() { return BROWN_ANT_DESTINATION_DIMENSION.get(); } static boolean redAntRequiresReagent() { return RED_ANT_REQUIRES_REAGENT.get(); } + static boolean redAntRightClickDimension() { return RED_ANT_RIGHT_CLICK_DIMENSION.get(); } static double redAntHealth() { return RED_ANT_HEALTH.get(); } static double redAntMovementSpeed() { return RED_ANT_MOVEMENT_SPEED.get(); } static double redAntAttackDamage() { return RED_ANT_ATTACK_DAMAGE.get(); } static String redAntDestinationDimension() { return RED_ANT_DESTINATION_DIMENSION.get(); } static boolean rainbowAntRequiresReagent() { return RAINBOW_ANT_REQUIRES_REAGENT.get(); } + static boolean rainbowAntRightClickDimension() { return RAINBOW_ANT_RIGHT_CLICK_DIMENSION.get(); } static double rainbowAntHealth() { return RAINBOW_ANT_HEALTH.get(); } static double rainbowAntMovementSpeed() { return RAINBOW_ANT_MOVEMENT_SPEED.get(); } static double rainbowAntAttackDamage() { return RAINBOW_ANT_ATTACK_DAMAGE.get(); } static String rainbowAntNonInfinityFallbackDimension() { return RAINBOW_ANT_NON_INFINITY_FALLBACK_DIMENSION.get(); } static boolean termiteRequiresReagent() { return TERMITE_REQUIRES_REAGENT.get(); } + static boolean termiteRightClickDimension() { return TERMITE_RIGHT_CLICK_DIMENSION.get(); } static double termiteHealth() { return TERMITE_HEALTH.get(); } static double termiteMovementSpeed() { return TERMITE_MOVEMENT_SPEED.get(); } static double termiteAttackDamage() { return TERMITE_ATTACK_DAMAGE.get(); } diff --git a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeItems.java b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeItems.java index 4cb22e0c..de806192 100644 --- a/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeItems.java +++ b/forge-1.20.1/src/main/java/com/craisinlord/antarchy/forge/registry/AntarchyForgeItems.java @@ -472,7 +472,6 @@ public final class AntarchyForgeItems { .nutrition(2) .saturationMod(0.1F) .build()))); - public static final RegistryObject CARAPACE = ITEMS.registerSimpleItem("carapace", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final RegistryObject STINK_BUG = ITEMS.registerSimpleItem("stink_bug", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final RegistryObject JUMPY_BUG_LEG = ITEMS.registerSimpleItem("jumpy_bug_leg", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final RegistryObject JUMPY_BOOTS = ITEMS.register("jumpy_boots", diff --git a/gradle.properties b/gradle.properties index 9197a9ca..eeeeff6b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ org.gradle.configureondemand=true minecraft_version_1_21_1=1.21.1 modid=antarchy mod_id=antarchy -mod_version=1.0.3 +mod_version=1.0.4 maven_group=com.craisinlord mixin_version=0.15.4+mixin.0.8.7 diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java index c298e18a..7561e056 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java @@ -57,24 +57,28 @@ public final class AntarchyConfigModuleNeoforge { AntarchySettings.setAntsStealFromChests(AntarchyMobsConfig.antsStealFromChests()); AntarchySettings.setBrownAntRequiresReagent(AntarchyMobsConfig.brownAntRequiresReagent()); + AntarchySettings.setBrownAntRightClickDimension(AntarchyMobsConfig.brownAntRightClickDimension()); AntarchySettings.setBrownAntHealth(AntarchyMobsConfig.brownAntHealth()); AntarchySettings.setBrownAntMovementSpeed(AntarchyMobsConfig.brownAntMovementSpeed()); AntarchySettings.setBrownAntAttackDamage(AntarchyMobsConfig.brownAntAttackDamage()); AntarchySettings.setBrownAntDestinationDimension(AntarchyMobsConfig.brownAntDestinationDimension()); AntarchySettings.setRedAntRequiresReagent(AntarchyMobsConfig.redAntRequiresReagent()); + AntarchySettings.setRedAntRightClickDimension(AntarchyMobsConfig.redAntRightClickDimension()); AntarchySettings.setRedAntHealth(AntarchyMobsConfig.redAntHealth()); AntarchySettings.setRedAntMovementSpeed(AntarchyMobsConfig.redAntMovementSpeed()); AntarchySettings.setRedAntAttackDamage(AntarchyMobsConfig.redAntAttackDamage()); AntarchySettings.setRedAntDestinationDimension(AntarchyMobsConfig.redAntDestinationDimension()); AntarchySettings.setRainbowAntRequiresReagent(AntarchyMobsConfig.rainbowAntRequiresReagent()); + AntarchySettings.setRainbowAntRightClickDimension(AntarchyMobsConfig.rainbowAntRightClickDimension()); AntarchySettings.setRainbowAntHealth(AntarchyMobsConfig.rainbowAntHealth()); AntarchySettings.setRainbowAntMovementSpeed(AntarchyMobsConfig.rainbowAntMovementSpeed()); AntarchySettings.setRainbowAntAttackDamage(AntarchyMobsConfig.rainbowAntAttackDamage()); AntarchySettings.setRainbowAntNonInfinityFallbackDimension(AntarchyMobsConfig.rainbowAntNonInfinityFallbackDimension()); AntarchySettings.setTermiteRequiresReagent(AntarchyMobsConfig.termiteRequiresReagent()); + AntarchySettings.setTermiteRightClickDimension(AntarchyMobsConfig.termiteRightClickDimension()); AntarchySettings.setTermiteHealth(AntarchyMobsConfig.termiteHealth()); AntarchySettings.setTermiteMovementSpeed(AntarchyMobsConfig.termiteMovementSpeed()); AntarchySettings.setTermiteAttackDamage(AntarchyMobsConfig.termiteAttackDamage()); diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMobsConfig.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMobsConfig.java index f26fd9b6..2858e34e 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMobsConfig.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMobsConfig.java @@ -11,24 +11,28 @@ public final class AntarchyMobsConfig { private static final ModConfigSpec.BooleanValue ANTS_STEAL_FROM_CHESTS; private static final ModConfigSpec.BooleanValue BROWN_ANT_REQUIRES_REAGENT; + private static final ModConfigSpec.BooleanValue BROWN_ANT_RIGHT_CLICK_DIMENSION; private static final ModConfigSpec.DoubleValue BROWN_ANT_HEALTH; private static final ModConfigSpec.DoubleValue BROWN_ANT_MOVEMENT_SPEED; private static final ModConfigSpec.DoubleValue BROWN_ANT_ATTACK_DAMAGE; private static final ModConfigSpec.ConfigValue BROWN_ANT_DESTINATION_DIMENSION; private static final ModConfigSpec.BooleanValue RED_ANT_REQUIRES_REAGENT; + private static final ModConfigSpec.BooleanValue RED_ANT_RIGHT_CLICK_DIMENSION; private static final ModConfigSpec.DoubleValue RED_ANT_HEALTH; private static final ModConfigSpec.DoubleValue RED_ANT_MOVEMENT_SPEED; private static final ModConfigSpec.DoubleValue RED_ANT_ATTACK_DAMAGE; private static final ModConfigSpec.ConfigValue RED_ANT_DESTINATION_DIMENSION; private static final ModConfigSpec.BooleanValue RAINBOW_ANT_REQUIRES_REAGENT; + private static final ModConfigSpec.BooleanValue RAINBOW_ANT_RIGHT_CLICK_DIMENSION; private static final ModConfigSpec.DoubleValue RAINBOW_ANT_HEALTH; private static final ModConfigSpec.DoubleValue RAINBOW_ANT_MOVEMENT_SPEED; private static final ModConfigSpec.DoubleValue RAINBOW_ANT_ATTACK_DAMAGE; private static final ModConfigSpec.ConfigValue RAINBOW_ANT_NON_INFINITY_FALLBACK_DIMENSION; private static final ModConfigSpec.BooleanValue TERMITE_REQUIRES_REAGENT; + private static final ModConfigSpec.BooleanValue TERMITE_RIGHT_CLICK_DIMENSION; private static final ModConfigSpec.DoubleValue TERMITE_HEALTH; private static final ModConfigSpec.DoubleValue TERMITE_MOVEMENT_SPEED; private static final ModConfigSpec.DoubleValue TERMITE_ATTACK_DAMAGE; @@ -278,6 +282,9 @@ public final class AntarchyMobsConfig { "Breeding foods tag: data/antarchy/tags/item/brown_ant_breeding_foods.json" ) .define("requiresReagent", false); + BROWN_ANT_RIGHT_CLICK_DIMENSION = b + .comment("If false, right-clicking brown ants will never teleport players.") + .define("rightClickDimension", true); BROWN_ANT_HEALTH = b.comment("Base max health.") .defineInRange("health", 5.0D, 0.1D, 1024.0D); BROWN_ANT_MOVEMENT_SPEED = b.comment("Base movement speed.") .defineInRange("movementSpeed", 0.28D, 0.0D, 10.0D); BROWN_ANT_ATTACK_DAMAGE = b.comment("Base attack damage.") .defineInRange("attackDamage", 1.0D, 0.0D, 1024.0D); @@ -294,6 +301,9 @@ public final class AntarchyMobsConfig { "Breeding foods tag: data/antarchy/tags/item/red_ant_breeding_foods.json" ) .define("requiresReagent", false); + RED_ANT_RIGHT_CLICK_DIMENSION = b + .comment("If false, right-clicking red ants will never teleport players.") + .define("rightClickDimension", true); RED_ANT_HEALTH = b.comment("Base max health.") .defineInRange("health", 5.0D, 0.1D, 1024.0D); RED_ANT_MOVEMENT_SPEED = b.comment("Base movement speed.") .defineInRange("movementSpeed", 0.30D, 0.0D, 10.0D); RED_ANT_ATTACK_DAMAGE = b.comment("Base attack damage.") .defineInRange("attackDamage", 3.0D, 0.0D, 1024.0D); @@ -310,6 +320,9 @@ public final class AntarchyMobsConfig { "Breeding foods tag: data/antarchy/tags/item/rainbow_ant_breeding_foods.json" ) .define("requiresReagent", true); + RAINBOW_ANT_RIGHT_CLICK_DIMENSION = b + .comment("If false, right-clicking rainbow ants will never teleport players.") + .define("rightClickDimension", true); RAINBOW_ANT_HEALTH = b.comment("Base max health.") .defineInRange("health", 5.0D, 0.1D, 1024.0D); RAINBOW_ANT_MOVEMENT_SPEED = b.comment("Base movement speed.") .defineInRange("movementSpeed", 0.28D, 0.0D, 10.0D); RAINBOW_ANT_ATTACK_DAMAGE = b.comment("Base attack damage.") .defineInRange("attackDamage", 1.0D, 0.0D, 1024.0D); @@ -326,6 +339,9 @@ public final class AntarchyMobsConfig { "Breeding foods tag: data/antarchy/tags/item/termite_breeding_foods.json" ) .define("requiresReagent", false); + TERMITE_RIGHT_CLICK_DIMENSION = b + .comment("If false, right-clicking termites will never teleport players.") + .define("rightClickDimension", true); TERMITE_HEALTH = b.comment("Base max health.") .defineInRange("health", 5.0D, 0.1D, 1024.0D); TERMITE_MOVEMENT_SPEED = b.comment("Base movement speed.") .defineInRange("movementSpeed", 0.28D, 0.0D, 10.0D); TERMITE_ATTACK_DAMAGE = b.comment("Base attack damage.") .defineInRange("attackDamage", 1.0D, 0.0D, 1024.0D); @@ -625,24 +641,28 @@ public final class AntarchyMobsConfig { static boolean antsStealFromChests() { return ANTS_STEAL_FROM_CHESTS.get(); } static boolean brownAntRequiresReagent() { return BROWN_ANT_REQUIRES_REAGENT.get(); } + static boolean brownAntRightClickDimension() { return BROWN_ANT_RIGHT_CLICK_DIMENSION.get(); } static double brownAntHealth() { return BROWN_ANT_HEALTH.get(); } static double brownAntMovementSpeed() { return BROWN_ANT_MOVEMENT_SPEED.get(); } static double brownAntAttackDamage() { return BROWN_ANT_ATTACK_DAMAGE.get(); } static String brownAntDestinationDimension() { return BROWN_ANT_DESTINATION_DIMENSION.get(); } static boolean redAntRequiresReagent() { return RED_ANT_REQUIRES_REAGENT.get(); } + static boolean redAntRightClickDimension() { return RED_ANT_RIGHT_CLICK_DIMENSION.get(); } static double redAntHealth() { return RED_ANT_HEALTH.get(); } static double redAntMovementSpeed() { return RED_ANT_MOVEMENT_SPEED.get(); } static double redAntAttackDamage() { return RED_ANT_ATTACK_DAMAGE.get(); } static String redAntDestinationDimension() { return RED_ANT_DESTINATION_DIMENSION.get(); } static boolean rainbowAntRequiresReagent() { return RAINBOW_ANT_REQUIRES_REAGENT.get(); } + static boolean rainbowAntRightClickDimension() { return RAINBOW_ANT_RIGHT_CLICK_DIMENSION.get(); } static double rainbowAntHealth() { return RAINBOW_ANT_HEALTH.get(); } static double rainbowAntMovementSpeed() { return RAINBOW_ANT_MOVEMENT_SPEED.get(); } static double rainbowAntAttackDamage() { return RAINBOW_ANT_ATTACK_DAMAGE.get(); } static String rainbowAntNonInfinityFallbackDimension() { return RAINBOW_ANT_NON_INFINITY_FALLBACK_DIMENSION.get(); } static boolean termiteRequiresReagent() { return TERMITE_REQUIRES_REAGENT.get(); } + static boolean termiteRightClickDimension() { return TERMITE_RIGHT_CLICK_DIMENSION.get(); } static double termiteHealth() { return TERMITE_HEALTH.get(); } static double termiteMovementSpeed() { return TERMITE_MOVEMENT_SPEED.get(); } static double termiteAttackDamage() { return TERMITE_ATTACK_DAMAGE.get(); } diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java index 1933b975..5aaaa82b 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java @@ -9,6 +9,7 @@ import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.item.BloodCrystalKatanaItem; import com.craisinlord.antarchy.content.item.ScorpionWhipTetherSync; import com.craisinlord.antarchy.content.network.BloodCrystalKatanaTrailPayload; +import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageSync; import com.craisinlord.antarchy.content.portal.PermanentPortalType; import com.craisinlord.antarchy.neoforge.registry.*; import com.craisinlord.antarchy.neoforge.network.AntarchyGravityNetworking; @@ -200,6 +201,11 @@ public class AntarchyNeoforge { player, new BloodCrystalKatanaTrailPayload(player.getId(), durationTicks) )); + TigerEyeCamouflageSync.setSendToPlayer(PacketDistributor::sendToPlayer); + TigerEyeCamouflageSync.setSyncSelfAndTracking(player -> PacketDistributor.sendToPlayersTrackingEntityAndSelf( + player, + TigerEyeCamouflageSync.payload(player) + )); com.craisinlord.antarchy.content.gravity.AntarchyGravityApi.setSyncDispatcher(AntarchyGravityNetworking::syncEntity); if (isSupportedInfinityLoaded()) { InfinityCompat.bind(new NeoForgeInfinityCompat()); @@ -242,6 +248,8 @@ public class AntarchyNeoforge { private static void bindCommonObjects() { com.craisinlord.antarchy.content.entity.UpwardFallingBlockEntity.TYPE = AntarchyNeoforgeEntites.UPWARD_FALLING_BLOCK; + AntarchyObjects.setLucidAnchor(() -> AntarchyNeoforgeBlocks.LUCID_ANCHOR.get()); + AntarchyObjects.setLucidAnchorBlockEntity(() -> AntarchyNeoforgeBlocks.LUCID_ANCHOR_BLOCK_ENTITY.get()); PermanentPortalType.bindBlocks( () -> AntarchyNeoforgeBlocks.MOSSY_OURANWOOD_WOOD.get(), () -> AntarchyNeoforgeBlocks.ELYTHIA_PORTAL.get(), @@ -303,8 +311,8 @@ public class AntarchyNeoforge { () -> AntarchyNeoforgeBlocks.TRIFFID_GOO_BLOCK.get(), () -> AntarchyNeoforgeBlocks.PALE_NYXITE.get(), () -> AntarchyNeoforgeBlocks.NYXITE_SPIKE.get(), - () -> AntarchyNeoforgeBlocks.CHITEN_BLOCK.get(), - () -> AntarchyNeoforgeBlocks.CHITEN_SPIKE.get(), + () -> AntarchyNeoforgeBlocks.CHITIN_BLOCK.get(), + () -> AntarchyNeoforgeBlocks.CHITIN_SPIKE.get(), () -> AntarchyNeoforgeBlocks.POTENT_NYXITE.get(), () -> AntarchyNeoforgeBlocks.ANTIMETAL.get(), () -> AntarchyNeoforgeBlocks.POLISHED_ANTIMETAL.get(), @@ -354,6 +362,8 @@ public class AntarchyNeoforge { ); AntarchyObjects.setOctopusBomb(AntarchyNeoforgeEntites.OCTOPUS_BOMB); AntarchyObjects.setTentacle(AntarchyNeoforgeEntites.TENTACLE); + AntarchyObjects.setNightmarePortal(AntarchyNeoforgeEntites.NIGHTMARE_PORTAL); + AntarchyObjects.setNightmareBite(AntarchyNeoforgeEntites.NIGHTMARE_BITE); AntarchyObjects.setKrakensGraspTrident(AntarchyNeoforgeEntites.KRAKENS_GRASP_TRIDENT); AntarchyObjects.setLotus(() -> AntarchyNeoforgeBlocks.LOTUS.get()); AntarchyObjects.setKrakenTentacle(() -> AntarchyNeoforgeItems.KRAKEN_TENTACLE.get()); @@ -361,6 +371,7 @@ public class AntarchyNeoforge { AntarchyObjects.setOuranwoodDeer(AntarchyNeoforgeEntites.OURANWOOD_DEER); AntarchyObjects.setGlimmer(AntarchyNeoforgeEntites.GLIMMER); AntarchyObjects.setSpiritApple(() -> AntarchyNeoforgeItems.SPIRIT_APPLE.get()); + AntarchyObjects.setGlimmeringEffect(() -> AntarchyNeoforgeMisc.GLIMMERING); AntarchyObjects.setElka(AntarchyNeoforgeEntites.ELKA); AntarchyObjects.setPeach(() -> AntarchyNeoforgeItems.PEACH.get()); AntarchyObjects.setCorn(() -> AntarchyNeoforgeItems.CORN.get()); diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyKeyBindings.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyKeyBindings.java index c7cbacec..9434785e 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyKeyBindings.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyKeyBindings.java @@ -44,6 +44,13 @@ public final class AntarchyKeyBindings { InputConstants.KEY_R, CATEGORY ); + public static final KeyMapping TIGERS_EYE_CAMOUFLAGE = new KeyMapping( + "key.antarchy.tigers_eye_camouflage", + KeyConflictContext.IN_GAME, + InputConstants.Type.KEYSYM, + InputConstants.UNKNOWN.getValue(), + CATEGORY + ); private AntarchyKeyBindings() {} @@ -53,9 +60,14 @@ public final class AntarchyKeyBindings { event.register(DORRIE_CHARGE_JUMP); event.register(HERCULES_BEETLE_CHARGE); event.register(HERCULES_BEETLE_FLIGHT_TOGGLE); + event.register(TIGERS_EYE_CAMOUFLAGE); } public static boolean isHerculesBeetleFlightTogglePressed() { return HERCULES_BEETLE_FLIGHT_TOGGLE.isDown(); } + + public static boolean consumeTigerEyeCamouflagePressed() { + return TIGERS_EYE_CAMOUFLAGE.consumeClick(); + } } diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java index 9903ee49..6f5b95c6 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java @@ -3,6 +3,7 @@ package com.craisinlord.antarchy.neoforge.client; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.client.GoopedHudRenderer; import com.craisinlord.antarchy.content.client.HordeHudRenderer; +import com.craisinlord.antarchy.content.client.TigerEyeClientHooks; import com.craisinlord.antarchy.content.client.hud.BloodglassHudRenderer; import com.craisinlord.antarchy.content.client.particle.*; import com.craisinlord.antarchy.content.client.renderer.*; @@ -57,6 +58,7 @@ import net.neoforged.neoforge.client.event.RegisterParticleProvidersEvent; import net.neoforged.neoforge.client.event.RegisterColorHandlersEvent; import net.neoforged.neoforge.client.event.RegisterMenuScreensEvent; import net.neoforged.neoforge.client.event.EntityRenderersEvent; +import net.neoforged.neoforge.client.event.RegisterClientReloadListenersEvent; import net.neoforged.neoforge.client.event.RegisterGuiLayersEvent; import net.neoforged.neoforge.client.gui.VanillaGuiLayers; import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions; @@ -89,6 +91,7 @@ public final class AntarchyNeoForgeClient { public static void registerRenderers(EntityRenderersEvent.RegisterRenderers event) { event.registerBlockEntityRenderer(AntarchyNeoforgeBlocks.DREAM_CAMPFIRE_BLOCK_ENTITY.get(), CampfireRenderer::new); event.registerBlockEntityRenderer(AntarchyNeoforgeBlocks.SEASHELL_BLOCK_ENTITY.get(), SeashellRenderer::new); + event.registerBlockEntityRenderer(AntarchyNeoforgeBlocks.LUCID_ANCHOR_BLOCK_ENTITY.get(), LucidAnchorBlockEntityRenderer::new); event.registerBlockEntityRenderer(AntarchyNeoforgeBlocks.CRITTER_CAGE_BLOCK_ENTITY.get(), CritterCageRenderer::new); event.registerEntityRenderer(AntarchyNeoforgeEntites.EASTER_BUNNY.get(), context -> withParalyzedGeoLayer(new EasterBunnyRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.FLYING_SQUIRREL.get(), context -> withParalyzedGeoLayer(new FlyingSquirrelRenderer(context))); @@ -120,6 +123,8 @@ public final class AntarchyNeoForgeClient { event.registerEntityRenderer(AntarchyNeoforgeEntites.MISSILE_SQUID.get(), context -> withParalyzedGeoLayer(new MissileSquidRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.OCTOPUS_BOMB.get(), context -> withParalyzedGeoLayer(new OctopusBombRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.NIGHTMARE.get(), context -> withParalyzedGeoLayer(new NightmareRenderer(context))); + event.registerEntityRenderer(AntarchyNeoforgeEntites.NIGHTMARE_PORTAL.get(), NightmarePortalRenderer::new); + event.registerEntityRenderer(AntarchyNeoforgeEntites.NIGHTMARE_BITE.get(), NightmareBiteRenderer::new); event.registerEntityRenderer(AntarchyNeoforgeEntites.LUCID.get(), context -> withParalyzedGeoLayer(new LucidRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.BED_BUG.get(), context -> withParalyzedGeoLayer(new BedBugRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.WASP.get(), context -> withParalyzedGeoLayer(new WaspRenderer(context))); @@ -162,7 +167,9 @@ public final class AntarchyNeoForgeClient { (LivingEntityRenderer>) event.getSkin(skin); if (renderer != null) { renderer.addLayer(new ParalyzedStonePlayerLayer(renderer)); + renderer.addLayer(new TigerEyeCamouflagePlayerLayer(renderer)); renderer.addLayer(new GoopedLivingLayer(renderer)); + renderer.addLayer(new GlimmeringLivingLayer(renderer)); renderer.addLayer(new BrutalflyElytraLayer(renderer)); renderer.addLayer(new FallenKingCrownLayer(renderer)); } @@ -200,6 +207,7 @@ public final class AntarchyNeoForgeClient { } ((LivingEntityRenderer) livingRenderer).addLayer(new ParalyzedStoneLivingLayer<>(livingRenderer)); ((LivingEntityRenderer) livingRenderer).addLayer(new GoopedLivingLayer<>(livingRenderer)); + ((LivingEntityRenderer) livingRenderer).addLayer(new GlimmeringLivingLayer<>(livingRenderer)); } private static GeoEntityRenderer withParalyzedGeoLayer(GeoEntityRenderer renderer) { @@ -313,6 +321,10 @@ public final class AntarchyNeoForgeClient { ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "gooped_tint"), (guiGraphics, partialTick) -> GoopedHudRenderer.render(guiGraphics) ); + event.registerAboveAll( + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "glimmering_tint"), + (guiGraphics, partialTick) -> com.craisinlord.antarchy.content.client.GlimmeringHudRenderer.render(guiGraphics) + ); event.registerAboveAll( ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "brutalfly_elytra"), (guiGraphics, partialTick) -> BrutalflyElytraHudRenderer.render(guiGraphics) @@ -540,6 +552,7 @@ public final class AntarchyNeoForgeClient { @SubscribeEvent public static void onClientSetup(FMLClientSetupEvent event) { event.enqueueWork(() -> { + TigerEyeClientHooks.setCamouflageKeyTextSupplier(() -> AntarchyKeyBindings.TIGERS_EYE_CAMOUFLAGE.getTranslatedKeyMessage()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ANTIMETAL_RAIL.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ANTIMETAL_POWERED_RAIL.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ANTIMETAL_DETECTOR_RAIL.get(), RenderType.cutout()); @@ -559,6 +572,7 @@ public final class AntarchyNeoForgeClient { ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ORANGE_MILKWEED.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.PINK_MILKWEED.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.AMBER_LICHEN.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.MUCUS.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.CREEPVINE.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.CAMELLIA.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.SPIDER_LILY.get(), RenderType.cutout()); @@ -574,7 +588,7 @@ public final class AntarchyNeoForgeClient { ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ANTIMETAL_SCAFFOLDING.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.UMBRAL_MOSS_CARPET.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.NYXITE_SPIKE.get(), RenderType.cutout()); - ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.CHITEN_SPIKE.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.CHITIN_SPIKE.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.STAR_CORAL.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.STAR_CORAL_FAN.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.STAR_CORAL_WALL_FAN.get(), RenderType.cutout()); @@ -598,6 +612,7 @@ public final class AntarchyNeoForgeClient { ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.DREAM_CEILING_FIRE.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ANTIWATER_BLOCK.get(), RenderType.translucent()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.LUMEN_BLOCK.get(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.LUCID_ANCHOR.get(), RenderType.translucent()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ELYTHIA_PORTAL.get(), RenderType.translucent()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.THORAXIS_PORTAL.get(), RenderType.translucent()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.TRIFFID_GOO_BLOCK.get(), RenderType.translucent()); @@ -621,6 +636,21 @@ public final class AntarchyNeoForgeClient { }); } + @SubscribeEvent + public static void registerClientReloadListeners(RegisterClientReloadListenersEvent event) { + event.registerReloadListener(new net.minecraft.server.packs.resources.SimplePreparableReloadListener() { + @Override + protected Void prepare(net.minecraft.server.packs.resources.ResourceManager resourceManager, net.minecraft.util.profiling.ProfilerFiller profiler) { + return null; + } + + @Override + protected void apply(Void object, net.minecraft.server.packs.resources.ResourceManager resourceManager, net.minecraft.util.profiling.ProfilerFiller profiler) { + TigerEyeCamouflageClientHandler.clearClientCaches(); + } + }); + } + private static void registerUltimateBowProperties() { ItemProperties.register( AntarchyNeoforgeItems.ULTIMATE_BOW.get(), diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/TigerEyeCamouflageClientHandler.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/TigerEyeCamouflageClientHandler.java new file mode 100644 index 00000000..85f9cde4 --- /dev/null +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/TigerEyeCamouflageClientHandler.java @@ -0,0 +1,36 @@ +package com.craisinlord.antarchy.neoforge.client; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.client.TigerEyeCamouflageClientState; +import com.craisinlord.antarchy.content.client.renderer.TigerEyeCamouflageTextureResolver; +import com.craisinlord.antarchy.content.network.ToggleTigerEyeCamouflagePayload; +import net.minecraft.client.Minecraft; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.client.event.ClientTickEvent; +import net.neoforged.neoforge.network.PacketDistributor; + +@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) +public final class TigerEyeCamouflageClientHandler { + private TigerEyeCamouflageClientHandler() { + } + + @SubscribeEvent + public static void onClientTick(ClientTickEvent.Post event) { + Minecraft minecraft = Minecraft.getInstance(); + if (minecraft.player == null || minecraft.level == null) { + TigerEyeCamouflageClientState.clear(); + return; + } + + while (AntarchyKeyBindings.consumeTigerEyeCamouflagePressed()) { + PacketDistributor.sendToServer(new ToggleTigerEyeCamouflagePayload()); + } + } + + public static void clearClientCaches() { + TigerEyeCamouflageClientState.clear(); + TigerEyeCamouflageTextureResolver.clearCache(); + } +} diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java index a0f78608..8b32c559 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java @@ -26,6 +26,8 @@ import com.craisinlord.antarchy.content.item.ultimate.UltimateGearHelper; import com.craisinlord.antarchy.content.movement.DreamSandLowGravityAccess; import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.portal.PermanentPortalManager; +import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageController; +import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageSync; import com.craisinlord.antarchy.neoforge.AntarchyNeoForgeFluidTypes; import com.craisinlord.antarchy.neoforge.entity.multipart.MultipartPartEntity; import com.craisinlord.antarchy.neoforge.network.AntarchyGravityNetworking; @@ -133,6 +135,12 @@ public final class AntarchyNeoForgeEvents { NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleDreadBedSleep); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleStartTracking); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleDreamSandLogout); + NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleTigerEyeLogout); + NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleTigerEyeDeath); + NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleTigerEyeRespawn); + NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleTigerEyeLogin); + NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleTigerEyeDimensionChange); + NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::tickTigerEyeCamouflage); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::registerReloadListeners); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::onVillagerTrades); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::onWandererTrades); @@ -272,6 +280,48 @@ public final class AntarchyNeoForgeEvents { } AntarchyGravityNetworking.syncEntity(event.getTarget()); + if (event.getTarget() instanceof ServerPlayer trackedPlayer && event.getEntity() instanceof ServerPlayer trackingPlayer) { + TigerEyeCamouflageSync.syncTo(trackingPlayer, trackedPlayer); + } + } + + static void handleTigerEyeLogout(PlayerEvent.PlayerLoggedOutEvent event) { + if (event.getEntity() instanceof ServerPlayer player) { + TigerEyeCamouflageController.deactivate(player, false); + } + } + + static void handleTigerEyeDeath(LivingDeathEvent event) { + if (event.getEntity() instanceof ServerPlayer player) { + TigerEyeCamouflageController.deactivate(player, false); + TigerEyeCamouflageSync.sync(player); + } + } + + static void handleTigerEyeRespawn(PlayerEvent.PlayerRespawnEvent event) { + if (event.getEntity() instanceof ServerPlayer player) { + TigerEyeCamouflageController.deactivate(player, false); + TigerEyeCamouflageSync.sync(player); + } + } + + static void handleTigerEyeLogin(PlayerEvent.PlayerLoggedInEvent event) { + if (event.getEntity() instanceof ServerPlayer player) { + TigerEyeCamouflageSync.sync(player); + } + } + + static void handleTigerEyeDimensionChange(PlayerEvent.PlayerChangedDimensionEvent event) { + if (event.getEntity() instanceof ServerPlayer player) { + TigerEyeCamouflageController.deactivate(player, false); + TigerEyeCamouflageSync.sync(player); + } + } + + static void tickTigerEyeCamouflage(PlayerTickEvent.Post event) { + if (event.getEntity() instanceof ServerPlayer player && TigerEyeCamouflageController.validateOrDeactivate(player)) { + TigerEyeCamouflageSync.sync(player); + } } private static final String DREAD_BED_BUG_NEXT_SPAWN_KEY = Antarchy.MODID + ":dread_bed_bug_next_spawn"; @@ -430,8 +480,7 @@ public final class AntarchyNeoForgeEvents { for (int y = minY; y <= maxY; y++) { for (int z = minZ; z <= maxZ; z++) { net.minecraft.core.BlockPos crystalPos = new net.minecraft.core.BlockPos(x, y + 1, z); - if (entity.level().getBlockState(crystalPos).is(AntarchyNeoforgeBlocks.ANTIMETAL.get()) - || entity.level().getBlockState(crystalPos).is(AntarchyNeoforgeBlocks.POLISHED_ANTIMETAL.get())) { + if (entity.level().getBlockState(crystalPos).is(com.craisinlord.antarchy.content.AntarchyTags.Blocks.ANTIMETAL_INVERSION_BLOCKS)) { return true; } } diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java index 80b94d74..8478c652 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java @@ -8,8 +8,10 @@ import com.craisinlord.antarchy.content.block.entity.AntNestBlockEntity; import com.craisinlord.antarchy.content.block.entity.CritterCageBlockEntity; import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; +import com.craisinlord.antarchy.content.block.entity.LucidAnchorBlockEntity; import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity; import com.craisinlord.antarchy.content.block.entity.SeashellBlockEntity; +import com.craisinlord.antarchy.content.block.entity.UpperBlockEntity; import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; import com.craisinlord.antarchy.content.fluid.BileLiquidBlock; import com.craisinlord.antarchy.content.fluid.LumenLiquidBlock; @@ -97,6 +99,8 @@ public final class AntarchyNeoforgeBlocks { () -> new FlowerPotBlock(LOTUS.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.POTTED_DANDELION))); public static final DeferredBlock SEASHELL = BLOCKS.register("seashell", () -> new SeashellBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.TURTLE_EGG).noOcclusion())); + public static final DeferredBlock LUCID_ANCHOR = BLOCKS.register("lucid_anchor", + () -> new LucidAnchorBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BEACON).strength(3.0F))); public static final DeferredBlock CRITTER_CAGE_BLOCK = BLOCKS.register("critter_cage_block", () -> new CritterCageBlock(BlockBehaviour.Properties.of().strength(5.0F, 6.0F).sound(net.minecraft.world.level.block.SoundType.METAL).noOcclusion())); public static final DeferredBlock OURANWOOD_SIGN = BLOCKS.register("ouranwood_sign", @@ -191,6 +195,8 @@ public final class AntarchyNeoforgeBlocks { () -> new SlabBlock(nyxiteProperties())); public static final DeferredBlock NYXITE_BRICK_WALL = BLOCKS.register("nyxite_brick_wall", () -> new WallBlock(nyxiteProperties())); + public static final DeferredBlock NYXITE_PILLAR = BLOCKS.register("nyxite_pillar", + () -> new RotatedPillarBlock(nyxiteProperties())); public static final DeferredBlock SHELLSTONE = BLOCKS.register("shellstone", () -> new Block(AntarchyObjects.shellstoneProperties())); public static final DeferredBlock POLISHED_SHELLSTONE = BLOCKS.register("polished_shellstone", @@ -227,6 +233,8 @@ public final class AntarchyNeoforgeBlocks { () -> new SlabBlock(AntarchyObjects.shellstoneProperties())); public static final DeferredBlock SHELLSTONE_BRICK_WALL = BLOCKS.register("shellstone_brick_wall", () -> new WallBlock(AntarchyObjects.shellstoneProperties())); + public static final DeferredBlock SHELLSTONE_PILLAR = BLOCKS.register("shellstone_pillar", + () -> new RotatedPillarBlock(AntarchyObjects.shellstoneProperties())); public static final DeferredBlock TRIFFID_GOO_BLOCK = BLOCKS.register("triffid_goo_block", () -> new com.craisinlord.antarchy.content.block.TriffidGooBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SLIME_BLOCK).noOcclusion().isViewBlocking((s, l, p) -> false).isSuffocating((s, l, p) -> false))); public static final DeferredBlock CLOUD_BLOCK = BLOCKS.register("cloud_block", @@ -244,8 +252,8 @@ public final class AntarchyNeoforgeBlocks { () -> new Block(nyxiteProperties())); public static final DeferredBlock NYXITE_SPIKE = BLOCKS.register("nyxite_spike", () -> new NyxiteSpikeBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POINTED_DRIPSTONE))); - public static final DeferredBlock CHITEN_SPIKE = BLOCKS.register("chiten_spike", - () -> new ChitenSpikeBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POINTED_DRIPSTONE))); + public static final DeferredBlock CHITIN_SPIKE = BLOCKS.register("chitin_spike", + () -> new ChitinSpikeBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POINTED_DRIPSTONE))); public static final DeferredBlock POTENT_NYXITE = BLOCKS.register("potent_nyxite", () -> new PotentNyxiteBlock( AntarchyNeoforgeItems::potentNyxiteBlockEntityType, @@ -289,11 +297,13 @@ public final class AntarchyNeoforgeBlocks { () -> new SlabBlock(broodstoneProperties())); public static final DeferredBlock BROODSTONE_BRICK_WALL = BLOCKS.register("broodstone_brick_wall", () -> new WallBlock(broodstoneProperties())); + public static final DeferredBlock BROODSTONE_PILLAR = BLOCKS.register("broodstone_pillar", + () -> new RotatedPillarBlock(broodstoneProperties())); public static final DeferredBlock BROODSTONE_URANIUM_ORE = BLOCKS.register("broodstone_uranium_ore", () -> createOre(Blocks.DEEPSLATE_EMERALD_ORE, 4, 8, MapColor.COLOR_YELLOW)); public static final DeferredBlock BROODSTONE_TITANIUM_ORE = BLOCKS.register("broodstone_titanium_ore", () -> createOre(Blocks.DEEPSLATE_DIAMOND_ORE, 4, 8, MapColor.COLOR_LIGHT_BLUE)); - public static final DeferredBlock CHITEN_BLOCK = BLOCKS.register("chiten_block", + public static final DeferredBlock CHITIN_BLOCK = BLOCKS.register("chitin_block", () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BONE_BLOCK).requiresCorrectToolForDrops())); public static final DeferredBlock UMBRAL_MOSS_BLOCK = BLOCKS.register("umbral_moss_block", () -> new UmbralMossBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_BLOCK))); @@ -408,6 +418,8 @@ public final class AntarchyNeoforgeBlocks { () -> new BluestoneComparatorBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.COMPARATOR).mapColor(MapColor.COLOR_BLUE).noCollission(), AntarchyNeoforgeBlocks::bluestoneComparatorBlockEntityType)); public static final DeferredBlock BLUESTONE_TORCH = BLOCKS.register("bluestone_torch", () -> new BluestoneTorchBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.REDSTONE_TORCH).mapColor(MapColor.COLOR_BLUE).lightLevel(state -> state.getValue(BluestoneTorchBlock.LIT) ? 7 : 0).noCollission().instabreak())); + public static final DeferredBlock BLUESTONE_LAMP = BLOCKS.register("bluestone_lamp", + () -> new BluestoneLampBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.REDSTONE_LAMP).mapColor(MapColor.COLOR_BLUE))); public static final DeferredBlock URANIUM_BLOCK = BLOCKS.register("uranium_block", () -> createStorageBlock(Blocks.EMERALD_BLOCK, MapColor.COLOR_YELLOW)); public static final DeferredBlock TITANIUM_BLOCK = BLOCKS.register("titanium_block", @@ -452,10 +464,20 @@ public final class AntarchyNeoforgeBlocks { () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BASALT))); public static final DeferredBlock POLISHED_ANTIMETAL = BLOCKS.register("polished_antimetal", () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POLISHED_BASALT))); + public static final DeferredBlock ANTIMETAL_STAIRS = BLOCKS.register("antimetal_stairs", + () -> new StairBlock(ANTIMETAL.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.BASALT))); + public static final DeferredBlock ANTIMETAL_SLAB = BLOCKS.register("antimetal_slab", + () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BASALT))); + public static final DeferredBlock POLISHED_ANTIMETAL_STAIRS = BLOCKS.register("polished_antimetal_stairs", + () -> new StairBlock(POLISHED_ANTIMETAL.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.POLISHED_BASALT))); + public static final DeferredBlock POLISHED_ANTIMETAL_SLAB = BLOCKS.register("polished_antimetal_slab", + () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POLISHED_BASALT))); public static final DeferredBlock ANTIMETAL_SCAFFOLDING = BLOCKS.register("antimetal_scaffolding", () -> new com.craisinlord.antarchy.content.block.AntimetalScaffoldingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SCAFFOLDING))); public static final DeferredBlock ANTIMETAL_RAIL = BLOCKS.register("antimetal_rail", () -> new com.craisinlord.antarchy.content.block.AntimetalRailBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.RAIL))); + public static final DeferredBlock UPPER = BLOCKS.register("upper", + () -> new UpperBlock(AntarchyNeoforgeBlocks::upperBlockEntityType, BlockBehaviour.Properties.ofFullCopy(Blocks.HOPPER))); public static final DeferredBlock ANTIMETAL_POWERED_RAIL = BLOCKS.register("antimetal_powered_rail", () -> new com.craisinlord.antarchy.content.block.AntimetalPoweredRailBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POWERED_RAIL))); public static final DeferredBlock ANTIMETAL_DETECTOR_RAIL = BLOCKS.register("antimetal_detector_rail", @@ -501,6 +523,12 @@ public final class AntarchyNeoforgeBlocks { () -> new AmethystClusterBlock(7.0F, 3.0F, BlockBehaviour.Properties.ofFullCopy(Blocks.AMETHYST_CLUSTER))); public static final DeferredBlock DREAM_SAND = BLOCKS.register("dream_sand", () -> new DreamSandBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SAND))); + public static final DeferredBlock ANTIGRAVEL = BLOCKS.register("antigravel", + () -> new AntigravelBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.GRAVEL))); + public static final DeferredBlock LOAM = BLOCKS.register("loam", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.MUD))); + public static final DeferredBlock MUCUS = BLOCKS.register("mucus", + () -> new MucusBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.GLOW_LICHEN).friction(0.98F).lightLevel(state -> 0).sound(SoundType.SLIME_BLOCK))); public static final DeferredBlock DREAM_SANDSTONE = BLOCKS.register("dream_sandstone", () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.SANDSTONE))); public static final DeferredBlock CHISELED_DREAM_SANDSTONE = BLOCKS.register("chiseled_dream_sandstone", @@ -572,6 +600,11 @@ public final class AntarchyNeoforgeBlocks { SeashellBlockEntity::new, SEASHELL.get() ).build(null)); + public static final DeferredHolder, BlockEntityType> LUCID_ANCHOR_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("lucid_anchor", + () -> BlockEntityType.Builder.of( + LucidAnchorBlockEntity::new, + LUCID_ANCHOR.get() + ).build(null)); public static final DeferredHolder, BlockEntityType> CRITTER_CAGE_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("critter_cage_block", () -> BlockEntityType.Builder.of( CritterCageBlockEntity::new, @@ -582,6 +615,11 @@ public final class AntarchyNeoforgeBlocks { (pos, state) -> new com.craisinlord.antarchy.content.block.entity.BluestoneComparatorBlockEntity(pos, state, AntarchyNeoforgeBlocks::bluestoneComparatorBlockEntityType), BLUESTONE_COMPARATOR.get() ).build(null)); + public static final DeferredHolder, BlockEntityType> UPPER_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("upper", + () -> BlockEntityType.Builder.of( + (pos, state) -> new UpperBlockEntity(pos, state, AntarchyNeoforgeBlocks::upperBlockEntityType), + UPPER.get() + ).build(null)); private AntarchyNeoforgeBlocks() {} @@ -645,6 +683,10 @@ public final class AntarchyNeoforgeBlocks { return BLUESTONE_COMPARATOR_BLOCK_ENTITY.get(); } + private static BlockEntityType upperBlockEntityType() { + return UPPER_BLOCK_ENTITY.get(); + } + private static final class SimpleHorizontalFacingBlock extends HorizontalDirectionalBlock { private static final MapCodec CODEC = simpleCodec(SimpleHorizontalFacingBlock::new); diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java index 0743d3d0..a5ed3cfa 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java @@ -1,6 +1,5 @@ package com.craisinlord.antarchy.neoforge.registry; -import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.creative.CreativeTabContents; import net.minecraft.core.registries.Registries; import net.minecraft.world.item.*; @@ -10,9 +9,11 @@ import net.neoforged.neoforge.registries.DeferredHolder; import net.neoforged.neoforge.registries.DeferredRegister; public class AntarchyNeoforgeCreativeModeTabs { + private static final String MODID = "antarchy"; + private AntarchyNeoforgeCreativeModeTabs() {} - private static final DeferredRegister CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, Antarchy.MODID); + private static final DeferredRegister CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, MODID); public static void register(IEventBus modEventBus) { CREATIVE_MODE_TABS.register(modEventBus); diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java index 612f9cce..3d5cc50a 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java @@ -57,6 +57,8 @@ import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity; import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; +import com.craisinlord.antarchy.content.entity.nightmare.NightmarePortalEntity; +import com.craisinlord.antarchy.content.entity.nightmare.NightmareBiteEntity; import com.craisinlord.antarchy.content.entity.CheepEntity; import com.craisinlord.antarchy.content.entity.CreepingHorrorEntity; import com.craisinlord.antarchy.content.entity.DorrieEntity; @@ -266,6 +268,18 @@ public final class AntarchyNeoforgeEntites { .sized(3.2F, 3.8F) .clientTrackingRange(12) .build("nightmare")); + public static final DeferredHolder, EntityType> NIGHTMARE_PORTAL = ENTITY_TYPES.register("nightmare_portal", + () -> EntityType.Builder.of(NightmarePortalEntity::new, MobCategory.MISC) + .sized(2.5F, 3.0F) + .clientTrackingRange(10) + .updateInterval(1) + .build("nightmare_portal")); + public static final DeferredHolder, EntityType> NIGHTMARE_BITE = ENTITY_TYPES.register("nightmare_bite", + () -> EntityType.Builder.of(NightmareBiteEntity::new, MobCategory.MISC) + .sized(2.5F, 2.0F) + .clientTrackingRange(10) + .updateInterval(1) + .build("nightmare_bite")); public static final DeferredHolder, EntityType> LUCID = ENTITY_TYPES.register("lucid", () -> EntityType.Builder.of(LucidEntity::new, MobCategory.MONSTER) .sized(2.0F, 2.0F) diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java index c92f23bb..cae42298 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java @@ -105,6 +105,16 @@ public final class AntarchyNeoforgeItems { 0.0F, 0.0F )); + private static final DeferredHolder TIGERS_EYE_ARMOR_MATERIAL = ARMOR_MATERIALS.register("tigers_eye", + () -> new ArmorMaterial( + createDiamondArmorDefense(), + 18, + SoundEvents.ARMOR_EQUIP_GOLD, + () -> Ingredient.of(BuiltInRegistries.ITEM.getOptional(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "tigers_eye")).orElse(Items.AIR)), + List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "tigers_eye"))), + 2.0F, + 0.0F + )); private static final DeferredHolder MOGGLES_ARMOR_MATERIAL = ARMOR_MATERIALS.register("moggles", () -> new ArmorMaterial( createMogglesArmorDefense(), @@ -189,6 +199,8 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem GIANT_LILY_PAD_ITEM = ITEMS.register("giant_lily_pad", () -> new com.craisinlord.antarchy.content.item.GiantLilyPadItem(AntarchyNeoforgeBlocks.GIANT_LILY_PAD.get(), new Item.Properties())); public static final DeferredItem SEASHELL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SEASHELL); + public static final DeferredItem LUCID_ANCHOR_ITEM = ITEMS.register("lucid_anchor", + () -> new LucidAnchorBlockItem(AntarchyNeoforgeBlocks.LUCID_ANCHOR.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); public static final DeferredItem LOTUS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.LOTUS); public static final DeferredItem OURANWOOD_SIGN_ITEM = ITEMS.register("ouranwood_sign", () -> new net.minecraft.world.item.SignItem(new Item.Properties().stacksTo(16), AntarchyNeoforgeBlocks.OURANWOOD_SIGN.get(), AntarchyNeoforgeBlocks.OURANWOOD_WALL_SIGN.get())); @@ -233,6 +245,7 @@ public final class AntarchyNeoforgeItems { () -> new CeilingPlacementTooltipBlockItem(AntarchyNeoforgeBlocks.BLUESTONE_COMPARATOR.get(), new Item.Properties())); public static final DeferredItem BLUESTONE_TORCH_ITEM = ITEMS.register("bluestone_torch", () -> new CeilingPlacementTooltipBlockItem(AntarchyNeoforgeBlocks.BLUESTONE_TORCH.get(), new Item.Properties())); + public static final DeferredItem BLUESTONE_LAMP_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BLUESTONE_LAMP); public static final DeferredItem URANIUM_BLOCK_ITEM = ITEMS.register("uranium_block", () -> new net.minecraft.world.item.BlockItem(AntarchyNeoforgeBlocks.URANIUM_BLOCK.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); public static final DeferredItem TITANIUM_BLOCK_ITEM = ITEMS.register("titanium_block", @@ -277,6 +290,14 @@ public final class AntarchyNeoforgeItems { () -> new AntimetalBlockItem(AntarchyNeoforgeBlocks.ANTIMETAL.get(), new Item.Properties())); public static final DeferredItem POLISHED_ANTIMETAL_ITEM = ITEMS.register("polished_antimetal", () -> new AntimetalBlockItem(AntarchyNeoforgeBlocks.POLISHED_ANTIMETAL.get(), new Item.Properties())); + public static final DeferredItem ANTIMETAL_STAIRS_ITEM = ITEMS.register("antimetal_stairs", + () -> new AntimetalBlockItem(AntarchyNeoforgeBlocks.ANTIMETAL_STAIRS.get(), new Item.Properties())); + public static final DeferredItem ANTIMETAL_SLAB_ITEM = ITEMS.register("antimetal_slab", + () -> new AntimetalBlockItem(AntarchyNeoforgeBlocks.ANTIMETAL_SLAB.get(), new Item.Properties())); + public static final DeferredItem POLISHED_ANTIMETAL_STAIRS_ITEM = ITEMS.register("polished_antimetal_stairs", + () -> new AntimetalBlockItem(AntarchyNeoforgeBlocks.POLISHED_ANTIMETAL_STAIRS.get(), new Item.Properties())); + public static final DeferredItem POLISHED_ANTIMETAL_SLAB_ITEM = ITEMS.register("polished_antimetal_slab", + () -> new AntimetalBlockItem(AntarchyNeoforgeBlocks.POLISHED_ANTIMETAL_SLAB.get(), new Item.Properties())); public static final DeferredItem ANTIMETAL_SCAFFOLDING_ITEM = ITEMS.register("antimetal_scaffolding", () -> new AntimetalScaffoldingItem(AntarchyNeoforgeBlocks.ANTIMETAL_SCAFFOLDING.get(), new Item.Properties())); public static final DeferredItem ANTIMETAL_RAIL_ITEM = ITEMS.register("antimetal_rail", @@ -287,6 +308,7 @@ public final class AntarchyNeoforgeItems { () -> new CeilingPlacementTooltipBlockItem(AntarchyNeoforgeBlocks.ANTIMETAL_DETECTOR_RAIL.get(), new Item.Properties())); public static final DeferredItem ANTIMETAL_ACTIVATOR_RAIL_ITEM = ITEMS.register("antimetal_activator_rail", () -> new CeilingPlacementTooltipBlockItem(AntarchyNeoforgeBlocks.ANTIMETAL_ACTIVATOR_RAIL.get(), new Item.Properties())); + public static final DeferredItem UPPER_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.UPPER); public static final DeferredItem SMALL_BLOOD_CRYSTAL_BUD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SMALL_BLOOD_CRYSTAL_BUD); public static final DeferredItem MEDIUM_BLOOD_CRYSTAL_BUD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.MEDIUM_BLOOD_CRYSTAL_BUD); public static final DeferredItem LARGE_BLOOD_CRYSTAL_BUD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.LARGE_BLOOD_CRYSTAL_BUD); @@ -295,6 +317,10 @@ public final class AntarchyNeoforgeItems { () -> new net.minecraft.world.item.BlockItem(AntarchyNeoforgeBlocks.BLOOD_CRYSTAL.get(), new Item.Properties())); public static final DeferredItem BLOOD_CRYSTAL_CRYSTAL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BLOOD_CRYSTAL_CRYSTAL); public static final DeferredItem DREAM_SAND_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DREAM_SAND); + public static final DeferredItem ANTIGRAVEL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.ANTIGRAVEL); + public static final DeferredItem LOAM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.LOAM); + public static final DeferredItem MUCUS_ITEM = ITEMS.register("mucus", + () -> new com.craisinlord.antarchy.content.item.MucusBlockItem(AntarchyNeoforgeBlocks.MUCUS.get(), new Item.Properties())); public static final DeferredItem DREAM_SANDSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DREAM_SANDSTONE); public static final DeferredItem CHISELED_DREAM_SANDSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CHISELED_DREAM_SANDSTONE); public static final DeferredItem CUT_DREAM_SANDSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CUT_DREAM_SANDSTONE); @@ -336,6 +362,7 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem BROODSTONE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BROODSTONE_BRICK_STAIRS); public static final DeferredItem BROODSTONE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BROODSTONE_BRICK_SLAB); public static final DeferredItem BROODSTONE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BROODSTONE_BRICK_WALL); + public static final DeferredItem BROODSTONE_PILLAR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BROODSTONE_PILLAR); public static final DeferredItem MYRMITE_COAL_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.MYRMITE_COAL_ORE); public static final DeferredItem BROODSTONE_URANIUM_ORE_ITEM = ITEMS.register("broodstone_uranium_ore", () -> new net.minecraft.world.item.BlockItem(AntarchyNeoforgeBlocks.BROODSTONE_URANIUM_ORE.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); @@ -344,7 +371,7 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem POLISHED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.POLISHED_NYXITE); public static final DeferredItem CHISELED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CHISELED_NYXITE); public static final DeferredItem NYXITE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE_BRICKS); - public static final DeferredItem CHITEN_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CHITEN_BLOCK); + public static final DeferredItem CHITIN_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CHITIN_BLOCK); public static final DeferredItem NYXITE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE_STAIRS); public static final DeferredItem NYXITE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE_SLAB); public static final DeferredItem NYXITE_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE_WALL); @@ -357,6 +384,7 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem NYXITE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE_BRICK_STAIRS); public static final DeferredItem NYXITE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE_BRICK_SLAB); public static final DeferredItem NYXITE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE_BRICK_WALL); + public static final DeferredItem NYXITE_PILLAR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE_PILLAR); public static final DeferredItem SHELLSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SHELLSTONE); public static final DeferredItem POLISHED_SHELLSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.POLISHED_SHELLSTONE); public static final DeferredItem SHELLSTONE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SHELLSTONE_BRICKS); @@ -375,11 +403,12 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem SHELLSTONE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SHELLSTONE_BRICK_STAIRS); public static final DeferredItem SHELLSTONE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SHELLSTONE_BRICK_SLAB); public static final DeferredItem SHELLSTONE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SHELLSTONE_BRICK_WALL); + public static final DeferredItem SHELLSTONE_PILLAR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SHELLSTONE_PILLAR); public static final DeferredItem TRIFFID_GOO_BLOCK_ITEM = ITEMS.register("triffid_goo_block", () -> new com.craisinlord.antarchy.content.item.TriffidGooBlockItem(AntarchyNeoforgeBlocks.TRIFFID_GOO_BLOCK.get(), new Item.Properties())); public static final DeferredItem PALE_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PALE_NYXITE); public static final DeferredItem NYXITE_SPIKE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE_SPIKE); - public static final DeferredItem CHITEN_SPIKE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CHITEN_SPIKE); + public static final DeferredItem CHITIN_SPIKE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CHITIN_SPIKE); public static final DeferredItem POTENT_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.POTENT_NYXITE); public static final DeferredItem UMBRAL_MOSS_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.UMBRAL_MOSS_BLOCK); public static final DeferredItem UMBRAL_MOSS_CARPET_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.UMBRAL_MOSS_CARPET); @@ -437,6 +466,15 @@ public final class AntarchyNeoforgeItems { () -> new BloodCrystalArmorItem(BLOOD_CRYSTAL_ARMOR_MATERIAL, ArmorItem.Type.LEGGINGS, new Item.Properties().rarity(Rarity.RARE))); public static final DeferredItem BLOOD_CRYSTAL_BOOTS = ITEMS.register("blood_crystal_boots", () -> new BloodCrystalArmorItem(BLOOD_CRYSTAL_ARMOR_MATERIAL, ArmorItem.Type.BOOTS, new Item.Properties().rarity(Rarity.RARE))); + public static final DeferredItem TIGERS_EYE = ITEMS.registerSimpleItem("tigers_eye", new Item.Properties().rarity(Rarity.UNCOMMON)); + public static final DeferredItem TIGERS_EYE_HELMET = ITEMS.register("tigers_eye_helmet", + () -> new com.craisinlord.antarchy.content.item.TigerEyeArmorItem(TIGERS_EYE_ARMOR_MATERIAL, ArmorItem.Type.HELMET, new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem TIGERS_EYE_CHESTPLATE = ITEMS.register("tigers_eye_chestplate", + () -> new com.craisinlord.antarchy.content.item.TigerEyeArmorItem(TIGERS_EYE_ARMOR_MATERIAL, ArmorItem.Type.CHESTPLATE, new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem TIGERS_EYE_LEGGINGS = ITEMS.register("tigers_eye_leggings", + () -> new com.craisinlord.antarchy.content.item.TigerEyeArmorItem(TIGERS_EYE_ARMOR_MATERIAL, ArmorItem.Type.LEGGINGS, new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem TIGERS_EYE_BOOTS = ITEMS.register("tigers_eye_boots", + () -> new com.craisinlord.antarchy.content.item.TigerEyeArmorItem(TIGERS_EYE_ARMOR_MATERIAL, ArmorItem.Type.BOOTS, new Item.Properties().rarity(Rarity.UNCOMMON))); public static final DeferredItem BLOOD_CRYSTAL_KATANA = ITEMS.register("blood_crystal_katana", () -> new BloodCrystalKatanaItem( BLOOD_CRYSTAL_KATANA_TIER, @@ -451,14 +489,13 @@ public final class AntarchyNeoforgeItems { () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); public static final DeferredItem QUEEN_SCALE = ITEMS.register("queen_scale", () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); - public static final DeferredItem CHITEN = ITEMS.registerSimpleItem("chiten", new Item.Properties().rarity(Rarity.UNCOMMON)); + public static final DeferredItem CHITIN = ITEMS.registerSimpleItem("chitin", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final DeferredItem JERRY_NUCLEUS = ITEMS.register("jerry_nucleus", () -> new com.craisinlord.antarchy.content.item.JerryNucleusItem(new Item.Properties().rarity(Rarity.UNCOMMON) .food(new FoodProperties.Builder() .nutrition(2) .saturationModifier(0.1F) .build()))); - public static final DeferredItem CARAPACE = ITEMS.registerSimpleItem("carapace", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final DeferredItem STINK_BUG = ITEMS.registerSimpleItem("stink_bug", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final DeferredItem JUMPY_BUG_LEG = ITEMS.registerSimpleItem("jumpy_bug_leg", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final DeferredItem JUMPY_BOOTS = ITEMS.register("jumpy_boots", @@ -727,6 +764,14 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem KRAKEN_TENTACLE = ITEMS.registerSimpleItem("kraken_tentacle", new Item.Properties().rarity(Rarity.RARE)); + public static final DeferredItem KRAKEN_KALAMARI = ITEMS.register("kraken_kalamari", + () -> new Item(new Item.Properties() + .rarity(Rarity.EPIC) + .food(new FoodProperties.Builder() + .nutrition(20) + .saturationModifier(1.2F) + .alwaysEdible() + .build()))); public static final DeferredItem KRAKENS_GRASP = ITEMS.register("krakens_grasp", () -> new KrakensGraspItem( @@ -748,6 +793,7 @@ public final class AntarchyNeoforgeItems { .food(new FoodProperties.Builder() .nutrition(4) .saturationModifier(0.3F) + .alwaysEdible() .build()))); public static final DeferredItem GLIMMER_BOTTLE = ITEMS.register("glimmer_bottle", com.craisinlord.antarchy.content.item.GlimmerBottleItem::new); @@ -924,6 +970,16 @@ public final class AntarchyNeoforgeItems { return defense; } + private static EnumMap createDiamondArmorDefense() { + EnumMap defense = new EnumMap<>(ArmorItem.Type.class); + defense.put(ArmorItem.Type.BOOTS, 3); + defense.put(ArmorItem.Type.LEGGINGS, 6); + defense.put(ArmorItem.Type.CHESTPLATE, 8); + defense.put(ArmorItem.Type.HELMET, 3); + defense.put(ArmorItem.Type.BODY, 11); + return defense; + } + private static EnumMap createMogglesArmorDefense() { EnumMap defense = new EnumMap<>(ArmorItem.Type.class); defense.put(ArmorItem.Type.BOOTS, 0); diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java index 77cd39fa..3e399d2a 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java @@ -21,8 +21,8 @@ import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynCreepvineFeature import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynEggPatchFeature; import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynWallAmberMossFeature; import com.craisinlord.antarchy.content.worldgen.cavaryn.HangingCreeprootsFeature; -import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeConfiguration; -import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitinSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitinSpikeFeature; import com.craisinlord.antarchy.content.worldgen.cavaryn.MoltingVinesFeature; import com.craisinlord.antarchy.content.worldgen.ocean.SeashellFeature; import com.craisinlord.antarchy.content.worldgen.elythia.*; @@ -128,6 +128,8 @@ public final class AntarchyNeoforgeMisc { public static final DeferredHolder STINKY = MOB_EFFECTS.register("stinky", StinkyMobEffect::new); public static final DeferredHolder GOOPED = MOB_EFFECTS.register("gooped", GoopedMobEffect::new); public static final DeferredHolder BLOODGLASS_WARD = MOB_EFFECTS.register("bloodglass_ward", com.craisinlord.antarchy.content.effect.BloodglassWardEffect::new); + + public static final DeferredHolder GLIMMERING = MOB_EFFECTS.register("glimmering", com.craisinlord.antarchy.content.effect.GlimmeringMobEffect::new); public static final DeferredHolder SHRINKING_EFFECT = MOB_EFFECTS.register("shrinking", ShrinkMobEffect::new); public static final DeferredHolder GROWTH_EFFECT = MOB_EFFECTS.register("growth", GrowthMobEffect::new); @@ -300,8 +302,8 @@ public final class AntarchyNeoforgeMisc { () -> new ThoraxisSpikeFeature(ThoraxisSpikeConfiguration.CODEC)); public static final DeferredHolder, NyxiteSpikeFeature> NYXITE_SPIKES = FEATURES.register("nyxite_spikes", () -> new NyxiteSpikeFeature(NyxiteSpikeConfiguration.CODEC)); - public static final DeferredHolder, ChitenSpikeFeature> CAVARYN_CHITEN_SPIKES = FEATURES.register("cavaryn_chiten_spikes", - () -> new ChitenSpikeFeature(ChitenSpikeConfiguration.CODEC)); + public static final DeferredHolder, ChitinSpikeFeature> CAVARYN_CHITIN_SPIKES = FEATURES.register("cavaryn_chitin_spikes", + () -> new ChitinSpikeFeature(ChitinSpikeConfiguration.CODEC)); public static final DeferredHolder, CavarynBileVeinFeature> CAVARYN_BILE_VEINS = FEATURES.register("cavaryn_bile_veins", () -> new CavarynBileVeinFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, CavarynBileCystFeature> CAVARYN_BILE_CYSTS = FEATURES.register("cavaryn_bile_cysts", diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgePayloadHandlers.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgePayloadHandlers.java index 91ce3af7..485e5d7a 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgePayloadHandlers.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgePayloadHandlers.java @@ -1,6 +1,9 @@ package com.craisinlord.antarchy.neoforge.registry; import com.craisinlord.antarchy.content.network.BloodCrystalKatanaTrailPayload; +import com.craisinlord.antarchy.content.network.ToggleTigerEyeCamouflagePayload; +import com.craisinlord.antarchy.content.item.TigerEyeArmorUtil; +import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageController; import com.craisinlord.antarchy.neoforge.network.AntarchyGravityNetworking; import com.craisinlord.antarchy.neoforge.network.BrutalflyElytraNetworking; import com.craisinlord.antarchy.neoforge.network.DorrieJumpNetworking; @@ -31,6 +34,41 @@ public class AntarchyNeoforgePayloadHandlers { com.craisinlord.antarchy.content.client.BloodglassClientState.update(payload.shieldsActive(), payload.shieldsMax()) ) ); + registrar.playToClient( + com.craisinlord.antarchy.content.network.TigerEyeCamouflageStatePayload.TYPE, + com.craisinlord.antarchy.content.network.TigerEyeCamouflageStatePayload.STREAM_CODEC, + (payload, ctx) -> ctx.enqueueWork(() -> + com.craisinlord.antarchy.content.client.TigerEyeCamouflageClientState.update(payload.entityId(), payload.active(), payload.blockStateId()) + ) + ); + registrar.playToServer( + ToggleTigerEyeCamouflagePayload.TYPE, + ToggleTigerEyeCamouflagePayload.STREAM_CODEC, + (payload, ctx) -> ctx.enqueueWork(() -> { + if (!(ctx.player() instanceof net.minecraft.server.level.ServerPlayer player)) { + return; + } + TigerEyeCamouflageController.ToggleResult result = TigerEyeCamouflageController.toggle(player); + if (result != TigerEyeCamouflageController.ToggleResult.NO_CHANGE) { + net.neoforged.neoforge.network.PacketDistributor.sendToPlayersTrackingEntityAndSelf( + player, + com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageSync.payload(player) + ); + } + String messageKey = switch (result) { + case ACTIVATED -> "message.antarchy.tiger_eye_camouflage.activated"; + case DEACTIVATED -> "message.antarchy.tiger_eye_camouflage.disabled"; + case FULL_SET_REQUIRED -> TigerEyeArmorUtil.countEquippedPieces(player) > 0 + ? "message.antarchy.tiger_eye_camouflage.full_set_required" + : null; + case INVALID_BLOCK -> "message.antarchy.tiger_eye_camouflage.invalid_block"; + case NO_CHANGE -> null; + }; + if (messageKey != null) { + player.displayClientMessage(net.minecraft.network.chat.Component.translatable(messageKey), true); + } + }) + ); registrar.playToClient( BloodCrystalKatanaTrailPayload.TYPE, BloodCrystalKatanaTrailPayload.STREAM_CODEC, diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSounds.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSounds.java index 2ac56120..db1c939d 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSounds.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSounds.java @@ -60,6 +60,7 @@ public final class AntarchyNeoforgeSounds { public static final DeferredHolder THORAXIS_LUCID_POOLS_AMBIENT = registerSoundEvent("thoraxis_lucid_pools_ambient"); public static final DeferredHolder THORAXIS_LUCID_POOLS_ADDITIONS = registerSoundEvent("thoraxis_lucid_pools_additions"); public static final DeferredHolder THORAXIS_LUCID_POOLS_MOOD = registerSoundEvent("thoraxis_lucid_pools_mood"); + public static final DeferredHolder LUCID_LULLABY = registerSoundEvent("lucid_lullaby"); public static final DeferredHolder LUCID_AMBIENT = registerSoundEvent("lucid_ambient"); public static final DeferredHolder LUCID_FLYING = registerSoundEvent("lucid_flying"); public static final DeferredHolder LUCID_ATTACK = registerSoundEvent("lucid_attack"); @@ -137,6 +138,7 @@ public final class AntarchyNeoforgeSounds { public static final DeferredHolder STINK_BUG_FART = registerSoundEvent("stink_bug_fart"); public static final DeferredHolder STINK_BUG_IDLE = registerSoundEvent("stink_bug_idle"); public static final DeferredHolder CAVARYN_HEARTBEAT = registerSoundEvent("cavaryn_heartbeat"); + public static final DeferredHolder VENENATUS = registerSoundEvent("venenatus"); public static final DeferredHolder ROLLY_POLLY_IDLE = registerSoundEvent("rolly_polly_idle"); public static final DeferredHolder ROLLY_POLLY_WHEEL_MODE = registerSoundEvent("rolly_polly_wheel_mode"); public static final DeferredHolder ROLLY_POLLY_NORMAL_MODE = registerSoundEvent("rolly_polly_normal_mode");