diff --git a/build.gradle b/build.gradle index 2fa6c90a..5769b7b2 100644 --- a/build.gradle +++ b/build.gradle @@ -34,6 +34,7 @@ allprojects { } maven { url "https://nexus.resourcefulbees.com/repository/telepathicgrunt/" } maven { url "https://maven.shedaniel.me" } + maven { url "https://maven.terraformersmc.com/releases/" } maven { url "https://jitpack.io" } maven { url "https://www.cursemaven.com" } maven { url "https://api.modrinth.com/maven/" } @@ -47,6 +48,7 @@ allprojects { java { withSourcesJar() } + } // Don't build the root project itself. diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java index 129654d0..e0cf683b 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java @@ -322,6 +322,8 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier LUMEN_FROGLIGHT = (Supplier) UNBOUND; @SuppressWarnings("unchecked") + public static Supplier GLIMMERING_REED = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") public static Supplier OURANWOOD_ACORN_BLOCK = (Supplier) UNBOUND; @SuppressWarnings("unchecked") public static Supplier MOSSY_OURANWOOD_LOG = (Supplier) UNBOUND; @@ -779,6 +781,10 @@ public final class AntarchyObjects { LUMEN_FROGLIGHT = supplier; } + public static void setGlimmeringReed(Supplier supplier) { + GLIMMERING_REED = supplier; + } + public static void setSpiritApple(Supplier supplier) { SPIRIT_APPLE = supplier; } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchySoundEvents.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchySoundEvents.java index 6dc60927..095567d2 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchySoundEvents.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchySoundEvents.java @@ -63,6 +63,10 @@ public final class AntarchySoundEvents { public static Supplier THORAXIS_LUCID_POOLS_AMBIENT = (Supplier) UNBOUND; public static Supplier THORAXIS_LUCID_POOLS_ADDITIONS = (Supplier) UNBOUND; public static Supplier THORAXIS_LUCID_POOLS_MOOD = (Supplier) UNBOUND; + public static Supplier DIMENSIONAL_TEAR_OPEN = (Supplier) UNBOUND; + public static Supplier DIMENSIONAL_TEAR_IDLE = (Supplier) UNBOUND; + public static Supplier DIMENSIONAL_TEAR_CREATURE_LEAVES = (Supplier) UNBOUND; + public static Supplier DIMENSIONAL_TEAR_CLOSE = (Supplier) UNBOUND; public static Supplier LUCID_AMBIENT = (Supplier) UNBOUND; public static Supplier LUCID_FLYING = (Supplier) UNBOUND; public static Supplier LUCID_ATTACK = (Supplier) UNBOUND; @@ -613,4 +617,16 @@ public final class AntarchySoundEvents { PRINCESS_FLY = princessFly; PRINCESS_STEP = princessStep; } + + public static void bindDimensionalTearSounds( + Supplier dimensionalTearOpen, + Supplier dimensionalTearIdle, + Supplier dimensionalTearCreatureLeaves, + Supplier dimensionalTearClose + ) { + DIMENSIONAL_TEAR_OPEN = dimensionalTearOpen; + DIMENSIONAL_TEAR_IDLE = dimensionalTearIdle; + DIMENSIONAL_TEAR_CREATURE_LEAVES = dimensionalTearCreatureLeaves; + DIMENSIONAL_TEAR_CLOSE = dimensionalTearClose; + } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java index cf0ab609..865c33a4 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java @@ -46,6 +46,7 @@ public final class AntarchyTags { public static final TagKey ANTIMETAL_INVERSION_BLOCKS = TagKey.create(Registries.BLOCK, id("antimetal_inversion_blocks")); public static final TagKey TIGER_EYE_CAMOUFLAGE_BLACKLIST = TagKey.create(Registries.BLOCK, id("tiger_eye_camouflage_blacklist")); public static final TagKey LUCID_ANCHOR_BASE_BLOCKS = TagKey.create(Registries.BLOCK, id("lucid_anchor_base_blocks")); + public static final TagKey NYXIUM = TagKey.create(Registries.BLOCK, id("nyxium")); private Blocks() { } @@ -125,6 +126,7 @@ public final class AntarchyTags { public static final TagKey GLIMMER_AUGMENT_ELKA = TagKey.create(Registries.ITEM, id("glimmer_augment_elka")); public static final TagKey HFCS_CANNOT_AMERICANIZE = TagKey.create(Registries.ITEM, id("hfcs_cannot_americanize")); public static final TagKey TIGER_EYE_ARMOR = TagKey.create(Registries.ITEM, id("tigers_eye_armor")); + public static final TagKey BIG_BERTHA_INGREDIENT = TagKey.create(Registries.ITEM, id("big_bertha_ingredient")); private Items() { } 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 index a33a7c24..f400c560 100644 --- 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 @@ -29,6 +29,8 @@ public class DirectionalNyxiumBlock extends Block implements BonemealableBlock { 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 static final ResourceLocation NADIR_ROOTS_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "nadir_roots"); + private static final ResourceLocation VERDANT_ROOTS_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "verdant_roots"); private final Type type; public DirectionalNyxiumBlock(BlockBehaviour.Properties properties, Type type) { @@ -93,9 +95,17 @@ public class DirectionalNyxiumBlock extends Block implements BonemealableBlock { if (direction == Direction.DOWN && random.nextInt(7) == 0) { yield NADIR_SAPLING_ID; } - yield random.nextInt(4) == 0 ? DUSKBELL_ID : NADIR_FERN_ID; + yield switch (random.nextInt(5)) { + case 0 -> DUSKBELL_ID; + case 1, 2 -> NADIR_ROOTS_ID; + default -> NADIR_FERN_ID; + }; } - case VERDANT -> random.nextInt(3) == 0 ? SPIRALING_VINES_ID : WHIRLFLOWER_ID; + case VERDANT -> switch (random.nextInt(5)) { + case 0, 1 -> VERDANT_ROOTS_ID; + case 2 -> SPIRALING_VINES_ID; + default -> WHIRLFLOWER_ID; + }; }; Block block = BuiltInRegistries.BLOCK.get(id); BlockState growthState = block.defaultBlockState(); 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 index c83026a2..928b4828 100644 --- 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 @@ -1,5 +1,6 @@ package com.craisinlord.antarchy.content.block; +import com.craisinlord.antarchy.content.AntarchyTags; import com.mojang.serialization.MapCodec; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -49,15 +50,14 @@ public class DirectionalThoraxisFlowerBlock extends BushBlock { @Override protected boolean mayPlaceOn(BlockState state, BlockGetter level, BlockPos pos) { - return true; + return state.is(AntarchyTags.Blocks.NYXIUM); } @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); + return this.mayPlaceOn(level.getBlockState(supportPos), level, supportPos); } @Override diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/GlimmeringReedBlock.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/GlimmeringReedBlock.java new file mode 100644 index 00000000..d9f44d41 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/GlimmeringReedBlock.java @@ -0,0 +1,84 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.ItemInteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +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.DoublePlantBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.DoubleBlockHalf; +import net.minecraft.world.phys.BlockHitResult; + +/** A two-block-tall, light-emitting reed found around Lumen pools. */ +public final class GlimmeringReedBlock extends DoublePlantBlock implements BonemealableBlock { + public static final MapCodec CODEC = Block.simpleCodec(GlimmeringReedBlock::new); + + public GlimmeringReedBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + protected ItemInteractionResult useItemOn( + ItemStack stack, + BlockState state, + Level level, + BlockPos pos, + Player player, + InteractionHand hand, + BlockHitResult hitResult + ) { + if (player.getItemInHand(hand).is(Items.BONE_MEAL)) { + popResource(level, pos, new ItemStack(state.getBlock().asItem(), 1)); + return ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION; + } + + return super.useItemOn(stack, state, level, pos, player, hand, hitResult); + } + + @Override + public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state) { + return true; + } + + @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) { + } + + @Override + public void animateTick(BlockState state, Level level, BlockPos pos, RandomSource random) { + super.animateTick(state, level, pos, random); + if (state.getValue(HALF) != DoubleBlockHalf.UPPER || random.nextInt(8) != 0) { + return; + } + + double x = pos.getX() + 0.15D + random.nextDouble() * 0.7D; + double y = pos.getY() + 0.76D + random.nextDouble() * 0.18D; + double z = pos.getZ() + 0.15D + random.nextDouble() * 0.7D; + level.addParticle(ParticleTypes.GLOW, x, y, z, 0.0D, 0.02D, 0.0D); + + if (random.nextInt(4) == 0) { + level.addParticle(ParticleTypes.ENCHANT, x, y + 0.02D, z, 0.0D, 0.015D, 0.0D); + } + } +} 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 index e91c384f..ceaece0e 100644 --- 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 @@ -6,7 +6,7 @@ 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; + private static final int MAX_GROWTH_DISTANCE = 7; public GorevineBlock(BlockBehaviour.Properties properties) { super(properties); 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 index 8ea5371e..9bfd7a61 100644 --- 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 @@ -27,7 +27,7 @@ public class SimpleDirectionalVineBlock extends BushBlock implements Bonemealabl 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); + public static final IntegerProperty DISTANCE = IntegerProperty.create("distance", 0, 15); 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); @@ -153,9 +153,10 @@ public class SimpleDirectionalVineBlock extends BushBlock implements Bonemealabl return; } + int nextDistance = Math.min(state.getValue(DISTANCE) + 1, maxDistance()); BlockState grownState = this.defaultBlockState() .setValue(GROWTH_DIRECTION, direction) - .setValue(DISTANCE, state.getValue(DISTANCE) + 1); + .setValue(DISTANCE, nextDistance); level.setBlock(targetPos, grownState, Block.UPDATE_ALL); BlockState posState = level.getBlockState(pos); 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 c460dbea..3d60b0bb 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 @@ -1,6 +1,7 @@ package com.craisinlord.antarchy.content.block; import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.AntarchyTags; import com.mojang.serialization.MapCodec; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -27,7 +28,6 @@ public class WhirlflowerBlock extends BushBlock { 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); @@ -54,8 +54,8 @@ public class WhirlflowerBlock extends BushBlock { @Override protected boolean mayPlaceOn(BlockState state, BlockGetter level, BlockPos pos) { - ResourceLocation id = BuiltInRegistries.BLOCK.getKey(state.getBlock()); - return id.equals(VEINED_TYPHONITE_ID) || id.equals(VERDANT_NYXIUM_ID); + return state.is(AntarchyTags.Blocks.NYXIUM) + || BuiltInRegistries.BLOCK.getKey(state.getBlock()).equals(VEINED_TYPHONITE_ID); } @Override 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 77709dbe..820f422e 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 @@ -221,6 +221,8 @@ public final class CreativeTabContents { entry("nadir_fern", "natural_blocks"), entry("large_nadir_fern", "natural_blocks"), entry("duskbell", "natural_blocks"), + entry("nadir_roots", "natural_blocks"), + entry("verdant_roots", "natural_blocks"), entry("typhonite_pillar", "building_blocks"), entry("antigravel", "natural_blocks"), entry("budding_blood_crystal", "building_blocks"), @@ -340,6 +342,7 @@ public final class CreativeTabContents { entry("duplicator_sapling", "natural_blocks"), entry("orange_milkweed", "natural_blocks"), entry("pink_milkweed", "natural_blocks"), + entry("glimmering_reed", "natural_blocks"), entry("camellia", "natural_blocks"), entry("spider_lily", "natural_blocks"), entry("lotus", "natural_blocks"), 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 11491e80..0a11d2b3 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 @@ -100,9 +100,13 @@ public class ManticoreEntity extends Monster implements GeoEntity { } public static boolean canSpawn(EntityType type, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { - if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER || spawnReason == MobSpawnType.COMMAND) { + if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER + || spawnReason == MobSpawnType.COMMAND || spawnReason == MobSpawnType.MOB_SUMMONED) { return true; } + if (pos.getY() >= 0) { + return false; + } BlockState below = level.getBlockState(pos.below()); BlockState above = level.getBlockState(pos.above()); boolean floorSupport = !below.is(Blocks.BEDROCK) && below.isFaceSturdy(level, pos.below(), Direction.UP); 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 fd122329..cae62d95 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 @@ -2,6 +2,7 @@ package com.craisinlord.antarchy.content.entity.portal; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.entity.ManticoreEntity; import com.craisinlord.antarchy.content.entity.royal.QueenEntity; @@ -11,6 +12,8 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.UUID; +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.sounds.AbstractTickableSoundInstance; import net.minecraft.core.BlockPos; import net.minecraft.core.Holder; import net.minecraft.core.HolderSet; @@ -63,6 +66,7 @@ public class DimensionalTearEntity extends Entity implements GeoEntity { private static final RawAnimation CLOSING_ANIM = RawAnimation.begin().thenPlayAndHold("closing"); private static final int DEFAULT_LIFETIME_TICKS = 20 * 60 * 20; private static final int OPENING_ANIMATION_TICKS = 20; + private static final int MANTICORE_EMERGENCE_TICKS = OPENING_ANIMATION_TICKS + 20; private static final int CLOSING_ANIMATION_TICKS = 10; private static final int EVENT_WARNING_TICKS = 80; private static final int TELEPORT_COOLDOWN_TICKS = 60; @@ -72,6 +76,7 @@ public class DimensionalTearEntity extends Entity implements GeoEntity { private static final Map> QUEEN_TEAR_IDS = new HashMap<>(); private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private boolean idleSoundStarted; private UUID linkedTearId; @Nullable private DimensionalTearEntity linkedTear; @@ -138,13 +143,20 @@ public class DimensionalTearEntity extends Entity implements GeoEntity { super.tick(); if (this.level().isClientSide) { this.tickClientParticles(); + this.tickIdleSound(); return; } this.ageTicks++; + if (this.ageTicks == 1) { + this.level().playSound(null, this.blockPosition(), AntarchySoundEvents.DIMENSIONAL_TEAR_OPEN.get(), SoundSource.HOSTILE, 1.0F, 1.0F); + } if (this.ageTicks < OPENING_ANIMATION_TICKS) { this.setTearState(TearState.OPENING); } else if (this.ageTicks >= this.lifetimeTicks - CLOSING_ANIMATION_TICKS) { + if (this.ageTicks == this.lifetimeTicks - CLOSING_ANIMATION_TICKS) { + this.level().playSound(null, this.blockPosition(), AntarchySoundEvents.DIMENSIONAL_TEAR_CLOSE.get(), SoundSource.HOSTILE, 1.0F, 1.0F); + } this.setTearState(TearState.COLLAPSING); } else if (this.getTearState() == TearState.OPENING || this.getTearState() == TearState.COLLAPSING) { this.setTearState(TearState.NORMAL); @@ -154,11 +166,11 @@ public class DimensionalTearEntity extends Entity implements GeoEntity { return; } - if (this.queenOwnerId != null && this.ageTicks == OPENING_ANIMATION_TICKS) { + if (this.queenOwnerId != null && this.ageTicks == MANTICORE_EMERGENCE_TICKS) { this.spawnQueenManticores((ServerLevel) this.level()); } - if (this.staffOwnerId != null && this.ageTicks == OPENING_ANIMATION_TICKS) { + if (this.staffOwnerId != null && this.ageTicks == MANTICORE_EMERGENCE_TICKS) { this.spawnStaffManticores((ServerLevel) this.level()); } @@ -219,7 +231,7 @@ public class DimensionalTearEntity extends Entity implements GeoEntity { mob.setDeltaMovement(this.getViewVector(1.0F).scale(0.35D).add(0.0D, 0.08D, 0.0D)); mob.setNoGravity(true); level.addFreshEntity(mob); - level.playSound(null, this.blockPosition(), eventState == TearState.LUCID ? SoundEvents.AMETHYST_BLOCK_CHIME : SoundEvents.ENDERMAN_SCREAM, SoundSource.HOSTILE, 0.75F, eventState == TearState.LUCID ? 1.45F : 0.85F); + level.playSound(null, this.blockPosition(), AntarchySoundEvents.DIMENSIONAL_TEAR_CREATURE_LEAVES.get(), SoundSource.HOSTILE, 0.75F, eventState == TearState.LUCID ? 1.15F : 0.9F); } private void spawnQueenManticores(ServerLevel level) { @@ -412,6 +424,14 @@ public class DimensionalTearEntity extends Entity implements GeoEntity { this.entityData.set(STATE, state.ordinal()); } + private void tickIdleSound() { + if (this.idleSoundStarted || this.getTearState() == TearState.OPENING) { + return; + } + this.idleSoundStarted = true; + Minecraft.getInstance().getSoundManager().play(new TearIdleSoundInstance(this)); + } + private void tickClientParticles() { TearState state = this.getTearState(); if (this.random.nextInt(state == TearState.NORMAL ? 5 : 2) != 0) { @@ -523,4 +543,36 @@ public class DimensionalTearEntity extends Entity implements GeoEntity { public AnimatableInstanceCache getAnimatableInstanceCache() { return this.geoCache; } + + private static final class TearIdleSoundInstance extends AbstractTickableSoundInstance { + private final DimensionalTearEntity tear; + + private TearIdleSoundInstance(DimensionalTearEntity tear) { + super(AntarchySoundEvents.DIMENSIONAL_TEAR_IDLE.get(), SoundSource.HOSTILE, tear.random); + this.tear = tear; + this.looping = true; + this.delay = 0; + this.volume = 0.6F; + this.pitch = 1.0F; + this.x = tear.getX(); + this.y = tear.getY(); + this.z = tear.getZ(); + } + + @Override + public void tick() { + if (this.tear.isRemoved() || this.tear.getTearState() == TearState.COLLAPSING) { + this.stop(); + return; + } + this.x = this.tear.getX(); + this.y = this.tear.getY(); + this.z = this.tear.getZ(); + } + + @Override + public boolean canStartSilent() { + return true; + } + } } 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 6c237620..ea19d172 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 @@ -68,7 +68,7 @@ public class WindVortexEntity extends Entity { private static final String HOMING_KEY = "Homing"; private static final double BASE_RADIUS = 0.35D; - private static final double DRIFT_FRICTION = 0.96D; + private static final double DRIFT_FRICTION = 0.995D; private static final int FADE_OUT_TICKS = 8; public enum VortexMode { @@ -174,8 +174,8 @@ public class WindVortexEntity extends Entity { if (--this.travelTicksRemaining <= 0) { this.travelling = false; this.noPhysics = false; + this.setDeltaMovement(this.travelVelocity); this.travelVelocity = Vec3.ZERO; - this.setDeltaMovement(Vec3.ZERO); } } else { Vec3 drift = this.getDeltaMovement().multiply(DRIFT_FRICTION, DRIFT_FRICTION, DRIFT_FRICTION); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/GlimmeringReedFeature.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/GlimmeringReedFeature.java new file mode 100644 index 00000000..afa5cd0d --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/GlimmeringReedFeature.java @@ -0,0 +1,59 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.content.block.GlimmeringReedBlock; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.DoublePlantBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; + +public final class GlimmeringReedFeature extends Feature { + public GlimmeringReedFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + BlockState reed = AntarchyObjects.GLIMMERING_REED.get().defaultBlockState(); + boolean placedAny = false; + + for (int i = 0; i < 18; i++) { + int x = origin.getX() + random.nextInt(17) - 8; + int z = origin.getZ() + random.nextInt(17) - 8; + int surfaceY = level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, x, z) - 1; + BlockPos groundPos = new BlockPos(x, surfaceY, z); + BlockPos reedPos = groundPos.above(); + if (!level.getBlockState(groundPos).isSolid() || !level.isEmptyBlock(reedPos) + || !level.isEmptyBlock(reedPos.above()) || !reed.canSurvive(level, reedPos)) { + continue; + } + + boolean besideLumen = false; + for (Direction direction : Direction.Plane.HORIZONTAL) { + if (level.getFluidState(groundPos.relative(direction)).is(AntarchyTags.Fluids.LUMEN) + && level.getFluidState(groundPos.relative(direction)).isSource()) { + besideLumen = true; + break; + } + } + if (!besideLumen) { + continue; + } + + DoublePlantBlock.placeAt(level, reed, reedPos, 2); + placedAny = true; + } + return placedAny; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/HoverboardRiderPoseMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/HoverboardRiderPoseMixin.java index b50d6549..edc34b4a 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/HoverboardRiderPoseMixin.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/HoverboardRiderPoseMixin.java @@ -18,6 +18,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(LivingEntityRenderer.class) public abstract class HoverboardRiderPoseMixin> { private static final float HOVERBOARD_RIDER_RENDER_YAW = -90.0F; + private static final float HOVERBOARD_RIDER_TORSO_ROLL = -15.0F; @Shadow public abstract M getModel(); @@ -60,6 +61,7 @@ public abstract class HoverboardRiderPoseMixin getBindings() { + return SETTINGS; + } + + /** + * Re-serializes the current live value of every binding back to its JSON file. Intended for + * the optional Cloth Config screen's save handler: entries there update the live + * {@link AntarchySettings} fields immediately through their own save consumers (same as + * {@link SettingBinding#apply(Object)} does below), but nothing writes those changes to disk + * until this runs — mirrors the persistence tail of {@link #init()} above. + */ + public static void persist() { + Map normalized = new LinkedHashMap<>(); + for (ConfigSection section : ConfigSection.values()) { + normalized.put(section, new JsonObject()); + } + + for (Map.Entry entry : SETTINGS.entrySet()) { + SettingBinding binding = entry.getValue(); + normalized.get(binding.section).add(entry.getKey(), binding.toJson(binding.getCurrentValue())); + } + + for (Map.Entry entry : normalized.entrySet()) { + writeConfig(entry.getKey().path, entry.getValue()); + } + } + private static JsonObject readConfig(Path path) { if (!Files.exists(path)) { return null; @@ -145,7 +179,11 @@ public final class AntarchyConfigModuleFabric { return Character.toLowerCase(value.charAt(0)) + value.substring(1); } - private enum ConfigSection { + /** + * Public so the optional Cloth Config screen builder (fabric.client package) can group + * entries into the same Mobs/Tools/Misc categories the JSON files already use. + */ + public enum ConfigSection { MOBS("antarchy_mobs.json"), TOOLS("antarchy_tools.json"), MISC("antarchy_misc.json"); @@ -222,7 +260,15 @@ public final class AntarchyConfigModuleFabric { } } - private static final class SettingBinding { + /** + * Public so the optional Cloth Config screen builder (fabric.client package) can reuse this + * exact binding — the same getter/setter pair and JSON section the persistence layer above + * already drives — instead of a separate hand-authored entry list. The JSON-specific + * machinery (readValue/apply/toJson/getCurrentValue) stays private and is reused internally + * by the public getValue()/setValue() wrappers below, so there's exactly one code path for + * "what is this setting's current value" and "how do I change it". + */ + public static final class SettingBinding { private final String name; private final Method getter; private final Method setter; @@ -237,6 +283,31 @@ public final class AntarchyConfigModuleFabric { this.section = section; } + /** The AntarchySettings property name, e.g. {@code krakenHealth}. */ + public String getName() { + return name; + } + + /** Which of the three JSON files (Mobs/Tools/Misc) this setting persists to. */ + public ConfigSection getSection() { + return section; + } + + /** The primitive/String type of the setter's single parameter (boolean/int/double/float/String). */ + public Class getType() { + return setterType; + } + + /** The setting's current live value, boxed (Boolean/Integer/Double/Float/String). */ + public Object getValue() { + return getCurrentValue(); + } + + /** Applies a new value immediately via reflection, same as the JSON loader does at startup. */ + public void setValue(Object value) { + apply(value); + } + private Object readValue(JsonElement element) { Object defaultValue = getCurrentValue(); if (element == null || element.isJsonNull()) { diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java index f9955568..57d3f89d 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java @@ -335,6 +335,12 @@ public final class AntarchyFabricContent { AntarchyFabricSounds.PRINCESS_FLY, AntarchyFabricSounds.PRINCESS_STEP ); + AntarchySoundEvents.bindDimensionalTearSounds( + AntarchyFabricSounds.DIMENSIONAL_TEAR_OPEN, + AntarchyFabricSounds.DIMENSIONAL_TEAR_IDLE, + AntarchyFabricSounds.DIMENSIONAL_TEAR_CREATURE_LEAVES, + AntarchyFabricSounds.DIMENSIONAL_TEAR_CLOSE + ); AntarchyObjects.setOctopusBomb(AntarchyFabricEntities.OCTOPUS_BOMB); AntarchyObjects.setTentacle(AntarchyFabricEntities.TENTACLE); @@ -387,6 +393,7 @@ public final class AntarchyFabricContent { AntarchyObjects.setLumenBucket(() -> AntarchyFabricItems.LUMEN_BUCKET.get()); AntarchyObjects.setLumenBlock(() -> AntarchyFabricBlocks.LUMEN_BLOCK.get()); AntarchyObjects.setLumenFroglight(() -> AntarchyFabricBlocks.LUMEN_FROGLIGHT.get()); + AntarchyObjects.setGlimmeringReed(() -> AntarchyFabricBlocks.GLIMMERING_REED.get()); AntarchyObjects.setPeachLeavesParticle(() -> AntarchyFabricMisc.PEACH_LEAVES_PARTICLE.get()); AntarchyObjects.setLotusPollen(() -> AntarchyFabricMisc.LOTUS_POLLEN.get()); AntarchyObjects.setNightmareFireFlame(() -> AntarchyFabricMisc.NIGHTMARE_FIRE_FLAME.get()); diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyClothConfigScreenBuilder.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyClothConfigScreenBuilder.java new file mode 100644 index 00000000..901b1527 --- /dev/null +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyClothConfigScreenBuilder.java @@ -0,0 +1,91 @@ +package com.craisinlord.antarchy.fabric.client; + +import com.craisinlord.antarchy.fabric.AntarchyConfigModuleFabric; +import com.craisinlord.antarchy.fabric.AntarchyConfigModuleFabric.ConfigSection; +import com.craisinlord.antarchy.fabric.AntarchyConfigModuleFabric.SettingBinding; +import me.shedaniel.clothconfig2.api.ConfigBuilder; +import me.shedaniel.clothconfig2.api.ConfigCategory; +import me.shedaniel.clothconfig2.api.ConfigEntryBuilder; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.Component; + +import java.util.EnumMap; +import java.util.Map; + +/** + * Builds a Cloth Config screen directly from {@link AntarchyConfigModuleFabric}'s existing + * reflection-based binding map, so the screen and the on-disk JSON files stay in sync + * automatically — no separate hand-authored list of 350+ entries. + * + *

