diff --git a/common/src/main/java/com/copycatsplus/copycats/compat/Mods.java b/common/src/main/java/com/copycatsplus/copycats/compat/Mods.java index 211f54939..8aae35bd4 100644 --- a/common/src/main/java/com/copycatsplus/copycats/compat/Mods.java +++ b/common/src/main/java/com/copycatsplus/copycats/compat/Mods.java @@ -30,6 +30,7 @@ public enum Mods { DIAGONAL_WALLS("diagonalwalls"), FLYWHEEL("flywheel"), SODIUM("sodium"), + RUBIDIUM("rubidium"), ATHENA("athena"), INDIUM("indium"), STARLIGHT("starlight"), diff --git a/common/src/main/java/com/copycatsplus/copycats/foundation/annotation/ModMixin.java b/common/src/main/java/com/copycatsplus/copycats/foundation/annotation/ModMixin.java index 53b4ccb4a..6f12a7252 100644 --- a/common/src/main/java/com/copycatsplus/copycats/foundation/annotation/ModMixin.java +++ b/common/src/main/java/com/copycatsplus/copycats/foundation/annotation/ModMixin.java @@ -15,6 +15,9 @@ @Retention(RetentionPolicy.RUNTIME) public @interface ModMixin { + /** + * The mixin should only be enabled if any of these mods are present + */ Mods[] requiredMods(); boolean applyIfPresent() default true; diff --git a/common/src/main/java/com/copycatsplus/copycats/foundation/copycat/CopycatExternalContext.java b/common/src/main/java/com/copycatsplus/copycats/foundation/copycat/CopycatExternalContext.java index 02cc34fdc..0aa070628 100644 --- a/common/src/main/java/com/copycatsplus/copycats/foundation/copycat/CopycatExternalContext.java +++ b/common/src/main/java/com/copycatsplus/copycats/foundation/copycat/CopycatExternalContext.java @@ -10,21 +10,35 @@ public class CopycatExternalContext { /** * Stores the currently rendering property for multi-state copycats. The stored value is thread-local. *

- * This is used when determining block colors and when block shape calculation results in a valid rendering property for getAppearance + * This is used when determining block colors */ - private static final ThreadLocal renderingProperty = new ThreadLocal<>(); + private static final ThreadLocal propertyForBlockColor = new ThreadLocal<>(); + /** + * Stores the currently rendering property for multi-state copycats. The stored value is thread-local. + *

+ * This is used when block shape calculation results in a valid rendering property for getAppearance + */ + private static final ThreadLocal propertyForAppearance = new ThreadLocal<>(); /** * Used to determine whether a {@link ICopycatBlock#getAppearance} call is made for determining blocking logic, * which causes the method to return appearances differently. */ private static final ThreadLocal forBlockingLogic = ThreadLocal.withInitial(() -> false); - public static void setRenderingProperty(String property) { - renderingProperty.set(property); + public static void setPropertyForBlockColor(String property) { + propertyForBlockColor.set(property); + } + + public static String getPropertyForBlockColor() { + return propertyForBlockColor.get(); + } + + public static void setPropertyForAppearance(String property) { + propertyForAppearance.set(property); } - public static String getRenderingProperty() { - return renderingProperty.get(); + public static String getPropertyForAppearance() { + return propertyForAppearance.get(); } public static void setForBlockingLogic(boolean value) { diff --git a/common/src/main/java/com/copycatsplus/copycats/foundation/copycat/ICopycatBlock.java b/common/src/main/java/com/copycatsplus/copycats/foundation/copycat/ICopycatBlock.java index bc3885f66..ff6d8df53 100644 --- a/common/src/main/java/com/copycatsplus/copycats/foundation/copycat/ICopycatBlock.java +++ b/common/src/main/java/com/copycatsplus/copycats/foundation/copycat/ICopycatBlock.java @@ -600,14 +600,14 @@ static boolean hidesNeighborFace(BlockGetter level, BlockPos toPos = pos.relative(dir); if (level instanceof ScaledBlockAndTintGetter scaledLevel && state.getBlock() instanceof IMultiStateCopycatBlock) { - CopycatExternalContext.setRenderingProperty(scaledLevel.getPropertyForRender(state, pos)); + CopycatExternalContext.setPropertyForAppearance(scaledLevel.getPropertyForRender(state, pos)); } else { - CopycatExternalContext.setRenderingProperty(null); + CopycatExternalContext.setPropertyForAppearance(null); } if (BlockFaceUtils.canOcclude(level, neighborState, toPos, state, pos, dir.getOpposite())) { BlockState material = state.getBlock() instanceof IMultiStateCopycatBlock - ? IMultiStateCopycatBlock.getMaterial(level, pos, CopycatExternalContext.getRenderingProperty()) + ? IMultiStateCopycatBlock.getMaterial(level, pos, CopycatExternalContext.getPropertyForAppearance()) : state.getBlock() instanceof ICopycatBlock ? ICopycatBlock.getMaterial(level, pos) : state; BlockState neighborMaterial = neighborState.getBlock() instanceof IMultiStateCopycatBlock && level instanceof ScaledBlockAndTintGetter scaledLevel ? IMultiStateCopycatBlock.getMaterial(level, toPos, scaledLevel.getPropertyForRender(neighborState, toPos)) diff --git a/common/src/main/java/com/copycatsplus/copycats/foundation/copycat/multistate/IMultiStateCopycatBlock.java b/common/src/main/java/com/copycatsplus/copycats/foundation/copycat/multistate/IMultiStateCopycatBlock.java index ea0db4b48..24f14c9f0 100644 --- a/common/src/main/java/com/copycatsplus/copycats/foundation/copycat/multistate/IMultiStateCopycatBlock.java +++ b/common/src/main/java/com/copycatsplus/copycats/foundation/copycat/multistate/IMultiStateCopycatBlock.java @@ -397,16 +397,16 @@ static BlockState getAppearance(IMultiStateCopycatBlock block, BlockState state, BlockAndTintGetter reader = Mods.ATHENA.runIfInstalled(() -> () -> AthenaCompat.unwrapAthenaGetter(level)).orElse(level); if (reader instanceof ScaledBlockAndTintGetter scaledLevel && state.getBlock() instanceof IMultiStateCopycatBlock) { - CopycatExternalContext.setRenderingProperty(scaledLevel.getPropertyForRender(state, pos)); + CopycatExternalContext.setPropertyForAppearance(scaledLevel.getPropertyForRender(state, pos)); } else { - CopycatExternalContext.setRenderingProperty(block.defaultProperty()); + CopycatExternalContext.setPropertyForAppearance(block.defaultProperty()); } if (block.isIgnoredConnectivitySide(reader, state, side, pos, queryPos, queryState)) return state; String property; - property = CopycatExternalContext.getRenderingProperty(); + property = CopycatExternalContext.getPropertyForAppearance(); if (property == null) property = block.defaultProperty(); BlockState material = IMultiStateCopycatBlock.getMaterial(reader, pos, property); @@ -495,7 +495,7 @@ public int getColor(BlockState pState, @Nullable BlockAndTintGetter pLevel, @Nul if (pLevel == null || pPos == null) return GrassColor.get(0.5D, 1.0D); - String renderingProperty = CopycatExternalContext.getRenderingProperty(); + String renderingProperty = CopycatExternalContext.getPropertyForBlockColor(); if (renderingProperty != null) { return Minecraft.getInstance() .getBlockColors() diff --git a/common/src/main/java/com/copycatsplus/copycats/mixin/compat/rubidium/BlockRendererMixin.java b/common/src/main/java/com/copycatsplus/copycats/mixin/compat/rubidium/BlockRendererMixin.java index 1b35b6c96..0060ffbe2 100644 --- a/common/src/main/java/com/copycatsplus/copycats/mixin/compat/rubidium/BlockRendererMixin.java +++ b/common/src/main/java/com/copycatsplus/copycats/mixin/compat/rubidium/BlockRendererMixin.java @@ -20,7 +20,7 @@ *

* Rubidium compatible version of {@link com.copycatsplus.copycats.mixin.foundation.copycat.multistate.ModelBlockRendererMixin}. */ -@ModMixin(requiredMods = Mods.SODIUM) +@ModMixin(requiredMods = {Mods.RUBIDIUM, Mods.SODIUM}) @Mixin(BlockRenderer.class) @Pseudo public class BlockRendererMixin { @@ -34,7 +34,7 @@ public class BlockRendererMixin { ) private void beforeColor(BlockRenderContext ctx, ColorProvider colorProvider, BakedQuadView quad, CallbackInfoReturnable cir) { if (quad.getSprite() instanceof MultiStateTextureAtlasSprite sprite) - CopycatExternalContext.setRenderingProperty(sprite.getProperty()); + CopycatExternalContext.setPropertyForBlockColor(sprite.getProperty()); } @Inject( @@ -47,6 +47,6 @@ private void beforeColor(BlockRenderContext ctx, ColorProvider color require = 0 ) private void afterColor(BlockRenderContext ctx, ColorProvider colorProvider, BakedQuadView quad, CallbackInfoReturnable cir) { - CopycatExternalContext.setRenderingProperty(null); + CopycatExternalContext.setPropertyForBlockColor(null); } } diff --git a/common/src/main/java/com/copycatsplus/copycats/mixin/foundation/copycat/multistate/ModelBlockRendererMixin.java b/common/src/main/java/com/copycatsplus/copycats/mixin/foundation/copycat/multistate/ModelBlockRendererMixin.java index e45da161e..a147ae30a 100644 --- a/common/src/main/java/com/copycatsplus/copycats/mixin/foundation/copycat/multistate/ModelBlockRendererMixin.java +++ b/common/src/main/java/com/copycatsplus/copycats/mixin/foundation/copycat/multistate/ModelBlockRendererMixin.java @@ -31,7 +31,7 @@ public class ModelBlockRendererMixin { ) private void beforeColor(BlockAndTintGetter level, BlockState state, BlockPos pos, VertexConsumer consumer, PoseStack.Pose pose, BakedQuad quad, float brightness0, float brightness1, float brightness2, float brightness3, int lightmap0, int lightmap1, int lightmap2, int lightmap3, int packedOverlay, CallbackInfo ci) { if (quad.getSprite() instanceof MultiStateTextureAtlasSprite sprite) - CopycatExternalContext.setRenderingProperty(sprite.getProperty()); + CopycatExternalContext.setPropertyForBlockColor(sprite.getProperty()); } @Inject( @@ -44,6 +44,6 @@ private void beforeColor(BlockAndTintGetter level, BlockState state, BlockPos po require = 0 ) private void afterColor(BlockAndTintGetter level, BlockState state, BlockPos pos, VertexConsumer consumer, PoseStack.Pose pose, BakedQuad quad, float brightness0, float brightness1, float brightness2, float brightness3, int lightmap0, int lightmap1, int lightmap2, int lightmap3, int packedOverlay, CallbackInfo ci) { - CopycatExternalContext.setRenderingProperty(null); + CopycatExternalContext.setPropertyForBlockColor(null); } } diff --git a/common/src/main/java/com/copycatsplus/copycats/utility/BlockFaceUtils.java b/common/src/main/java/com/copycatsplus/copycats/utility/BlockFaceUtils.java index e62dab56f..7a93ed9e6 100644 --- a/common/src/main/java/com/copycatsplus/copycats/utility/BlockFaceUtils.java +++ b/common/src/main/java/com/copycatsplus/copycats/utility/BlockFaceUtils.java @@ -121,9 +121,9 @@ private static boolean processBlockFace(BlockGetter level, 1.0 / toScale.getZ() ); if (operation.apply(fromShape, toShape)) { - String property = CopycatExternalContext.getRenderingProperty(); + String property = CopycatExternalContext.getPropertyForAppearance(); if (property == null) property = copycatBlock.defaultProperty(); - CopycatExternalContext.setRenderingProperty(copycatBlock.getPropertyFromRender(property, toState, world, part, toTruePos)); + CopycatExternalContext.setPropertyForAppearance(copycatBlock.getPropertyFromRender(property, toState, world, part, toTruePos)); return true; } } @@ -131,7 +131,7 @@ private static boolean processBlockFace(BlockGetter level, if (toShape == null) { toShape = toState.getFaceOcclusionShape(level, toPos, fromFace.getOpposite()); } - CopycatExternalContext.setRenderingProperty(null); + CopycatExternalContext.setPropertyForAppearance(null); return operation.apply(fromShape, toShape); }