From e173ae66f5b3f4e46c55b257153d92b396598511 Mon Sep 17 00:00:00 2001 From: craisinlord Date: Tue, 1 Sep 2026 21:54:41 -0500 Subject: [PATCH] nyxium, typhonite pillar, nadir ferns, duskbell, gorevine, royal assailant staff, manticore wings, manticore wing --- .../content/block/AntigravelBlock.java | 7 +- .../content/block/DirectionalNyxiumBlock.java | 130 ++++++++++ .../block/DirectionalThoraxisFlowerBlock.java | 81 ++++++ .../content/block/DreamSandstoneBlock.java | 39 +++ .../antarchy/content/block/GorevineBlock.java | 24 ++ .../content/block/LargeNadirFernBlock.java | 138 ++++++++++ .../content/block/NadirFernBlock.java | 50 ++++ .../block/SimpleDirectionalVineBlock.java | 179 +++++++++++++ .../content/block/SpiralingVinesBlock.java | 31 +-- .../block/SpiralingVinesPlantBlock.java | 28 --- .../content/block/TyphoniteSpikeBlock.java | 7 +- .../content/block/WhirlflowerBlock.java | 49 +++- .../client/renderer/ManticoreWingsLayer.java | 48 ++++ .../client/renderer/WindVortexRenderer.java | 4 +- .../content/creative/CreativeTabContents.java | 11 + .../content/entity/ManticoreEntity.java | 85 ++++++- .../entity/UpwardFallingBlockEntity.java | 49 +--- .../entity/nightmare/NightmareEntity.java | 4 +- .../entity/portal/DimensionalTearEntity.java | 53 +++- .../content/entity/vortex/VortexEntity.java | 22 +- .../entity/vortex/WindVortexEntity.java | 52 +++- .../content/item/ManticoreWingsItem.java | 62 +++++ .../content/item/RoyalAssailantStaffItem.java | 106 ++++++++ .../thoraxis/ThoraxisBiomeSource.java | 11 +- .../thoraxis/ThoraxisUndersideManager.java | 82 +++--- .../thoraxis/TyphoniteSpikeFeature.java | 7 +- .../mixins/DreamSandLowGravityMixin.java | 23 +- .../royal_assailant_staff.animation.json | 238 ++++++++++++++++++ .../antarchy/blockstates/dream_sandstone.json | 6 +- .../assets/antarchy/blockstates/duskbell.json | 11 + .../assets/antarchy/blockstates/gorevine.json | 43 ++++ .../blockstates/large_nadir_fern.json | 18 ++ .../antarchy/blockstates/nadir_fern.json | 11 + .../antarchy/blockstates/nadir_nyxium.json | 11 + .../antarchy/blockstates/spiraling_vines.json | 43 +++- .../blockstates/spiraling_vines_plant.json | 7 - .../blockstates/typhonite_pillar.json | 16 ++ .../antarchy/blockstates/verdant_nyxium.json | 11 + .../antarchy/blockstates/whirlflower.json | 6 +- .../geo/royal_assailant_staff.geo.json | 114 +++++++++ .../resources/assets/antarchy/lang/en_us.json | 22 +- .../antarchy/models/block/duskbell.json | 6 + .../antarchy/models/block/gorevine.json | 6 + .../antarchy/models/block/gorevine_body.json | 6 + .../models/block/large_nadir_fern_bottom.json | 6 + .../models/block/large_nadir_fern_top.json | 6 + .../antarchy/models/block/nadir_fern.json | 6 + .../antarchy/models/block/nadir_nyxium.json | 8 + ...s_plant.json => spiraling_vines_body.json} | 0 .../models/block/typhonite_pillar.json | 7 + .../antarchy/models/block/verdant_nyxium.json | 8 + .../models/item/broodfruit_cobbler.json | 1 + .../assets/antarchy/models/item/duskbell.json | 6 + .../assets/antarchy/models/item/gorevine.json | 6 + .../models/item/large_nadir_fern.json | 6 + .../antarchy/models/item/manticore_wing.json | 1 + .../antarchy/models/item/manticore_wings.json | 1 + .../antarchy/models/item/nadir_fern.json | 6 + .../antarchy/models/item/nadir_nyxium.json | 3 + .../models/item/royal_assailant_staff.json | 1 + .../item/royal_assailant_staff_held_geo.json | 1 + .../models/item/typhonite_pillar.json | 3 + .../antarchy/models/item/verdant_nyxium.json | 3 + .../antarchy/textures/block/duskbell.png | Bin 0 -> 364 bytes .../antarchy/textures/block/gorevine.png | Bin 0 -> 393 bytes .../textures/block/gorevine_hanging.png | Bin 0 -> 367 bytes .../block/large_nadir_fern_bottom.png | Bin 0 -> 407 bytes .../textures/block/large_nadir_fern_top.png | Bin 0 -> 357 bytes .../antarchy/textures/block/nadir_fern.png | Bin 0 -> 418 bytes .../antarchy/textures/block/nadir_nyxium.png | Bin 0 -> 660 bytes .../textures/block/nadir_nyxium_top.png | Bin 0 -> 328 bytes .../textures/block/typhonite_pillar.png | Bin 0 -> 402 bytes .../textures/block/typhonite_pillar_top.png | Bin 0 -> 420 bytes .../textures/block/verdant_nyxium.png | Bin 0 -> 634 bytes .../textures/block/verdant_nyxium_top.png | Bin 0 -> 453 bytes .../textures/item/broodfruit_cobbler.png | Bin 0 -> 432 bytes .../antarchy/textures/item/duskbell.png | Bin 0 -> 364 bytes .../antarchy/textures/item/gorevine.png | Bin 0 -> 367 bytes .../textures/item/large_nadir_fern.png | Bin 0 -> 357 bytes .../antarchy/textures/item/manticore_wing.png | Bin 0 -> 551 bytes .../textures/item/manticore_wings_item.png | Bin 0 -> 522 bytes .../antarchy/textures/item/nadir_fern.png | Bin 0 -> 418 bytes .../item/royal_assailant_staff_item.png | Bin 0 -> 548 bytes .../textures/models/armor/manticore_wings.png | Bin 0 -> 701 bytes .../models/item/royal_assailant_staff.png | Bin 0 -> 1248 bytes .../advancement/royal_assailant_staff.json | 36 +++ .../data/antarchy/dimension/thoraxis.json | 2 +- .../antarchy/loot_table/blocks/duskbell.json | 19 ++ .../antarchy/loot_table/blocks/gorevine.json | 20 ++ .../loot_table/blocks/large_nadir_fern.json | 26 ++ .../loot_table/blocks/nadir_fern.json | 19 ++ .../loot_table/blocks/nadir_nyxium.json | 19 ++ .../blocks/spiraling_vines_plant.json | 4 - .../loot_table/blocks/typhonite_pillar.json | 19 ++ .../loot_table/blocks/verdant_nyxium.json | 19 ++ .../loot_table/entities/manticore.json | 15 ++ .../antarchy/recipe/big_bertha_handle.json | 2 +- .../data/antarchy/recipe/big_bertha_hilt.json | 5 +- .../antarchy/recipe/broodfruit_cobbler.json | 12 + .../data/antarchy/recipe/manticore_wings.json | 11 + .../recipe/royal_assailant_battleaxe.json | 2 +- .../recipe/royal_assailant_staff.json | 11 + .../antarchy/recipe/typhonite_pillar.json | 17 ++ ...te_pillar_from_typhonite_stonecutting.json | 9 + .../tags/block/dream_fire_base_blocks.json | 39 ++- .../tags/block/nadir_sapling_supports.json | 3 +- .../tags/entity_type/inverted_immune.json | 3 +- .../antarchy/worldgen/biome/lucid_pools.json | 1 + .../antarchy/worldgen/biome/nadir_forest.json | 4 +- .../worldgen/configured_feature/duskbell.json | 14 ++ .../configured_feature/duskbell_patch.json | 9 + .../worldgen/configured_feature/gorevine.json | 14 ++ .../configured_feature/gorevine_patch.json | 9 + .../configured_feature/nadir_fern.json | 14 ++ .../configured_feature/nadir_fern_patch.json | 9 + .../worldgen/noise_settings/thoraxis.json | 81 +++--- .../worldgen/placed_feature/duskbell.json | 4 + .../worldgen/placed_feature/duskbells.json | 52 ++++ .../worldgen/placed_feature/gorevine.json | 4 + .../worldgen/placed_feature/gorevines.json | 51 ++++ .../worldgen/placed_feature/nadir_fern.json | 4 + .../worldgen/placed_feature/nadir_ferns.json | 52 ++++ .../data/minecraft/tags/block/climbable.json | 6 +- .../data/minecraft/tags/block/flowers.json | 4 +- .../minecraft/tags/block/mineable/hoe.json | 5 +- .../tags/block/mineable/pickaxe.json | 3 + .../minecraft/tags/block/small_flowers.json | 4 +- .../minecraft/tags/block/sword_efficient.json | 9 +- .../minecraft/tags/block/tall_flowers.json | 3 +- .../data/minecraft/tags/block/vines.json | 6 +- .../data/minecraft/tags/item/flowers.json | 4 +- .../minecraft/tags/item/small_flowers.json | 4 +- .../minecraft/tags/item/tall_flowers.json | 3 +- .../data/minecraft/tags/item/vines.json | 4 +- .../fabric/AntarchyFabricContent.java | 2 - .../antarchy/fabric/AntarchyFabricEvents.java | 5 + .../client/AntarchyFabricClientBootstrap.java | 6 +- .../fabric/registry/AntarchyFabricBlocks.java | 20 +- .../registry/AntarchyFabricEntities.java | 2 + .../fabric/registry/AntarchyFabricItems.java | 19 ++ .../antarchy/neoforge/AntarchyNeoforge.java | 2 - .../client/AntarchyNeoForgeClient.java | 6 +- .../registry/AntarchyNeoForgeEvents.java | 5 + .../registry/AntarchyNeoforgeBlocks.java | 20 +- .../registry/AntarchyNeoforgeEntites.java | 2 + .../registry/AntarchyNeoforgeItems.java | 19 ++ .../models/item/royal_assailant_staff.json | 1 + 147 files changed, 2544 insertions(+), 290 deletions(-) create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/DirectionalNyxiumBlock.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/DirectionalThoraxisFlowerBlock.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/DreamSandstoneBlock.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/GorevineBlock.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/LargeNadirFernBlock.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/NadirFernBlock.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/SimpleDirectionalVineBlock.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/SpiralingVinesPlantBlock.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ManticoreWingsLayer.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/ManticoreWingsItem.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalAssailantStaffItem.java create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/animations/royal_assailant_staff.animation.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/duskbell.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/gorevine.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/large_nadir_fern.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_fern.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_nyxium.json delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/spiraling_vines_plant.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/typhonite_pillar.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/verdant_nyxium.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/geo/royal_assailant_staff.geo.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/duskbell.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/gorevine.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/gorevine_body.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/large_nadir_fern_bottom.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/large_nadir_fern_top.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_fern.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_nyxium.json rename common-1.21.1/src/main/resources/assets/antarchy/models/block/{spiraling_vines_plant.json => spiraling_vines_body.json} (100%) create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/typhonite_pillar.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/verdant_nyxium.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/broodfruit_cobbler.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/duskbell.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/gorevine.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/large_nadir_fern.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/manticore_wing.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/manticore_wings.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_fern.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_nyxium.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_assailant_staff.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_assailant_staff_held_geo.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/typhonite_pillar.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/verdant_nyxium.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/duskbell.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/gorevine.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/gorevine_hanging.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/large_nadir_fern_bottom.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/large_nadir_fern_top.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir_fern.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir_nyxium.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir_nyxium_top.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/typhonite_pillar.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/typhonite_pillar_top.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/verdant_nyxium.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/verdant_nyxium_top.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/broodfruit_cobbler.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/duskbell.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/gorevine.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/large_nadir_fern.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/manticore_wing.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/manticore_wings_item.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/nadir_fern.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/royal_assailant_staff_item.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/models/armor/manticore_wings.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/models/item/royal_assailant_staff.png create mode 100644 common-1.21.1/src/main/resources/data/antarchy/advancement/royal_assailant_staff.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/duskbell.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/gorevine.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/large_nadir_fern.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_fern.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/nadir_nyxium.json delete mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/spiraling_vines_plant.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/typhonite_pillar.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/verdant_nyxium.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/entities/manticore.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/broodfruit_cobbler.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/manticore_wings.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/royal_assailant_staff.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/typhonite_pillar.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/typhonite_pillar_from_typhonite_stonecutting.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/worldgen/configured_feature/duskbell.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/worldgen/configured_feature/duskbell_patch.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/worldgen/configured_feature/gorevine.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/worldgen/configured_feature/gorevine_patch.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/worldgen/configured_feature/nadir_fern.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/worldgen/configured_feature/nadir_fern_patch.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/duskbell.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/duskbells.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/gorevine.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/gorevines.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/nadir_fern.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/worldgen/placed_feature/nadir_ferns.json create mode 100644 neoforge-1.21.1/src/main/resources/assets/antarchy/models/item/royal_assailant_staff.json diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/AntigravelBlock.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/AntigravelBlock.java index 29e6320b..2526ca4e 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/AntigravelBlock.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/AntigravelBlock.java @@ -15,8 +15,7 @@ import net.minecraft.world.level.block.state.BlockState; public class AntigravelBlock extends Block { public static final MapCodec CODEC = simpleCodec(AntigravelBlock::new); - private static final int SETTLE_DELAY = 6; - private static final int SETTLE_ATTEMPT_DENOMINATOR = 3; + private static final int SETTLE_DELAY = 2; public AntigravelBlock(BlockBehaviour.Properties properties) { super(properties); @@ -52,10 +51,6 @@ public class AntigravelBlock extends Block { if (!passable) { return; } - if (random.nextInt(SETTLE_ATTEMPT_DENOMINATOR) != 0) { - level.scheduleTick(pos, this, SETTLE_DELAY + random.nextInt(SETTLE_DELAY)); - return; - } UpwardFallingBlockEntity.fallUp(level, pos, state, false); } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/DirectionalNyxiumBlock.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/DirectionalNyxiumBlock.java new file mode 100644 index 00000000..a33a7c24 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/DirectionalNyxiumBlock.java @@ -0,0 +1,130 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.Antarchy; +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.BonemealableBlock; +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.DirectionProperty; + +public class DirectionalNyxiumBlock extends Block implements BonemealableBlock { + public static final MapCodec CODEC = simpleCodec(properties -> new DirectionalNyxiumBlock(properties, Type.NADIR)); + public static final DirectionProperty VERTICAL_DIRECTION = BlockStateProperties.VERTICAL_DIRECTION; + private static final ResourceLocation NYXITE_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "nyxite"); + private static final ResourceLocation NADIR_FERN_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "nadir_fern"); + private static final ResourceLocation DUSKBELL_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "duskbell"); + private static final ResourceLocation NADIR_SAPLING_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "nadir_sapling"); + private static final ResourceLocation WHIRLFLOWER_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "whirlflower"); + private static final ResourceLocation SPIRALING_VINES_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "spiraling_vines"); + private final Type type; + + public DirectionalNyxiumBlock(BlockBehaviour.Properties properties, Type type) { + super(properties); + this.type = type; + this.registerDefaultState(this.stateDefinition.any().setValue(VERTICAL_DIRECTION, Direction.UP)); + } + + @Override + protected MapCodec codec() { + return CODEC; + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return this.defaultBlockState().setValue( + VERTICAL_DIRECTION, + context.getClickedFace() == Direction.DOWN ? Direction.DOWN : Direction.UP + ); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(VERTICAL_DIRECTION); + } + + @Override + public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state) { + return hasAdjacentNyxite(level, pos) || level.getBlockState(pos.relative(state.getValue(VERTICAL_DIRECTION))).isAir(); + } + + @Override + public boolean isBonemealSuccess(Level level, RandomSource random, BlockPos pos, BlockState state) { + return true; + } + + @Override + public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { + spreadToNearbyNyxite(level, random, pos, state); + BlockPos growthPos = pos.relative(state.getValue(VERTICAL_DIRECTION)); + if (level.getBlockState(growthPos).isAir()) { + placeVegetation(level, random, growthPos, state.getValue(VERTICAL_DIRECTION)); + } + } + + private void spreadToNearbyNyxite(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { + for (int i = 0; i < 24; i++) { + BlockPos targetPos = pos.offset( + random.nextInt(5) - 2, + random.nextInt(3) - 1, + random.nextInt(5) - 2 + ); + if (isNyxite(level.getBlockState(targetPos))) { + level.setBlock(targetPos, state, Block.UPDATE_ALL); + } + } + } + + private void placeVegetation(ServerLevel level, RandomSource random, BlockPos pos, Direction direction) { + ResourceLocation id = switch (this.type) { + case NADIR -> { + if (direction == Direction.DOWN && random.nextInt(7) == 0) { + yield NADIR_SAPLING_ID; + } + yield random.nextInt(4) == 0 ? DUSKBELL_ID : NADIR_FERN_ID; + } + case VERDANT -> random.nextInt(3) == 0 ? SPIRALING_VINES_ID : WHIRLFLOWER_ID; + }; + Block block = BuiltInRegistries.BLOCK.get(id); + BlockState growthState = block.defaultBlockState(); + if (growthState.hasProperty(SimpleDirectionalVineBlock.GROWTH_DIRECTION)) { + growthState = growthState.setValue(SimpleDirectionalVineBlock.GROWTH_DIRECTION, direction); + } + if (growthState.hasProperty(VERTICAL_DIRECTION)) { + growthState = growthState.setValue(VERTICAL_DIRECTION, direction); + } + if (growthState.canSurvive(level, pos)) { + level.setBlock(pos, growthState, Block.UPDATE_ALL); + } + } + + private static boolean hasAdjacentNyxite(LevelReader level, BlockPos pos) { + for (Direction direction : Direction.values()) { + if (isNyxite(level.getBlockState(pos.relative(direction)))) { + return true; + } + } + return false; + } + + private static boolean isNyxite(BlockState state) { + return BuiltInRegistries.BLOCK.getKey(state.getBlock()).equals(NYXITE_ID); + } + + public enum Type { + NADIR, + VERDANT + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/DirectionalThoraxisFlowerBlock.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/DirectionalThoraxisFlowerBlock.java new file mode 100644 index 00000000..c83026a2 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/DirectionalThoraxisFlowerBlock.java @@ -0,0 +1,81 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.BushBlock; +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.DirectionProperty; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class DirectionalThoraxisFlowerBlock extends BushBlock { + public static final MapCodec CODEC = simpleCodec(DirectionalThoraxisFlowerBlock::new); + public static final DirectionProperty VERTICAL_DIRECTION = BlockStateProperties.VERTICAL_DIRECTION; + private static final VoxelShape UP_SHAPE = Block.box(3.0D, 0.0D, 3.0D, 13.0D, 13.0D, 13.0D); + private static final VoxelShape DOWN_SHAPE = Block.box(3.0D, 3.0D, 3.0D, 13.0D, 16.0D, 13.0D); + + public DirectionalThoraxisFlowerBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(VERTICAL_DIRECTION, Direction.UP)); + } + + @Override + protected MapCodec codec() { + return CODEC; + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return this.defaultBlockState().setValue( + VERTICAL_DIRECTION, + context.getClickedFace() == Direction.DOWN ? Direction.DOWN : Direction.UP + ); + } + + @Override + protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return state.getValue(VERTICAL_DIRECTION) == Direction.DOWN ? DOWN_SHAPE : UP_SHAPE; + } + + @Override + protected boolean mayPlaceOn(BlockState state, BlockGetter level, BlockPos pos) { + return true; + } + + @Override + protected boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + Direction growthDirection = state.getValue(VERTICAL_DIRECTION); + BlockPos supportPos = pos.relative(growthDirection.getOpposite()); + BlockState supportState = level.getBlockState(supportPos); + return supportState.isFaceSturdy(level, supportPos, growthDirection); + } + + @Override + protected BlockState updateShape( + BlockState state, + Direction direction, + BlockState neighborState, + LevelAccessor level, + BlockPos pos, + BlockPos neighborPos + ) { + return state.canSurvive(level, pos) + ? super.updateShape(state, direction, neighborState, level, pos, neighborPos) + : Blocks.AIR.defaultBlockState(); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(VERTICAL_DIRECTION); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/DreamSandstoneBlock.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/DreamSandstoneBlock.java new file mode 100644 index 00000000..43a61dfa --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/DreamSandstoneBlock.java @@ -0,0 +1,39 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import net.minecraft.core.Direction; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.block.Block; +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.DirectionProperty; + +public class DreamSandstoneBlock extends Block { + public static final MapCodec CODEC = Block.simpleCodec(DreamSandstoneBlock::new); + public static final DirectionProperty VERTICAL_DIRECTION = BlockStateProperties.VERTICAL_DIRECTION; + + public DreamSandstoneBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(VERTICAL_DIRECTION, Direction.UP)); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return this.defaultBlockState().setValue( + VERTICAL_DIRECTION, + context.getClickedFace() == Direction.DOWN ? Direction.DOWN : Direction.UP + ); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(VERTICAL_DIRECTION); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/GorevineBlock.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/GorevineBlock.java new file mode 100644 index 00000000..e91c384f --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/GorevineBlock.java @@ -0,0 +1,24 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import net.minecraft.world.level.block.BushBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; + +public class GorevineBlock extends SimpleDirectionalVineBlock { + public static final MapCodec CODEC = simpleCodec(GorevineBlock::new); + private static final int MAX_GROWTH_DISTANCE = 12; + + public GorevineBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + protected int maxDistance() { + return MAX_GROWTH_DISTANCE; + } + + @Override + public MapCodec codec() { + return CODEC; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/LargeNadirFernBlock.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/LargeNadirFernBlock.java new file mode 100644 index 00000000..22bf9bb2 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/LargeNadirFernBlock.java @@ -0,0 +1,138 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.StringRepresentable; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +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.DirectionProperty; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class LargeNadirFernBlock extends Block { + public static final MapCodec CODEC = simpleCodec(LargeNadirFernBlock::new); + public static final DirectionProperty VERTICAL_DIRECTION = BlockStateProperties.VERTICAL_DIRECTION; + public static final EnumProperty HALF = EnumProperty.create("half", Half.class); + private static final VoxelShape SHAPE = Block.box(2.0D, 0.0D, 2.0D, 14.0D, 16.0D, 14.0D); + + public LargeNadirFernBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any() + .setValue(VERTICAL_DIRECTION, Direction.UP) + .setValue(HALF, Half.BOTTOM)); + } + + @Override + protected MapCodec codec() { + return CODEC; + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + Direction direction = context.getClickedFace() == Direction.DOWN ? Direction.DOWN : Direction.UP; + BlockPos otherPos = context.getClickedPos().relative(direction); + if (!context.getLevel().getBlockState(otherPos).canBeReplaced(context)) { + return null; + } + return this.defaultBlockState().setValue(VERTICAL_DIRECTION, direction); + } + + @Override + public void setPlacedBy(net.minecraft.world.level.Level level, BlockPos pos, BlockState state, net.minecraft.world.entity.LivingEntity placer, net.minecraft.world.item.ItemStack stack) { + placeOtherHalf(level, pos, state, Block.UPDATE_ALL); + } + + public static void placeAt(LevelAccessor level, BlockPos pos, BlockState bottomState, int flags) { + level.setBlock(pos, bottomState.setValue(HALF, Half.BOTTOM), flags); + placeOtherHalf(level, pos, bottomState, flags); + } + + private static void placeOtherHalf(LevelAccessor level, BlockPos pos, BlockState state, int flags) { + Direction direction = state.getValue(VERTICAL_DIRECTION); + level.setBlock(pos.relative(direction), state.setValue(HALF, Half.TOP), flags); + } + + @Override + protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return SHAPE; + } + + @Override + protected boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + Direction direction = state.getValue(VERTICAL_DIRECTION); + if (state.getValue(HALF) == Half.TOP) { + BlockState otherState = level.getBlockState(pos.relative(direction.getOpposite())); + return otherState.is(this) + && otherState.getValue(HALF) == Half.BOTTOM + && otherState.getValue(VERTICAL_DIRECTION) == direction; + } + + BlockPos supportPos = pos.relative(direction.getOpposite()); + BlockState supportState = level.getBlockState(supportPos); + BlockState topState = level.getBlockState(pos.relative(direction)); + boolean topMatches = topState.isAir() + || topState.is(this) + && topState.getValue(HALF) == Half.TOP + && topState.getValue(VERTICAL_DIRECTION) == direction; + return topMatches && supportState.isFaceSturdy(level, supportPos, direction); + } + + @Override + protected BlockState updateShape( + BlockState state, + Direction direction, + BlockState neighborState, + LevelAccessor level, + BlockPos pos, + BlockPos neighborPos + ) { + return state.canSurvive(level, pos) + ? super.updateShape(state, direction, neighborState, level, pos, neighborPos) + : Blocks.AIR.defaultBlockState(); + } + + @Override + protected void onRemove(BlockState state, net.minecraft.world.level.Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { + if (!state.is(newState.getBlock())) { + Direction verticalDirection = state.getValue(VERTICAL_DIRECTION); + BlockPos otherPos = state.getValue(HALF) == Half.BOTTOM + ? pos.relative(verticalDirection) + : pos.relative(verticalDirection.getOpposite()); + if (level.getBlockState(otherPos).is(this)) { + level.setBlock(otherPos, Blocks.AIR.defaultBlockState(), Block.UPDATE_ALL); + } + } + super.onRemove(state, level, pos, newState, movedByPiston); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(VERTICAL_DIRECTION, HALF); + } + + public enum Half implements StringRepresentable { + TOP("top"), + BOTTOM("bottom"); + + private final String name; + + Half(String name) { + this.name = name; + } + + @Override + public String getSerializedName() { + return this.name; + } + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/NadirFernBlock.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/NadirFernBlock.java new file mode 100644 index 00000000..3800d6a1 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/NadirFernBlock.java @@ -0,0 +1,50 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.Antarchy; +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.BonemealableBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; + +public class NadirFernBlock extends DirectionalThoraxisFlowerBlock implements BonemealableBlock { + public static final MapCodec CODEC = simpleCodec(NadirFernBlock::new); + private static final ResourceLocation LARGE_NADIR_FERN_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "large_nadir_fern"); + + public NadirFernBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + protected MapCodec codec() { + return CODEC; + } + + @Override + public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state) { + return level.getBlockState(pos.relative(state.getValue(VERTICAL_DIRECTION))).isAir(); + } + + @Override + public boolean isBonemealSuccess(Level level, RandomSource random, BlockPos pos, BlockState state) { + return true; + } + + @Override + public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { + Direction direction = state.getValue(VERTICAL_DIRECTION); + Block largeFern = BuiltInRegistries.BLOCK.get(LARGE_NADIR_FERN_ID); + BlockState lowerState = largeFern.defaultBlockState() + .setValue(LargeNadirFernBlock.VERTICAL_DIRECTION, direction) + .setValue(LargeNadirFernBlock.HALF, LargeNadirFernBlock.Half.BOTTOM); + LargeNadirFernBlock.placeAt(level, pos, lowerState, Block.UPDATE_ALL); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/SimpleDirectionalVineBlock.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/SimpleDirectionalVineBlock.java new file mode 100644 index 00000000..8ea5371e --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/SimpleDirectionalVineBlock.java @@ -0,0 +1,179 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.BonemealableBlock; +import net.minecraft.world.level.block.BushBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.world.level.block.state.properties.IntegerProperty; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class SimpleDirectionalVineBlock extends BushBlock implements BonemealableBlock { + public static final MapCodec CODEC = simpleCodec(SimpleDirectionalVineBlock::new); + public static final EnumProperty GROWTH_DIRECTION = EnumProperty.create("growth_direction", Direction.class, Direction.UP, Direction.DOWN); + public static final BooleanProperty TOP_CAP = BooleanProperty.create("top_cap"); + public static final BooleanProperty BOTTOM_CAP = BooleanProperty.create("bottom_cap"); + public static final IntegerProperty DISTANCE = IntegerProperty.create("distance", 0, 6); + protected static final int MAX_DISTANCE = 6; + protected static final VoxelShape SHAPE = Block.box(4.0D, 0.0D, 4.0D, 12.0D, 16.0D, 12.0D); + + public SimpleDirectionalVineBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any() + .setValue(GROWTH_DIRECTION, Direction.DOWN) + .setValue(TOP_CAP, false) + .setValue(BOTTOM_CAP, true) + .setValue(DISTANCE, 0)); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return SHAPE; + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + BlockGetter level = context.getLevel(); + BlockPos pos = context.getClickedPos(); + Direction growthDirection = resolveGrowthDirection(level, pos); + return computeState(this.defaultBlockState().setValue(GROWTH_DIRECTION, growthDirection).setValue(DISTANCE, 0), level, pos); + } + + private Direction resolveGrowthDirection(BlockGetter level, BlockPos pos) { + BlockState belowState = level.getBlockState(pos.below()); + if (belowState.is(this) && belowState.getValue(GROWTH_DIRECTION) == Direction.UP) { + return Direction.UP; + } + + BlockState aboveState = level.getBlockState(pos.above()); + if (aboveState.is(this) && aboveState.getValue(GROWTH_DIRECTION) == Direction.DOWN) { + return Direction.DOWN; + } + + return hasSturdyAnchor(level, pos, Direction.UP) ? Direction.DOWN : Direction.UP; + } + + private static boolean hasSturdyAnchor(BlockGetter level, BlockPos pos, Direction towardAnchor) { + BlockPos anchorPos = pos.relative(towardAnchor); + BlockState anchorState = level.getBlockState(anchorPos); + return anchorState.isFaceSturdy(level, anchorPos, towardAnchor.getOpposite()); + } + + @Override + protected boolean mayPlaceOn(BlockState state, BlockGetter level, BlockPos pos) { + return state.is(this) || state.isFaceSturdy(level, pos, Direction.DOWN) || state.isFaceSturdy(level, pos, Direction.UP); + } + + @Override + protected boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + Direction anchorDirection = state.getValue(GROWTH_DIRECTION).getOpposite(); + BlockPos anchorPos = pos.relative(anchorDirection); + BlockState anchorState = level.getBlockState(anchorPos); + if (anchorState.is(this)) { + return true; + } + return anchorState.isFaceSturdy(level, anchorPos, anchorDirection.getOpposite()); + } + + @Override + protected BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + if (!state.canSurvive(level, pos)) { + return net.minecraft.world.level.block.Blocks.AIR.defaultBlockState(); + } + if (direction == Direction.UP || direction == Direction.DOWN) { + return computeState(state, level, pos); + } + return state; + } + + protected static BlockState computeState(BlockState state, BlockGetter level, BlockPos pos) { + boolean aboveIsSame = level.getBlockState(pos.above()).is(state.getBlock()); + boolean belowIsSame = level.getBlockState(pos.below()).is(state.getBlock()); + Direction growthDirection = state.getValue(GROWTH_DIRECTION); + + boolean topCap = growthDirection == Direction.UP && !aboveIsSame; + boolean bottomCap = growthDirection == Direction.DOWN && !belowIsSame; + return state.setValue(TOP_CAP, topCap).setValue(BOTTOM_CAP, bottomCap); + } + + protected int maxDistance() { + return MAX_DISTANCE; + } + + @Override + protected boolean isRandomlyTicking(BlockState state) { + return isTip(state) && state.getValue(DISTANCE) < maxDistance(); + } + + @Override + protected void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (random.nextInt(10) == 0) { + grow(level, pos, state); + } + } + + @Override + public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state) { + return isTip(state) && state.getValue(DISTANCE) < maxDistance() && level.getBlockState(pos.relative(state.getValue(GROWTH_DIRECTION))).isAir(); + } + + @Override + public boolean isBonemealSuccess(Level level, RandomSource random, BlockPos pos, BlockState state) { + return true; + } + + @Override + public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { + grow(level, pos, state); + } + + private void grow(ServerLevel level, BlockPos pos, BlockState state) { + Direction direction = state.getValue(GROWTH_DIRECTION); + BlockPos targetPos = pos.relative(direction); + if (!level.getBlockState(targetPos).isAir()) { + return; + } + + BlockState grownState = this.defaultBlockState() + .setValue(GROWTH_DIRECTION, direction) + .setValue(DISTANCE, state.getValue(DISTANCE) + 1); + level.setBlock(targetPos, grownState, Block.UPDATE_ALL); + + BlockState posState = level.getBlockState(pos); + if (posState.is(this)) { + level.setBlock(pos, computeState(posState, level, pos), Block.UPDATE_CLIENTS); + } + BlockState targetState = level.getBlockState(targetPos); + if (targetState.is(this)) { + level.setBlock(targetPos, computeState(targetState, level, targetPos), Block.UPDATE_CLIENTS); + } + } + + protected static boolean isTip(BlockState state) { + return state.getValue(GROWTH_DIRECTION) == Direction.DOWN ? state.getValue(BOTTOM_CAP) : state.getValue(TOP_CAP); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(GROWTH_DIRECTION, TOP_CAP, BOTTOM_CAP, DISTANCE); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/SpiralingVinesBlock.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/SpiralingVinesBlock.java index 73be73a5..87859e4b 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/SpiralingVinesBlock.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/SpiralingVinesBlock.java @@ -1,41 +1,18 @@ package com.craisinlord.antarchy.content.block; import com.mojang.serialization.MapCodec; -import java.util.function.Supplier; -import net.minecraft.core.Direction; -import net.minecraft.util.RandomSource; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.GrowingPlantHeadBlock; +import net.minecraft.world.level.block.BushBlock; import net.minecraft.world.level.block.state.BlockBehaviour; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.shapes.VoxelShape; -public class SpiralingVinesBlock extends GrowingPlantHeadBlock { +public class SpiralingVinesBlock extends SimpleDirectionalVineBlock { public static final MapCodec CODEC = simpleCodec(SpiralingVinesBlock::new); - public static final VoxelShape SHAPE = Block.box(4.0D, 0.0D, 4.0D, 12.0D, 16.0D, 12.0D); - public static Supplier BODY_BLOCK; public SpiralingVinesBlock(BlockBehaviour.Properties properties) { - super(properties, Direction.UP, SHAPE, false, 0.1D); + super(properties); } @Override - public MapCodec codec() { + public MapCodec codec() { return CODEC; } - - @Override - protected int getBlocksToGrowWhenBonemealed(RandomSource random) { - return 1; - } - - @Override - protected boolean canGrowInto(BlockState state) { - return state.isAir(); - } - - @Override - protected Block getBodyBlock() { - return BODY_BLOCK.get(); - } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/SpiralingVinesPlantBlock.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/SpiralingVinesPlantBlock.java deleted file mode 100644 index 7a9634e3..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/SpiralingVinesPlantBlock.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.craisinlord.antarchy.content.block; - -import com.mojang.serialization.MapCodec; -import java.util.function.Supplier; -import net.minecraft.core.Direction; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.GrowingPlantBodyBlock; -import net.minecraft.world.level.block.GrowingPlantHeadBlock; -import net.minecraft.world.level.block.state.BlockBehaviour; - -public class SpiralingVinesPlantBlock extends GrowingPlantBodyBlock { - public static final MapCodec CODEC = simpleCodec(SpiralingVinesPlantBlock::new); - public static Supplier HEAD_BLOCK; - - public SpiralingVinesPlantBlock(BlockBehaviour.Properties properties) { - super(properties, Direction.UP, SpiralingVinesBlock.SHAPE, false); - } - - @Override - public MapCodec codec() { - return CODEC; - } - - @Override - protected GrowingPlantHeadBlock getHeadBlock() { - return HEAD_BLOCK.get(); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/TyphoniteSpikeBlock.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/TyphoniteSpikeBlock.java index c50d2015..7675fa15 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/TyphoniteSpikeBlock.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/TyphoniteSpikeBlock.java @@ -146,12 +146,11 @@ public class TyphoniteSpikeBlock extends PointedDripstoneBlock { } DripstoneThickness forwardThickness = forwardState.getValue(THICKNESS); - if (forwardThickness != DripstoneThickness.TIP && forwardThickness != DripstoneThickness.TIP_MERGE) { - BlockState backState = level.getBlockState(pos.relative(opposite)); - return !isTyphoniteSpikeWithDirection(backState, direction) ? DripstoneThickness.BASE : DripstoneThickness.MIDDLE; + if (forwardThickness == DripstoneThickness.TIP || forwardThickness == DripstoneThickness.TIP_MERGE) { + return DripstoneThickness.MIDDLE; } - return DripstoneThickness.FRUSTUM; + return DripstoneThickness.BASE; } private static boolean isValidPointedDripstonePlacement(LevelReader level, BlockPos pos, Direction direction) { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/WhirlflowerBlock.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/WhirlflowerBlock.java index 3b82d3ce..c460dbea 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/WhirlflowerBlock.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/WhirlflowerBlock.java @@ -3,24 +3,35 @@ package com.craisinlord.antarchy.content.block; import com.craisinlord.antarchy.Antarchy; import com.mojang.serialization.MapCodec; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.BushBlock; 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.DirectionProperty; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; public class WhirlflowerBlock extends BushBlock { public static final MapCodec CODEC = Block.simpleCodec(WhirlflowerBlock::new); - private static final VoxelShape SHAPE = Block.box(3.0D, 0.0D, 3.0D, 13.0D, 13.0D, 13.0D); + public static final DirectionProperty VERTICAL_DIRECTION = BlockStateProperties.VERTICAL_DIRECTION; + private static final VoxelShape UP_SHAPE = Block.box(3.0D, 0.0D, 3.0D, 13.0D, 13.0D, 13.0D); + private static final VoxelShape DOWN_SHAPE = Block.box(3.0D, 3.0D, 3.0D, 13.0D, 16.0D, 13.0D); private static final ResourceLocation VEINED_TYPHONITE_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "veined_typhonite"); + private static final ResourceLocation VERDANT_NYXIUM_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "verdant_nyxium"); public WhirlflowerBlock(BlockBehaviour.Properties properties) { super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(VERTICAL_DIRECTION, Direction.UP)); } @Override @@ -30,16 +41,46 @@ public class WhirlflowerBlock extends BushBlock { @Override protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { - return SHAPE; + return state.getValue(VERTICAL_DIRECTION) == Direction.DOWN ? DOWN_SHAPE : UP_SHAPE; + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return this.defaultBlockState().setValue( + VERTICAL_DIRECTION, + context.getClickedFace() == Direction.DOWN ? Direction.DOWN : Direction.UP + ); } @Override protected boolean mayPlaceOn(BlockState state, BlockGetter level, BlockPos pos) { - return BuiltInRegistries.BLOCK.getKey(state.getBlock()).equals(VEINED_TYPHONITE_ID); + ResourceLocation id = BuiltInRegistries.BLOCK.getKey(state.getBlock()); + return id.equals(VEINED_TYPHONITE_ID) || id.equals(VERDANT_NYXIUM_ID); } @Override protected boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { - return this.mayPlaceOn(level.getBlockState(pos.below()), level, pos.below()); + Direction growthDirection = state.getValue(VERTICAL_DIRECTION); + BlockPos supportPos = pos.relative(growthDirection.getOpposite()); + return this.mayPlaceOn(level.getBlockState(supportPos), level, supportPos); + } + + @Override + protected BlockState updateShape( + BlockState state, + Direction direction, + BlockState neighborState, + LevelAccessor level, + BlockPos pos, + BlockPos neighborPos + ) { + return state.canSurvive(level, pos) + ? super.updateShape(state, direction, neighborState, level, pos, neighborPos) + : Blocks.AIR.defaultBlockState(); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(VERTICAL_DIRECTION); } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ManticoreWingsLayer.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ManticoreWingsLayer.java new file mode 100644 index 00000000..e9d61b8a --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/ManticoreWingsLayer.java @@ -0,0 +1,48 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.item.ManticoreWingsItem; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.ElytraModel; +import net.minecraft.client.model.PlayerModel; +import net.minecraft.client.model.geom.ModelLayers; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.ItemRenderer; +import net.minecraft.client.renderer.entity.RenderLayerParent; +import net.minecraft.client.renderer.entity.layers.RenderLayer; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.item.ItemStack; + +public final class ManticoreWingsLayer extends RenderLayer> { + private static final ResourceLocation TEXTURE = ResourceLocation.fromNamespaceAndPath("antarchy", "textures/models/armor/manticore_wings.png"); + private final ElytraModel model; + + public ManticoreWingsLayer(RenderLayerParent> renderer) { + super(renderer); + this.model = new ElytraModel<>(Minecraft.getInstance().getEntityModels().bakeLayer(ModelLayers.ELYTRA)); + } + + @Override + public void render(PoseStack poseStack, MultiBufferSource buffer, int packedLight, + net.minecraft.client.player.AbstractClientPlayer player, float limbSwing, + float limbSwingAmount, float partialTick, float ageInTicks, + float netHeadYaw, float headPitch) { + if (!ManticoreWingsItem.isWearingManticoreWings(player) || player.isInvisible()) { + return; + } + ItemStack chestStack = player.getItemBySlot(EquipmentSlot.CHEST); + poseStack.pushPose(); + this.getParentModel().copyPropertiesTo(this.model); + if (player.isCrouching()) { + poseStack.translate(0.0F, 0.0F, 0.125F); + } + this.model.setupAnim(player, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch); + VertexConsumer consumer = ItemRenderer.getFoilBufferDirect(buffer, RenderType.armorCutoutNoCull(TEXTURE), false, chestStack.hasFoil()); + this.model.renderToBuffer(poseStack, consumer, packedLight, OverlayTexture.NO_OVERLAY); + poseStack.popPose(); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/WindVortexRenderer.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/WindVortexRenderer.java index 798035ed..36ae38c6 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/WindVortexRenderer.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/WindVortexRenderer.java @@ -30,6 +30,8 @@ public class WindVortexRenderer extends EntityRenderer { float height = entity.getVortexHeight(); float topRadius = entity.getTopRadius(); float age = entity.tickCount + partialTick; + float fadeIn = Mth.clamp(age / 8.0F, 0.0F, 1.0F); + float alphaMultiplier = fadeIn * entity.getFadeOutProgress(partialTick); WindVortexEntity.Basis basis = entity.basis(); boolean pull = entity.getMode() == WindVortexEntity.VortexMode.LENS_PULL; boolean push = entity.getMode() == WindVortexEntity.VortexMode.LENS_PUSH; @@ -41,7 +43,7 @@ public class WindVortexRenderer extends EntityRenderer { float shapeProgress = pull ? 1.0F - progress : progress; float radius = Mth.lerp(shapeProgress, BASE_RADIUS, topRadius); float ringSpin = spinDirection * age * (0.13F + progress * 0.045F) + ring * 0.47F; - float alpha = 1.0F; + float alpha = alphaMultiplier; float thickness = 0.025F + radius * 0.012F; float arcLength = 0.34F + progress * 0.08F; int red = push ? 70 : 64; 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 efa30bf1..77709dbe 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 @@ -213,8 +213,15 @@ public final class CreativeTabContents { entry("polished_typhonite_stairs", "building_blocks"), entry("polished_typhonite_slab", "building_blocks"), entry("polished_typhonite_wall", "building_blocks"), + entry("verdant_nyxium", "natural_blocks"), entry("spiraling_vines", "natural_blocks"), + entry("gorevine", "natural_blocks"), entry("whirlflower", "natural_blocks"), + entry("nadir_nyxium", "natural_blocks"), + entry("nadir_fern", "natural_blocks"), + entry("large_nadir_fern", "natural_blocks"), + entry("duskbell", "natural_blocks"), + entry("typhonite_pillar", "building_blocks"), entry("antigravel", "natural_blocks"), entry("budding_blood_crystal", "building_blocks"), entry("blood_crystal_block", "building_blocks"), @@ -432,6 +439,7 @@ public final class CreativeTabContents { entry("royal_guardian_boots", "combat"), entry("royal_guardian_shield", "combat"), entry("royal_assailant_battleaxe", "combat"), + entry("royal_assailant_staff", "combat"), entry("royal_assailant_helmet", "combat"), entry("royal_assailant_chestplate", "combat"), entry("royal_assailant_leggings", "combat"), @@ -451,6 +459,7 @@ public final class CreativeTabContents { entry("scorpion_whip", "combat"), entry("fallen_king_crown", "combat"), entry("brutalfly_elytra", "combat"), + entry("manticore_wings", "combat"), entry("jumpy_boots", "combat"), entry("raw_uranium_scrap", "ingredients"), entry("raw_titanium_scrap", "ingredients"), @@ -483,6 +492,7 @@ public final class CreativeTabContents { entry("jerry_nucleus", "ingredients"), entry("stink_bug", "ingredients"), entry("brutalfly_wing", "ingredients"), + entry("manticore_wing", "ingredients"), entry("primordial_scute", "ingredients"), entry("triffid_goo", "ingredients"), entry("vortex_charge", "ingredients"), @@ -505,6 +515,7 @@ public final class CreativeTabContents { entry("raw_bug_meat", "ingredients"), entry("cooked_bug_meat", "ingredients"), entry("broodfruit", "ingredients"), + entry("broodfruit_cobbler", "ingredients"), entry("cheep", "ingredients"), entry("cooked_cheep", "ingredients"), entry("root_beer", "ingredients"), diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ManticoreEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ManticoreEntity.java index 1eb52b97..11491e80 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ManticoreEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ManticoreEntity.java @@ -53,6 +53,8 @@ import software.bernie.geckolib.util.GeckoLibUtil; public class ManticoreEntity extends Monster implements GeoEntity { private static final String SUMMONER_KEY = "QueenSummoner"; + private static final String PLAYER_SUMMONER_KEY = "PlayerSummoner"; + private static final String PLAYER_SUMMON_LIFETIME_KEY = "PlayerSummonLifetime"; private static final int LOST_SUMMONER_GRACE_TICKS = 200; private static final int TAKEOFF_COOLDOWN_TICKS = 40; private static final int STING_COOLDOWN_TICKS = 60; @@ -72,6 +74,10 @@ public class ManticoreEntity extends Monster implements GeoEntity { @Nullable private UUID summonerId; + @Nullable + private UUID playerSummonerId; + private int playerSummonLifetime; + private int playerSummonAge; private int lostSummonerTicks; private int takeoffCooldown; private int stingCooldown; @@ -124,7 +130,7 @@ public class ManticoreEntity extends Monster implements GeoEntity { this.goalSelector.addGoal(4, new LookAtPlayerGoal(this, Player.class, 10.0F)); this.goalSelector.addGoal(5, new RandomLookAroundGoal(this)); this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); - this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, this::canTargetEntity)); } @Override @@ -135,6 +141,16 @@ public class ManticoreEntity extends Monster implements GeoEntity { public void markQueenSummoned(UUID queenId) { this.summonerId = queenId; + this.playerSummonerId = null; + this.lostSummonerTicks = 0; + this.setPersistenceRequired(); + } + + public void markPlayerSummoned(UUID playerId, int lifetimeTicks) { + this.playerSummonerId = playerId; + this.summonerId = null; + this.playerSummonLifetime = lifetimeTicks; + this.playerSummonAge = 0; this.lostSummonerTicks = 0; this.setPersistenceRequired(); } @@ -147,6 +163,18 @@ public class ManticoreEntity extends Monster implements GeoEntity { return this.summonerId != null; } + public boolean isPlayerSummoned() { + return this.playerSummonerId != null; + } + + @Override + public boolean isAlliedTo(Entity entity) { + if (entity != null && this.playerSummonerId != null && entity.getUUID().equals(this.playerSummonerId)) { + return true; + } + return super.isAlliedTo(entity); + } + public static int countSummonedBy(ServerLevel level, UUID queenId) { int count = 0; for (Entity entity : level.getAllEntities()) { @@ -164,7 +192,7 @@ public class ManticoreEntity extends Monster implements GeoEntity { @Override public boolean requiresCustomPersistence() { - return this.summonerId != null || super.requiresCustomPersistence(); + return this.summonerId != null || this.playerSummonerId != null || super.requiresCustomPersistence(); } @Override @@ -189,6 +217,8 @@ public class ManticoreEntity extends Monster implements GeoEntity { this.tickQueenSummonCleanup(); + this.tickPlayerSummon(); + LivingEntity target = this.getTarget(); if (target != null && target.isAlive()) { if (this.onGround() && this.takeoffCooldown <= 0 && this.distanceToSqr(target) > 6.0D) { @@ -200,6 +230,50 @@ public class ManticoreEntity extends Monster implements GeoEntity { } } + private void tickPlayerSummon() { + if (this.playerSummonerId == null || !(this.level() instanceof ServerLevel serverLevel)) { + return; + } + if (++this.playerSummonAge >= this.playerSummonLifetime) { + this.discard(); + return; + } + Entity entity = serverLevel.getEntity(this.playerSummonerId); + if (!(entity instanceof Player player) || !player.isAlive()) { + this.discard(); + return; + } + LivingEntity target = player.getLastHurtMob(); + if (target == null || !target.isAlive() || !this.canTargetEntity(target)) { + target = player.getLastHurtByMob(); + } + if (target != null && target.isAlive() && this.canTargetEntity(target)) { + this.setTarget(target); + } + } + + private boolean canTargetEntity(LivingEntity target) { + if (target == null || target == this || this.isAlliedTo(target) || target.isAlliedTo(this)) { + return false; + } + if (this.playerSummonerId != null) { + if (!(this.level() instanceof ServerLevel serverLevel)) { + return false; + } + Entity entity = serverLevel.getEntity(this.playerSummonerId); + if (!(entity instanceof Player player)) { + return false; + } + return target == player.getLastHurtMob() || target == player.getLastHurtByMob(); + } + return true; + } + + @Override + public void setTarget(@Nullable LivingEntity target) { + super.setTarget(target != null && !this.canTargetEntity(target) ? null : target); + } + private void tickQueenSummonCleanup() { if (this.summonerId == null || !(this.level() instanceof ServerLevel serverLevel)) { return; @@ -307,12 +381,19 @@ public class ManticoreEntity extends Monster implements GeoEntity { if (this.summonerId != null) { tag.putUUID(SUMMONER_KEY, this.summonerId); } + if (this.playerSummonerId != null) { + tag.putUUID(PLAYER_SUMMONER_KEY, this.playerSummonerId); + tag.putInt(PLAYER_SUMMON_LIFETIME_KEY, this.playerSummonLifetime); + } } @Override public void readAdditionalSaveData(CompoundTag tag) { super.readAdditionalSaveData(tag); this.summonerId = tag.hasUUID(SUMMONER_KEY) ? tag.getUUID(SUMMONER_KEY) : null; + this.playerSummonerId = tag.hasUUID(PLAYER_SUMMONER_KEY) ? tag.getUUID(PLAYER_SUMMONER_KEY) : null; + this.playerSummonLifetime = tag.getInt(PLAYER_SUMMON_LIFETIME_KEY); + this.playerSummonAge = 0; this.lostSummonerTicks = 0; } 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 4767558b..6a46a076 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 @@ -3,7 +3,6 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.content.block.AntimetalScaffoldingBlock; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; 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; @@ -13,7 +12,6 @@ import net.minecraft.resources.ResourceKey; import net.minecraft.server.level.ServerLevel; import net.minecraft.tags.BlockTags; import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntitySelector; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.MoverType; @@ -38,8 +36,6 @@ public class UpwardFallingBlockEntity extends Entity { private static final double DRAG = 0.98; private static final int MAX_TICKS = 200; private static final int MAX_LIVE_PER_LEVEL = 200; - private static final double PLAYER_ACTIVATION_RADIUS = 128.0; - private static final int INSTANT_MOVE_MAX_DISTANCE = 48; private static final double MIN_TRAVEL_FOR_DAMAGE = 1.5; private static final Object2IntOpenHashMap> LIVE_COUNT = new Object2IntOpenHashMap<>(); @@ -87,10 +83,7 @@ public class UpwardFallingBlockEntity extends Entity { } } - boolean noPlayerNearby = serverLevel.getNearestPlayer( - pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, PLAYER_ACTIVATION_RADIUS, EntitySelector.NO_SPECTATORS) == null; - if (live >= MAX_LIVE_PER_LEVEL || noPlayerNearby) { - resolveInstantly(serverLevel, pos, state, breaksOnLeaves); + if (live >= MAX_LIVE_PER_LEVEL) { return; } @@ -105,46 +98,6 @@ public class UpwardFallingBlockEntity extends Entity { } } - private static void resolveInstantly(ServerLevel level, BlockPos pos, BlockState state, boolean breaksOnLeaves) { - level.removeBlock(pos, false); - - BlockPos.MutableBlockPos rest = pos.mutable(); - for (int i = 0; i < INSTANT_MOVE_MAX_DISTANCE; i++) { - BlockPos above = rest.above(); - if (above.getY() >= level.getMaxBuildHeight()) { - break; - } - BlockState aboveState = level.getBlockState(above); - if (aboveState.getBlock() instanceof AntimetalScaffoldingBlock) { - break; - } - if (breaksOnLeaves && aboveState.is(BlockTags.LEAVES)) { - dropAsItem(level, rest, state); - return; - } - if (!aboveState.canBeReplaced()) { - break; - } - rest.move(Direction.UP); - } - - if (level.getBlockState(rest).canBeReplaced()) { - level.setBlock(rest, state, Block.UPDATE_ALL); - } else { - dropAsItem(level, rest, state); - } - } - - private static void dropAsItem(Level level, BlockPos pos, BlockState state) { - if (state.isAir()) { - return; - } - ItemStack drop = new ItemStack(state.getBlock().asItem()); - if (!drop.isEmpty()) { - Block.popResource(level, pos, drop); - } - } - @Override public void remove(Entity.RemovalReason reason) { if (this.counted) { 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 c3703656..fbcb37d3 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 @@ -1032,7 +1032,7 @@ public class NightmareEntity extends Monster implements GeoEntity { } } if (this.level() instanceof ServerLevel serverLevel) { - serverLevel.sendParticles(ParticleTypes.SOUL_FIRE_FLAME, this.getX(), this.getY() + 1.6D, this.getZ(), 12, 0.9D, 0.35D, 0.9D, 0.02D); + serverLevel.sendParticles(AntarchyObjects.NIGHTMARE_FIRE_FLAME.get(), this.getX(), this.getY() + 1.6D, this.getZ(), 12, 0.9D, 0.35D, 0.9D, 0.02D); serverLevel.sendParticles(ParticleTypes.SMOKE, this.getX(), this.getY() + 1.6D, this.getZ(), 8, 0.7D, 0.25D, 0.7D, 0.03D); } } @@ -1077,7 +1077,7 @@ public class NightmareEntity extends Monster implements GeoEntity { } } 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(AntarchyObjects.NIGHTMARE_FIRE_FLAME.get(), 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); } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/portal/DimensionalTearEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/portal/DimensionalTearEntity.java index 41234884..49095aa7 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/portal/DimensionalTearEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/portal/DimensionalTearEntity.java @@ -80,6 +80,10 @@ public class DimensionalTearEntity extends Entity implements GeoEntity { private UUID queenOwnerId; private int queenManticoreCount; private boolean queenManticoreSpawned; + @Nullable + private UUID staffOwnerId; + private int staffManticoreCount; + private boolean staffManticoreSpawned; public DimensionalTearEntity(EntityType entityType, Level level) { super(entityType, level); @@ -104,6 +108,14 @@ public class DimensionalTearEntity extends Entity implements GeoEntity { return tear; } + public static DimensionalTearEntity createStaffSummonTear(ServerLevel level, Vec3 pos, float yaw, + int lifetimeTicks, UUID playerId, int count) { + DimensionalTearEntity tear = create(level, pos, yaw, lifetimeTicks); + tear.staffOwnerId = playerId; + tear.staffManticoreCount = Math.max(1, count); + return tear; + } + public void linkTo(DimensionalTearEntity other) { this.linkedTearId = other.getUUID(); this.linkedFallbackPos = other.position(); @@ -139,14 +151,20 @@ public class DimensionalTearEntity extends Entity implements GeoEntity { this.spawnQueenManticores((ServerLevel) this.level()); } + if (this.staffOwnerId != null && this.ageTicks == OPENING_ANIMATION_TICKS) { + this.spawnStaffManticores((ServerLevel) this.level()); + } + DimensionalTearEntity linked = this.findLinkedTear(); if (linked == null || !linked.isAlive()) { this.discard(); return; } - this.tickMobEvent((ServerLevel) this.level()); - this.tickTeleport(linked); + if (this.staffOwnerId == null && this.ageTicks >= OPENING_ANIMATION_TICKS) { + this.tickMobEvent((ServerLevel) this.level()); + this.tickTeleport(linked); + } } private void tickMobEvent(ServerLevel level) { @@ -232,6 +250,37 @@ public class DimensionalTearEntity extends Entity implements GeoEntity { } } + private void spawnStaffManticores(ServerLevel level) { + if (this.staffManticoreSpawned) { + return; + } + this.staffManticoreSpawned = true; + Entity owner = level.getEntity(this.staffOwnerId); + if (!(owner instanceof net.minecraft.world.entity.player.Player player) || !player.isAlive()) { + return; + } + for (int i = 0; i < this.staffManticoreCount; i++) { + ManticoreEntity manticore = AntarchyObjects.MANTICORE.get().create(level); + if (manticore == null) { + continue; + } + Vec3 exit = this.exitPosition().add(0.0D, 0.8D + i * 0.35D, 0.0D); + manticore.moveTo(exit.x, exit.y, exit.z, this.getYRot(), 0.0F); + if (!level.noCollision(manticore)) { + manticore.discard(); + continue; + } + manticore.finalizeSpawn(level, level.getCurrentDifficultyAt(BlockPos.containing(exit)), MobSpawnType.MOB_SUMMONED, null); + manticore.markPlayerSummoned(player.getUUID(), 20 * 30); + if (player.getLastHurtMob() != null && player.getLastHurtMob().isAlive()) { + manticore.setTarget(player.getLastHurtMob()); + } + manticore.setDeltaMovement(this.getViewVector(1.0F).scale(0.2D).add(0.0D, 0.08D, 0.0D)); + manticore.setNoGravity(true); + level.addFreshEntity(manticore); + } + } + public static void discardQueenOwnedTears(ServerLevel level, UUID queenId) { for (DimensionalTearEntity tear : level.getEntitiesOfClass(DimensionalTearEntity.class, new AABB(-3.0E7D, level.getMinBuildHeight(), -3.0E7D, 3.0E7D, level.getMaxBuildHeight(), 3.0E7D), diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/vortex/VortexEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/vortex/VortexEntity.java index ac7ba713..c350fe92 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/vortex/VortexEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/vortex/VortexEntity.java @@ -1,6 +1,7 @@ package com.craisinlord.antarchy.content.entity.vortex; import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.syncher.EntityDataAccessor; @@ -95,6 +96,9 @@ public class VortexEntity extends Monster implements GeoEntity { public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { + if (pos.getY() < ThoraxisUndersideManager.GRAVITY_FLIP_Y && ThoraxisUndersideManager.isThoraxis(level.getLevel())) { + return false; + } return level.getDifficulty() != Difficulty.PEACEFUL && level.isEmptyBlock(pos) && level.isEmptyBlock(pos.above()) @@ -241,15 +245,15 @@ public class VortexEntity extends Monster implements GeoEntity { if (!(this.level() instanceof ServerLevel serverLevel) || windVortexTypeSupplier == null) { return; } - Vec3 targetPos = target.position(); - Vec3 fromMob = targetPos.subtract(this.position()); - Vec3 drift = fromMob.lengthSqr() > 1.0E-6D ? fromMob.normalize().scale(0.045D) : this.getViewVector(0.0F).scale(0.045D); - Vec3 position = targetPos.add( - (this.random.nextDouble() - 0.5D) * 1.6D, - 0.05D, - (this.random.nextDouble() - 0.5D) * 1.6D - ); - WindVortexEntity vortex = WindVortexEntity.create(serverLevel, windVortexTypeSupplier.get(), position, drift, this, true); + Vec3 targetPos = target.getBoundingBox().getCenter(); + Vec3 origin = this.getEyePosition().add(this.getViewVector(1.0F).scale(0.8D)); + Vec3 direction = targetPos.subtract(origin); + double distance = direction.length(); + Vec3 drift = distance > 1.0E-6D ? direction.scale(0.24D / distance) : this.getViewVector(1.0F).scale(0.24D); + WindVortexEntity vortex = WindVortexEntity.create(serverLevel, windVortexTypeSupplier.get(), origin, Vec3.ZERO, this, true); + vortex.setTravel(drift); + vortex.setTravelDuration(Mth.clamp((int) Math.ceil(distance / drift.length()), 8, 36)); + vortex.setHoming(false); serverLevel.addFreshEntity(vortex); serverLevel.playSound(null, this.getX(), this.getY(), this.getZ(), SoundEvents.BREEZE_SHOOT, this.getSoundSource(), 1.0F, 0.9F); } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/vortex/WindVortexEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/vortex/WindVortexEntity.java index 85a43331..6c237620 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/vortex/WindVortexEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/vortex/WindVortexEntity.java @@ -46,6 +46,8 @@ public class WindVortexEntity extends Entity { SynchedEntityData.defineId(WindVortexEntity.class, EntityDataSerializers.FLOAT); private static final EntityDataAccessor AXIS_Z = SynchedEntityData.defineId(WindVortexEntity.class, EntityDataSerializers.FLOAT); + private static final EntityDataAccessor FADING_OUT = + SynchedEntityData.defineId(WindVortexEntity.class, EntityDataSerializers.BOOLEAN); private static final String AGE_KEY = "Age"; private static final String DURATION_KEY = "Duration"; @@ -67,6 +69,7 @@ public class WindVortexEntity extends Entity { private static final double BASE_RADIUS = 0.35D; private static final double DRIFT_FRICTION = 0.96D; + private static final int FADE_OUT_TICKS = 8; public enum VortexMode { UPWARD, @@ -83,6 +86,8 @@ public class WindVortexEntity extends Entity { private Vec3 travelVelocity = Vec3.ZERO; private boolean travelling = false; private boolean homing = false; + private int travelTicksRemaining; + private int fadeOutTicksRemaining; private final Map carriedProgress = new HashMap<>(); @Nullable private UUID ownerUuid; @@ -119,19 +124,30 @@ public class WindVortexEntity extends Entity { builder.define(AXIS_X, 0.0F); builder.define(AXIS_Y, 1.0F); builder.define(AXIS_Z, 0.0F); + builder.define(FADING_OUT, false); } @Override public void tick() { super.tick(); - boolean lensVortex = this.getMode() != VortexMode.UPWARD; - if (!lensVortex && (this.isInLava() || this.isInsideSolidBlock())) { - this.fadeOut(); + if (this.level().isClientSide) { + if (this.fadeOutTicksRemaining > 0) { + this.fadeOutTicksRemaining--; + } return; } - if (this.level().isClientSide) { + if (this.isFadingOut()) { + if (--this.fadeOutTicksRemaining <= 0) { + this.discard(); + } + return; + } + + boolean lensVortex = this.getMode() != VortexMode.UPWARD; + if (!lensVortex && (this.isInLava() || this.isInsideSolidBlock())) { + this.fadeOut(); return; } @@ -155,6 +171,12 @@ public class WindVortexEntity extends Entity { } this.setDeltaMovement(this.travelVelocity); this.move(net.minecraft.world.entity.MoverType.SELF, this.travelVelocity); + if (--this.travelTicksRemaining <= 0) { + this.travelling = false; + this.noPhysics = false; + this.travelVelocity = Vec3.ZERO; + this.setDeltaMovement(Vec3.ZERO); + } } else { Vec3 drift = this.getDeltaMovement().multiply(DRIFT_FRICTION, DRIFT_FRICTION, DRIFT_FRICTION); this.setDeltaMovement(drift); @@ -207,15 +229,17 @@ public class WindVortexEntity extends Entity { } private void fadeOut() { - if (!this.level().isClientSide) { + if (!this.level().isClientSide && !this.isFadingOut()) { + this.entityData.set(FADING_OUT, true); + this.fadeOutTicksRemaining = FADE_OUT_TICKS; this.level().broadcastEntityEvent(this, (byte) 60); - this.discard(); } } @Override public void handleEntityEvent(byte id) { if (id == 60) { + this.fadeOutTicksRemaining = FADE_OUT_TICKS; return; } super.handleEntityEvent(id); @@ -526,9 +550,14 @@ public class WindVortexEntity extends Entity { public void setTravel(Vec3 velocity) { this.travelVelocity = velocity; this.travelling = true; + this.travelTicksRemaining = 24; this.noPhysics = true; } + public void setTravelDuration(int ticks) { + this.travelTicksRemaining = Math.max(1, ticks); + } + public void setHoming(boolean homing) { this.homing = homing; } @@ -558,6 +587,17 @@ public class WindVortexEntity extends Entity { this.entityData.set(DAMAGING, damaging); } + public boolean isFadingOut() { + return this.entityData.get(FADING_OUT); + } + + public float getFadeOutProgress(float partialTick) { + if (!this.isFadingOut()) { + return 1.0F; + } + return Mth.clamp((this.fadeOutTicksRemaining - partialTick) / (float) FADE_OUT_TICKS, 0.0F, 1.0F); + } + @Override protected void readAdditionalSaveData(CompoundTag tag) { this.age = tag.getInt(AGE_KEY); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/ManticoreWingsItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/ManticoreWingsItem.java new file mode 100644 index 00000000..fa5ca15e --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/ManticoreWingsItem.java @@ -0,0 +1,62 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.entity.ManticoreEntity; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; +import net.minecraft.ChatFormatting; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ElytraItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; + +public final class ManticoreWingsItem extends ElytraItem { + private static final ResourceLocation REPAIR_MATERIAL_ID = ResourceLocation.fromNamespaceAndPath("antarchy", "manticore_wing"); + private static final int DAMAGE_COOLDOWN_TICKS = 10; + private static final float COLLISION_DAMAGE = 8.0F; + private static final Map LAST_COLLISION_DAMAGE = new ConcurrentHashMap<>(); + + public ManticoreWingsItem(Properties properties) { + super(properties); + } + + @Override + public boolean isValidRepairItem(ItemStack toRepair, ItemStack repair) { + return BuiltInRegistries.ITEM.getOptional(REPAIR_MATERIAL_ID).map(repair::is).orElse(false); + } + + @Override + public void inventoryTick(ItemStack stack, Level level, net.minecraft.world.entity.Entity entity, int slotId, boolean selected) { + super.inventoryTick(stack, level, entity, slotId, selected); + if (!(entity instanceof Player player) || level.isClientSide || !player.isFallFlying() + || player.getItemBySlot(EquipmentSlot.CHEST) != stack) { + return; + } + long gameTime = level.getGameTime(); + for (LivingEntity target : level.getEntitiesOfClass(LivingEntity.class, player.getBoundingBox().inflate(0.45D), living -> + living != player && living.isAlive() && !player.isAlliedTo(living) && !living.isAlliedTo(player))) { + long availableAt = LAST_COLLISION_DAMAGE.getOrDefault(target.getUUID(), 0L); + if (availableAt <= gameTime && target.hurt(level.damageSources().playerAttack(player), COLLISION_DAMAGE)) { + LAST_COLLISION_DAMAGE.put(target.getUUID(), gameTime + DAMAGE_COOLDOWN_TICKS); + } + } + } + + public static boolean isWearingManticoreWings(LivingEntity entity) { + return entity != null && entity.getItemBySlot(EquipmentSlot.CHEST).getItem() instanceof ManticoreWingsItem; + } + + @Override + public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("tooltip.antarchy.manticore_wings").withStyle(ChatFormatting.GRAY)); + super.appendHoverText(stack, context, tooltipComponents, tooltipFlag); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalAssailantStaffItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalAssailantStaffItem.java new file mode 100644 index 00000000..b6d7b220 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalAssailantStaffItem.java @@ -0,0 +1,106 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.entity.portal.DimensionalTearEntity; +import com.craisinlord.antarchy.content.client.model.ResourceBackedGeoItemModel; +import com.craisinlord.antarchy.content.client.renderer.AnimatedHeldItemRenderer; +import java.util.List; +import java.util.function.Consumer; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.player.Player; +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 net.minecraft.world.phys.Vec3; +import software.bernie.geckolib.animatable.GeoItem; +import software.bernie.geckolib.animatable.client.GeoRenderProvider; +import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationController; +import software.bernie.geckolib.animation.PlayState; +import software.bernie.geckolib.animation.RawAnimation; +import software.bernie.geckolib.util.GeckoLibUtil; + +public final class RoyalAssailantStaffItem extends Item implements GeoItem { + private static final int COOLDOWN_TICKS = 20 * 30; + private static final int TEAR_LIFETIME_TICKS = 20 * 6; + private static final ResourceLocation MODEL_LOCATION = ResourceLocation.fromNamespaceAndPath("antarchy", "geo/royal_assailant_staff.geo.json"); + private static final ResourceLocation TEXTURE_LOCATION = ResourceLocation.fromNamespaceAndPath("antarchy", "textures/models/item/royal_assailant_staff.png"); + private static final ResourceLocation ANIMATION_LOCATION = ResourceLocation.fromNamespaceAndPath("antarchy", "animations/royal_assailant_staff.animation.json"); + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + public RoyalAssailantStaffItem(Properties properties) { + super(properties); + GeoItem.registerSyncedAnimatable(this); + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { + ItemStack stack = player.getItemInHand(hand); + if (player.getCooldowns().isOnCooldown(this)) { + return InteractionResultHolder.fail(stack); + } + if (level.isClientSide) { + return InteractionResultHolder.sidedSuccess(stack, true); + } + ServerLevel serverLevel = (ServerLevel) level; + Vec3 forward = player.getLookAngle().normalize(); + Vec3 perpendicular = new Vec3(-forward.z, 0.0D, forward.x); + if (perpendicular.lengthSqr() < 0.01D) { + perpendicular = new Vec3(1.0D, 0.0D, 0.0D); + } + perpendicular = perpendicular.normalize().scale(4.0D); + Vec3 center = player.position().add(0.0D, player.getBbHeight() + 2.0D, 0.0D); + DimensionalTearEntity first = DimensionalTearEntity.createStaffSummonTear(serverLevel, center.add(perpendicular), player.getYRot(), TEAR_LIFETIME_TICKS, player.getUUID(), 2); + DimensionalTearEntity second = DimensionalTearEntity.createStaffSummonTear(serverLevel, center.subtract(perpendicular), player.getYRot() + 180.0F, TEAR_LIFETIME_TICKS, player.getUUID(), 2); + first.linkTo(second); + second.linkTo(first); + serverLevel.addFreshEntity(first); + serverLevel.addFreshEntity(second); + player.getCooldowns().addCooldown(this, COOLDOWN_TICKS); + triggerAnim(player, GeoItem.getOrAssignId(stack, serverLevel), "use_controller", "use"); + level.playSound(null, player.blockPosition(), SoundEvents.RESPAWN_ANCHOR_CHARGE, SoundSource.HOSTILE, 1.0F, 0.75F); + return InteractionResultHolder.success(stack); + } + + @Override + public void createGeoRenderer(Consumer consumer) { + consumer.accept(new GeoRenderProvider() { + private AnimatedHeldItemRenderer renderer; + + @Override + public net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer getGeoItemRenderer() { + if (this.renderer == null) { + this.renderer = new AnimatedHeldItemRenderer<>(new ResourceBackedGeoItemModel<>(MODEL_LOCATION, TEXTURE_LOCATION, ANIMATION_LOCATION)); + } + return this.renderer; + } + }); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @Override + public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("tooltip.antarchy.royal_assailant_staff").withStyle(ChatFormatting.LIGHT_PURPLE)); + super.appendHoverText(stack, context, tooltipComponents, tooltipFlag); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "idle_controller", state -> + state.setAndContinue(RawAnimation.begin().thenLoop("idle")))); + controllers.add(new AnimationController<>(this, "use_controller", state -> PlayState.STOP) + .triggerableAnim("use", RawAnimation.begin().thenPlay("use"))); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisBiomeSource.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisBiomeSource.java index 2b040d7f..6e4dcc29 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisBiomeSource.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisBiomeSource.java @@ -22,9 +22,10 @@ public final class ThoraxisBiomeSource extends BiomeSource { private static final int REGION_DETAIL_SCALE = 41; private static final int VERTICAL_NOISE_SCALE = 8; private static final double DUNES_SELECTOR_CUTOFF = 0.38D; + private static final double DREAM_DUNES_SELECTOR_CUTOFF = 0.12D; private static final double HILLS_SELECTOR_CUTOFF = 0.24D; - private static final double NADIR_FOREST_SELECTOR_MIN = 0.42D; - private static final double NADIR_FOREST_SELECTOR_MAX = 0.66D; + private static final double NADIR_FOREST_SELECTOR_MIN = 0.54D; + private static final double NADIR_FOREST_SELECTOR_MAX = 0.56D; private static final ResourceKey NIGHTMARE_WASTES = ResourceKey.create( Registries.BIOME, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "nightmare_wastes") @@ -166,7 +167,11 @@ public final class ThoraxisBiomeSource extends BiomeSource { return this.lucidPoolsBiome; } - if (this.vortexExpanseBiome != null && y <= this.dreamDunesMaxQuartY && dreamDunesSelector <= DUNES_SELECTOR_CUTOFF) { + if (this.dreamDunesBiome != null && y <= this.dreamDunesMaxQuartY && dreamDunesSelector <= DREAM_DUNES_SELECTOR_CUTOFF) { + return this.dreamDunesBiome; + } + + if (this.vortexExpanseBiome != null && dreamDunesSelector <= DUNES_SELECTOR_CUTOFF) { return this.vortexExpanseBiome; } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisUndersideManager.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisUndersideManager.java index 46655401..ca9a72b3 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisUndersideManager.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisUndersideManager.java @@ -6,7 +6,9 @@ import com.craisinlord.antarchy.content.block.DreamSandBlock; import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; import com.craisinlord.antarchy.content.gravity.AntarchyGravityTransition; +import java.util.HashMap; import java.util.HashSet; +import java.util.Map; import java.util.Set; import java.util.UUID; import net.minecraft.core.BlockPos; @@ -25,11 +27,15 @@ public final class ThoraxisUndersideManager { public static final int GRAVITY_FLIP_Y = 0; private static final ResourceLocation THORAXIS_DIMENSION = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "thoraxis"); private static final AntarchyGravityTransition TRANSITION = new AntarchyGravityTransition(12); - private static final int EFFECT_DURATION_TICKS = 40; + private static final int EFFECT_DURATION_TICKS = 50; + private static final int EFFECT_REFRESH_THRESHOLD_TICKS = 10; private static final int MAX_FLIPS_PER_TICK = 8; - private static final Set UNDERSIDE_APPLIED_EFFECT = new HashSet<>(); + private static final int ENTER_UNDERSIDE_Y = GRAVITY_FLIP_Y - 4; + private static final int EXIT_UNDERSIDE_Y = GRAVITY_FLIP_Y + 4; + private static final int FLIP_COOLDOWN_TICKS = 40; private static final Set UNDERSIDE_FORCED_GRAVITY = new HashSet<>(); private static final Set ACTIVE_ITEMS_SCRATCH = new HashSet<>(); + private static final Map LAST_FLIP_TICK = new HashMap<>(); private ThoraxisUndersideManager() { } @@ -39,6 +45,7 @@ public final class ThoraxisUndersideManager { return; } + long now = level.getGameTime(); Set activeThisTick = ACTIVE_ITEMS_SCRATCH; activeThisTick.clear(); int flipsRemaining = MAX_FLIPS_PER_TICK; @@ -47,28 +54,11 @@ public final class ThoraxisUndersideManager { continue; } - boolean inUnderside = entity.getY() < GRAVITY_FLIP_Y; - if (entity instanceof LivingEntity living) { - UUID uuid = entity.getUUID(); - if (inUnderside) { - boolean needsFlip = AntarchyGravityApi.getGravityDirection(living) != AntarchyGravityDirection.UP - || !AntarchyGravityApi.isGravityForced(living); - if (needsFlip && flipsRemaining <= 0) { - continue; - } - if (needsFlip) { - flipsRemaining--; - } - applyUndersideInversion(living); - } else if (UNDERSIDE_APPLIED_EFFECT.remove(uuid)) { - if (living.hasEffect(AntarchyObjects.INVERTED_EFFECT.get())) { - living.removeEffect(AntarchyObjects.INVERTED_EFFECT.get()); - } - if (AntarchyGravityApi.getGravityDirection(living) == AntarchyGravityDirection.UP - && AntarchyGravityApi.isGravityForced(living)) { - AntarchyGravityApi.setGravityDirection(living, AntarchyGravityDirection.DOWN, false, TRANSITION); - } + boolean hasEffect = living.hasEffect(AntarchyObjects.INVERTED_EFFECT.get()); + int threshold = hasEffect ? EXIT_UNDERSIDE_Y : ENTER_UNDERSIDE_Y; + if (living.getY() < threshold) { + refreshInvertedEffect(living); } continue; } @@ -78,40 +68,58 @@ public final class ThoraxisUndersideManager { } UUID uuid = entity.getUUID(); - if (inUnderside) { + boolean tracked = UNDERSIDE_FORCED_GRAVITY.contains(uuid); + boolean shouldInvert = tracked ? entity.getY() < EXIT_UNDERSIDE_Y : entity.getY() < ENTER_UNDERSIDE_Y; + + if (shouldInvert) { boolean needsFlip = AntarchyGravityApi.getGravityDirection(entity) != AntarchyGravityDirection.UP || !AntarchyGravityApi.isGravityForced(entity); - if (needsFlip && flipsRemaining <= 0) { - continue; - } activeThisTick.add(uuid); UNDERSIDE_FORCED_GRAVITY.add(uuid); + if (needsFlip && (flipsRemaining <= 0 || !flipReady(uuid, now))) { + continue; + } if (needsFlip) { flipsRemaining--; + LAST_FLIP_TICK.put(uuid, now); AntarchyGravityApi.setForcedGravityDirection(entity, AntarchyGravityDirection.UP, TRANSITION); } continue; } - if (UNDERSIDE_FORCED_GRAVITY.remove(uuid) - && AntarchyGravityApi.getGravityDirection(entity) == AntarchyGravityDirection.UP - && AntarchyGravityApi.isGravityForced(entity)) { - AntarchyGravityApi.setGravityDirection(entity, AntarchyGravityDirection.DOWN, false, TRANSITION); + if (tracked) { + boolean isForcedUp = AntarchyGravityApi.getGravityDirection(entity) == AntarchyGravityDirection.UP + && AntarchyGravityApi.isGravityForced(entity); + if (isForcedUp && !flipReady(uuid, now)) { + activeThisTick.add(uuid); + continue; + } + UNDERSIDE_FORCED_GRAVITY.remove(uuid); + if (isForcedUp) { + LAST_FLIP_TICK.put(uuid, now); + AntarchyGravityApi.setGravityDirection(entity, AntarchyGravityDirection.DOWN, false, TRANSITION); + } } } UNDERSIDE_FORCED_GRAVITY.retainAll(activeThisTick); + LAST_FLIP_TICK.values().removeIf(t -> now - t > FLIP_COOLDOWN_TICKS * 4L); + } + + private static boolean flipReady(UUID uuid, long now) { + Long last = LAST_FLIP_TICK.get(uuid); + return last == null || now - last >= FLIP_COOLDOWN_TICKS; } public static void applyUndersideInversion(LivingEntity living) { - UNDERSIDE_APPLIED_EFFECT.add(living.getUUID()); - if (!living.hasEffect(AntarchyObjects.INVERTED_EFFECT.get())) { + refreshInvertedEffect(living); + } + + private static void refreshInvertedEffect(LivingEntity living) { + MobEffectInstance current = living.getEffect(AntarchyObjects.INVERTED_EFFECT.get()); + if (current == null || current.getDuration() <= EFFECT_REFRESH_THRESHOLD_TICKS) { living.addEffect(new MobEffectInstance(AntarchyObjects.INVERTED_EFFECT.get(), EFFECT_DURATION_TICKS, 0, true, false, false)); } - if (AntarchyGravityApi.getGravityDirection(living) != AntarchyGravityDirection.UP - || !AntarchyGravityApi.isGravityForced(living)) { - AntarchyGravityApi.setForcedGravityDirection(living, AntarchyGravityDirection.UP, TRANSITION); - } } public static boolean shouldSpawnInvertedOnDreamSand(ServerLevelAccessor level, BlockPos pos) { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/TyphoniteSpikeFeature.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/TyphoniteSpikeFeature.java index 6eb37e9b..5dad7c3b 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/TyphoniteSpikeFeature.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/TyphoniteSpikeFeature.java @@ -159,12 +159,9 @@ public class TyphoniteSpikeFeature extends Feature return DripstoneThickness.TIP; } if (offsetFromRoot == length - 2) { - return DripstoneThickness.FRUSTUM; + return DripstoneThickness.MIDDLE; } - if (offsetFromRoot == 0) { - return DripstoneThickness.BASE; - } - return DripstoneThickness.MIDDLE; + return DripstoneThickness.BASE; } private int getSpikeHeight(RandomSource random, int dx, int dz, double chance, int maxHeight, TyphoniteSpikeConfiguration config) { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/DreamSandLowGravityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/DreamSandLowGravityMixin.java index 0d8f30ec..ea7694b4 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/DreamSandLowGravityMixin.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/DreamSandLowGravityMixin.java @@ -4,7 +4,6 @@ import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.block.DreamSandBlock; import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; import com.craisinlord.antarchy.content.movement.DreamSandLowGravityAccess; import net.minecraft.core.BlockPos; import net.minecraft.util.Mth; @@ -85,15 +84,14 @@ public abstract class DreamSandLowGravityMixin implements DreamSandLowGravityAcc return; } - AntarchyGravityDirection gravityDirection = AntarchyGravityApi.getGravityDirection(self); - Vec3 localMotion = AntarchyGravityRotationUtil.vecWorldToPlayer(self.getDeltaMovement(), gravityDirection); - if (localMotion.y >= 0.0D) { + Vec3 motion = self.getDeltaMovement(); + boolean movingWithGravity = motion.y < 0.0D; + if (!movingWithGravity) { return; } double gravityMultiplier = Math.max(0.0D, Math.min(1.0D, AntarchySettings.dreamSandGravityMultiplier())); - Vec3 adjustedLocalMotion = new Vec3(localMotion.x, localMotion.y * gravityMultiplier, localMotion.z); - self.setDeltaMovement(AntarchyGravityRotationUtil.vecPlayerToWorld(adjustedLocalMotion, gravityDirection)); + self.setDeltaMovement(motion.x, motion.y * gravityMultiplier, motion.z); self.fallDistance = 0.0F; this.antarchy$dreamSandLandingGraceTicks = 5; } @@ -105,18 +103,13 @@ public abstract class DreamSandLowGravityMixin implements DreamSandLowGravityAcc } LivingEntity self = (LivingEntity) (Object) this; - AntarchyGravityDirection gravityDirection = AntarchyGravityApi.getGravityDirection(self); - Vec3 localMotion = AntarchyGravityRotationUtil.vecWorldToPlayer(self.getDeltaMovement(), gravityDirection); - if (localMotion.y <= 0.0D) { + Vec3 motion = self.getDeltaMovement(); + boolean movingAwayFromGravity = motion.y > 0.0D; + if (!movingAwayFromGravity) { return; } - Vec3 adjustedLocalMotion = new Vec3( - localMotion.x, - localMotion.y * AntarchySettings.dreamSandJumpVelocityMultiplier(), - localMotion.z - ); - self.setDeltaMovement(AntarchyGravityRotationUtil.vecPlayerToWorld(adjustedLocalMotion, gravityDirection)); + self.setDeltaMovement(motion.x, motion.y * AntarchySettings.dreamSandJumpVelocityMultiplier(), motion.z); self.fallDistance = 0.0F; this.antarchy$dreamSandLandingGraceTicks = 5; } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/animations/royal_assailant_staff.animation.json b/common-1.21.1/src/main/resources/assets/antarchy/animations/royal_assailant_staff.animation.json new file mode 100644 index 00000000..472f4701 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/animations/royal_assailant_staff.animation.json @@ -0,0 +1,238 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 1, + "bones": { + "eye": { + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.5": { + "vector": [1.02, 1.02, 1.02], + "easing": "easeInOutQuad" + }, + "1.0": { + "vector": [1, 1, 1] + } + } + }, + "wings": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.3333": { + "vector": [-5, 0, 0] + }, + "0.6667": { + "vector": [5, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0.05] + }, + "0.3333": { + "vector": [0, 0, 0.2] + }, + "0.6667": { + "vector": [0, 0, -0.3] + }, + "1.0": { + "vector": [0, 0, 0.05] + } + } + }, + "right_wing": { + "rotation": { + "0.0": { + "vector": [0, 10, 0] + }, + "0.5": { + "vector": [0, -10, 0], + "easing": "easeInOutSine" + }, + "1.0": { + "vector": [0, 10, 0], + "easing": "easeInOutSine" + } + } + }, + "left_wing": { + "rotation": { + "0.0": { + "vector": [0, -10, 0] + }, + "0.5": { + "vector": [0, 10, 0], + "easing": "easeInOutSine" + }, + "1.0": { + "vector": [0, -10, 0], + "easing": "easeInOutSine" + } + } + } + } + }, + "use": { + "animation_length": 0.75, + "bones": { + "eye": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [0, 10, 0], + "easing": "easeInOutSine" + }, + "0.625": { + "vector": [0, -360, 0], + "easing": "easeOutQuart" + }, + "0.6667": { + "pre": [0, -360, 0], + "post": [0, 0, 0] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.0417": { + "vector": [0.8, 0.8, 0.8], + "easing": "easeInOutSine" + }, + "0.125": { + "vector": [1.1, 1.1, 1.1], + "easing": "easeOutQuart" + }, + "0.6667": { + "vector": [1, 1, 1], + "easing": "easeInOutSine" + } + } + }, + "wings": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [-5, 0, 0] + }, + "0.1667": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [-5, 0, 0] + }, + "0.375": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [-5, 0, 0] + }, + "0.75": { + "vector": [0, 0, 0], + "easing": "easeInOutSine" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0.05] + }, + "0.0833": { + "vector": [0, 0, 0.2] + }, + "0.1667": { + "vector": [0, 0, 0.05] + }, + "0.25": { + "vector": [0, 0, 0.2] + }, + "0.375": { + "vector": [0, 0, 0.05] + }, + "0.5": { + "vector": [0, 0, 0.2] + }, + "0.75": { + "vector": [0, 0, 0.05], + "easing": "easeInOutSine" + } + } + }, + "right_wing": { + "rotation": { + "0.0": { + "vector": [0, 10, 0] + }, + "0.0833": { + "vector": [0, -10, 0], + "easing": "easeInOutSine" + }, + "0.1667": { + "vector": [0, 10, 0], + "easing": "easeInOutSine" + }, + "0.25": { + "vector": [0, -10, 0], + "easing": "easeInOutSine" + }, + "0.375": { + "vector": [0, 10, 0], + "easing": "easeInOutSine" + }, + "0.5": { + "vector": [0, -10, 0], + "easing": "easeInOutSine" + }, + "0.75": { + "vector": [0, 10, 0], + "easing": "easeOutCubic" + } + } + }, + "left_wing": { + "rotation": { + "0.0": { + "vector": [0, -10, 0] + }, + "0.0833": { + "vector": [0, 10, 0], + "easing": "easeInOutSine" + }, + "0.1667": { + "vector": [0, -10, 0], + "easing": "easeInOutSine" + }, + "0.25": { + "vector": [0, 10, 0], + "easing": "easeInOutSine" + }, + "0.375": { + "vector": [0, -10, 0], + "easing": "easeInOutSine" + }, + "0.5": { + "vector": [0, 10, 0], + "easing": "easeInOutSine" + }, + "0.75": { + "vector": [0, -10, 0], + "easing": "easeOutCubic" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/dream_sandstone.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/dream_sandstone.json index 84332ed9..04643cb6 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/dream_sandstone.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/dream_sandstone.json @@ -1,7 +1,11 @@ { "variants": { - "": { + "vertical_direction=up": { "model": "antarchy:block/dream_sandstone" + }, + "vertical_direction=down": { + "model": "antarchy:block/dream_sandstone", + "x": 180 } } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/duskbell.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/duskbell.json new file mode 100644 index 00000000..51776d54 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/duskbell.json @@ -0,0 +1,11 @@ +{ + "variants": { + "vertical_direction=up": { + "model": "antarchy:block/duskbell" + }, + "vertical_direction=down": { + "model": "antarchy:block/duskbell", + "x": 180 + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/gorevine.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/gorevine.json new file mode 100644 index 00000000..cfb10566 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/gorevine.json @@ -0,0 +1,43 @@ +{ + "multipart": [ + { + "when": { + "growth_direction": "down", + "bottom_cap": "true" + }, + "apply": { + "model": "antarchy:block/gorevine", + "x": 0 + } + }, + { + "when": { + "growth_direction": "down", + "bottom_cap": "false" + }, + "apply": { + "model": "antarchy:block/gorevine_body", + "x": 180 + } + }, + { + "when": { + "growth_direction": "up", + "top_cap": "true" + }, + "apply": { + "model": "antarchy:block/gorevine", + "x": 180 + } + }, + { + "when": { + "growth_direction": "up", + "top_cap": "false" + }, + "apply": { + "model": "antarchy:block/gorevine_body" + } + } + ] +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/large_nadir_fern.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/large_nadir_fern.json new file mode 100644 index 00000000..9c34152b --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/large_nadir_fern.json @@ -0,0 +1,18 @@ +{ + "variants": { + "half=bottom,vertical_direction=up": { + "model": "antarchy:block/large_nadir_fern_bottom" + }, + "half=top,vertical_direction=up": { + "model": "antarchy:block/large_nadir_fern_top" + }, + "half=bottom,vertical_direction=down": { + "model": "antarchy:block/large_nadir_fern_bottom", + "x": 180 + }, + "half=top,vertical_direction=down": { + "model": "antarchy:block/large_nadir_fern_top", + "x": 180 + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_fern.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_fern.json new file mode 100644 index 00000000..fe681975 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_fern.json @@ -0,0 +1,11 @@ +{ + "variants": { + "vertical_direction=up": { + "model": "antarchy:block/nadir_fern" + }, + "vertical_direction=down": { + "model": "antarchy:block/nadir_fern", + "x": 180 + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_nyxium.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_nyxium.json new file mode 100644 index 00000000..6a0ec269 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/nadir_nyxium.json @@ -0,0 +1,11 @@ +{ + "variants": { + "vertical_direction=up": { + "model": "antarchy:block/nadir_nyxium" + }, + "vertical_direction=down": { + "model": "antarchy:block/nadir_nyxium", + "x": 180 + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/spiraling_vines.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/spiraling_vines.json index 4246ca9e..43c61c1d 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/spiraling_vines.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/spiraling_vines.json @@ -1,7 +1,42 @@ { - "variants": { - "": { - "model": "antarchy:block/spiraling_vines" + "multipart": [ + { + "when": { + "growth_direction": "down", + "bottom_cap": "true" + }, + "apply": { + "model": "antarchy:block/spiraling_vines", + "x": 180 + } + }, + { + "when": { + "growth_direction": "down", + "bottom_cap": "false" + }, + "apply": { + "model": "antarchy:block/spiraling_vines_body", + "x": 180 + } + }, + { + "when": { + "growth_direction": "up", + "top_cap": "true" + }, + "apply": { + "model": "antarchy:block/spiraling_vines" + } + }, + { + "when": { + "growth_direction": "up", + "top_cap": "false" + }, + "apply": { + "model": "antarchy:block/spiraling_vines_body" + } } - } + ] } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/spiraling_vines_plant.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/spiraling_vines_plant.json deleted file mode 100644 index 927ef2cf..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/spiraling_vines_plant.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "antarchy:block/spiraling_vines_plant" - } - } -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/typhonite_pillar.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/typhonite_pillar.json new file mode 100644 index 00000000..c1dab633 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/typhonite_pillar.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/typhonite_pillar", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/typhonite_pillar" + }, + "axis=z": { + "model": "antarchy:block/typhonite_pillar", + "x": 90 + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/verdant_nyxium.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/verdant_nyxium.json new file mode 100644 index 00000000..b1236083 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/verdant_nyxium.json @@ -0,0 +1,11 @@ +{ + "variants": { + "vertical_direction=up": { + "model": "antarchy:block/verdant_nyxium" + }, + "vertical_direction=down": { + "model": "antarchy:block/verdant_nyxium", + "x": 180 + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/whirlflower.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/whirlflower.json index 3045a10d..4a6e3481 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/whirlflower.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/whirlflower.json @@ -1,7 +1,11 @@ { "variants": { - "": { + "vertical_direction=up": { "model": "antarchy:block/whirlflower" + }, + "vertical_direction=down": { + "model": "antarchy:block/whirlflower", + "x": 180 } } } diff --git a/common-1.21.1/src/main/resources/assets/antarchy/geo/royal_assailant_staff.geo.json b/common-1.21.1/src/main/resources/assets/antarchy/geo/royal_assailant_staff.geo.json new file mode 100644 index 00000000..e7818125 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/geo/royal_assailant_staff.geo.json @@ -0,0 +1,114 @@ +{ + "format_version": "1.21.110", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.eye_of_the_storm", + "texture_width": 64, + "texture_height": 64, + "visible_bounds_width": 3, + "visible_bounds_height": 4, + "visible_bounds_offset": [0, 1, 0] + }, + "bones": [ + { + "name": "royal_assailant_staff", + "pivot": [8, 0, -8] + }, + { + "name": "staff", + "parent": "royal_assailant_staff", + "pivot": [1, -8, -1], + "cubes": [ + { + "origin": [-0.5, -12, -0.5], + "size": [1, 38, 1], + "uv": { + "north": {"uv": [3, 0], "uv_size": [1, 38]}, + "east": {"uv": [3, 0], "uv_size": [1, 38]}, + "south": {"uv": [3, 0], "uv_size": [1, 38]}, + "west": {"uv": [3, 0], "uv_size": [1, 38]}, + "up": {"uv": [4, 38], "uv_size": [-1, -38]}, + "down": {"uv": [4, 38], "uv_size": [-1, -38]} + } + }, + { + "origin": [-1.5, -15, -1.5], + "size": [3, 3, 3], + "uv": { + "north": {"uv": [17, 20], "uv_size": [3, 3]}, + "east": {"uv": [17, 20], "uv_size": [3, 3]}, + "south": {"uv": [17, 20], "uv_size": [3, 3]}, + "west": {"uv": [17, 20], "uv_size": [3, 3]}, + "up": {"uv": [23, 23], "uv_size": [-3, -3]}, + "down": {"uv": [23, 23], "uv_size": [-3, -3]} + } + } + ] + }, + { + "name": "wings", + "parent": "staff", + "pivot": [0, 23, 0] + }, + { + "name": "right_wing", + "parent": "wings", + "pivot": [0, 23, 0], + "cubes": [ + { + "origin": [0, 16, 0], + "size": [12, 14, 0], + "uv": { + "north": {"uv": [64, 0], "uv_size": [-12, 14]}, + "east": {"uv": [3, 0], "uv_size": [1, 38]}, + "south": {"uv": [52, 0], "uv_size": [12, 14]}, + "west": {"uv": [3, 0], "uv_size": [1, 38]}, + "up": {"uv": [4, 38], "uv_size": [-1, -38]}, + "down": {"uv": [4, 38], "uv_size": [-1, -38]} + } + } + ] + }, + { + "name": "left_wing", + "parent": "wings", + "pivot": [0, 23, 0], + "cubes": [ + { + "origin": [-12, 16, 0], + "size": [12, 14, 0], + "uv": { + "north": {"uv": [52, 0], "uv_size": [12, 14]}, + "east": {"uv": [3, 0], "uv_size": [1, 38]}, + "south": {"uv": [64, 0], "uv_size": [-12, 14]}, + "west": {"uv": [3, 0], "uv_size": [1, 38]}, + "up": {"uv": [4, 38], "uv_size": [-1, -38]}, + "down": {"uv": [4, 38], "uv_size": [-1, -38]} + } + } + ] + }, + { + "name": "eye", + "parent": "royal_assailant_staff", + "pivot": [0, 26, 0], + "cubes": [ + { + "origin": [-3, 25, -3], + "size": [6, 6, 6], + "uv": { + "north": {"uv": [10, 0], "uv_size": [6, 6]}, + "east": {"uv": [10, 6], "uv_size": [6, 6]}, + "south": {"uv": [10, 6], "uv_size": [6, 6]}, + "west": {"uv": [10, 6], "uv_size": [6, 6]}, + "up": {"uv": [16, 12], "uv_size": [-6, -6], "uv_rotation": 90}, + "down": {"uv": [16, 6], "uv_size": [-6, 6], "uv_rotation": 270} + } + } + ] + } + ] + } + ] +} \ No newline at end of file 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 a49aab9a..55442e20 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 @@ -221,9 +221,7 @@ "block.antarchy.polished_typhonite_stairs": "Polished Typhonite Stairs", "block.antarchy.polished_typhonite_slab": "Polished Typhonite Slab", "block.antarchy.polished_typhonite_wall": "Polished Typhonite Wall", - "block.antarchy.spiraling_vines": "Spiraling Vines", - "block.antarchy.spiraling_vines_plant": "Spiraling Vines Plant", - "block.antarchy.whirlflower": "Whirlflower", + "block.antarchy.spiraling_vines": "Spiraling Vines", "block.antarchy.whirlflower": "Whirlflower", "block.antarchy.bed_bug_egg": "Bed Bug Egg", "block.antarchy.wasp_nest": "Wasp Nest", "block.antarchy.red_ant_nest": "Red Ant Nest", @@ -541,6 +539,8 @@ "item.antarchy.royal_assailant_leggings": "Royal Assailant Leggings", "item.antarchy.royal_assailant_boots": "Royal Assailant Boots", "item.antarchy.royal_assailant_battleaxe": "Royal Assailant Battle Axe", + "item.antarchy.royal_assailant_staff": "Royal Assailant Staff", + "tooltip.antarchy.royal_assailant_staff": "Opens paired tears that summon four allied Manticores for 30 seconds.", "tooltip.antarchy.royal_assailant_chestplate.invert": "Press the inversion key to toggle inverted gravity on and off.", "tooltip.antarchy.royal_assailant_boots.fall": "Cancels fall damage while falling upward.", "item.antarchy.mantis_claw": "Mantis Claw", @@ -556,6 +556,10 @@ "tooltip.antarchy.jumpy_boots": "Sneak to charge, then jump to spring upward.", "item.antarchy.brutalfly_wing": "Brutalfly Wing", "item.antarchy.brutalfly_elytra": "Brutalfly Elytra", + "item.antarchy.manticore_wing": "Manticore Wing", + "item.antarchy.manticore_wings": "Manticore Wings", + "tooltip.antarchy.manticore_wings": "While flying, collide with non-allied creatures to deal heavy damage.", + "item.antarchy.broodfruit_cobbler": "Broodfruit Cobbler", "tooltip.antarchy.brutalfly_elytra.flap": "While flying, hold %s to flap your wings", "item.antarchy.cornea_ear": "Ear of Cornea", "item.antarchy.corn": "Corn", @@ -580,6 +584,7 @@ "item.antarchy.fallen_king_crown": "Fallen King\u0027s Crown", "tooltip.antarchy.fallen_king_crown.hero": "Grants Hero of the Village when you slay hostile mobs", "item.antarchy.vortex_charge": "Vortex Charge", + "entity.antarchy.upward_falling_block": "Falling Antigravel", "entity.antarchy.vortex": "Vortex", "entity.antarchy.wind_vortex": "Wind Vortex", "item.antarchy.vortex_spawn_egg": "Vortex Spawn Egg", @@ -831,6 +836,8 @@ "advancements.antarchy.ultimate_bow.description": "Obtain an Ultimate Bow.", "advancements.antarchy.brutalfly.title": "Float Like a Brutalfly, Sting Like a Bee", "advancements.antarchy.brutalfly.description": "Obtain a Brutalfly Elytra.", + "advancements.antarchy.royal_assailant_staff.title": "Fly my pretties!", + "advancements.antarchy.royal_assailant_staff.description": "Obtain the Royal Assailant Staff.", "advancements.antarchy.now_watch_me_whip.title": "Now Watch Me Whip", "advancements.antarchy.now_watch_me_whip.description": "Now watch me nae nae", "advancements.antarchy.kill_molevore.title": "Moley Poley", @@ -1336,7 +1343,14 @@ "block.antarchy.loam_brick_wall": "Loam Brick Wall", "block.antarchy.chiseled_loam_bricks": "Chiseled Loam Bricks", "item.antarchy.cooked_cheep": "Cooked Cheep", - "item.antarchy.cheep_bucket": "Bucket of Cheep" + "item.antarchy.cheep_bucket": "Bucket of Cheep", + "block.antarchy.nadir_nyxium": "Nadir Nyxium", + "block.antarchy.verdant_nyxium": "Verdant Nyxium", + "block.antarchy.typhonite_pillar": "Typhonite Pillar", + "block.antarchy.nadir_fern": "Nadir Fern", + "block.antarchy.large_nadir_fern": "Large Nadir Fern", + "block.antarchy.duskbell": "Duskbell", + "block.antarchy.gorevine": "Gorevine" ,"decree.antarchy.the_sky_is_mine": "THE SKY IS MINE" ,"decree.antarchy.the_sky_is_mine.subtitle": "Stay grounded." ,"decree.antarchy.do_not_run": "DO NOT RUN" diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/duskbell.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/duskbell.json new file mode 100644 index 00000000..4a52644a --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/duskbell.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/duskbell" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/gorevine.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/gorevine.json new file mode 100644 index 00000000..41ce6d97 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/gorevine.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/gorevine_hanging" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/gorevine_body.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/gorevine_body.json new file mode 100644 index 00000000..af562f5a --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/gorevine_body.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/gorevine" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/large_nadir_fern_bottom.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/large_nadir_fern_bottom.json new file mode 100644 index 00000000..4a015e98 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/large_nadir_fern_bottom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/large_nadir_fern_bottom" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/large_nadir_fern_top.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/large_nadir_fern_top.json new file mode 100644 index 00000000..c7c93ded --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/large_nadir_fern_top.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/large_nadir_fern_top" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_fern.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_fern.json new file mode 100644 index 00000000..6bf27e03 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_fern.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/nadir_fern" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_nyxium.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_nyxium.json new file mode 100644 index 00000000..577c0136 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/nadir_nyxium.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "bottom": "antarchy:block/nyxite", + "side": "antarchy:block/nadir_nyxium", + "top": "antarchy:block/nadir_nyxium_top" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/spiraling_vines_plant.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/spiraling_vines_body.json similarity index 100% rename from common-1.21.1/src/main/resources/assets/antarchy/models/block/spiraling_vines_plant.json rename to common-1.21.1/src/main/resources/assets/antarchy/models/block/spiraling_vines_body.json diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/typhonite_pillar.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/typhonite_pillar.json new file mode 100644 index 00000000..163b3c93 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/typhonite_pillar.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "antarchy:block/typhonite_pillar_top", + "side": "antarchy:block/typhonite_pillar" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/verdant_nyxium.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/verdant_nyxium.json new file mode 100644 index 00000000..da4f5fb3 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/verdant_nyxium.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "bottom": "antarchy:block/nyxite", + "side": "antarchy:block/verdant_nyxium", + "top": "antarchy:block/verdant_nyxium_top" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/broodfruit_cobbler.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/broodfruit_cobbler.json new file mode 100644 index 00000000..9b5a299e --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/broodfruit_cobbler.json @@ -0,0 +1 @@ +{"parent":"minecraft:item/generated","textures":{"layer0":"antarchy:item/broodfruit_cobbler"}} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/duskbell.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/duskbell.json new file mode 100644 index 00000000..8b1f619c --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/duskbell.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/duskbell" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/gorevine.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/gorevine.json new file mode 100644 index 00000000..8b11d607 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/gorevine.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/gorevine" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/large_nadir_fern.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/large_nadir_fern.json new file mode 100644 index 00000000..352d75f0 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/large_nadir_fern.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/large_nadir_fern" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/manticore_wing.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/manticore_wing.json new file mode 100644 index 00000000..e2aef6bc --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/manticore_wing.json @@ -0,0 +1 @@ +{"parent":"minecraft:item/generated","textures":{"layer0":"antarchy:item/manticore_wing"}} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/manticore_wings.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/manticore_wings.json new file mode 100644 index 00000000..59f0b415 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/manticore_wings.json @@ -0,0 +1 @@ +{"parent":"minecraft:item/generated","textures":{"layer0":"antarchy:item/manticore_wings_item"}} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_fern.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_fern.json new file mode 100644 index 00000000..92a6eb28 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_fern.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/nadir_fern" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_nyxium.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_nyxium.json new file mode 100644 index 00000000..7cc09220 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/nadir_nyxium.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/nadir_nyxium" +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_assailant_staff.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_assailant_staff.json new file mode 100644 index 00000000..39bc398a --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_assailant_staff.json @@ -0,0 +1 @@ +{"parent":"antarchy:item/royal_assailant_staff_held_geo"} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_assailant_staff_held_geo.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_assailant_staff_held_geo.json new file mode 100644 index 00000000..22ee499d --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_assailant_staff_held_geo.json @@ -0,0 +1 @@ +{"parent":"builtin/entity"} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/typhonite_pillar.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/typhonite_pillar.json new file mode 100644 index 00000000..5fda63ac --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/typhonite_pillar.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/typhonite_pillar" +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/verdant_nyxium.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/verdant_nyxium.json new file mode 100644 index 00000000..d33dec43 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/verdant_nyxium.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/verdant_nyxium" +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/duskbell.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/duskbell.png new file mode 100644 index 0000000000000000000000000000000000000000..815915cb983d4c8472d4cfe5303a3544b7b588ac GIT binary patch literal 364 zcmV-y0h9iTP)Px$CP_p=R5*?8lCes|P!xv0TY^xE+_;p81PUEQyhFe-gA{}eioSr);M4dBzJNuy zf>TC`LpLo{G8nqF8A_oPj)UHi##nXtU+y^v{{O%C{1^VA%FXH7rPz8l&4}ZHs%6z7 z3{Rxo2gXQs_AUCRCrKDd5=H`$gpu@3PwIrLXaM+n3xG6V7U%8c4S;!`Z8UeRQyJ&O z2W6izTjU!B8rI$3#0mz+$kTAB+@=Pg)Ac1VMgn8j44v!eS039A07sJ*7wz3OhuI>h z)Ahw|YFgUE-SKE?Pi#Vp&-kjbC1E6KzT|500>I(H@rU3vW1eTUv_~8dlml>ock?Ch zVv*b6Hg!R)?&Qah(&_rL=j|8d@hDYxJ|3m&R|2-S1g_ literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/gorevine.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/gorevine.png new file mode 100644 index 0000000000000000000000000000000000000000..6554dba8c2a78457047f866413403ac1e4a6cb9c GIT binary patch literal 393 zcmV;40e1e0P)Px$LrFwIR5*=&lRZwuFcimsuA0I2mI`G_8IVwJ(Un{DBFr3vrMF<^2uxT=8EBTO zinqi=1~U{}juUvJ-^+XduLzPl)_Y%+ng=)X{Piu;_sci}aM)>Dsd)YP6ad?FK_dmY zkyfhonNxQbVNu?T3)1Ff2l9G(y!Qac4g@p{1YLIp;LY}8?c-J|F8y`Z-=+hN)EMW% z_Ot8%A={(_07a=e)_b20O?IH`u3W~EN~z_7$qu~t!$Q1Jr|v8&rKpsmD0M^(uxeGV zL9T^yK031r%|;3iJH3j4#HCiMnG2hIu&(cB5X0q0il{}3FfK?n_)CkT)C&<~4l1RX zvXF!_&J!YTvR;g6BSpL(a-P;xx$}Wy`mbyQG~Dg-T3BWWei6+ynCy+eaekFTQO@02 nxNz#uBITbaF;FwkFI@NmAsV+TX~Ru{00000NkvXXu0mjfhX$=* literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/gorevine_hanging.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/gorevine_hanging.png new file mode 100644 index 0000000000000000000000000000000000000000..8d565fa8fb9087b6704bc5c9b3aa947df46409df GIT binary patch literal 367 zcmV-#0g(QQP)Px$DM>^@R5*>zk}*!hKoCXWTBg`_7Z+)OA`)^cAHglRpvf_)IR;H`!8NFeBDuiR zL{{8+UAQm>+11(`BVoU%#H$hdAOfyZ5X?rleMgkVK0s1g0LUf0aAck8((r(kPJ@ zk@k9maE!w+F?M}Ktn!R1&mw~~jCryafVD9*@vhuX4AvWk1}VXo*FofE0+&#vof)Jq zcER_SpO2rBc$qFVNB~aO{J N002ovPDHLkV1n$rqGkX9 literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/large_nadir_fern_bottom.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/large_nadir_fern_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..8af6a69c25b6834eeb96001109186171dcd7bade GIT binary patch literal 407 zcmV;I0cie-P)Px$QAtEWR5*=&Q!$FeFc2IaE({3)VOLHdjpG!7bXJiEq)wYZ zlj@AX*pN=w-0C()zHNjwBWZVLSDX(Q)AkMWDiipP?Q&xlGYJ5QLxs=p0%cuTJWZ65 zeuTWrgrEZgiI^tJ#GwLz+{N?whDSGOAO!U5iSZ>K9snHoClkz90Pyx>+c%at#Svpb zzn-A_(nOiEF2wn8G5kUOdZHUNZjZYFfjrVgndAOsXg%&vP7VNkw0(o^a%1>mH)u-? z<}0fM;lu}ke_iMXjdifI_3})t2IJHy=$FMzI@N#6fD6f0-Yz%h_PC2F-01?<-S!Q> z+AG$<4pVquWy0eduCVkYOLnz#94desX)F@;0L?>L7lQYHSrPx$A4x<(R5*>5Qn8A{KoETkR|J%UkgF2G=3nrKx+-Am5@8U-)Fr-u zwvBK9#B97E?!KI^h*dnIrnOjCJo(ZAKvxAeyR|ZP*_f9cd*Nd{k{X04U#Ke-qh6#(iJz5P`dGTxL#>00000NkvXXu0mjf DQO}vG literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir_fern.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/nadir_fern.png new file mode 100644 index 0000000000000000000000000000000000000000..4ab2811de90d6506d5e7739b06623d36df2c4572 GIT binary patch literal 418 zcmV;T0bTxyP)Px$TuDShR5*=&Qay`z-N8s~Z6ThmVae27vqX zMuth~m5I5-FbQk-CZ8y?mcZI2MqwPx%PDw;TR5*=ol09e>VI0PPy@dNna(DSSS`ynL)y+!l*2Trasgt9Fql<%^;8Gj} zrw$#Qg${Mh;vn6EAPS{XsKiCAfm}$;hwqz9E^lb4L%o+4yy@lT{r#W+^E|ik?B3h+ zaNEkk zwzP@?a5&tj8>ZMj-q9*YjXJGPllGubH%w^=pcYpt7fY0jC5&2J#rGCDYSi^w0H5dY zsl`=2q!w2Jc=P=w0K3OKv<7u$5mSy?_s@A#JfKssk-X%G4c*~PM5q!M_Rk5mGw1d$rk4O2{Kv4%a%$IrO< z8TX>bgVR0k7ar-Fq!L$FO&Yok1Bl6pG=Ob7)Z!{?IwJa~l4R2AG^xc^Y}3KBd<`Z- zM)J@$9W2{L$S$qlKe=^wSN{+8rJ;Vt)%HBgXJK<=`#e%(y&ga)L#DHszzuXBiKU8H zxnk2u;FZF%_LiviMm<6qYIr(}31z6m1xQb4F%_?(J5L@11a81eVOjf@O3)ki5VCub uk?oQW+(3humDYkASJF<-0FmkF-2MV>HBO)lhHK0K0000S0J5X zKE2Fod4I^RrFq+dTw*}9b|-#i>vl1|2da=Q3GxeO_>TuXJ}Pz|sIbh_#W6%;s%<|b z7qbBm)7LMoKmRAU-<8-hg{68<(W3_bX3LpvZ=P(s#I`&0ad)7BS!S>2l|9qT=e`m= z^f%(_p~X7M9h1)9wv#%fSaRp)oD(}c#na_h_SYt#Td;k31+UEM^@l%8{AdYJtc*(f i>$+d>wb7FIf=+hJZZq>*u2PK#dB)S#&t;ucLK6Un<8!9~ literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/typhonite_pillar.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/typhonite_pillar.png new file mode 100644 index 0000000000000000000000000000000000000000..9e7df260fb42cff2ebdb9964040fc6b0e22805e4 GIT binary patch literal 402 zcmV;D0d4+?P)Px$Oi4sRR5*=&lS^yDKoo_)LP$eQ)GDOfjRaAUZgktF^tbmP6qk}seSnWRlaOT7 zE@Z}unR+24bMMW$k8|c}vi$sw;sN0+YCbwrvGoUVsWvV&wt*l7`T1InVp^*#MmdC?fn0Z3Mft^hC`z1EV( z^RfQUPqG%%OALE$J-2Dd%h6Z?~1980Q zWHt9_Hfpe>0UlK`i^#Ji=w3m}qN)qYrUTda8Z6D13-;^nZ3NY#t%B<0KbEXIFqMXd wr3QdaY4>cXmKy+Jr$rPGYR-GLDYMPx$UP(kjR5*=wQ?YKsFc5uImSe>+p&-%Hr9ud#s!RF*kLcbGh=r6&BqVmMkcAG- zxpqR|Wc%)(-#wp4)0ge_(zNig*{)&E28Ue+H63H|{D5qKgw88Og1bB(3$WQ@23^)@ zZQ}y*eG(AH_X)5+2895iQVB*2q!PNU(T7h=P^ollcFIlxGZmP#85B`Wmo-#(A)}&8 z(}KLPg}JH5_ezt3)!QmavPF0^kA*wiY}W&im|x(_R;h%}tANa$J7xPLR4S275{%^X z^*Ye%;c2;mF6#lAQ=q0}pyxJ^Mc}kbr88|nKpyma2Y{@TI$u5l0FuHCW`xl-aZl>t!;4Xa(@6V47d^seVz#b O0000Px%G)Y83R5*=YlRs}0K@`M)@ttmOIq%t#E|Ftw2`7Oj6i5*jX{pJl;xo9UqE1Og zmCkaPR2W$z$Vn_CeE)p6D^8)f+!C|RuAXMzyqTxn>3{z4kYDBi(5ncJLq?+q=JOo@ z@>xP~9NIT`4#8Q#X!HPp3m|U_s_7c%v`bFHoX~>7At&MWd&SiZg0q19GUsYm0np;f zsiteZ@sfO26X?|-IWf%VJIINtCprs|6N5Ki(#mHE)pU*U6~b4T^8*0BfBXf2cX9h~ z{KsYu2f$UI3exifI$tZ=A|UPMc;h7%AnDQ$_bIOnB!=Rxhc{j#=~4m0SG0UjviC@y zzbo;^OFK<9UDFl;k&3KhQ#a=aL@KH?Xp4YM=Xe*l2w!m+9TBMrfK2CvqJ!`i+&TO? zap;8m$eV&p=eP~IGzHFSm&5xPbe<^yR(^daI!2c%^d#<=ina>q-}fN|cep#?=J!uZ zQ&0>g$&c7>#rGtoDFARzyU2+lQW2r(Sdmt|NdanwCnwP{Z4uNqUYa_OZ{8L;-lVvR zj%_&3O+ltB+hmol&}E9aR=gU#A<;1nz7cW%2WBUR^185~=X)bU(XqtFGC(Lgbpzj% z)*JV*@D`M&u(gJq>700z+FGJxTA9vii-6(ozlN;!V1x1Q4l+;qJf&mgtyOx*|@N0F=JMja0N1Orvxd9c`uEyaBSu_4=OVFImhn U^`FU`BLDyZ07*qoM6N<$g8gJ9;Q#;t literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/verdant_nyxium_top.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/verdant_nyxium_top.png new file mode 100644 index 0000000000000000000000000000000000000000..bbd1227fd9c926932414f5d3725b2a7a429ec5c1 GIT binary patch literal 453 zcmV;$0XqJPP)Px$e@R3^R5*=glf7=jFcgKq#1SpEl1QCUH>8Y_IxsS`GVwrtpuPcXrA}-aBV~;k zP!r?^ilTJzPaL?5t?TRKbI!dE*5BKq`22;mM`j5Cs%!y}S;BHTP*uSsrw+>1hgB6o zHx>iX2!MynGy+w&$d!az?;~|ku;{U&$`(2S2#WpLms$ z_rVyZ5n{a>X{v19S+M@z4#obgwHrU|exlv$gk>_eu^weSF!2~s3+QkUEtdl#e1H3( z4|Vc+fIdX7B(v8iZl^1^(-j&)zI#C>Gj4wu4fYdqJYER%O{@pQ^x8+4S)z-((Ro)h z$CzltGfkDPYo9fFlDqf7j;G8LtHf^O00000NkvXXu0mjf0fovS literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/broodfruit_cobbler.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/broodfruit_cobbler.png new file mode 100644 index 0000000000000000000000000000000000000000..a4f15e6689f541a326fc7620eabfc7629999eb12 GIT binary patch literal 432 zcmV;h0Z;ykP)Px$YDq*vR5*>*lFdp2Q5c4w5ec*(ET{w-3lwY@L6o7ZK%zy~KB853&}DQ7tt#BL zh&B;It3Z>WO+65>K>*Up8~_v3gF+UL z1w|VNz}e=42?%&$YnhJMPdb@H)eXY2AY((OXabN}Uo?dPpyTz6u%lY!d_Re*8?5Za zXjIDF-)g_EQK%~bH~~)Y>O@;tEX@xCaCm$NKy-E#N3}@m`i1(NK|JE2Q7LniSIO42 zAA#0<=d$>W>~b;(#3P>XUZ#-6BOa8NM4_$-SO@@Qmy>KwBU{r5O}d#H9}_JAZt@DH z_6J(?-ToQ313oh}>9&O2BLlYk!NZee`3KtppVX_6M@d`Agh|ErNbg|MY@? aXFdU~|FRQ!tG1Z{0000Px$CP_p=R5*?8lCes|P!xv0TY^xE+_;p81PUEQyhFe-gA{}eioSr);M4dBzJNuy zf>TC`LpLo{G8nqF8A_oPj)UHi##nXtU+y^v{{O%C{1^VA%FXH7rPz8l&4}ZHs%6z7 z3{Rxo2gXQs_AUCRCrKDd5=H`$gpu@3PwIrLXaM+n3xG6V7U%8c4S;!`Z8UeRQyJ&O z2W6izTjU!B8rI$3#0mz+$kTAB+@=Pg)Ac1VMgn8j44v!eS039A07sJ*7wz3OhuI>h z)Ahw|YFgUE-SKE?Pi#Vp&-kjbC1E6KzT|500>I(H@rU3vW1eTUv_~8dlml>ock?Ch zVv*b6Hg!R)?&Qah(&_rL=j|8d@hDYxJ|3m&R|2-S1g_ literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/gorevine.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/gorevine.png new file mode 100644 index 0000000000000000000000000000000000000000..8d565fa8fb9087b6704bc5c9b3aa947df46409df GIT binary patch literal 367 zcmV-#0g(QQP)Px$DM>^@R5*>zk}*!hKoCXWTBg`_7Z+)OA`)^cAHglRpvf_)IR;H`!8NFeBDuiR zL{{8+UAQm>+11(`BVoU%#H$hdAOfyZ5X?rleMgkVK0s1g0LUf0aAck8((r(kPJ@ zk@k9maE!w+F?M}Ktn!R1&mw~~jCryafVD9*@vhuX4AvWk1}VXo*FofE0+&#vof)Jq zcER_SpO2rBc$qFVNB~aO{J N002ovPDHLkV1n$rqGkX9 literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/large_nadir_fern.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/large_nadir_fern.png new file mode 100644 index 0000000000000000000000000000000000000000..419965d766a83de591df5e9d125908bed205f6f0 GIT binary patch literal 357 zcmV-r0h<1aP)Px$A4x<(R5*>5Qn8A{KoETkR|J%UkgF2G=3nrKx+-Am5@8U-)Fr-u zwvBK9#B97E?!KI^h*dnIrnOjCJo(ZAKvxAeyR|ZP*_f9cd*Nd{k{X04U#Ke-qh6#(iJz5P`dGTxL#>00000NkvXXu0mjf DQO}vG literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/manticore_wing.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/manticore_wing.png new file mode 100644 index 0000000000000000000000000000000000000000..f94581beb430b1f700c54332a35d626c4fbb7741 GIT binary patch literal 551 zcmV+?0@(eDP)Px$;Ymb6R5*>5lfi4#P#niU>6(_tNK6-FphGr6<~9&kDy$xLxYOoE*ul#@=)t2P zxWB-G;BkYg*sGuivy%fa9^Amu!=Pa4rHF+P*M?{t$UMYDOxmg+Op%;u82GDCh zPeATGSmx!^o&FUpvqDZ8LzP7If`Q$#u*?b>34+Tjxc+qj_IEd)H)Rz8KAojBobLZt=+{caDvU~ss#0fgBB z6ji}>+&=>>vjTwQ{RAK*!8uKgp?_0qm~6K!R7s3skrY*7;l}-uhDt>l{cex^;u>wc z1HiG@4{{xsaXo*s1Lx>#B3L*yaHfjLO%+E$$8tm_G3h8>)6tZW}2YBE&YSh1dNqizrnhUe#LP+y> pQ!QL81B8F!e>GiP2>?`Wf?rr)wWLi8V|M@m002ovPDHLkV1j||{UHDV literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/manticore_wings_item.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/manticore_wings_item.png new file mode 100644 index 0000000000000000000000000000000000000000..c58dd0ba5a799a8a28352aa4c468fc83d0869ab1 GIT binary patch literal 522 zcmV+l0`>igP)Px$#7RU!R5*=&lCeu0Q5?rVFBl8wiNvPbL5poEsTQT47LqlHV-^KLI%H|5wwuy_ zKnP|lg6l0hbttz8Ryt~jHiOV1wrVYv9%)PnrU%jCbx7XxE;;=!@A!Sczwht&zW0QQ zNiIJxY2nq9Ew}+|`K;EyU3xFNa`}1rczT5Clm)&Li5;LMycI+#IxrG%uIyt5r!`4*ra}N^tnX(pTq*kqU2pjc(`upeiZymMJ z4E*b>^J`&KsC?Qvg)Swy@SyCSH>(~P!)TL{M^EIR@)Z|1dV>aMr3z*5oc+JQ1VF;d z$cFDB)v7fb!%ry|904$K=bntVUaL_5x>#^To%;0&`e0&`urdPx$TuDShR5*=&Qay`z-N8s~Z6ThmVae27vqX zMuth~m5I5-FbQk-CZ8y?mcZI2MqwPx$-bqA3R5*>Dlh11tQ4q&JuWYI;1QKXTp=mL>)QVV<fJKkM>d#p%IiEJlT^9 zRS*w)6#N(TA|6a2(Th-W=&>YJ!Z!9|t(Y6rP8eXPRUYoYU}q^I>NA z&J%dVwfQHqo!^{0!2DL`{>Zd?-!b=@dzTWL7dU(6qSD@^GGrE}2|t)`31x>cunJP^ zhTGuRw=W6mK13|>x1j7$`B-2*UnIV?h;3PDop5v_qQIc;Q(SN;%#OKB7+B92nT@qp z`Mhg0(7i&#g=(z{fa5kXa%)5iTMX3~A_6l1Ue0000`u&_}tTMNa8g@qzzqx8x~r2HrgER-yi zl!rooES^4-xyDP^eQ)Nx-mUxU`{vBtnKS2n=G>uIrG!6^Z<~3P-I>mhP0VWzkIdxF zwv0_>Hp0FcFIOuLpt)`+Km+~L!NT0Q*81vXU=qB)%c=8|Gt(`5D+Yj5FD4r*0Z|RK ztff-05jItXU&M1C5(99!e;g}5s^RJ3DV$3+w0CwWKy>%^C~T^Pc~lYA6xVm?G{O)A zK(G<}{(6+%p4G1guLv;iZf@1-d`1f!5CEYPSXhj2=0`~kK-8vD&w#;I1 zMpuJ@@blEo5(D5GXiI&y&Md#TqB@2~wG9aRuD-Ri?=LX`oZ|N$PEBoNgFbl!#PpS? zj~D=#_;~LN*OPeRn2&x%0w6IGw(kMP3j2(?s$v1SCKh*n3Lq}2a?Im)NBraS{`^vo zEmcKT0Dn19>*bbuc>Pr7=Kt$b^hHMufJ@L^fFwx!S0%Xk#;+|g0QM#>cCKqMTy82N z94NskTvAa0I9WuHCfT<3R+Y;xF{ED$ZFu|=1HeUAY@Dn?tm6)#MZmCM1v7_dt`Y;l z$+-qc(j?1W01!an(}!>TATa<0&IYB3#6MnDSn~Ao0|;yv-}td52Eg7VuFY=&Xz^$_ z*t|Xn*3J(C(+3F2U$yncbr)-%7yy33i4}o0iQfW{HKa@*ASB<^(xgi9ZTqxsF#z@^ zzHDIlOrE$B1%QBkD+S=2Xwv+p6_B(O^Br$m0ltYQ&0kspNjtG(}N5@GJ{00000NkvXXu0mjf`rto6 literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/models/item/royal_assailant_staff.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/models/item/royal_assailant_staff.png new file mode 100644 index 0000000000000000000000000000000000000000..8aece857b55b1063bffa66fa9c52d4360853e5c8 GIT binary patch literal 1248 zcmV<61Rwi}P)T5<3$qPF|<g59Et3U$&pTLsDqW&%4Fr5_m`iyDZIpZQv0^@@bpdLNh=7h6bn>C^jr6G|MAu6j z3HG&|L5dZ0Ow%I=oqVcyFlD6<79!MD)l#fKCP3QwC9z__8UfkNnZb5pDQK zr1m3R53t=K0uum%ae+I42CRJC7>9LW|D&pr7Hn*XuMO?=tp0;?A#aPgC0Z8%vuJk# z902TpCyJq8=ybx!6{K%|e5n+cM*tu2@WF8=PI5VYZ!!Y)z*j)M-A}JyH+5|DAvUP%ZEKbJZC-qjkGa0 zCV;UcS#5o9Tg_iO0YKc22uy(HU#%D~HO%Cg0Oro#&~^ndu5xqh4`Z`e*lqMeT7}*v5Vb+f0CJ zl{M+k{daWfZHWNvxIDDSWc~3NF@a;J#LE-dP6uP0rTk|3;_WS7a{;hfr=j7|9*sLO zDogPI+T*k##IYt5z+3^ydfC1cDu8$S0DLlm31F@OooHiy9esLh?PZBRCRvV5fLIlf zHp<`0rM@EaJ3yyH0)q(7KX?b!UT|unl&~| zfLPA~)}~3`C?-Ji(nvgWCcx>Y3djA@lQ=bNBbfl!hR7A=3Lw{d+GpcdfPKy68sS!e zT AntarchyFabricBlocks.SPIRALING_VINES_PLANT.get(); - com.craisinlord.antarchy.content.block.SpiralingVinesPlantBlock.HEAD_BLOCK = () -> AntarchyFabricBlocks.SPIRALING_VINES.get(); FabricBrewingRecipeRegistryBuilder.BUILD.register(builder -> { builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.LUCID_EYE.get()), potionHolder(AntarchyFabricMisc.INVERSION)); builder.registerPotionRecipe(potionHolder(AntarchyFabricMisc.INVERSION), Ingredient.of(Items.REDSTONE), potionHolder(AntarchyFabricMisc.LONG_INVERSION)); diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java index 94f7b245..ebad11ea 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java @@ -99,6 +99,11 @@ public final class AntarchyFabricEvents { ComposterBlock.COMPOSTABLES.put(AntarchyFabricBlocks.PEACH_LEAVES.get().asItem(), 0.3f); ComposterBlock.COMPOSTABLES.put(AntarchyFabricItems.PEACH_SAPLING_ITEM.get(), 0.3f); ComposterBlock.COMPOSTABLES.put(AntarchyFabricItems.NADIR_SAPLING_ITEM.get(), 0.3f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricItems.NADIR_FERN_ITEM.get(), 0.3f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricItems.LARGE_NADIR_FERN_ITEM.get(), 0.5f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricItems.DUSKBELL_ITEM.get(), 0.65f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricItems.WHIRLFLOWER_ITEM.get(), 0.65f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricItems.GOREVINE_ITEM.get(), 0.5f); ComposterBlock.COMPOSTABLES.put(AntarchyFabricItems.CORN.get(), 0.65f); ComposterBlock.COMPOSTABLES.put(AntarchyFabricItems.CORN_SEEDS.get(), 0.3f); ComposterBlock.COMPOSTABLES.put(AntarchyFabricItems.PEACH.get(), 0.65f); 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 ae8a6902..fc7cd47d 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 @@ -373,8 +373,11 @@ public final class AntarchyFabricClientBootstrap { BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.CHITIN_SPIKE.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.TYPHONITE_SPIKE.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.SPIRALING_VINES.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.SPIRALING_VINES_PLANT.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.GOREVINE.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.WHIRLFLOWER.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.NADIR_FERN.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.LARGE_NADIR_FERN.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.DUSKBELL.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()); @@ -491,6 +494,7 @@ public final class AntarchyFabricClientBootstrap { registrationHelper.register(new GoopedLivingLayer(playerRenderer)); registrationHelper.register(new GlimmeringLivingLayer(playerRenderer)); registrationHelper.register(new BrutalflyElytraLayer(playerRenderer)); + registrationHelper.register(new com.craisinlord.antarchy.content.client.renderer.ManticoreWingsLayer(playerRenderer)); registrationHelper.register(new FallenKingCrownLayer(playerRenderer)); } return; 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 fb0aa267..52b649bb 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 @@ -1301,8 +1301,8 @@ public final class AntarchyFabricBlocks { () -> 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))); + public static final DeferredBlock DREAM_SANDSTONE = BLOCKS.register("dream_sandstone", + () -> new DreamSandstoneBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SANDSTONE))); public static final DeferredBlock CHISELED_DREAM_SANDSTONE = BLOCKS.register("chiseled_dream_sandstone", @@ -1343,6 +1343,12 @@ public final class AntarchyFabricBlocks { public static final DeferredBlock TYPHONITE = BLOCKS.register("typhonite", () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.BLACKSTONE))); + public static final DeferredBlock NADIR_NYXIUM = BLOCKS.register("nadir_nyxium", + () -> new DirectionalNyxiumBlock(nyxiteProperties(), DirectionalNyxiumBlock.Type.NADIR)); + public static final DeferredBlock VERDANT_NYXIUM = BLOCKS.register("verdant_nyxium", + () -> new DirectionalNyxiumBlock(nyxiteProperties(), DirectionalNyxiumBlock.Type.VERDANT)); + public static final DeferredBlock TYPHONITE_PILLAR = BLOCKS.register("typhonite_pillar", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BLACKSTONE))); public static final DeferredBlock TYPHONITE_BRICKS = BLOCKS.register("typhonite_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.BLACKSTONE))); public static final DeferredBlock CHISELED_TYPHONITE = BLOCKS.register("chiseled_typhonite", @@ -1373,10 +1379,16 @@ public final class AntarchyFabricBlocks { () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BLACKSTONE_WALL))); public static final DeferredBlock SPIRALING_VINES = BLOCKS.register("spiraling_vines", () -> new SpiralingVinesBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.TWISTING_VINES))); - public static final DeferredBlock SPIRALING_VINES_PLANT = BLOCKS.register("spiraling_vines_plant", - () -> new SpiralingVinesPlantBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.TWISTING_VINES_PLANT))); + public static final DeferredBlock GOREVINE = BLOCKS.register("gorevine", + () -> new GorevineBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.WEEPING_VINES).lightLevel(state -> 4))); public static final DeferredBlock WHIRLFLOWER = BLOCKS.register("whirlflower", () -> new WhirlflowerBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.ALLIUM))); + public static final DeferredBlock NADIR_FERN = BLOCKS.register("nadir_fern", + () -> new NadirFernBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.FERN))); + public static final DeferredBlock LARGE_NADIR_FERN = BLOCKS.register("large_nadir_fern", + () -> new LargeNadirFernBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.LARGE_FERN).noCollission())); + public static final DeferredBlock DUSKBELL = BLOCKS.register("duskbell", + () -> new DirectionalThoraxisFlowerBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.ALLIUM).lightLevel(state -> 4))); public static final DeferredBlock DEAD_STAR_CORAL_BLOCK = BLOCKS.register("dead_star_coral_block", () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.TUBE_CORAL_BLOCK))); 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 528f1309..be1ddd37 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 @@ -458,6 +458,7 @@ public final class AntarchyFabricEntities { () -> EntityType.Builder.of(VortexEntity::new, MobCategory.MONSTER) .sized(2.0F, 2.0F) .clientTrackingRange(10) + .fireImmune() .build("vortex")); public static final DeferredHolder, EntityType> WIND_VORTEX = ENTITY_TYPES.register("wind_vortex", @@ -465,6 +466,7 @@ public final class AntarchyFabricEntities { .sized(3.0F, 5.0F) .clientTrackingRange(10) .updateInterval(1) + .fireImmune() .build("wind_vortex")); public static final DeferredHolder, EntityType> TIME_DILATION_FIELD = ENTITY_TYPES.register("time_dilation_field", 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 54ceff6c..41f15fbc 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 @@ -687,6 +687,9 @@ public final class AntarchyFabricItems { public static final DeferredItem TYPHONITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TYPHONITE); + public static final DeferredItem NADIR_NYXIUM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NADIR_NYXIUM); + public static final DeferredItem VERDANT_NYXIUM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.VERDANT_NYXIUM); + public static final DeferredItem TYPHONITE_PILLAR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TYPHONITE_PILLAR); public static final DeferredItem TYPHONITE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TYPHONITE_BRICKS); public static final DeferredItem CHISELED_TYPHONITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CHISELED_TYPHONITE); public static final DeferredItem POLISHED_TYPHONITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.POLISHED_TYPHONITE); @@ -702,7 +705,11 @@ public final class AntarchyFabricItems { public static final DeferredItem POLISHED_TYPHONITE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.POLISHED_TYPHONITE_SLAB); public static final DeferredItem POLISHED_TYPHONITE_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.POLISHED_TYPHONITE_WALL); public static final DeferredItem SPIRALING_VINES_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SPIRALING_VINES); + public static final DeferredItem GOREVINE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.GOREVINE); public static final DeferredItem WHIRLFLOWER_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.WHIRLFLOWER); + public static final DeferredItem NADIR_FERN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NADIR_FERN); + public static final DeferredItem LARGE_NADIR_FERN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.LARGE_NADIR_FERN); + public static final DeferredItem DUSKBELL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DUSKBELL); public static final DeferredItem DEAD_STAR_CORAL_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DEAD_STAR_CORAL_BLOCK); @@ -1058,6 +1065,9 @@ public final class AntarchyFabricItems { public static final DeferredItem BRUTALFLY_ELYTRA = ITEMS.register("brutalfly_elytra", () -> new BrutalflyElytraItem(new Item.Properties().rarity(Rarity.UNCOMMON).durability(480))); + public static final DeferredItem MANTICORE_WING = ITEMS.registerSimpleItem("manticore_wing", new Item.Properties().rarity(Rarity.UNCOMMON)); + public static final DeferredItem MANTICORE_WINGS = ITEMS.register("manticore_wings", + () -> new ManticoreWingsItem(new Item.Properties().rarity(Rarity.RARE).durability(480))); public static final DeferredItem CORNEA_EAR = ITEMS.register("cornea_ear", @@ -1093,6 +1103,13 @@ public final class AntarchyFabricItems { .nutrition(2) .saturationModifier(0.1F) .effect(new MobEffectInstance(MobEffects.DAMAGE_BOOST, 100, 0), 1.0F) + .build()))); + public static final DeferredItem BROODFRUIT_COBBLER = ITEMS.register("broodfruit_cobbler", + () -> new Item(new Item.Properties() + .food(new FoodProperties.Builder() + .nutrition(8) + .saturationModifier(0.8F) + .effect(new MobEffectInstance(MobEffects.DAMAGE_BOOST, 20 * 90, 1), 1.0F) .build()))); public static final DeferredItem RAW_BUG_MEAT = ITEMS.register("raw_bug_meat", () -> new Item(new Item.Properties() @@ -1773,6 +1790,8 @@ public final class AntarchyFabricItems { new Item.Properties().stacksTo(16).rarity(Rarity.UNCOMMON), AntarchyFabricEntities.LUCID_PEARL_PROJECTILE )); + public static final DeferredItem ROYAL_ASSAILANT_STAFF = ITEMS.register("royal_assailant_staff", + () -> new RoyalAssailantStaffItem(new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant())); public static final DeferredItem WATER_CANNON = ITEMS.register("water_cannon", 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 a420f2af..4a192e2b 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 @@ -300,8 +300,6 @@ public class AntarchyNeoforge { private static void bindCommonObjects() { com.craisinlord.antarchy.content.entity.UpwardFallingBlockEntity.TYPE = AntarchyNeoforgeEntites.UPWARD_FALLING_BLOCK; - com.craisinlord.antarchy.content.block.SpiralingVinesBlock.BODY_BLOCK = () -> AntarchyNeoforgeBlocks.SPIRALING_VINES_PLANT.get(); - com.craisinlord.antarchy.content.block.SpiralingVinesPlantBlock.HEAD_BLOCK = () -> AntarchyNeoforgeBlocks.SPIRALING_VINES.get(); AntarchyObjects.setLucidAnchor(() -> AntarchyNeoforgeBlocks.LUCID_ANCHOR.get()); AntarchyObjects.setLucidAnchorBlockEntity(() -> AntarchyNeoforgeBlocks.LUCID_ANCHOR_BLOCK_ENTITY.get()); PermanentPortalType.bindBlocks( 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 e6162024..4d70b060 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 @@ -195,6 +195,7 @@ public final class AntarchyNeoForgeClient { renderer.addLayer(new GoopedLivingLayer(renderer)); renderer.addLayer(new GlimmeringLivingLayer(renderer)); renderer.addLayer(new BrutalflyElytraLayer(renderer)); + renderer.addLayer(new com.craisinlord.antarchy.content.client.renderer.ManticoreWingsLayer(renderer)); renderer.addLayer(new FallenKingCrownLayer(renderer)); } } @@ -634,8 +635,11 @@ public final class AntarchyNeoForgeClient { ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.CHITIN_SPIKE.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.TYPHONITE_SPIKE.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.SPIRALING_VINES.get(), RenderType.cutout()); - ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.SPIRALING_VINES_PLANT.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.GOREVINE.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.WHIRLFLOWER.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.NADIR_FERN.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.LARGE_NADIR_FERN.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.DUSKBELL.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()); 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 cac6d5c8..a76352ee 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 @@ -1396,6 +1396,11 @@ public final class AntarchyNeoForgeEvents { ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeBlocks.PEACH_LEAVES.get().asItem(), 0.3f); ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeItems.PEACH_SAPLING_ITEM.get(), 0.3f); ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeItems.NADIR_SAPLING_ITEM.get(), 0.3f); + ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeItems.NADIR_FERN_ITEM.get(), 0.3f); + ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeItems.LARGE_NADIR_FERN_ITEM.get(), 0.5f); + ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeItems.DUSKBELL_ITEM.get(), 0.65f); + ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeItems.WHIRLFLOWER_ITEM.get(), 0.65f); + ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeItems.GOREVINE_ITEM.get(), 0.5f); ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeItems.CORN.get(), 0.65f); ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeItems.CORN_SEEDS.get(), 0.3f); ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeItems.PEACH.get(), 0.65f); 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 1be48b19..8004135f 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 @@ -765,8 +765,8 @@ public final class AntarchyNeoforgeBlocks { () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.MUD_BRICKS))); 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 DREAM_SANDSTONE = BLOCKS.register("dream_sandstone", + () -> new DreamSandstoneBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SANDSTONE))); public static final DeferredBlock CHISELED_DREAM_SANDSTONE = BLOCKS.register("chiseled_dream_sandstone", () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.CHISELED_SANDSTONE))); public static final DeferredBlock CUT_DREAM_SANDSTONE = BLOCKS.register("cut_dream_sandstone", @@ -787,6 +787,12 @@ public final class AntarchyNeoforgeBlocks { () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_SANDSTONE_SLAB))); public static final DeferredBlock TYPHONITE = BLOCKS.register("typhonite", () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.BLACKSTONE))); + public static final DeferredBlock NADIR_NYXIUM = BLOCKS.register("nadir_nyxium", + () -> new DirectionalNyxiumBlock(nyxiteProperties(), DirectionalNyxiumBlock.Type.NADIR)); + public static final DeferredBlock VERDANT_NYXIUM = BLOCKS.register("verdant_nyxium", + () -> new DirectionalNyxiumBlock(nyxiteProperties(), DirectionalNyxiumBlock.Type.VERDANT)); + public static final DeferredBlock TYPHONITE_PILLAR = BLOCKS.register("typhonite_pillar", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BLACKSTONE))); public static final DeferredBlock TYPHONITE_BRICKS = BLOCKS.register("typhonite_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.BLACKSTONE))); public static final DeferredBlock CHISELED_TYPHONITE = BLOCKS.register("chiseled_typhonite", @@ -817,10 +823,16 @@ public final class AntarchyNeoforgeBlocks { () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BLACKSTONE_WALL))); public static final DeferredBlock SPIRALING_VINES = BLOCKS.register("spiraling_vines", () -> new SpiralingVinesBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.TWISTING_VINES))); - public static final DeferredBlock SPIRALING_VINES_PLANT = BLOCKS.register("spiraling_vines_plant", - () -> new SpiralingVinesPlantBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.TWISTING_VINES_PLANT))); + public static final DeferredBlock GOREVINE = BLOCKS.register("gorevine", + () -> new GorevineBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.WEEPING_VINES).lightLevel(state -> 4))); public static final DeferredBlock WHIRLFLOWER = BLOCKS.register("whirlflower", () -> new WhirlflowerBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.ALLIUM))); + public static final DeferredBlock NADIR_FERN = BLOCKS.register("nadir_fern", + () -> new NadirFernBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.FERN))); + public static final DeferredBlock LARGE_NADIR_FERN = BLOCKS.register("large_nadir_fern", + () -> new LargeNadirFernBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.LARGE_FERN).noCollission())); + public static final DeferredBlock DUSKBELL = BLOCKS.register("duskbell", + () -> new DirectionalThoraxisFlowerBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.ALLIUM).lightLevel(state -> 4))); public static final DeferredBlock DEAD_STAR_CORAL_BLOCK = BLOCKS.register("dead_star_coral_block", () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.TUBE_CORAL_BLOCK))); public static final DeferredBlock DEAD_STAR_CORAL = BLOCKS.register("dead_star_coral", 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 5ef287a5..51ceef5f 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 @@ -377,12 +377,14 @@ public final class AntarchyNeoforgeEntites { () -> EntityType.Builder.of(VortexEntity::new, MobCategory.MONSTER) .sized(2.0F, 2.0F) .clientTrackingRange(10) + .fireImmune() .build("vortex")); public static final DeferredHolder, EntityType> WIND_VORTEX = ENTITY_TYPES.register("wind_vortex", () -> EntityType.Builder.of(WindVortexEntity::new, MobCategory.MISC) .sized(3.0F, 5.0F) .clientTrackingRange(10) .updateInterval(1) + .fireImmune() .build("wind_vortex")); public static final DeferredHolder, EntityType> ROYAL_BLACK_HOLE = ENTITY_TYPES.register("royal_black_hole", () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.royal.RoyalBlackHoleEntity::new, MobCategory.MISC) 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 70a3b5ec..9363c451 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 @@ -505,6 +505,9 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem SMOOTH_DREAM_SANDSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SMOOTH_DREAM_SANDSTONE_SLAB); public static final DeferredItem CUT_DREAM_SANDSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CUT_DREAM_SANDSTONE_SLAB); public static final DeferredItem TYPHONITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TYPHONITE); + public static final DeferredItem NADIR_NYXIUM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NADIR_NYXIUM); + public static final DeferredItem VERDANT_NYXIUM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.VERDANT_NYXIUM); + public static final DeferredItem TYPHONITE_PILLAR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TYPHONITE_PILLAR); public static final DeferredItem TYPHONITE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TYPHONITE_BRICKS); public static final DeferredItem CHISELED_TYPHONITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CHISELED_TYPHONITE); public static final DeferredItem POLISHED_TYPHONITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.POLISHED_TYPHONITE); @@ -520,7 +523,11 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem POLISHED_TYPHONITE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.POLISHED_TYPHONITE_SLAB); public static final DeferredItem POLISHED_TYPHONITE_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.POLISHED_TYPHONITE_WALL); public static final DeferredItem SPIRALING_VINES_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SPIRALING_VINES); + public static final DeferredItem GOREVINE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.GOREVINE); public static final DeferredItem WHIRLFLOWER_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.WHIRLFLOWER); + public static final DeferredItem NADIR_FERN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NADIR_FERN); + public static final DeferredItem LARGE_NADIR_FERN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.LARGE_NADIR_FERN); + public static final DeferredItem DUSKBELL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DUSKBELL); public static final DeferredItem DEAD_STAR_CORAL_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DEAD_STAR_CORAL_BLOCK); public static final DeferredItem DEAD_STAR_CORAL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DEAD_STAR_CORAL); public static final DeferredItem DEAD_STAR_CORAL_FAN_ITEM = ITEMS.register("dead_star_coral_fan", @@ -720,6 +727,9 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem BRUTALFLY_WING = ITEMS.registerSimpleItem("brutalfly_wing", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final DeferredItem BRUTALFLY_ELYTRA = ITEMS.register("brutalfly_elytra", () -> new BrutalflyElytraItem(new Item.Properties().rarity(Rarity.UNCOMMON).durability(480))); + public static final DeferredItem MANTICORE_WING = ITEMS.registerSimpleItem("manticore_wing", new Item.Properties().rarity(Rarity.UNCOMMON)); + public static final DeferredItem MANTICORE_WINGS = ITEMS.register("manticore_wings", + () -> new ManticoreWingsItem(new Item.Properties().rarity(Rarity.RARE).durability(480))); public static final DeferredItem CORNEA_EAR = ITEMS.register("cornea_ear", () -> new CorneaEarItem(new Item.Properties() .rarity(Rarity.UNCOMMON) @@ -747,6 +757,13 @@ public final class AntarchyNeoforgeItems { .nutrition(2) .saturationModifier(0.1F) .effect(() -> new MobEffectInstance(MobEffects.DAMAGE_BOOST, 100, 0), 1.0F) + .build()))); + public static final DeferredItem BROODFRUIT_COBBLER = ITEMS.register("broodfruit_cobbler", + () -> new Item(new Item.Properties() + .food(new FoodProperties.Builder() + .nutrition(8) + .saturationModifier(0.8F) + .effect(() -> new MobEffectInstance(MobEffects.DAMAGE_BOOST, 20 * 90, 1), 1.0F) .build()))); public static final DeferredItem RAW_BUG_MEAT = ITEMS.register("raw_bug_meat", () -> new Item(new Item.Properties() @@ -1143,6 +1160,8 @@ public final class AntarchyNeoforgeItems { new Item.Properties().stacksTo(16).rarity(Rarity.UNCOMMON), AntarchyNeoforgeEntites.LUCID_PEARL_PROJECTILE )); + public static final DeferredItem ROYAL_ASSAILANT_STAFF = ITEMS.register("royal_assailant_staff", + () -> new RoyalAssailantStaffItem(new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant())); public static final DeferredItem WATER_CANNON = ITEMS.register("water_cannon", () -> new WaterCannonItem(new Item.Properties().stacksTo(1).durability(192).rarity(Rarity.RARE))); public static final DeferredItem PRIMORDIAL_HELMET = ITEMS.register("primordial_helmet", diff --git a/neoforge-1.21.1/src/main/resources/assets/antarchy/models/item/royal_assailant_staff.json b/neoforge-1.21.1/src/main/resources/assets/antarchy/models/item/royal_assailant_staff.json new file mode 100644 index 00000000..81f9b957 --- /dev/null +++ b/neoforge-1.21.1/src/main/resources/assets/antarchy/models/item/royal_assailant_staff.json @@ -0,0 +1 @@ +{"loader":"neoforge:separate_transforms","gui_light":"front","base":{"parent":"antarchy:item/royal_assailant_staff_held_geo"},"perspectives":{"gui":{"parent":"minecraft:item/generated","textures":{"layer0":"antarchy:item/royal_assailant_staff_item"}},"ground":{"parent":"minecraft:item/generated","textures":{"layer0":"antarchy:item/royal_assailant_staff_item"}},"fixed":{"parent":"minecraft:item/generated","textures":{"layer0":"antarchy:item/royal_assailant_staff_item"}}}}