Only ever reached from {@link AntarchyModMenuIntegration#getModConfigScreenFactory()} after + * it has already confirmed Cloth Config is present, so every Cloth Config class referenced here + * is safe to touch. + * + *

Phase 1 scope (see the implementation plan): raw field names as labels, no min/max bounds, + * no tooltips, and fields backed by {@code ResourceKey} (the four dimension-identity + * settings) are skipped entirely rather than exposed with a widget that doesn't fit them. + */ +public final class AntarchyClothConfigScreenBuilder { + private AntarchyClothConfigScreenBuilder() { + } + + public static Screen build(Screen parent) { + ConfigBuilder builder = ConfigBuilder.create() + .setParentScreen(parent) + .setTitle(Component.translatable("antarchy.config.title")); + // Entry save consumers (below) already update the live AntarchySettings fields the + // instant the player edits a widget, matching how the game normally behaves. This runs + // last, once, when the player clicks "Save" — it's what actually writes those changes + // back to the three JSON files, since AntarchyConfigModuleFabric only reads+writes them + // at startup otherwise. + builder.setSavingRunnable(AntarchyConfigModuleFabric::persist); + + ConfigEntryBuilder entryBuilder = builder.entryBuilder(); + Map categories = new EnumMap<>(ConfigSection.class); + for (ConfigSection section : ConfigSection.values()) { + categories.put(section, builder.getOrCreateCategory(Component.literal(displayName(section)))); + } + + for (SettingBinding binding : AntarchyConfigModuleFabric.getBindings().values()) { + addEntry(entryBuilder, categories.get(binding.getSection()), binding); + } + + return builder.build(); + } + + private static void addEntry(ConfigEntryBuilder entryBuilder, ConfigCategory category, SettingBinding binding) { + Class type = binding.getType(); + Component label = Component.literal(binding.getName()); + + if (type == boolean.class) { + category.addEntry(entryBuilder.startBooleanToggle(label, (Boolean) binding.getValue()) + .setSaveConsumer(binding::setValue) + .build()); + } else if (type == int.class) { + category.addEntry(entryBuilder.startIntField(label, (Integer) binding.getValue()) + .setSaveConsumer(binding::setValue) + .build()); + } else if (type == double.class) { + category.addEntry(entryBuilder.startDoubleField(label, (Double) binding.getValue()) + .setSaveConsumer(binding::setValue) + .build()); + } else if (type == float.class) { + category.addEntry(entryBuilder.startFloatField(label, (Float) binding.getValue()) + .setSaveConsumer(binding::setValue) + .build()); + } + // String-typed bindings back the ResourceKey dimension fields (see + // AntarchyConfigModuleFabric.isSupported) and are intentionally skipped here — they're + // structural dimension identity, not a tuning knob, and Cloth Config has no natural + // widget for them. Every other supported type is exactly what's already persisted to + // JSON today, so nothing shown here can drift from what the JSON files contain. + } + + private static String displayName(ConfigSection section) { + return switch (section) { + case MOBS -> "Mobs"; + case TOOLS -> "Tools"; + case MISC -> "Misc"; + }; + } +} 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 fc7cd47d..2a31b6b4 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 @@ -351,6 +351,7 @@ public final class AntarchyFabricClientBootstrap { BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.DUPLICATOR_SAPLING.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.ORANGE_MILKWEED.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.PINK_MILKWEED.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.GLIMMERING_REED.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.AMBER_LICHEN.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.MUCUS.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.CREEPVINE.get(), RenderType.cutout()); @@ -378,6 +379,8 @@ public final class AntarchyFabricClientBootstrap { 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.NADIR_ROOTS.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.VERDANT_ROOTS.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()); diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyModMenuIntegration.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyModMenuIntegration.java new file mode 100644 index 00000000..48358e83 --- /dev/null +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyModMenuIntegration.java @@ -0,0 +1,37 @@ +package com.craisinlord.antarchy.fabric.client; + +import com.terraformersmc.modmenu.api.ConfigScreenFactory; +import com.terraformersmc.modmenu.api.ModMenuApi; +import net.fabricmc.loader.api.FabricLoader; + +/** + * Optional Mod Menu integration entrypoint — declared under the "modmenu" key in + * fabric.mod.json, never referenced anywhere else in Antarchy's own code. + * + *

This class is only ever loaded/instantiated by Mod Menu itself. Fabric Loader resolves + * entrypoints lazily: it reads every mod's fabric.mod.json at startup, but a class named under + * "entrypoints" is not loaded until something explicitly calls + * {@code FabricLoader.getInstance().getEntrypointContainers("modmenu", ModMenuApi.class)} for + * that key — and only Mod Menu does that. So if Mod Menu isn't installed, this class is never + * touched at all, and "modmenu" is declared as a "suggests" (not "depends") dependency in + * fabric.mod.json precisely so Antarchy loads identically either way. + * + *

Mod Menu and Cloth Config are independently optional, so the one runtime guard this + * integration does need is below: if Mod Menu is present but Cloth Config isn't, building the + * real screen would touch Cloth Config classes that aren't on the classpath. + */ +public final class AntarchyModMenuIntegration implements ModMenuApi { + @Override + public ConfigScreenFactory getModConfigScreenFactory() { + if (!FabricLoader.getInstance().isModLoaded("cloth-config")) { + // Mod Menu always shows the config button once a non-null factory is returned, so + // there's no clean way to hide it conditionally — handing back the screen that was + // already open is the safest no-op fallback when Cloth Config isn't installed. + return parent -> parent; + } + // Method reference, not a direct call: this does not load AntarchyClothConfigScreenBuilder + // or touch any Cloth Config class until the player actually clicks the config button, + // which only happens after the isModLoaded check above has already passed. + return AntarchyClothConfigScreenBuilder::build; + } +} 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 52b649bb..46ea4ca9 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 @@ -137,6 +137,8 @@ public final class AntarchyFabricBlocks { public static final DeferredBlock PINK_MILKWEED = BLOCKS.register("pink_milkweed", () -> new MilkweedBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.PEONY))); + public static final DeferredBlock GLIMMERING_REED = BLOCKS.register("glimmering_reed", + () -> new com.craisinlord.antarchy.content.block.GlimmeringReedBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SUNFLOWER).lightLevel(state -> 8))); public static final DeferredBlock CAMELLIA = BLOCKS.register("camellia", @@ -1389,6 +1391,10 @@ public final class AntarchyFabricBlocks { () -> 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 NADIR_ROOTS = BLOCKS.register("nadir_roots", + () -> new DirectionalThoraxisFlowerBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.CRIMSON_ROOTS))); + public static final DeferredBlock VERDANT_ROOTS = BLOCKS.register("verdant_roots", + () -> new DirectionalThoraxisFlowerBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.WARPED_ROOTS))); 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/AntarchyFabricItems.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java index 41f15fbc..6a541013 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 @@ -246,6 +246,7 @@ public final class AntarchyFabricItems { public static final DeferredItem PINK_MILKWEED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.PINK_MILKWEED); + public static final DeferredItem GLIMMERING_REED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.GLIMMERING_REED); public static final DeferredItem CAMELLIA_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CAMELLIA); @@ -710,6 +711,8 @@ public final class AntarchyFabricItems { 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 NADIR_ROOTS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NADIR_ROOTS); + public static final DeferredItem VERDANT_ROOTS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.VERDANT_ROOTS); public static final DeferredItem DEAD_STAR_CORAL_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DEAD_STAR_CORAL_BLOCK); diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java index f74e8d60..b471da77 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java @@ -79,7 +79,6 @@ import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureFeature import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalConfiguration; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolConfiguration; -import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsConfiguration; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeConfiguration; @@ -695,6 +694,8 @@ public final class AntarchyFabricMisc { public static final DeferredHolder, LumenLilyPadFeature> LUMEN_LILY_PADS = FEATURES.register("lumen_lily_pads", () -> new LumenLilyPadFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.elythia.GlimmeringReedFeature> GLIMMERING_REEDS = FEATURES.register("glimmering_reeds", + () -> new com.craisinlord.antarchy.content.worldgen.elythia.GlimmeringReedFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.elythia.GiantLilyPadPatchFeature> GIANT_LILY_PAD_PATCH = FEATURES.register("giant_lily_pad_patch", () -> new com.craisinlord.antarchy.content.worldgen.elythia.GiantLilyPadPatchFeature(NoneFeatureConfiguration.CODEC)); @@ -814,9 +815,6 @@ public final class AntarchyFabricMisc { () -> new com.craisinlord.antarchy.content.worldgen.mushroom.GlowcapHugeMushroomWorldgenFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, ThoraxisAntiwaterPoolFeature> THORAXIS_ANTIWATER_POOL = FEATURES.register("thoraxis_antiwater_pool", - () -> new ThoraxisAntiwaterPoolFeature(ThoraxisAntiwaterPoolConfiguration.CODEC)); - public static final DeferredHolder, LucidAntiwaterPoolFeature> LUCID_ANTIWATER_POOL = FEATURES.register("lucid_antiwater_pool", () -> new LucidAntiwaterPoolFeature(ThoraxisAntiwaterPoolConfiguration.CODEC)); diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSounds.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSounds.java index 13f9e746..267aa2c1 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSounds.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSounds.java @@ -188,6 +188,10 @@ public final class AntarchyFabricSounds { public static final DeferredHolder MUSIC_GAME_THORAXIS = registerSoundEvent("music.game.thoraxis"); + public static final DeferredHolder DIMENSIONAL_TEAR_OPEN = registerSoundEvent("dimensional_tear_open"); + public static final DeferredHolder DIMENSIONAL_TEAR_IDLE = registerSoundEvent("dimensional_tear_idle"); + public static final DeferredHolder DIMENSIONAL_TEAR_CREATURE_LEAVES = registerSoundEvent("dimensional_tear_creature_leaves"); + public static final DeferredHolder DIMENSIONAL_TEAR_CLOSE = registerSoundEvent("dimensional_tear_close"); public static final DeferredHolder MUSIC_GAME_CAVARYN = registerSoundEvent("music.game.cavaryn"); diff --git a/fabric-1.21.1/src/main/resources/fabric.mod.json b/fabric-1.21.1/src/main/resources/fabric.mod.json index 6baa8f07..03dbd314 100644 --- a/fabric-1.21.1/src/main/resources/fabric.mod.json +++ b/fabric-1.21.1/src/main/resources/fabric.mod.json @@ -21,6 +21,9 @@ ], "client": [ "com.craisinlord.antarchy.fabric.client.AntarchyFabricClient" + ], + "modmenu": [ + "com.craisinlord.antarchy.fabric.client.AntarchyModMenuIntegration" ] }, "mixins": [ @@ -38,5 +41,9 @@ }, "breaks": { "infinity": "<2.7.2" + }, + "suggests": { + "modmenu": "*", + "cloth-config": "*" } } diff --git a/gradle.properties b/gradle.properties index 037bdb8f..6125eb47 100644 --- a/gradle.properties +++ b/gradle.properties @@ -65,6 +65,9 @@ create_curseforge_file_id_neoforge = 7408951 clothconfig_curseforge_id=348521 clothconfig_curseforge_file_id=5623418 +configured_curseforge_id=457570 +configured_curseforge_file_id_neoforge=7276577 + marvel_curseforge_id=475642 marvel_curseforge_file_id=6739364 diff --git a/neoforge-1.21.1/build.gradle b/neoforge-1.21.1/build.gradle index 3edb1932..593a1e7b 100644 --- a/neoforge-1.21.1/build.gradle +++ b/neoforge-1.21.1/build.gradle @@ -63,6 +63,13 @@ dependencies { compileOnly "mezz.jei:jei-1.21.1-neoforge-api:${jei_version}" runtimeOnly "mezz.jei:jei-1.21.1-neoforge:${jei_version}" + // Configured — optional, gives players an in-game config screen for Antarchy's + // ModConfigSpec-based settings (AntarchyMobsConfig/AntarchyToolsConfig/AntarchyMiscConfig) + // with zero Java code on this side: NeoForge's own config system is auto-discovered. + // No compileOnly needed since nothing here references Configured's classes directly. + // Has no Modrinth release, hence cursemaven (repo already declared in the root build.gradle). + runtimeOnly("curse.maven:configured-${configured_curseforge_id}:${configured_curseforge_file_id_neoforge}") + implementation(annotationProcessor("io.github.llamalad7:mixinextras-common:${mixin_extras}")) } 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 4a192e2b..d9c1df83 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 @@ -232,6 +232,12 @@ public class AntarchyNeoforge { AntarchyNeoforgeSounds.PRINCESS_FLY, AntarchyNeoforgeSounds.PRINCESS_STEP ); + AntarchySoundEvents.bindDimensionalTearSounds( + AntarchyNeoforgeSounds.DIMENSIONAL_TEAR_OPEN, + AntarchyNeoforgeSounds.DIMENSIONAL_TEAR_IDLE, + AntarchyNeoforgeSounds.DIMENSIONAL_TEAR_CREATURE_LEAVES, + AntarchyNeoforgeSounds.DIMENSIONAL_TEAR_CLOSE + ); bindCommonObjects(); ScorpionWhipTetherSync.setSink((player, targetId) -> PacketDistributor.sendToPlayersTrackingEntityAndSelf( player, @@ -462,6 +468,7 @@ public class AntarchyNeoforge { AntarchyObjects.setLumenBucket(() -> AntarchyNeoforgeItems.LUMEN_BUCKET.get()); AntarchyObjects.setLumenBlock(() -> AntarchyNeoforgeBlocks.LUMEN_BLOCK.get()); AntarchyObjects.setLumenFroglight(() -> AntarchyNeoforgeBlocks.LUMEN_FROGLIGHT.get()); + AntarchyObjects.setGlimmeringReed(() -> AntarchyNeoforgeBlocks.GLIMMERING_REED.get()); AntarchyObjects.setPeachLeavesParticle(() -> AntarchyNeoforgeMisc.PEACH_LEAVES_PARTICLE.get()); AntarchyObjects.setLotusPollen(() -> AntarchyNeoforgeMisc.LOTUS_POLLEN.get()); AntarchyObjects.setNightmareFireFlame(() -> AntarchyNeoforgeMisc.NIGHTMARE_FIRE_FLAME.get()); diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java index 4d70b060..727afd62 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 @@ -615,6 +615,7 @@ public final class AntarchyNeoForgeClient { ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.DUPLICATOR_SAPLING.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ORANGE_MILKWEED.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.PINK_MILKWEED.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.GLIMMERING_REED.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.AMBER_LICHEN.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.MUCUS.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.CREEPVINE.get(), RenderType.cutout()); @@ -640,6 +641,8 @@ public final class AntarchyNeoForgeClient { 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.NADIR_ROOTS.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.VERDANT_ROOTS.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/AntarchyNeoforgeBlocks.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java index 8004135f..b4d01b56 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 @@ -90,6 +90,8 @@ public final class AntarchyNeoforgeBlocks { () -> new MilkweedBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.PEONY))); public static final DeferredBlock PINK_MILKWEED = BLOCKS.register("pink_milkweed", () -> new MilkweedBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.PEONY))); + public static final DeferredBlock GLIMMERING_REED = BLOCKS.register("glimmering_reed", + () -> new GlimmeringReedBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SUNFLOWER).lightLevel(state -> 8))); public static final DeferredBlock CAMELLIA = BLOCKS.register("camellia", () -> new com.craisinlord.antarchy.content.block.CamelliaBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.PEONY))); public static final DeferredBlock SPIDER_LILY = BLOCKS.register("spider_lily", @@ -833,6 +835,10 @@ public final class AntarchyNeoforgeBlocks { () -> 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 NADIR_ROOTS = BLOCKS.register("nadir_roots", + () -> new DirectionalThoraxisFlowerBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.CRIMSON_ROOTS))); + public static final DeferredBlock VERDANT_ROOTS = BLOCKS.register("verdant_roots", + () -> new DirectionalThoraxisFlowerBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.WARPED_ROOTS))); 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/AntarchyNeoforgeItems.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java index 9363c451..22aa7e67 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 @@ -253,6 +253,7 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem NADIR_SAPLING_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NADIR_SAPLING); public static final DeferredItem ORANGE_MILKWEED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.ORANGE_MILKWEED); public static final DeferredItem PINK_MILKWEED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PINK_MILKWEED); + public static final DeferredItem GLIMMERING_REED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.GLIMMERING_REED); public static final DeferredItem CAMELLIA_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CAMELLIA); public static final DeferredItem SPIDER_LILY_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SPIDER_LILY); public static final DeferredItem GIANT_LILY_PAD_ITEM = ITEMS.register("giant_lily_pad", @@ -528,6 +529,8 @@ public final class AntarchyNeoforgeItems { 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 NADIR_ROOTS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NADIR_ROOTS); + public static final DeferredItem VERDANT_ROOTS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.VERDANT_ROOTS); 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", diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java index 992a9e6b..f0a2cd0c 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java @@ -286,6 +286,8 @@ public final class AntarchyNeoforgeMisc { () -> new LumenPoolFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, LumenLilyPadFeature> LUMEN_LILY_PADS = FEATURES.register("lumen_lily_pads", () -> new LumenLilyPadFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.elythia.GlimmeringReedFeature> GLIMMERING_REEDS = FEATURES.register("glimmering_reeds", + () -> new com.craisinlord.antarchy.content.worldgen.elythia.GlimmeringReedFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.elythia.GiantLilyPadPatchFeature> GIANT_LILY_PAD_PATCH = FEATURES.register("giant_lily_pad_patch", () -> new com.craisinlord.antarchy.content.worldgen.elythia.GiantLilyPadPatchFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.elythia.GiantLilyPadPatchFeature> GIANT_LILY_PAD_PATCH_PEACH_FOREST = FEATURES.register("giant_lily_pad_patch_peach_forest", diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSounds.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSounds.java index c89e66d9..1213a4a6 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSounds.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSounds.java @@ -71,6 +71,10 @@ public final class AntarchyNeoforgeSounds { public static final DeferredHolder LUCID_LULLABY = registerSoundEvent("lucid_lullaby"); public static final DeferredHolder WHISTLING_VOID = registerSoundEvent("whistling_void"); public static final DeferredHolder MUSIC_GAME_THORAXIS = registerSoundEvent("music.game.thoraxis"); + public static final DeferredHolder DIMENSIONAL_TEAR_OPEN = registerSoundEvent("dimensional_tear_open"); + public static final DeferredHolder DIMENSIONAL_TEAR_IDLE = registerSoundEvent("dimensional_tear_idle"); + public static final DeferredHolder DIMENSIONAL_TEAR_CREATURE_LEAVES = registerSoundEvent("dimensional_tear_creature_leaves"); + public static final DeferredHolder DIMENSIONAL_TEAR_CLOSE = registerSoundEvent("dimensional_tear_close"); public static final DeferredHolder MUSIC_GAME_CAVARYN = registerSoundEvent("music.game.cavaryn"); public static final DeferredHolder WISTFUL_WANDERINGS = registerSoundEvent("wistful_wanderings"); public static final DeferredHolder MUSIC_GAME_ELYTHIA = registerSoundEvent("music.game.elythia"); diff --git a/neoforge-1.21.1/src/main/resources/META-INF/neoforge.mods.toml b/neoforge-1.21.1/src/main/resources/META-INF/neoforge.mods.toml index 36f33648..9939e998 100644 --- a/neoforge-1.21.1/src/main/resources/META-INF/neoforge.mods.toml +++ b/neoforge-1.21.1/src/main/resources/META-INF/neoforge.mods.toml @@ -52,4 +52,11 @@ displayURL="https://www.curseforge.com/minecraft/mc-mods/antarchy" versionRange="(,2.7.2)" ordering="NONE" side="BOTH" - reason="Infinite Dimensions versions below 2.7.2 are no longer supported" \ No newline at end of file + reason="Infinite Dimensions versions below 2.7.2 are no longer supported" + +[[dependencies.antarchy]] + modId="configured" + type="optional" + versionRange="*" + ordering="NONE" + reason="Enables an in-game config screen for Antarchy's settings; Antarchy works fully without it." \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index d8a890bd..4e2803e8 100644 --- a/settings.gradle +++ b/settings.gradle @@ -15,6 +15,7 @@ pluginManagement { include("common-1.21.1") include("fabric-1.21.1") include("neoforge-1.21.1") +include("test-suite") include("common-1.20.1")