From 7938e84a52da12dbdd5f7bc167a6e5f87d61ff18 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Thu, 6 Aug 2026 11:39:26 +0300 Subject: [PATCH 01/28] Register MinecartSoundInstanceMixin so magnetic rails silence unridden minecarts --- src/main/resources/alexscaves.mixins.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/alexscaves.mixins.json b/src/main/resources/alexscaves.mixins.json index 5c1f083fc..b9867ef12 100644 --- a/src/main/resources/alexscaves.mixins.json +++ b/src/main/resources/alexscaves.mixins.json @@ -60,6 +60,7 @@ "client.LivingEntityRendererMixin", "client.LocalPlayerMixin", "client.MapRendererMapInstanceMixin", + "client.MinecartSoundInstanceMixin", "client.MinecraftMixin", "client.OptionsMixin", "client.RidingMinecartSoundInstanceMixin", From 4d5076a3f679ee2a0b1f3044f5d4ec6a5b722a63 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Thu, 6 Aug 2026 11:39:46 +0300 Subject: [PATCH 02/28] Remove SpriteResourceLoaderMixin, superseded by the armor_trims atlas override --- .../client/SpriteResourceLoaderMixin.java | 53 ------------------- 1 file changed, 53 deletions(-) delete mode 100644 src/main/java/com/github/alexmodguy/alexscaves/mixin/client/SpriteResourceLoaderMixin.java diff --git a/src/main/java/com/github/alexmodguy/alexscaves/mixin/client/SpriteResourceLoaderMixin.java b/src/main/java/com/github/alexmodguy/alexscaves/mixin/client/SpriteResourceLoaderMixin.java deleted file mode 100644 index c87c8b10c..000000000 --- a/src/main/java/com/github/alexmodguy/alexscaves/mixin/client/SpriteResourceLoaderMixin.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.github.alexmodguy.alexscaves.mixin.client; - -import com.github.alexmodguy.alexscaves.AlexsCaves; -import com.google.common.collect.ImmutableList; -import net.minecraft.client.renderer.texture.atlas.SpriteResourceLoader; -import net.minecraft.client.renderer.texture.atlas.SpriteSource; -import net.minecraft.client.renderer.texture.atlas.sources.PalettedPermutations; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.packs.resources.ResourceManager; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Mutable; -import org.spongepowered.asm.mixin.gen.Accessor; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import java.util.List; - -@Mixin(SpriteResourceLoader.class) -public abstract class SpriteResourceLoaderMixin { - - @Inject(method = "load", - at = @At("RETURN")) - private static void ac_load(ResourceManager resourceManager, ResourceLocation location, CallbackInfoReturnable cir) { - if (location.getPath().equals("armor_trims")) { - SpriteResourceLoader ret = cir.getReturnValue(); - for (SpriteSource source : ((SpriteResourceLoaderMixin) (Object) ret).getSources()) { - if (source instanceof PalettedPermutationsAccessor permutations && permutations.getPaletteKey().getPath().equals("trims/color_palettes/trim_palette")) { - ResourceLocation trimLocation = ResourceLocation.fromNamespaceAndPath(AlexsCaves.MODID, "trims/models/armor/polarity"); - ResourceLocation leggingsTrimLocation = ResourceLocation.fromNamespaceAndPath(AlexsCaves.MODID, "trims/models/armor/polarity").withSuffix("_leggings"); - permutations.setTextures(ImmutableList.builder().addAll(permutations.getTextures()).add(trimLocation, leggingsTrimLocation).build()); - } - } - } - } - - @Accessor("sources") - abstract List getSources(); - - @Mixin(PalettedPermutations.class) - private interface PalettedPermutationsAccessor { - - @Accessor - List getTextures(); - - @Accessor("textures") - @Mutable - void setTextures(List value); - - @Accessor - ResourceLocation getPaletteKey(); - } -} From 162bfbe1c4789fc5a986fccad9ed368a810f5f37 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Thu, 6 Aug 2026 11:42:42 +0300 Subject: [PATCH 03/28] Fix isPathfindable overrides to match the 1.21 BlockBehaviour signature --- .../github/alexmodguy/alexscaves/server/block/CycadBlock.java | 2 +- .../alexscaves/server/block/FissurePrimalMagmaBlock.java | 2 +- .../alexscaves/server/block/GiantSweetberryBlock.java | 2 +- .../alexscaves/server/block/GingerbreadDoorBlock.java | 2 +- .../alexmodguy/alexscaves/server/block/GobthumperBlock.java | 2 +- .../alexscaves/server/block/NuclearFurnaceComponentBlock.java | 2 +- .../alexmodguy/alexscaves/server/block/OceanFloraBlock.java | 2 +- .../alexmodguy/alexscaves/server/block/PewenBranchBlock.java | 2 +- .../alexmodguy/alexscaves/server/block/PingPongSpongeBlock.java | 2 +- .../alexmodguy/alexscaves/server/block/PrimalMagmaBlock.java | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/block/CycadBlock.java b/src/main/java/com/github/alexmodguy/alexscaves/server/block/CycadBlock.java index 0412e6f29..ab8c299fa 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/block/CycadBlock.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/block/CycadBlock.java @@ -108,7 +108,7 @@ private static VoxelShape buildShape(VoxelShape... from) { return Stream.of(from).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); } - public boolean isPathfindable(BlockState state, BlockGetter getter, BlockPos pos, PathComputationType type) { + public boolean isPathfindable(BlockState state, PathComputationType type) { return false; } diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/block/FissurePrimalMagmaBlock.java b/src/main/java/com/github/alexmodguy/alexscaves/server/block/FissurePrimalMagmaBlock.java index 56c9cc1d0..688b95880 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/block/FissurePrimalMagmaBlock.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/block/FissurePrimalMagmaBlock.java @@ -172,7 +172,7 @@ public ItemStack getCloneItemStack(BlockGetter blockGetter, BlockPos blockPos, B return new ItemStack(ACBlockRegistry.PRIMAL_MAGMA.get()); } - public boolean isPathfindable(BlockState blockState, BlockGetter getter, BlockPos blockPos, PathComputationType computationType) { + public boolean isPathfindable(BlockState blockState, PathComputationType computationType) { return false; } diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/block/GiantSweetberryBlock.java b/src/main/java/com/github/alexmodguy/alexscaves/server/block/GiantSweetberryBlock.java index 90c2d9a42..8dbafb849 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/block/GiantSweetberryBlock.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/block/GiantSweetberryBlock.java @@ -85,7 +85,7 @@ public void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource } } - public boolean isPathfindable(BlockState state, BlockGetter getter, BlockPos pos, PathComputationType type) { + public boolean isPathfindable(BlockState state, PathComputationType type) { return false; } diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/block/GingerbreadDoorBlock.java b/src/main/java/com/github/alexmodguy/alexscaves/server/block/GingerbreadDoorBlock.java index 9965a85e7..77fa73f94 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/block/GingerbreadDoorBlock.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/block/GingerbreadDoorBlock.java @@ -69,7 +69,7 @@ public BlockState updateShape(BlockState blockState, Direction direction, BlockS return !blockState.canSurvive(levelAccessor, otherPos) ? Blocks.AIR.defaultBlockState() : super.updateShape(blockState, direction, state, levelAccessor, otherPos, blockPos); } - public boolean isPathfindable(BlockState blockState, BlockGetter getter, BlockPos blockPos, PathComputationType type) { + public boolean isPathfindable(BlockState blockState, PathComputationType type) { switch (type) { case LAND: return blockState.getValue(OPEN); diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/block/GobthumperBlock.java b/src/main/java/com/github/alexmodguy/alexscaves/server/block/GobthumperBlock.java index bebccb08a..50f593411 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/block/GobthumperBlock.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/block/GobthumperBlock.java @@ -75,7 +75,7 @@ public void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource } } - public boolean isPathfindable(BlockState state, BlockGetter getter, BlockPos pos, PathComputationType type) { + public boolean isPathfindable(BlockState state, PathComputationType type) { return false; } diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/block/NuclearFurnaceComponentBlock.java b/src/main/java/com/github/alexmodguy/alexscaves/server/block/NuclearFurnaceComponentBlock.java index 8f02d164e..312cc43cd 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/block/NuclearFurnaceComponentBlock.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/block/NuclearFurnaceComponentBlock.java @@ -92,7 +92,7 @@ public void entityInside(BlockState state, Level level, BlockPos blockPos, Entit } } - public boolean isPathfindable(BlockState state, BlockGetter getter, BlockPos blockPos, PathComputationType pathComputationType) { + public boolean isPathfindable(BlockState state, PathComputationType pathComputationType) { return false; } diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/block/OceanFloraBlock.java b/src/main/java/com/github/alexmodguy/alexscaves/server/block/OceanFloraBlock.java index 9d01c715f..ca245d7e1 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/block/OceanFloraBlock.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/block/OceanFloraBlock.java @@ -97,7 +97,7 @@ public boolean placeLiquid(LevelAccessor p_154520_, BlockPos p_154521_, BlockSta return false; } - public boolean isPathfindable(BlockState state, BlockGetter getter, BlockPos pos, PathComputationType type) { + public boolean isPathfindable(BlockState state, PathComputationType type) { return false; } } diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/block/PewenBranchBlock.java b/src/main/java/com/github/alexmodguy/alexscaves/server/block/PewenBranchBlock.java index bd07b8d1e..ece057e05 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/block/PewenBranchBlock.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/block/PewenBranchBlock.java @@ -116,7 +116,7 @@ public void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource } - public boolean isPathfindable(BlockState state, BlockGetter getter, BlockPos pos, PathComputationType type) { + public boolean isPathfindable(BlockState state, PathComputationType type) { return false; } diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/block/PingPongSpongeBlock.java b/src/main/java/com/github/alexmodguy/alexscaves/server/block/PingPongSpongeBlock.java index 413e07e62..f72d1b2ee 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/block/PingPongSpongeBlock.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/block/PingPongSpongeBlock.java @@ -119,7 +119,7 @@ public boolean placeLiquid(LevelAccessor p_154520_, BlockPos p_154521_, BlockSta return false; } - public boolean isPathfindable(BlockState state, BlockGetter getter, BlockPos pos, PathComputationType type) { + public boolean isPathfindable(BlockState state, PathComputationType type) { return false; } } diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/block/PrimalMagmaBlock.java b/src/main/java/com/github/alexmodguy/alexscaves/server/block/PrimalMagmaBlock.java index a1d66b954..06d5ee2aa 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/block/PrimalMagmaBlock.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/block/PrimalMagmaBlock.java @@ -140,7 +140,7 @@ public void animateTick(BlockState state, Level level, BlockPos pos, RandomSourc } } - public boolean isPathfindable(BlockState blockState, BlockGetter getter, BlockPos blockPos, PathComputationType computationType) { + public boolean isPathfindable(BlockState blockState, PathComputationType computationType) { return false; } From b921c5e65389e773eea52809e4332f1373e3ffc3 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Thu, 6 Aug 2026 11:44:43 +0300 Subject: [PATCH 04/28] Restore custom eye heights through getDefaultDimensions after 1.21 removed getStandingEyeHeight --- .../alexscaves/server/entity/living/FerrouslimeEntity.java | 7 ++----- .../server/entity/living/GossamerWormEntity.java | 5 +++-- .../alexscaves/server/entity/living/GumWormEntity.java | 5 +++-- .../alexscaves/server/entity/living/HullbreakerEntity.java | 5 +++-- .../alexscaves/server/entity/living/MagnetronEntity.java | 5 +++-- .../alexscaves/server/entity/living/RelicheirusEntity.java | 5 +++-- .../alexscaves/server/entity/living/TeletorEntity.java | 5 +++-- 7 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/FerrouslimeEntity.java b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/FerrouslimeEntity.java index 2e54f6265..4226b9a15 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/FerrouslimeEntity.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/FerrouslimeEntity.java @@ -185,10 +185,6 @@ public void refreshDimensions() { this.setPos(d0, d1, d2); } - protected float getStandingEyeHeight(Pose p_33614_, EntityDimensions dimensions) { - return 0.625F * dimensions.height(); - } - public void onSyncedDataUpdated(EntityDataAccessor entityDataAccessor) { super.onSyncedDataUpdated(entityDataAccessor); if (HEADS.equals(entityDataAccessor)) { @@ -237,7 +233,8 @@ public Vec3 getHeadOffsetPos(int i) { @Override public EntityDimensions getDefaultDimensions(Pose poseIn) { - return super.getDefaultDimensions(poseIn).scale(getSlimeSize(1.0F)); + EntityDimensions dimensions = super.getDefaultDimensions(poseIn).scale(getSlimeSize(1.0F)); + return dimensions.withEyeHeight(0.625F * dimensions.height()); } public float getSlimeSize(float partialTicks) { diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/GossamerWormEntity.java b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/GossamerWormEntity.java index ac4ff54be..e43fb9e20 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/GossamerWormEntity.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/GossamerWormEntity.java @@ -92,8 +92,9 @@ protected void playSwimSound(float f) { } - protected float getStandingEyeHeight(Pose pose, EntityDimensions dimensions) { - return 0.5F * dimensions.height(); + public EntityDimensions getDefaultDimensions(Pose pose) { + EntityDimensions dimensions = super.getDefaultDimensions(pose); + return dimensions.withEyeHeight(0.5F * dimensions.height()); } diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/GumWormEntity.java b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/GumWormEntity.java index 7f583cba8..0d0d4dcda 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/GumWormEntity.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/GumWormEntity.java @@ -160,8 +160,9 @@ protected void defineSynchedData(SynchedEntityData.Builder builder) { builder.define(RETURNING_TO_GROUND, false); } - protected float getStandingEyeHeight(Pose pose, EntityDimensions dimensions) { - return 0.4F * dimensions.height(); + public EntityDimensions getDefaultDimensions(Pose pose) { + EntityDimensions dimensions = super.getDefaultDimensions(pose); + return dimensions.withEyeHeight(0.4F * dimensions.height()); } protected PathNavigation createNavigation(Level level) { diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/HullbreakerEntity.java b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/HullbreakerEntity.java index a8d171675..42f48aa40 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/HullbreakerEntity.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/HullbreakerEntity.java @@ -211,8 +211,9 @@ protected void dropFromLootTable(DamageSource damageSource, boolean b) { } - protected float getStandingEyeHeight(Pose pose, EntityDimensions dimensions) { - return 0.45F * dimensions.height(); + public EntityDimensions getDefaultDimensions(Pose pose) { + EntityDimensions dimensions = super.getDefaultDimensions(pose); + return dimensions.withEyeHeight(0.45F * dimensions.height()); } diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/MagnetronEntity.java b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/MagnetronEntity.java index de3c54d08..4c29add71 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/MagnetronEntity.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/MagnetronEntity.java @@ -611,8 +611,9 @@ private void syncBlockStatesWithMultipart() { } } - protected float getStandingEyeHeight(Pose pose, EntityDimensions dimensions) { - return 0.55F * dimensions.height(); + public EntityDimensions getDefaultDimensions(Pose pose) { + EntityDimensions dimensions = super.getDefaultDimensions(pose); + return dimensions.withEyeHeight(0.55F * dimensions.height()); } public void spawnGroundEffects() { diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/RelicheirusEntity.java b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/RelicheirusEntity.java index cd912c3ac..cc91b6aee 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/RelicheirusEntity.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/RelicheirusEntity.java @@ -100,8 +100,9 @@ protected void playStepSound(BlockPos pos, BlockState state) { } } - protected float getStandingEyeHeight(Pose pose, EntityDimensions dimensions) { - return 0.99F * dimensions.height(); + public EntityDimensions getDefaultDimensions(Pose pose) { + EntityDimensions dimensions = super.getDefaultDimensions(pose); + return dimensions.withEyeHeight(0.99F * dimensions.height()); } @Override diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/TeletorEntity.java b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/TeletorEntity.java index d6fb01933..985395af3 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/TeletorEntity.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/TeletorEntity.java @@ -146,8 +146,9 @@ public static boolean checkMagneticCaveSpawnRules(EntityType return checkAnyLightMonsterSpawnRules(entityType, levelAccessor, mobSpawnType, blockPos, randomSource); } - protected float getStandingEyeHeight(Pose pose, EntityDimensions dimensions) { - return 0.55F * dimensions.height(); + public EntityDimensions getDefaultDimensions(Pose pose) { + EntityDimensions dimensions = super.getDefaultDimensions(pose); + return dimensions.withEyeHeight(0.55F * dimensions.height()); } public boolean areLegsCrossed(float limbSwing) { From 05a9bf43d9bdb9fdf85ed055a009d01f334b519a Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Thu, 6 Aug 2026 11:44:43 +0300 Subject: [PATCH 05/28] Restore the caramel cube's size-dependent hitbox and eye height --- .../entity/living/CaramelCubeEntity.java | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/CaramelCubeEntity.java b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/CaramelCubeEntity.java index 2c404ab23..6e8fd5562 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/CaramelCubeEntity.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/CaramelCubeEntity.java @@ -283,18 +283,19 @@ public void onSyncedDataUpdated(EntityDataAccessor dataAccessor) { super.onSyncedDataUpdated(dataAccessor); } - // 1.21: getDimensions(Pose) is now final in LivingEntity and cannot be overridden. - // Dimensions are now handled via EntityType.Builder.dimensions() or getDefaultDimensions(). - // This method is kept for reference but renamed to avoid compilation errors. - private EntityDimensions getCustomDimensions(Pose pose) { + public EntityDimensions getDefaultDimensions(Pose pose) { + EntityDimensions dimensions; switch (this.getSlimeSize()) { case 2: - return LARGE_DIMENSIONS; + dimensions = LARGE_DIMENSIONS; + break; case 1: - return MEDIUM_DIMENSIONS; + dimensions = MEDIUM_DIMENSIONS; + break; default: - return SMALL_DIMENSIONS; + dimensions = SMALL_DIMENSIONS; } + return dimensions.withEyeHeight(0.5F * dimensions.height()); } public void remove(Entity.RemovalReason reason) { @@ -333,10 +334,6 @@ protected void dropFromLootTable(DamageSource source, boolean b) { } } - protected float getStandingEyeHeight(Pose pose, EntityDimensions dimensions) { - return 0.5F * dimensions.height(); - } - public int getExperienceReward() { return 2; } From 72491fb08a8cac7872dbdf34953760ff13c1b5b5 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Thu, 6 Aug 2026 11:45:35 +0300 Subject: [PATCH 06/28] Fix getExpDrop signature so radrock uranium ore drops experience again --- .../alexscaves/server/block/RadrockUraniumOreBlock.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/block/RadrockUraniumOreBlock.java b/src/main/java/com/github/alexmodguy/alexscaves/server/block/RadrockUraniumOreBlock.java index 9e4b1bf0c..4c8c0a06a 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/block/RadrockUraniumOreBlock.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/block/RadrockUraniumOreBlock.java @@ -9,6 +9,7 @@ import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.item.enchantment.Enchantments; import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockBehaviour; @@ -27,9 +28,8 @@ public void animateTick(BlockState state, Level level, BlockPos pos, RandomSourc } } - // In 1.21+, experience drops are handled via loot tables, not this method - public int getExpDrop(BlockState state, Level level, BlockPos pos, BlockEntity blockEntity, Entity breaker, ItemStack tool) { + public int getExpDrop(BlockState state, LevelAccessor level, BlockPos pos, BlockEntity blockEntity, Entity breaker, ItemStack tool) { int silkTouchLevel = tool.getEnchantmentLevel(level.holderLookup(net.minecraft.core.registries.Registries.ENCHANTMENT).getOrThrow(Enchantments.SILK_TOUCH)); - return silkTouchLevel == 0 ? level.random.nextInt(2) : 0; + return silkTouchLevel == 0 ? level.getRandom().nextInt(2) : 0; } } From 152a58763d9e51a3af30b3351304f4e8d3009702 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Thu, 6 Aug 2026 11:45:35 +0300 Subject: [PATCH 07/28] Fix getCloneItemStack signature on fissure primal magma --- .../alexscaves/server/block/FissurePrimalMagmaBlock.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/block/FissurePrimalMagmaBlock.java b/src/main/java/com/github/alexmodguy/alexscaves/server/block/FissurePrimalMagmaBlock.java index 688b95880..3dd0605f3 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/block/FissurePrimalMagmaBlock.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/block/FissurePrimalMagmaBlock.java @@ -24,6 +24,7 @@ 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.Blocks; import net.minecraft.world.level.block.state.BlockBehaviour; @@ -168,7 +169,7 @@ public void animateTick(BlockState state, Level level, BlockPos pos, RandomSourc } } - public ItemStack getCloneItemStack(BlockGetter blockGetter, BlockPos blockPos, BlockState blockState) { + public ItemStack getCloneItemStack(LevelReader levelReader, BlockPos blockPos, BlockState blockState) { return new ItemStack(ACBlockRegistry.PRIMAL_MAGMA.get()); } From c99653a0b8e0f1b2971731c6808dabbf196bb667 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Thu, 6 Aug 2026 11:47:25 +0300 Subject: [PATCH 08/28] Fix getUpdateTag signature so hologram projectors sync to the client --- .../server/block/blockentity/HologramProjectorBlockEntity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/block/blockentity/HologramProjectorBlockEntity.java b/src/main/java/com/github/alexmodguy/alexscaves/server/block/blockentity/HologramProjectorBlockEntity.java index b8f7f3d77..c171a8d2c 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/block/blockentity/HologramProjectorBlockEntity.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/block/blockentity/HologramProjectorBlockEntity.java @@ -138,7 +138,7 @@ public void handleUpdateTag(CompoundTag tag, HolderLookup.Provider registries) { } } - public CompoundTag getUpdateTag() { + public CompoundTag getUpdateTag(HolderLookup.Provider registries) { CompoundTag compoundtag = new CompoundTag(); if (this.entityType != null) { compoundtag.putString("EntityType", BuiltInRegistries.ENTITY_TYPE.getKey(this.entityType).toString()); From 0704d1ea9b6db5b1e7e0aae7835fc367318464dc Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Thu, 6 Aug 2026 11:47:25 +0300 Subject: [PATCH 09/28] Fix setupRotations overrides to take the 1.21 scale parameter --- .../client/render/entity/BoundroidWinchRenderer.java | 3 ++- .../client/render/entity/GingerbreadManRenderer.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/alexmodguy/alexscaves/client/render/entity/BoundroidWinchRenderer.java b/src/main/java/com/github/alexmodguy/alexscaves/client/render/entity/BoundroidWinchRenderer.java index 440312546..4d67d4baf 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/client/render/entity/BoundroidWinchRenderer.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/client/render/entity/BoundroidWinchRenderer.java @@ -52,7 +52,8 @@ public boolean shouldRender(BoundroidWinchEntity entity, Frustum camera, double } } - protected void setupRotations(BoundroidWinchEntity entity, PoseStack poseStack, float ptich, float yaw, float partialTicks) { + @Override + protected void setupRotations(BoundroidWinchEntity entity, PoseStack poseStack, float ptich, float yaw, float partialTicks, float scale) { if (isEntityUpsideDown(entity)) { poseStack.translate(0.0F, entity.getBbHeight() + 0.1F, 0.0F); poseStack.mulPose(Axis.ZP.rotationDegrees(180.0F)); diff --git a/src/main/java/com/github/alexmodguy/alexscaves/client/render/entity/GingerbreadManRenderer.java b/src/main/java/com/github/alexmodguy/alexscaves/client/render/entity/GingerbreadManRenderer.java index 97d3c236d..306f0624a 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/client/render/entity/GingerbreadManRenderer.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/client/render/entity/GingerbreadManRenderer.java @@ -83,7 +83,8 @@ public ResourceLocation getTextureLocation(GingerbreadManEntity entity) { } - protected void setupRotations(GingerbreadManEntity entity, PoseStack poseStack, float bob, float yawIn, float partialTicks) { + @Override + protected void setupRotations(GingerbreadManEntity entity, PoseStack poseStack, float bob, float yawIn, float partialTicks, float scale) { if (this.isShaking(entity)) { yawIn += (float) (Math.cos((double) entity.tickCount * 3.25D) * Math.PI * (double) 0.4F); } From 0d05f80df322ae0506cb5f43348f5223c8d51e0b Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Thu, 6 Aug 2026 11:47:25 +0300 Subject: [PATCH 10/28] Read bucketed entity data from BUCKET_ENTITY_DATA instead of CUSTOM_DATA --- .../alexmodguy/alexscaves/server/item/ModFishBucketItem.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/item/ModFishBucketItem.java b/src/main/java/com/github/alexmodguy/alexscaves/server/item/ModFishBucketItem.java index 8f68dcb2e..56c99bea5 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/item/ModFishBucketItem.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/item/ModFishBucketItem.java @@ -52,7 +52,7 @@ private void spawnFish(ServerLevel serverLevel, ItemStack stack, BlockPos pos) { Entity entity = getFishType().spawn(serverLevel, stack, (Player) null, pos, MobSpawnType.BUCKET, true, false); if (entity instanceof Bucketable) { Bucketable bucketable = (Bucketable) entity; - bucketable.loadFromBucketTag(stack.getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY).copyTag()); + bucketable.loadFromBucketTag(stack.getOrDefault(DataComponents.BUCKET_ENTITY_DATA, CustomData.EMPTY).copyTag()); bucketable.setFromBucket(true); } addExtraAttributes(entity, stack); From 90bf3dd32f650bf8f9824525b3324533631c9fc2 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Thu, 6 Aug 2026 11:47:25 +0300 Subject: [PATCH 11/28] Read the deep one's swapped item back from the key it is saved under --- .../alexscaves/server/entity/living/DeepOneBaseEntity.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/DeepOneBaseEntity.java b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/DeepOneBaseEntity.java index e5a0cea6b..8362f67ec 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/DeepOneBaseEntity.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/DeepOneBaseEntity.java @@ -375,8 +375,8 @@ public void readAdditionalSaveData(CompoundTag compound) { if (compound.contains("AltarX") && compound.contains("AltarY") && compound.contains("AltarZ")) { this.setLastAltarPos(new BlockPos(compound.getInt("AltarX"), compound.getInt("AltarY"), compound.getInt("AltarZ"))); } - if (compound.contains("SwappedWeapon")) { - swappedItem = ItemStack.parseOptional(this.registryAccess(), compound.getCompound("SwappedWeapon")); + if (compound.contains("SwappedItem")) { + swappedItem = ItemStack.parseOptional(this.registryAccess(), compound.getCompound("SwappedItem")); } this.setSummoned(compound.getBoolean("ConchSummoned")); if (compound.contains("ConchUUID")) { From 7ec500c9f09503ed743a200847f9c8032f028ca9 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Thu, 6 Aug 2026 11:47:25 +0300 Subject: [PATCH 12/28] Return the soda bottle processor's own type from getType --- .../server/level/structure/processor/SodaBottleProcessor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/level/structure/processor/SodaBottleProcessor.java b/src/main/java/com/github/alexmodguy/alexscaves/server/level/structure/processor/SodaBottleProcessor.java index 11f9aabb5..3bb4c0897 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/level/structure/processor/SodaBottleProcessor.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/level/structure/processor/SodaBottleProcessor.java @@ -40,6 +40,6 @@ public StructureTemplate.StructureBlockInfo processBlock(LevelReader levelReader @Override protected StructureProcessorType getType() { - return ACStructureProcessorRegistry.UNDERGROUND_CABIN.get(); + return ACStructureProcessorRegistry.SODA_BOTTLE.get(); } } From a3ef6489fb5c0bf74b5c866f18d1e3b381b8a7e1 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Thu, 6 Aug 2026 11:47:25 +0300 Subject: [PATCH 13/28] Clamp the lollipop palette index to the last valid palette --- .../server/level/structure/processor/LollipopProcessor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/level/structure/processor/LollipopProcessor.java b/src/main/java/com/github/alexmodguy/alexscaves/server/level/structure/processor/LollipopProcessor.java index ff83cd493..5548d11f4 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/level/structure/processor/LollipopProcessor.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/level/structure/processor/LollipopProcessor.java @@ -55,7 +55,7 @@ public LollipopProcessor(RandomSource randomSource){ @Nullable public StructureTemplate.StructureBlockInfo processBlock(LevelReader levelReader, BlockPos blockPosUnused, BlockPos pos, StructureTemplate.StructureBlockInfo relativeInfo, StructureTemplate.StructureBlockInfo info, StructurePlaceSettings settings) { BlockState in = info.state(); - int clampedPaletteIndex = Mth.clamp(paletteIndex, 0, BLOCK_COLOR_PALETTES.length); + int clampedPaletteIndex = Mth.clamp(paletteIndex, 0, BLOCK_COLOR_PALETTES.length - 1); if(in.is(ACBlockRegistry.BLACK_ROCK_CANDY.get())){ // color palette 0 return new StructureTemplate.StructureBlockInfo(info.pos(), BLOCK_COLOR_PALETTES[clampedPaletteIndex][0].defaultBlockState(), info.nbt()); }else if(in.is(ACBlockRegistry.GRAY_ROCK_CANDY.get())){ // color palette 1 From 435e3a4859906e19cc09ea0088681ca9c1b456ff Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Thu, 6 Aug 2026 11:47:25 +0300 Subject: [PATCH 14/28] Stop drawing the spelunkery table background twice per frame --- .../alexmodguy/alexscaves/client/gui/SpelunkeryTableScreen.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/com/github/alexmodguy/alexscaves/client/gui/SpelunkeryTableScreen.java b/src/main/java/com/github/alexmodguy/alexscaves/client/gui/SpelunkeryTableScreen.java index b416a0535..0f8989f56 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/client/gui/SpelunkeryTableScreen.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/client/gui/SpelunkeryTableScreen.java @@ -101,8 +101,6 @@ protected void init() { } public void render(GuiGraphics guiGraphics, int x, int y, float partialTick) { - this.renderBackground(guiGraphics, x, y, partialTick); - this.renderBg(guiGraphics, partialTick, x, y); super.render(guiGraphics, x, y, partialTick); this.renderMagnify(guiGraphics, partialTick); this.renderTooltip(guiGraphics, x, y); From 4fe2d9ef4dca9cbd915314b9ed276cd51d802689 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Thu, 6 Aug 2026 12:20:43 +0300 Subject: [PATCH 15/28] Drop the removed teleport flag from lerpTo so custom interpolation applies again --- .../alexscaves/server/entity/item/CandyCaneHookEntity.java | 2 +- .../alexscaves/server/entity/item/DinosaurSpiritEntity.java | 2 +- .../alexscaves/server/entity/item/QuarrySmasherEntity.java | 2 +- .../alexscaves/server/entity/item/SubmarineEntity.java | 2 +- .../alexscaves/server/entity/item/TephraEntity.java | 2 +- .../alexscaves/server/entity/item/WaterBoltEntity.java | 2 +- .../alexmodguy/alexscaves/server/entity/item/WaveEntity.java | 2 +- .../alexscaves/server/entity/living/GingerbreadManEntity.java | 2 +- .../alexscaves/server/entity/living/SauropodBaseEntity.java | 2 +- .../alexscaves/server/entity/living/SubterranodonEntity.java | 2 +- .../alexscaves/server/entity/living/TremorzillaEntity.java | 4 ++-- 11 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/item/CandyCaneHookEntity.java b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/item/CandyCaneHookEntity.java index afb14810e..10f58a9a5 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/item/CandyCaneHookEntity.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/item/CandyCaneHookEntity.java @@ -99,7 +99,7 @@ public CandyCaneHookEntity(Player player, Level level, ItemStack itemstack, bool } } - public void lerpTo(double x, double y, double z, float yr, float xr, int steps, boolean b) { + public void lerpTo(double x, double y, double z, float yr, float xr, int steps) { this.lx = x; this.ly = y; this.lz = z; diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/item/DinosaurSpiritEntity.java b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/item/DinosaurSpiritEntity.java index a08d13362..765fc0259 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/item/DinosaurSpiritEntity.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/item/DinosaurSpiritEntity.java @@ -124,7 +124,7 @@ public void tick() { } } - public void lerpTo(double x, double y, double z, float yr, float xr, int steps, boolean b) { + public void lerpTo(double x, double y, double z, float yr, float xr, int steps) { this.lx = x; this.ly = y; this.lz = z; diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/item/QuarrySmasherEntity.java b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/item/QuarrySmasherEntity.java index c2f1ddab6..bcf07dcd8 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/item/QuarrySmasherEntity.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/item/QuarrySmasherEntity.java @@ -227,7 +227,7 @@ protected void addPassenger(Entity passenger) { } } - public void lerpTo(double x, double y, double z, float yr, float xr, int steps, boolean b) { + public void lerpTo(double x, double y, double z, float yr, float xr, int steps) { this.lx = x; this.ly = y; this.lz = z; diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/item/SubmarineEntity.java b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/item/SubmarineEntity.java index 7cb3357b8..f88f518b8 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/item/SubmarineEntity.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/item/SubmarineEntity.java @@ -278,7 +278,7 @@ protected void addPassenger(Entity passenger) { } } - public void lerpTo(double x, double y, double z, float yr, float xr, int steps, boolean b) { + public void lerpTo(double x, double y, double z, float yr, float xr, int steps) { this.lx = x; this.ly = y; this.lz = z; diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/item/TephraEntity.java b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/item/TephraEntity.java index a4941e64a..f67fd63c1 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/item/TephraEntity.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/item/TephraEntity.java @@ -134,7 +134,7 @@ public void tick() { } } - public void lerpTo(double x, double y, double z, float yr, float xr, int steps, boolean b) { + public void lerpTo(double x, double y, double z, float yr, float xr, int steps) { this.lx = x; this.ly = y; this.lz = z; diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/item/WaterBoltEntity.java b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/item/WaterBoltEntity.java index 1866d6a7d..20b443718 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/item/WaterBoltEntity.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/item/WaterBoltEntity.java @@ -164,7 +164,7 @@ public Vec3 getTrailPosition(int pointer, float partialTick) { return d0.add(d1.scale(partialTick)); } - public void lerpTo(double x, double y, double z, float yr, float xr, int steps, boolean b) { + public void lerpTo(double x, double y, double z, float yr, float xr, int steps) { this.lx = x; this.ly = y; this.lz = z; diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/item/WaveEntity.java b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/item/WaveEntity.java index 190bb5beb..68fd5ec41 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/item/WaveEntity.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/item/WaveEntity.java @@ -241,7 +241,7 @@ public EntityDimensions getDimensions(Pose pose) { return super.getDimensions(pose).scale(this.getWaveScale()); } - public void lerpTo(double x, double y, double z, float yr, float xr, int steps, boolean b) { + public void lerpTo(double x, double y, double z, float yr, float xr, int steps) { this.lx = x; this.ly = y; this.lz = z; diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/GingerbreadManEntity.java b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/GingerbreadManEntity.java index 183d7ecc6..c556f2a83 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/GingerbreadManEntity.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/GingerbreadManEntity.java @@ -402,7 +402,7 @@ public void setAnimation(Animation animation) { currentAnimation = animation; } - public void lerpTo(double x, double y, double z, float yr, float xr, int steps, boolean b) { + public void lerpTo(double x, double y, double z, float yr, float xr, int steps) { this.lx = x; this.ly = y; this.lz = z; diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/SauropodBaseEntity.java b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/SauropodBaseEntity.java index 1cf193419..a3cc11988 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/SauropodBaseEntity.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/SauropodBaseEntity.java @@ -412,7 +412,7 @@ public PartEntity[] getParts() { return allParts; } - public void lerpTo(double x, double y, double z, float yr, float xr, int steps, boolean b) { + public void lerpTo(double x, double y, double z, float yr, float xr, int steps) { this.lx = x; this.ly = y; this.lz = z; diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/SubterranodonEntity.java b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/SubterranodonEntity.java index c7d330eed..3c5d2a9cb 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/SubterranodonEntity.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/SubterranodonEntity.java @@ -312,7 +312,7 @@ public void tick() { lastStepZ = this.zo; } - public void lerpTo(double x, double y, double z, float yr, float xr, int steps, boolean b) { + public void lerpTo(double x, double y, double z, float yr, float xr, int steps) { this.lx = x; this.ly = y; this.lz = z; diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/TremorzillaEntity.java b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/TremorzillaEntity.java index 250cf8476..60ca37e27 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/TremorzillaEntity.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/TremorzillaEntity.java @@ -1029,7 +1029,7 @@ public void push(Entity entity) { } - public void lerpTo(double x, double y, double z, float yr, float xr, int steps, boolean b) { + public void lerpTo(double x, double y, double z, float yr, float xr, int steps) { this.lx = x; this.ly = y; this.lz = z; @@ -1383,7 +1383,7 @@ public Vec3 getClientBeamEndPosition(float partialTicks) { } } - public int getExperienceReward() { + public int getBaseExperienceReward() { return 70; } From a1d30535e121ab9d73f44d2d8caf8101b04be29d Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Thu, 6 Aug 2026 12:20:43 +0300 Subject: [PATCH 16/28] Override getBaseExperienceReward so custom experience drops apply on 1.21 --- .../alexscaves/server/entity/living/AtlatitanEntity.java | 2 +- .../alexscaves/server/entity/living/CaramelCubeEntity.java | 2 +- .../alexscaves/server/entity/living/FerrouslimeEntity.java | 2 +- .../alexscaves/server/entity/living/LuxtructosaurusEntity.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/AtlatitanEntity.java b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/AtlatitanEntity.java index 8401f0e67..29d84c936 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/AtlatitanEntity.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/AtlatitanEntity.java @@ -349,7 +349,7 @@ public Vec3 getDismountLocationForPassenger(LivingEntity p_20123_) { return new Vec3(this.getX(), this.getBoundingBox().minY, this.getZ()); } - public int getExperienceReward() { + public int getBaseExperienceReward() { return 30; } diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/CaramelCubeEntity.java b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/CaramelCubeEntity.java index 6e8fd5562..c4d06f0b0 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/CaramelCubeEntity.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/CaramelCubeEntity.java @@ -334,7 +334,7 @@ protected void dropFromLootTable(DamageSource source, boolean b) { } } - public int getExperienceReward() { + public int getBaseExperienceReward() { return 2; } diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/FerrouslimeEntity.java b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/FerrouslimeEntity.java index 4226b9a15..3b42fc9a3 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/FerrouslimeEntity.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/FerrouslimeEntity.java @@ -292,7 +292,7 @@ private boolean canForm() { return this.isAlive() && mergeCooldown <= 0; } - public int getExperienceReward() { + public int getBaseExperienceReward() { return 2; } diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/LuxtructosaurusEntity.java b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/LuxtructosaurusEntity.java index 1482abe75..23778019c 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/LuxtructosaurusEntity.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/LuxtructosaurusEntity.java @@ -705,7 +705,7 @@ protected SoundEvent getDeathSound() { return ACSoundRegistry.LUXTRUCTOSAURUS_DEATH.get(); } - public int getExperienceReward() { + public int getBaseExperienceReward() { return 100; } From cb17172d38f6159b7dea714137e170bce0674377 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Thu, 6 Aug 2026 12:22:26 +0300 Subject: [PATCH 17/28] Fix canPlaceLiquid and pickupBlock overrides to take the 1.21 player parameter --- .../alexscaves/server/block/DinosaurChopBlock.java | 4 ++-- .../alexmodguy/alexscaves/server/block/SulfurBudBlock.java | 5 +++-- .../alexmodguy/alexscaves/server/block/UraniumRodBlock.java | 5 +++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/block/DinosaurChopBlock.java b/src/main/java/com/github/alexmodguy/alexscaves/server/block/DinosaurChopBlock.java index 06a9dba50..a480fd0b6 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/block/DinosaurChopBlock.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/block/DinosaurChopBlock.java @@ -198,11 +198,11 @@ public static int getOutputSignal(int i) { return (7 - i) * 2; } - public boolean canPlaceLiquid(BlockGetter blockGetter, BlockPos pos, BlockState blockState, Fluid fluid) { + public boolean canPlaceLiquid(Player player, BlockGetter blockGetter, BlockPos pos, BlockState blockState, Fluid fluid) { return blockState.getValue(BITES) != 0 && fluid == Fluids.WATER; } - public ItemStack pickupBlock(LevelAccessor levelAccessor, BlockPos blockPos, BlockState blockState) { + public ItemStack pickupBlock(Player player, LevelAccessor levelAccessor, BlockPos blockPos, BlockState blockState) { if (blockState.getValue(BITES) != 0 && blockState.getValue(BlockStateProperties.WATERLOGGED)) { levelAccessor.setBlock(blockPos, blockState.setValue(BlockStateProperties.WATERLOGGED, Boolean.valueOf(false)), 3); if (!blockState.canSurvive(levelAccessor, blockPos)) { diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/block/SulfurBudBlock.java b/src/main/java/com/github/alexmodguy/alexscaves/server/block/SulfurBudBlock.java index 4752a8dee..c6dba236f 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/block/SulfurBudBlock.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/block/SulfurBudBlock.java @@ -7,6 +7,7 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvent; import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.item.context.BlockPlaceContext; @@ -116,7 +117,7 @@ public BlockState mirror(BlockState state, Mirror mirror) { return state.rotate(mirror.getRotation(state.getValue(FACING))); } - public boolean canPlaceLiquid(BlockGetter getter, BlockPos blockPos, BlockState blockState, Fluid fluid) { + public boolean canPlaceLiquid(Player player, BlockGetter getter, BlockPos blockPos, BlockState blockState, Fluid fluid) { return fluid == Fluids.WATER || fluid.getFluidType() == ACFluidRegistry.ACID_FLUID_TYPE.get(); } @@ -138,7 +139,7 @@ public boolean placeLiquid(LevelAccessor levelAccessor, BlockPos pos, BlockState } } - public ItemStack pickupBlock(LevelAccessor levelAccessor, BlockPos blockPos, BlockState state) { + public ItemStack pickupBlock(Player player, LevelAccessor levelAccessor, BlockPos blockPos, BlockState state) { int liquidType = state.getValue(LIQUID_LOGGED); if (liquidType > 0) { levelAccessor.setBlock(blockPos, state.setValue(LIQUID_LOGGED, 0), 3); diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/block/UraniumRodBlock.java b/src/main/java/com/github/alexmodguy/alexscaves/server/block/UraniumRodBlock.java index 8eb0d828f..dea535f3d 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/block/UraniumRodBlock.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/block/UraniumRodBlock.java @@ -10,6 +10,7 @@ import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundSource; import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.item.context.BlockPlaceContext; @@ -105,7 +106,7 @@ public BlockState getStateForPlacement(BlockPlaceContext context) { return super.getStateForPlacement(context).setValue(LIQUID_LOGGED, getLiquidType(levelaccessor.getFluidState(blockpos))); } - public boolean canPlaceLiquid(BlockGetter getter, BlockPos blockPos, BlockState blockState, Fluid fluid) { + public boolean canPlaceLiquid(Player player, BlockGetter getter, BlockPos blockPos, BlockState blockState, Fluid fluid) { return fluid == Fluids.WATER || fluid.getFluidType() == ACFluidRegistry.ACID_FLUID_TYPE.get(); } @@ -127,7 +128,7 @@ public boolean placeLiquid(LevelAccessor levelAccessor, BlockPos pos, BlockState } } - public ItemStack pickupBlock(LevelAccessor levelAccessor, BlockPos blockPos, BlockState state) { + public ItemStack pickupBlock(Player player, LevelAccessor levelAccessor, BlockPos blockPos, BlockState state) { int liquidType = state.getValue(LIQUID_LOGGED); if (liquidType > 0) { levelAccessor.setBlock(blockPos, state.setValue(LIQUID_LOGGED, 0), 3); From 16fae2bb7d6d829ac0efb5c4ba033aa00384b6e8 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Thu, 6 Aug 2026 12:25:24 +0300 Subject: [PATCH 18/28] Restore custom block entity render bounds through the renderer on 1.21 --- .../client/render/blockentity/AbyssalAltarBlockRenderer.java | 5 +++++ .../client/render/blockentity/AmbersolBlockRenderer.java | 5 +++++ .../render/blockentity/ConversionCrucibleBlockRenderer.java | 5 +++++ .../render/blockentity/HologramProjectorBlockRenderer.java | 5 +++++ .../client/render/blockentity/MagnetBlockRenderer.java | 3 +++ .../render/blockentity/NuclearFurnaceBlockRenderer.java | 5 +++++ .../client/render/blockentity/SirenLightBlockRenderer.java | 5 +++++ .../client/render/blockentity/TelsaBulbBlockRenderer.java | 5 +++++ 8 files changed, 38 insertions(+) diff --git a/src/main/java/com/github/alexmodguy/alexscaves/client/render/blockentity/AbyssalAltarBlockRenderer.java b/src/main/java/com/github/alexmodguy/alexscaves/client/render/blockentity/AbyssalAltarBlockRenderer.java index a55840a4d..ea17c8c9e 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/client/render/blockentity/AbyssalAltarBlockRenderer.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/client/render/blockentity/AbyssalAltarBlockRenderer.java @@ -14,6 +14,7 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.phys.AABB; public class AbyssalAltarBlockRenderer implements BlockEntityRenderer { @@ -92,4 +93,8 @@ protected int getModelCount(ItemStack stack) { public int getViewDistance() { return 128; } + + public AABB getRenderBoundingBox(T blockEntity) { + return blockEntity.getRenderBoundingBox(); + } } diff --git a/src/main/java/com/github/alexmodguy/alexscaves/client/render/blockentity/AmbersolBlockRenderer.java b/src/main/java/com/github/alexmodguy/alexscaves/client/render/blockentity/AmbersolBlockRenderer.java index 71b35207d..c418d739d 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/client/render/blockentity/AmbersolBlockRenderer.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/client/render/blockentity/AmbersolBlockRenderer.java @@ -13,6 +13,7 @@ import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import org.joml.Matrix3f; import org.joml.Matrix4f; @@ -129,4 +130,8 @@ private static void shineRightCornerVertex(VertexConsumer p_114224_, Matrix4f p_ public int getViewDistance() { return 256; } + + public AABB getRenderBoundingBox(T blockEntity) { + return blockEntity.getRenderBoundingBox(); + } } diff --git a/src/main/java/com/github/alexmodguy/alexscaves/client/render/blockentity/ConversionCrucibleBlockRenderer.java b/src/main/java/com/github/alexmodguy/alexscaves/client/render/blockentity/ConversionCrucibleBlockRenderer.java index 1b58b6655..85362d4d1 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/client/render/blockentity/ConversionCrucibleBlockRenderer.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/client/render/blockentity/ConversionCrucibleBlockRenderer.java @@ -29,6 +29,7 @@ import net.minecraft.util.RandomSource; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.AABB; import net.neoforged.neoforge.client.model.data.ModelData; import org.joml.Matrix3f; import org.joml.Matrix4f; @@ -179,4 +180,8 @@ private static void shineRightCornerVertex(VertexConsumer vertexConsumer, Matrix public int getViewDistance() { return 128; } + + public AABB getRenderBoundingBox(T blockEntity) { + return blockEntity.getRenderBoundingBox(); + } } diff --git a/src/main/java/com/github/alexmodguy/alexscaves/client/render/blockentity/HologramProjectorBlockRenderer.java b/src/main/java/com/github/alexmodguy/alexscaves/client/render/blockentity/HologramProjectorBlockRenderer.java index 6a2ee23d1..1ce96ee3f 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/client/render/blockentity/HologramProjectorBlockRenderer.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/client/render/blockentity/HologramProjectorBlockRenderer.java @@ -28,6 +28,7 @@ import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import org.joml.Matrix3f; import org.joml.Matrix4f; @@ -198,4 +199,8 @@ private static void shineRightCornerVertex(VertexConsumer p_114224_, Matrix4f p_ public int getViewDistance() { return 128; } + + public AABB getRenderBoundingBox(T blockEntity) { + return blockEntity.getRenderBoundingBox(); + } } diff --git a/src/main/java/com/github/alexmodguy/alexscaves/client/render/blockentity/MagnetBlockRenderer.java b/src/main/java/com/github/alexmodguy/alexscaves/client/render/blockentity/MagnetBlockRenderer.java index 5aa0efbf0..f0957c7a7 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/client/render/blockentity/MagnetBlockRenderer.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/client/render/blockentity/MagnetBlockRenderer.java @@ -65,4 +65,7 @@ public void render(T magnet, float partialTicks, PoseStack stack, MultiBufferSou } + public AABB getRenderBoundingBox(T blockEntity) { + return blockEntity.getRenderBoundingBox(); + } } diff --git a/src/main/java/com/github/alexmodguy/alexscaves/client/render/blockentity/NuclearFurnaceBlockRenderer.java b/src/main/java/com/github/alexmodguy/alexscaves/client/render/blockentity/NuclearFurnaceBlockRenderer.java index f9b342f2e..156da6a46 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/client/render/blockentity/NuclearFurnaceBlockRenderer.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/client/render/blockentity/NuclearFurnaceBlockRenderer.java @@ -15,6 +15,7 @@ import net.minecraft.core.Direction; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.AABB; public class NuclearFurnaceBlockRenderer implements BlockEntityRenderer { @@ -61,4 +62,8 @@ private RenderType getRenderTypeFor(T furnace, boolean glow) { return glow ? ACRenderTypes.getEyesAlphaEnabled(ON_TEXTURE_GLOW) : RenderType.entityCutoutNoCull(ON_TEXTURE); } } + + public AABB getRenderBoundingBox(T blockEntity) { + return blockEntity.getRenderBoundingBox(); + } } diff --git a/src/main/java/com/github/alexmodguy/alexscaves/client/render/blockentity/SirenLightBlockRenderer.java b/src/main/java/com/github/alexmodguy/alexscaves/client/render/blockentity/SirenLightBlockRenderer.java index 591db673c..74c6e2861 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/client/render/blockentity/SirenLightBlockRenderer.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/client/render/blockentity/SirenLightBlockRenderer.java @@ -17,6 +17,7 @@ import net.minecraft.core.Direction; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.AABB; import org.joml.Matrix3f; import org.joml.Matrix4f; @@ -105,4 +106,8 @@ private static void shineRightCornerVertex(VertexConsumer p_114224_, Matrix4f p_ public int getViewDistance() { return 128; } + + public AABB getRenderBoundingBox(T blockEntity) { + return blockEntity.getRenderBoundingBox(); + } } diff --git a/src/main/java/com/github/alexmodguy/alexscaves/client/render/blockentity/TelsaBulbBlockRenderer.java b/src/main/java/com/github/alexmodguy/alexscaves/client/render/blockentity/TelsaBulbBlockRenderer.java index 869c43b30..0e644bcbf 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/client/render/blockentity/TelsaBulbBlockRenderer.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/client/render/blockentity/TelsaBulbBlockRenderer.java @@ -13,6 +13,7 @@ import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.RandomSource; +import net.minecraft.world.phys.AABB; public class TelsaBulbBlockRenderer implements BlockEntityRenderer { @@ -48,4 +49,8 @@ public void render(T teslaBulb, float partialTicks, PoseStack poseStack, MultiBu public int getViewDistance() { return 256; } + + public AABB getRenderBoundingBox(T blockEntity) { + return blockEntity.getRenderBoundingBox(); + } } From ad4ac46c6406b95c727db687c080d9e55de04b76 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Thu, 6 Aug 2026 12:45:13 +0300 Subject: [PATCH 19/28] Take the packed colour int in renderToBuffer so baby model scaling applies again --- .../alexmodguy/alexscaves/client/model/AtlatitanModel.java | 4 +--- .../alexmodguy/alexscaves/client/model/CandicornModel.java | 4 +--- .../alexscaves/client/model/GrottoceratopsModel.java | 3 +-- .../alexmodguy/alexscaves/client/model/RaycatModel.java | 7 +++---- .../alexscaves/client/model/RelicheirusModel.java | 7 +++---- .../alexscaves/client/model/SubterranodonModel.java | 7 +++---- .../alexscaves/client/model/TremorsaurusModel.java | 6 +++--- .../alexscaves/client/model/TremorzillaModel.java | 7 +++---- .../alexscaves/client/model/VallumraptorModel.java | 7 ++++--- .../client/render/entity/DinosaurSpiritRenderer.java | 3 ++- 10 files changed, 24 insertions(+), 31 deletions(-) diff --git a/src/main/java/com/github/alexmodguy/alexscaves/client/model/AtlatitanModel.java b/src/main/java/com/github/alexmodguy/alexscaves/client/model/AtlatitanModel.java index 2ccda6192..8f159e171 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/client/model/AtlatitanModel.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/client/model/AtlatitanModel.java @@ -1,6 +1,5 @@ package com.github.alexmodguy.alexscaves.client.model; -import com.github.alexmodguy.alexscaves.client.render.ColorUtil; import com.github.alexmodguy.alexscaves.server.entity.living.AtlatitanEntity; import com.github.alexthe666.citadel.client.model.AdvancedModelBox; import com.google.common.collect.ImmutableList; @@ -107,8 +106,7 @@ public AtlatitanModel() { this.updateDefaultPose(); } - public void renderToBuffer(PoseStack matrixStackIn, VertexConsumer bufferIn, int packedLightIn, int packedOverlayIn, float red, float green, float blue, float alpha) { - int color = ColorUtil.packColor(red, green, blue, alpha); + public void renderToBuffer(PoseStack matrixStackIn, VertexConsumer bufferIn, int packedLightIn, int packedOverlayIn, int color) { if (this.young) { float f = 2F; head.setScale(f, f, f); diff --git a/src/main/java/com/github/alexmodguy/alexscaves/client/model/CandicornModel.java b/src/main/java/com/github/alexmodguy/alexscaves/client/model/CandicornModel.java index 33bcd076e..2a9e7b0fc 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/client/model/CandicornModel.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/client/model/CandicornModel.java @@ -1,6 +1,5 @@ package com.github.alexmodguy.alexscaves.client.model; -import com.github.alexmodguy.alexscaves.client.render.ColorUtil; import com.github.alexmodguy.alexscaves.server.entity.living.CandicornEntity; import com.github.alexmodguy.alexscaves.server.misc.ACMath; import com.github.alexthe666.citadel.animation.IAnimatedEntity; @@ -323,8 +322,7 @@ private void poseBucking() { animator.rotate(right_backLeg, (float) Math.toRadians(35), 0, 0); } - public void renderToBuffer(PoseStack matrixStackIn, VertexConsumer bufferIn, int packedLightIn, int packedOverlayIn, float red, float green, float blue, float alpha) { - int color = ColorUtil.packColor(red, green, blue, alpha); + public void renderToBuffer(PoseStack matrixStackIn, VertexConsumer bufferIn, int packedLightIn, int packedOverlayIn, int color) { this.horn.showModel = !this.young; if (this.young) { float f = 1.35F; diff --git a/src/main/java/com/github/alexmodguy/alexscaves/client/model/GrottoceratopsModel.java b/src/main/java/com/github/alexmodguy/alexscaves/client/model/GrottoceratopsModel.java index 649418249..8e247e4e0 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/client/model/GrottoceratopsModel.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/client/model/GrottoceratopsModel.java @@ -300,8 +300,7 @@ public void animate(IAnimatedEntity entity) { animator.resetKeyframe(5); } - public void renderToBuffer(PoseStack matrixStackIn, VertexConsumer bufferIn, int packedLightIn, int packedOverlayIn, float red, float green, float blue, float alpha) { - int color = ColorUtil.packColor(red, green, blue, alpha); + public void renderToBuffer(PoseStack matrixStackIn, VertexConsumer bufferIn, int packedLightIn, int packedOverlayIn, int color) { if (this.young) { float f = 1.5F; head.setScale(f, f, f); diff --git a/src/main/java/com/github/alexmodguy/alexscaves/client/model/RaycatModel.java b/src/main/java/com/github/alexmodguy/alexscaves/client/model/RaycatModel.java index ca6a73616..7ac9cfeed 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/client/model/RaycatModel.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/client/model/RaycatModel.java @@ -3,7 +3,6 @@ // Paste this class into your mod and generate all required imports -import com.github.alexmodguy.alexscaves.client.render.ColorUtil; import com.github.alexmodguy.alexscaves.server.entity.living.RaycatEntity; import com.github.alexthe666.citadel.client.model.AdvancedEntityModel; import com.github.alexthe666.citadel.client.model.AdvancedModelBox; @@ -133,7 +132,7 @@ public void setupAnim(RaycatEntity entity, float limbSwing, float limbSwingAmoun this.faceTarget(netHeadYaw, headPitch, 1, head); } - public void renderToBuffer(PoseStack matrixStackIn, VertexConsumer bufferIn, int packedLightIn, int packedOverlayIn, float red, float green, float blue, float alpha) { + public void renderToBuffer(PoseStack matrixStackIn, VertexConsumer bufferIn, int packedLightIn, int packedOverlayIn, int color) { if (this.young) { float f = 1.5F; head.setScale(f, f, f); @@ -142,14 +141,14 @@ public void renderToBuffer(PoseStack matrixStackIn, VertexConsumer bufferIn, int matrixStackIn.scale(0.5F, 0.5F, 0.5F); matrixStackIn.translate(0.0D, 1.5D, 0D); parts().forEach((p_228292_8_) -> { - p_228292_8_.render(matrixStackIn, bufferIn, packedLightIn, packedOverlayIn, ColorUtil.packColor(red, green, blue, alpha)); + p_228292_8_.render(matrixStackIn, bufferIn, packedLightIn, packedOverlayIn, color); }); matrixStackIn.popPose(); head.setScale(1, 1, 1); } else { matrixStackIn.pushPose(); parts().forEach((p_228290_8_) -> { - p_228290_8_.render(matrixStackIn, bufferIn, packedLightIn, packedOverlayIn, ColorUtil.packColor(red, green, blue, alpha)); + p_228290_8_.render(matrixStackIn, bufferIn, packedLightIn, packedOverlayIn, color); }); matrixStackIn.popPose(); } diff --git a/src/main/java/com/github/alexmodguy/alexscaves/client/model/RelicheirusModel.java b/src/main/java/com/github/alexmodguy/alexscaves/client/model/RelicheirusModel.java index f92326e76..f74ab4a09 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/client/model/RelicheirusModel.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/client/model/RelicheirusModel.java @@ -1,6 +1,5 @@ package com.github.alexmodguy.alexscaves.client.model; -import com.github.alexmodguy.alexscaves.client.render.ColorUtil; import com.github.alexmodguy.alexscaves.server.entity.living.RelicheirusEntity; import com.github.alexmodguy.alexscaves.server.misc.ACMath; import com.github.alexthe666.citadel.animation.Animation; @@ -261,7 +260,7 @@ public RelicheirusModel() { animator = ModelAnimator.create(); } - public void renderToBuffer(PoseStack matrixStackIn, VertexConsumer bufferIn, int packedLightIn, int packedOverlayIn, float red, float green, float blue, float alpha) { + public void renderToBuffer(PoseStack matrixStackIn, VertexConsumer bufferIn, int packedLightIn, int packedOverlayIn, int color) { if (this.young) { float f = 1.5F; head.setScale(f, f, f); @@ -270,14 +269,14 @@ public void renderToBuffer(PoseStack matrixStackIn, VertexConsumer bufferIn, int matrixStackIn.scale(0.25F, 0.25F, 0.25F); matrixStackIn.translate(0.0D, 4.5F, 0D); parts().forEach((p_228292_8_) -> { - p_228292_8_.render(matrixStackIn, bufferIn, packedLightIn, packedOverlayIn, ColorUtil.packColor(red, green, blue, alpha)); + p_228292_8_.render(matrixStackIn, bufferIn, packedLightIn, packedOverlayIn, color); }); matrixStackIn.popPose(); head.setScale(1, 1, 1); } else { matrixStackIn.pushPose(); parts().forEach((p_228290_8_) -> { - p_228290_8_.render(matrixStackIn, bufferIn, packedLightIn, packedOverlayIn, ColorUtil.packColor(red, green, blue, alpha)); + p_228290_8_.render(matrixStackIn, bufferIn, packedLightIn, packedOverlayIn, color); }); matrixStackIn.popPose(); } diff --git a/src/main/java/com/github/alexmodguy/alexscaves/client/model/SubterranodonModel.java b/src/main/java/com/github/alexmodguy/alexscaves/client/model/SubterranodonModel.java index f07f0ba72..6b8bd89b7 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/client/model/SubterranodonModel.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/client/model/SubterranodonModel.java @@ -3,7 +3,6 @@ // Paste this class into your mod and generate all required imports -import com.github.alexmodguy.alexscaves.client.render.ColorUtil; import com.github.alexmodguy.alexscaves.server.entity.item.DinosaurSpiritEntity; import com.github.alexmodguy.alexscaves.server.entity.living.SubterranodonEntity; import com.github.alexmodguy.alexscaves.server.misc.ACMath; @@ -277,7 +276,7 @@ public Vec3 getLegPosition(boolean right, Vec3 offsetIn) { return vec3; } - public void renderToBuffer(PoseStack matrixStackIn, VertexConsumer bufferIn, int packedLightIn, int packedOverlayIn, float red, float green, float blue, float alpha) { + public void renderToBuffer(PoseStack matrixStackIn, VertexConsumer bufferIn, int packedLightIn, int packedOverlayIn, int color) { if (this.young) { float f = 1.5F; head.setScale(f, f, f); @@ -286,14 +285,14 @@ public void renderToBuffer(PoseStack matrixStackIn, VertexConsumer bufferIn, int matrixStackIn.scale(0.35F, 0.35F, 0.35F); matrixStackIn.translate(0.0D, 2.75D, 0.125D); parts().forEach((p_228292_8_) -> { - p_228292_8_.render(matrixStackIn, bufferIn, packedLightIn, packedOverlayIn, ColorUtil.packColor(red, green, blue, alpha)); + p_228292_8_.render(matrixStackIn, bufferIn, packedLightIn, packedOverlayIn, color); }); matrixStackIn.popPose(); head.setScale(1, 1, 1); } else { matrixStackIn.pushPose(); parts().forEach((p_228290_8_) -> { - p_228290_8_.render(matrixStackIn, bufferIn, packedLightIn, packedOverlayIn, ColorUtil.packColor(red, green, blue, alpha)); + p_228290_8_.render(matrixStackIn, bufferIn, packedLightIn, packedOverlayIn, color); }); matrixStackIn.popPose(); } diff --git a/src/main/java/com/github/alexmodguy/alexscaves/client/model/TremorsaurusModel.java b/src/main/java/com/github/alexmodguy/alexscaves/client/model/TremorsaurusModel.java index 81eb2b80a..619c05e59 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/client/model/TremorsaurusModel.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/client/model/TremorsaurusModel.java @@ -178,7 +178,7 @@ public TremorsaurusModel() { animator = ModelAnimator.create(); } - public void renderToBuffer(PoseStack matrixStackIn, VertexConsumer bufferIn, int packedLightIn, int packedOverlayIn, float red, float green, float blue, float alpha) { + public void renderToBuffer(PoseStack matrixStackIn, VertexConsumer bufferIn, int packedLightIn, int packedOverlayIn, int color) { if (this.young) { float f = 1.5F; head.setScale(f, f, f); @@ -187,14 +187,14 @@ public void renderToBuffer(PoseStack matrixStackIn, VertexConsumer bufferIn, int matrixStackIn.scale(0.25F, 0.25F, 0.25F); matrixStackIn.translate(0.0D, 4.5F, 0D); parts().forEach((p_228292_8_) -> { - p_228292_8_.render(matrixStackIn, bufferIn, packedLightIn, packedOverlayIn, ColorUtil.packColor(red, green, blue, alpha)); + p_228292_8_.render(matrixStackIn, bufferIn, packedLightIn, packedOverlayIn, color); }); matrixStackIn.popPose(); head.setScale(1, 1, 1); } else { matrixStackIn.pushPose(); parts().forEach((p_228290_8_) -> { - p_228290_8_.render(matrixStackIn, bufferIn, packedLightIn, packedOverlayIn, ColorUtil.packColor(red, green, blue, alpha)); + p_228290_8_.render(matrixStackIn, bufferIn, packedLightIn, packedOverlayIn, color); }); matrixStackIn.popPose(); } diff --git a/src/main/java/com/github/alexmodguy/alexscaves/client/model/TremorzillaModel.java b/src/main/java/com/github/alexmodguy/alexscaves/client/model/TremorzillaModel.java index 89f312970..acd0f171e 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/client/model/TremorzillaModel.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/client/model/TremorzillaModel.java @@ -1,7 +1,6 @@ package com.github.alexmodguy.alexscaves.client.model; import com.github.alexmodguy.alexscaves.client.model.misc.HideableModelBoxWithChildren; -import com.github.alexmodguy.alexscaves.client.render.ColorUtil; import com.github.alexmodguy.alexscaves.server.entity.living.TremorzillaEntity; import com.github.alexmodguy.alexscaves.server.entity.util.TremorzillaLegSolver; import com.github.alexmodguy.alexscaves.server.misc.ACMath; @@ -264,7 +263,7 @@ public TremorzillaModel() { animator = ModelAnimator.create(); } - public void renderToBuffer(PoseStack matrixStackIn, VertexConsumer bufferIn, int packedLightIn, int packedOverlayIn, float red, float green, float blue, float alpha) { + public void renderToBuffer(PoseStack matrixStackIn, VertexConsumer bufferIn, int packedLightIn, int packedOverlayIn, int color) { if (this.young) { float f = 1.5F; head.setScale(f, f, f); @@ -273,14 +272,14 @@ public void renderToBuffer(PoseStack matrixStackIn, VertexConsumer bufferIn, int matrixStackIn.scale(0.15F, 0.15F, 0.15F); matrixStackIn.translate(0.0D, 8.55F, 0D); parts().forEach((p_228292_8_) -> { - p_228292_8_.render(matrixStackIn, bufferIn, packedLightIn, packedOverlayIn, ColorUtil.packColor(red, green, blue, alpha)); + p_228292_8_.render(matrixStackIn, bufferIn, packedLightIn, packedOverlayIn, color); }); matrixStackIn.popPose(); head.setScale(1, 1, 1); } else { matrixStackIn.pushPose(); parts().forEach((p_228290_8_) -> { - p_228290_8_.render(matrixStackIn, bufferIn, packedLightIn, packedOverlayIn, ColorUtil.packColor(red, green, blue, alpha)); + p_228290_8_.render(matrixStackIn, bufferIn, packedLightIn, packedOverlayIn, color); }); matrixStackIn.popPose(); } diff --git a/src/main/java/com/github/alexmodguy/alexscaves/client/model/VallumraptorModel.java b/src/main/java/com/github/alexmodguy/alexscaves/client/model/VallumraptorModel.java index c9572733f..8160dfd7b 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/client/model/VallumraptorModel.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/client/model/VallumraptorModel.java @@ -179,7 +179,8 @@ public void setAlpha(float alpha) { this.alpha = alpha; } - public void renderToBuffer(PoseStack matrixStackIn, VertexConsumer bufferIn, int packedLightIn, int packedOverlayIn, float red, float green, float blue, float alphaIn) { + public void renderToBuffer(PoseStack matrixStackIn, VertexConsumer bufferIn, int packedLightIn, int packedOverlayIn, int color) { + int tintedColor = ColorUtil.packColor(ColorUtil.unpackRed(color), ColorUtil.unpackGreen(color), ColorUtil.unpackBlue(color), ColorUtil.unpackAlpha(color) * this.alpha); if (this.young) { float f = 1.5F; head.setScale(f, f, f); @@ -188,14 +189,14 @@ public void renderToBuffer(PoseStack matrixStackIn, VertexConsumer bufferIn, int matrixStackIn.scale(0.5F, 0.5F, 0.5F); matrixStackIn.translate(0.0D, 1.5D, 0D); parts().forEach((p_228292_8_) -> { - p_228292_8_.render(matrixStackIn, bufferIn, packedLightIn, packedOverlayIn, ColorUtil.packColor(red, green, blue, alphaIn * this.alpha)); + p_228292_8_.render(matrixStackIn, bufferIn, packedLightIn, packedOverlayIn, tintedColor); }); matrixStackIn.popPose(); head.setScale(1, 1, 1); } else { matrixStackIn.pushPose(); parts().forEach((p_228290_8_) -> { - p_228290_8_.render(matrixStackIn, bufferIn, packedLightIn, packedOverlayIn, ColorUtil.packColor(red, green, blue, alphaIn * this.alpha)); + p_228290_8_.render(matrixStackIn, bufferIn, packedLightIn, packedOverlayIn, tintedColor); }); matrixStackIn.popPose(); } diff --git a/src/main/java/com/github/alexmodguy/alexscaves/client/render/entity/DinosaurSpiritRenderer.java b/src/main/java/com/github/alexmodguy/alexscaves/client/render/entity/DinosaurSpiritRenderer.java index ecdbd513f..186645518 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/client/render/entity/DinosaurSpiritRenderer.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/client/render/entity/DinosaurSpiritRenderer.java @@ -5,6 +5,7 @@ import com.github.alexmodguy.alexscaves.client.model.SubterranodonModel; import com.github.alexmodguy.alexscaves.client.model.TremorsaurusModel; import com.github.alexmodguy.alexscaves.client.render.ACRenderTypes; +import com.github.alexmodguy.alexscaves.client.render.ColorUtil; import com.github.alexmodguy.alexscaves.server.entity.item.DinosaurSpiritEntity; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; @@ -58,7 +59,7 @@ public void render(DinosaurSpiritEntity entityIn, float entityYaw, float partial SUBTERRANODON_MODEL.young = false; ivertexbuilder = bufferIn.getBuffer(ACRenderTypes.getRedGhost(SUBTERRANODON_TEXTURE)); SUBTERRANODON_MODEL.animateSpirit(entityIn, partialTicks); - SUBTERRANODON_MODEL.renderToBuffer(poseStack, ivertexbuilder, 240, OverlayTexture.NO_OVERLAY, 1.0F, 1.0F, 1.0F, ghostAlpha); + SUBTERRANODON_MODEL.renderToBuffer(poseStack, ivertexbuilder, 240, OverlayTexture.NO_OVERLAY, ColorUtil.packColor(1.0F, 1.0F, 1.0F, ghostAlpha)); SUBTERRANODON_MODEL.young = prevBaby; break; case GROTTOCERATOPS: From 0ae0da55c5507fc15dfa8db085bc5ea004ed7c46 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Thu, 6 Aug 2026 12:46:07 +0300 Subject: [PATCH 20/28] Save the boundroid winch's head UUID under the key it is read from --- .../alexscaves/server/entity/living/BoundroidWinchEntity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/BoundroidWinchEntity.java b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/BoundroidWinchEntity.java index c9aeeeb91..d7a6ee617 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/BoundroidWinchEntity.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/BoundroidWinchEntity.java @@ -126,7 +126,7 @@ public void readAdditionalSaveData(CompoundTag compound) { public void addAdditionalSaveData(CompoundTag compound) { super.addAdditionalSaveData(compound); if (this.getHeadUUID() != null) { - compound.putUUID("BodyUUID", this.getHeadUUID()); + compound.putUUID("HeadUUID", this.getHeadUUID()); } } From 7271f3c2721a5bc2d4453b0520449304ae4c0433 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Thu, 6 Aug 2026 12:50:09 +0300 Subject: [PATCH 21/28] Take the packed colour int in HideableModelBoxWithChildren so hidden boxes stay hidden --- .../client/model/misc/HideableModelBoxWithChildren.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/github/alexmodguy/alexscaves/client/model/misc/HideableModelBoxWithChildren.java b/src/main/java/com/github/alexmodguy/alexscaves/client/model/misc/HideableModelBoxWithChildren.java index 0bf1e2f0b..25cec69d2 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/client/model/misc/HideableModelBoxWithChildren.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/client/model/misc/HideableModelBoxWithChildren.java @@ -1,6 +1,5 @@ package com.github.alexmodguy.alexscaves.client.model.misc; -import com.github.alexmodguy.alexscaves.client.render.ColorUtil; import com.github.alexthe666.citadel.client.model.AdvancedEntityModel; import com.github.alexthe666.citadel.client.model.AdvancedModelBox; import com.github.alexthe666.citadel.client.model.basic.BasicModelPart; @@ -24,9 +23,9 @@ public HideableModelBoxWithChildren(AdvancedEntityModel model, int textureOffset } - public void render(PoseStack poseStack, VertexConsumer vertexConsumer, int packedLightIn, int overlay, float r, float g, float b, float a) { + public void render(PoseStack poseStack, VertexConsumer vertexConsumer, int packedLightIn, int overlay, int color) { if (this.showModel) { - super.render(poseStack, vertexConsumer, packedLightIn, overlay, ColorUtil.packColor(r, g, b, a)); + super.render(poseStack, vertexConsumer, packedLightIn, overlay, color); } else if (!this.cubeList.isEmpty() || !this.childModels.isEmpty()) { poseStack.pushPose(); this.translateAndRotate(poseStack); @@ -36,7 +35,7 @@ public void render(PoseStack poseStack, VertexConsumer vertexConsumer, int packe } while (var9.hasNext()) { BasicModelPart lvt_10_1_ = (BasicModelPart) var9.next(); - lvt_10_1_.render(poseStack, vertexConsumer, packedLightIn, overlay, ColorUtil.packColor(r, g, b, a)); + lvt_10_1_.render(poseStack, vertexConsumer, packedLightIn, overlay, color); } poseStack.popPose(); } From 931a9a2b06e428cf679fceec86c5f5b4b97bfc28 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Thu, 6 Aug 2026 13:13:46 +0300 Subject: [PATCH 22/28] Restore Alex's Caves decorated pot patterns on 1.21 --- .../alexmodguy/alexscaves/AlexsCaves.java | 2 +- .../mixin/DecoratedPotPatternsMixin.java | 28 +++++++++++ .../server/misc/ACPotPatternRegistry.java | 49 +++++++++++++------ src/main/resources/alexscaves.mixins.json | 1 + 4 files changed, 63 insertions(+), 17 deletions(-) create mode 100644 src/main/java/com/github/alexmodguy/alexscaves/mixin/DecoratedPotPatternsMixin.java diff --git a/src/main/java/com/github/alexmodguy/alexscaves/AlexsCaves.java b/src/main/java/com/github/alexmodguy/alexscaves/AlexsCaves.java index 3771aec96..8c9cd3fbd 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/AlexsCaves.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/AlexsCaves.java @@ -138,7 +138,7 @@ public AlexsCaves(IEventBus modEventBus, ModContainer modContainer) { ACLootTableRegistry.LOOT_FUNCTION_DEF_REG.register(modEventBus); ACCreativeTabRegistry.DEF_REG.register(modEventBus); ACDataComponentRegistry.init(modEventBus); - ACPotPatternRegistry.init(); // Pot patterns are now data-driven in 1.21 + ACPotPatternRegistry.DEF_REG.register(modEventBus); this.modEventBus = modEventBus; // Store for later use PROXY.commonInit(modEventBus); ACBiomeRegistry.init(); diff --git a/src/main/java/com/github/alexmodguy/alexscaves/mixin/DecoratedPotPatternsMixin.java b/src/main/java/com/github/alexmodguy/alexscaves/mixin/DecoratedPotPatternsMixin.java new file mode 100644 index 000000000..bb6064b47 --- /dev/null +++ b/src/main/java/com/github/alexmodguy/alexscaves/mixin/DecoratedPotPatternsMixin.java @@ -0,0 +1,28 @@ +package com.github.alexmodguy.alexscaves.mixin; + +import com.github.alexmodguy.alexscaves.server.misc.ACPotPatternRegistry; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.entity.DecoratedPotPattern; +import net.minecraft.world.level.block.entity.DecoratedPotPatterns; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(DecoratedPotPatterns.class) +public class DecoratedPotPatternsMixin { + + @Inject( + method = "getPatternFromItem(Lnet/minecraft/world/item/Item;)Lnet/minecraft/resources/ResourceKey;", + at = @At(value = "HEAD"), + cancellable = true, + remap = true + ) + private static void ac_getPatternFromItem(Item item, CallbackInfoReturnable> cir) { + ResourceKey pattern = ACPotPatternRegistry.getPatternForSherd(item); + if (pattern != null) { + cir.setReturnValue(pattern); + } + } +} diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/misc/ACPotPatternRegistry.java b/src/main/java/com/github/alexmodguy/alexscaves/server/misc/ACPotPatternRegistry.java index 4a1b31cc4..856430b11 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/misc/ACPotPatternRegistry.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/misc/ACPotPatternRegistry.java @@ -1,24 +1,41 @@ package com.github.alexmodguy.alexscaves.server.misc; import com.github.alexmodguy.alexscaves.AlexsCaves; +import com.github.alexmodguy.alexscaves.server.item.ACItemRegistry; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.entity.DecoratedPotPattern; +import net.neoforged.neoforge.registries.DeferredHolder; +import net.neoforged.neoforge.registries.DeferredRegister; + +import javax.annotation.Nullable; -/** - * In 1.21, DecoratedPotPatterns has completely changed. - * Pot patterns are now data-driven and should be defined via JSON files. - * - * Custom pot patterns need to be registered through data packs: - * - Pattern data in: data/alexscaves/decorated_pot_pattern/*.json - * - Textures in: assets/alexscaves/textures/entity/decorated_pot/*.png - * - * The ITEM_TO_POT_TEXTURE map is now private and final, and cannot be modified at runtime. - * Instead, use the data-driven approach. - */ public class ACPotPatternRegistry { - public static void init() { - AlexsCaves.LOGGER.info("ACPotPatternRegistry: Decorated pot patterns are now data-driven in 1.21"); + public static final DeferredRegister DEF_REG = DeferredRegister.create(Registries.DECORATED_POT_PATTERN, AlexsCaves.MODID); + + public static final DeferredHolder DINOSAUR = register("dinosaur_pottery_pattern"); + public static final DeferredHolder FOOTPRINT = register("footprint_pottery_pattern"); + public static final DeferredHolder GUARDIAN = register("guardian_pottery_pattern"); + public static final DeferredHolder HERO = register("hero_pottery_pattern"); + + private static DeferredHolder register(String name) { + return DEF_REG.register(name, () -> new DecoratedPotPattern(ResourceLocation.fromNamespaceAndPath(AlexsCaves.MODID, name))); + } + + @Nullable + public static ResourceKey getPatternForSherd(Item item) { + if (item == ACItemRegistry.DINOSAUR_POTTERY_SHERD.get()) { + return DINOSAUR.getKey(); + } else if (item == ACItemRegistry.FOOTPRINT_POTTERY_SHERD.get()) { + return FOOTPRINT.getKey(); + } else if (item == ACItemRegistry.GUARDIAN_POTTERY_SHERD.get()) { + return GUARDIAN.getKey(); + } else if (item == ACItemRegistry.HERO_POTTERY_SHERD.get()) { + return HERO.getKey(); + } + return null; } - - // Pot pattern registration is now handled through data packs - // See: data/alexscaves/decorated_pot_pattern/ } diff --git a/src/main/resources/alexscaves.mixins.json b/src/main/resources/alexscaves.mixins.json index b9867ef12..280428066 100644 --- a/src/main/resources/alexscaves.mixins.json +++ b/src/main/resources/alexscaves.mixins.json @@ -11,6 +11,7 @@ "ChunkStatusMixin", "CoralFeatureMixin", "CorrodentCollisionMixin", + "DecoratedPotPatternsMixin", "EnchantRandomlyFunctionMixin", "EntityMixin", "FallingBlockEntityMixin", From de55cb75e330bafe8ad1a58733eaedc6c5213957 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Thu, 6 Aug 2026 13:16:31 +0300 Subject: [PATCH 23/28] Remove leftover porting scaffolding from startup --- .../alexmodguy/alexscaves/AlexsCaves.java | 25 ------------------- .../enchantment/ACEnchantmentRegistry.java | 4 --- 2 files changed, 29 deletions(-) diff --git a/src/main/java/com/github/alexmodguy/alexscaves/AlexsCaves.java b/src/main/java/com/github/alexmodguy/alexscaves/AlexsCaves.java index 8c9cd3fbd..fdfc1e7af 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/AlexsCaves.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/AlexsCaves.java @@ -192,36 +192,11 @@ private void commonSetup(final FMLCommonSetupEvent event) { ACEffectRegistry.setup(); ACBlockRegistry.setup(); ACItemRegistry.setup(); - // ACPotPatternRegistry.expandVanillaDefinitions(); // Pot patterns are now data-driven in 1.21 ACBlockEntityRegistry.expandVanillaDefinitions(); - // Debug: verify POI registration - verifyPoiRegistration(); }); readModIncompatibilities(); } - private void verifyPoiRegistration() { - try { - var attractingMagnets = com.github.alexmodguy.alexscaves.server.block.poi.ACPOIRegistry.ATTRACTING_MAGNETS.get(); - var repellingMagnets = com.github.alexmodguy.alexscaves.server.block.poi.ACPOIRegistry.REPELLING_MAGNETS.get(); - LOGGER.info("POI Verification - Attracting Magnets: {} states registered", attractingMagnets.matchingStates().size()); - LOGGER.info("POI Verification - Repelling Magnets: {} states registered", repellingMagnets.matchingStates().size()); - - // Verify that PoiTypes.hasPoi returns true for our blocks - var scarletNode = com.github.alexmodguy.alexscaves.server.block.ACBlockRegistry.SCARLET_NEODYMIUM_NODE.get().defaultBlockState(); - var azureNode = com.github.alexmodguy.alexscaves.server.block.ACBlockRegistry.AZURE_NEODYMIUM_NODE.get().defaultBlockState(); - boolean scarletHasPoi = net.minecraft.world.entity.ai.village.poi.PoiTypes.hasPoi(scarletNode); - boolean azureHasPoi = net.minecraft.world.entity.ai.village.poi.PoiTypes.hasPoi(azureNode); - LOGGER.info("POI Verification - Scarlet Node hasPoi: {}, Azure Node hasPoi: {}", scarletHasPoi, azureHasPoi); - - if (!scarletHasPoi || !azureHasPoi) { - LOGGER.error("POI registration failed! Neodymium blocks are not registered as POI types!"); - } - } catch (Exception e) { - LOGGER.error("Failed to verify POI registration", e); - } - } - private void registerTicketControllers(RegisterTicketControllersEvent event) { event.register(TICKET_CONTROLLER); event.register(com.github.alexmodguy.alexscaves.server.entity.item.NuclearExplosionEntity.TICKET_CONTROLLER); diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/enchantment/ACEnchantmentRegistry.java b/src/main/java/com/github/alexmodguy/alexscaves/server/enchantment/ACEnchantmentRegistry.java index 6169da2c9..7e044a2c6 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/enchantment/ACEnchantmentRegistry.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/enchantment/ACEnchantmentRegistry.java @@ -152,10 +152,6 @@ public static java.util.Optional> getEnch return java.util.Optional.of(reference.get()); } - public static void init() { - AlexsCaves.LOGGER.info("ACEnchantmentRegistry: Enchantments are now data-driven in 1.21"); - } - /** * In 1.21, enchantments are data-driven and EnchantmentCategory no longer exists. * This method is now a no-op. Enchanted books should be added through data packs From 20af46fa0b3bdf07edbeaf3940eecac00f4e8c17 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Thu, 6 Aug 2026 13:16:55 +0300 Subject: [PATCH 24/28] Clamp the abyssal chasm biome check to the world floor instead of collapsing to it --- .../server/level/feature/FeaturePositionValidator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/level/feature/FeaturePositionValidator.java b/src/main/java/com/github/alexmodguy/alexscaves/server/level/feature/FeaturePositionValidator.java index ba799f98f..cb4406ad1 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/level/feature/FeaturePositionValidator.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/level/feature/FeaturePositionValidator.java @@ -19,7 +19,7 @@ public static boolean isBiome(FeaturePlaceContext context, ResourceKey bi try { BlockPos origin = context.origin(); int oceanFloorY = context.level().getHeight(Heightmap.Types.OCEAN_FLOOR, origin.getX(), origin.getZ()); - int checkY = Math.min(context.level().getMinBuildHeight(), oceanFloorY - 30); + int checkY = Math.max(context.level().getMinBuildHeight(), oceanFloorY - 30); return context.level().getBiome(origin.atY(checkY)).is(biomeResourceKey); } catch (Exception e) { return true; From cf66054ee0cca6b1f1334c02dc5b6fa866df9ce2 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Thu, 6 Aug 2026 13:18:33 +0300 Subject: [PATCH 25/28] Fix causeFallDamage overrides to take the damage source --- .../alexscaves/server/entity/living/DeepOneMageEntity.java | 2 +- .../alexscaves/server/entity/living/GloomothEntity.java | 2 +- .../alexscaves/server/entity/living/MagnetronEntity.java | 2 +- .../alexscaves/server/entity/living/TeletorEntity.java | 2 +- .../alexscaves/server/entity/living/WatcherEntity.java | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/DeepOneMageEntity.java b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/DeepOneMageEntity.java index a42904021..e15b185ff 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/DeepOneMageEntity.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/DeepOneMageEntity.java @@ -165,7 +165,7 @@ public boolean isNoGravity() { return !this.isDeepOneSwimming() || super.isNoGravity(); } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/GloomothEntity.java b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/GloomothEntity.java index 08b58ab84..7954e2cb5 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/GloomothEntity.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/GloomothEntity.java @@ -231,7 +231,7 @@ public float getFlightRoll(float partialTick) { return (prevFlightRoll + (flightRoll - prevFlightRoll) * partialTick); } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/MagnetronEntity.java b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/MagnetronEntity.java index 4c29add71..e7bb5af76 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/MagnetronEntity.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/MagnetronEntity.java @@ -151,7 +151,7 @@ public void removeParts() { } } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/TeletorEntity.java b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/TeletorEntity.java index 985395af3..3fa72f495 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/TeletorEntity.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/TeletorEntity.java @@ -209,7 +209,7 @@ public boolean isNoGravity() { return true; } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/WatcherEntity.java b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/WatcherEntity.java index afe1d10a0..1fab4e403 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/WatcherEntity.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/entity/living/WatcherEntity.java @@ -292,7 +292,7 @@ public void tick() { AnimationHandler.INSTANCE.updateAnimations(this); } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } From cb072476b259517d15cf78842ea3d273251ebb20 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Thu, 6 Aug 2026 13:18:34 +0300 Subject: [PATCH 26/28] Mark gradlew executable --- gradlew | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 gradlew diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 From fed53e7f284d94f75c5402887d6aafc6209ec196 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Thu, 6 Aug 2026 20:13:09 +0300 Subject: [PATCH 27/28] Seed the cave biome sampler at server start so biome lookups do not depend on chunk generation order --- .../alexmodguy/alexscaves/server/event/CommonEvents.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/com/github/alexmodguy/alexscaves/server/event/CommonEvents.java b/src/main/java/com/github/alexmodguy/alexscaves/server/event/CommonEvents.java index 036db60fb..23c66a8b5 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/server/event/CommonEvents.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/server/event/CommonEvents.java @@ -16,6 +16,7 @@ import com.github.alexmodguy.alexscaves.server.level.biome.ACBiomeRarity; import com.github.alexmodguy.alexscaves.server.level.biome.ACBiomeRegistry; import com.github.alexmodguy.alexscaves.server.level.biome.BiomeSourceAccessor; +import com.github.alexmodguy.alexscaves.server.level.biome.MultiNoiseBiomeSourceAccessor; import com.github.alexmodguy.alexscaves.server.misc.ACSoundRegistry; import com.github.alexmodguy.alexscaves.server.misc.ACTagRegistry; import com.github.alexmodguy.alexscaves.server.potion.ACEffectRegistry; @@ -381,6 +382,7 @@ public void onServerAboutToStart(ServerAboutToStartEvent event) { RegistryAccess registryAccess = event.getServer().registryAccess(); Registry allBiomes = registryAccess.registryOrThrow(Registries.BIOME); Registry levelStems = registryAccess.registryOrThrow(Registries.LEVEL_STEM); + long worldSeed = event.getServer().getWorldData().worldGenOptions().seed(); Map, Holder> biomeMap = new HashMap<>(); for (ResourceKey biomeResourceKey : allBiomes.registryKeySet()) { Optional> holderOptional = allBiomes.getHolder(biomeResourceKey); @@ -390,6 +392,10 @@ public void onServerAboutToStart(ServerAboutToStartEvent event) { Optional> holderOptional = levelStems.getHolder(levelStemResourceKey); if (holderOptional.isPresent() && holderOptional.get().value().generator().getBiomeSource() instanceof BiomeSourceAccessor expandedBiomeSource) { expandedBiomeSource.setResourceKeyMap(biomeMap); + if (expandedBiomeSource instanceof MultiNoiseBiomeSourceAccessor multiNoiseBiomeSource) { + multiNoiseBiomeSource.setLastSampledSeed(worldSeed); + multiNoiseBiomeSource.setLastSampledDimension(ResourceKey.create(Registries.DIMENSION, levelStemResourceKey.location())); + } if (levelStemResourceKey.equals(LevelStem.OVERWORLD)) { ImmutableSet.Builder> biomeHolders = ImmutableSet.builder(); for (ResourceKey biomeResourceKey : ACBiomeRegistry.ALEXS_CAVES_BIOMES) { From 8babf0d6d18800ebe94f527cfb0c0995bb96b5c3 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Fri, 7 Aug 2026 10:23:04 +0300 Subject: [PATCH 28/28] Stop scaling baby dinosaur models twice now that the renderer applies getScale --- .../alexmodguy/alexscaves/client/model/AtlatitanModel.java | 2 -- .../alexmodguy/alexscaves/client/model/RelicheirusModel.java | 2 -- .../alexmodguy/alexscaves/client/model/TremorsaurusModel.java | 2 -- .../alexmodguy/alexscaves/client/model/TremorzillaModel.java | 2 -- 4 files changed, 8 deletions(-) diff --git a/src/main/java/com/github/alexmodguy/alexscaves/client/model/AtlatitanModel.java b/src/main/java/com/github/alexmodguy/alexscaves/client/model/AtlatitanModel.java index 8f159e171..493c7cd37 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/client/model/AtlatitanModel.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/client/model/AtlatitanModel.java @@ -113,8 +113,6 @@ public void renderToBuffer(PoseStack matrixStackIn, VertexConsumer bufferIn, int head.setShouldScaleChildren(true); head.setRotationPoint(0.8F, 3.0F, -75.0F); matrixStackIn.pushPose(); - matrixStackIn.scale(0.15F, 0.15F, 0.15F); - matrixStackIn.translate(0.0D, 8.55F, 0D); parts().forEach((p_228292_8_) -> { p_228292_8_.render(matrixStackIn, bufferIn, packedLightIn, packedOverlayIn, color); }); diff --git a/src/main/java/com/github/alexmodguy/alexscaves/client/model/RelicheirusModel.java b/src/main/java/com/github/alexmodguy/alexscaves/client/model/RelicheirusModel.java index f74ab4a09..1bb9270b3 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/client/model/RelicheirusModel.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/client/model/RelicheirusModel.java @@ -266,8 +266,6 @@ public void renderToBuffer(PoseStack matrixStackIn, VertexConsumer bufferIn, int head.setScale(f, f, f); head.setShouldScaleChildren(true); matrixStackIn.pushPose(); - matrixStackIn.scale(0.25F, 0.25F, 0.25F); - matrixStackIn.translate(0.0D, 4.5F, 0D); parts().forEach((p_228292_8_) -> { p_228292_8_.render(matrixStackIn, bufferIn, packedLightIn, packedOverlayIn, color); }); diff --git a/src/main/java/com/github/alexmodguy/alexscaves/client/model/TremorsaurusModel.java b/src/main/java/com/github/alexmodguy/alexscaves/client/model/TremorsaurusModel.java index 619c05e59..aace53149 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/client/model/TremorsaurusModel.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/client/model/TremorsaurusModel.java @@ -184,8 +184,6 @@ public void renderToBuffer(PoseStack matrixStackIn, VertexConsumer bufferIn, int head.setScale(f, f, f); head.setShouldScaleChildren(true); matrixStackIn.pushPose(); - matrixStackIn.scale(0.25F, 0.25F, 0.25F); - matrixStackIn.translate(0.0D, 4.5F, 0D); parts().forEach((p_228292_8_) -> { p_228292_8_.render(matrixStackIn, bufferIn, packedLightIn, packedOverlayIn, color); }); diff --git a/src/main/java/com/github/alexmodguy/alexscaves/client/model/TremorzillaModel.java b/src/main/java/com/github/alexmodguy/alexscaves/client/model/TremorzillaModel.java index acd0f171e..f9f3d070f 100644 --- a/src/main/java/com/github/alexmodguy/alexscaves/client/model/TremorzillaModel.java +++ b/src/main/java/com/github/alexmodguy/alexscaves/client/model/TremorzillaModel.java @@ -269,8 +269,6 @@ public void renderToBuffer(PoseStack matrixStackIn, VertexConsumer bufferIn, int head.setScale(f, f, f); head.setShouldScaleChildren(true); matrixStackIn.pushPose(); - matrixStackIn.scale(0.15F, 0.15F, 0.15F); - matrixStackIn.translate(0.0D, 8.55F, 0D); parts().forEach((p_228292_8_) -> { p_228292_8_.render(matrixStackIn, bufferIn, packedLightIn, packedOverlayIn, color); });