diff --git a/CHANGELOG.md b/CHANGELOG.md index 72aa404f1..98858cd95 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,18 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## 2.0.5 - 2024-07-21 + +### Fixed + +- Copycat Slabs not having connected textures when using Fusion CT +- Crash/issues with train disassembly when certain complex blocks are put inside copycats on Forge +- Crash when simple copycats are put near enchanting tables on Fabric +- Bookshelves in copycats not contributing to enchanting power on Fabric +- Incorrect block mirroring for Copycat Slabs, Vertical Stairs and various other copycats +- Incorrect block shape for upside-down Copycat Half Layers +- Incompatibility with Continuity (not available until next Continuity release) + ## 2.0.4 - 2024-07-20 ### Fixed diff --git a/build.gradle b/build.gradle index 665932c33..15a3c5c06 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,6 @@ plugins { id "architectury-plugin" version "3.4-SNAPSHOT" - id "dev.architectury.loom" version "1.5.+" apply false + id "dev.architectury.loom" version "1.7.+" apply false } boolean ci = System.getenv("CI") != null ? System.getenv("CI").toBoolean() : false @@ -179,3 +179,7 @@ allprojects { withSourcesJar() } } + +wrapper { + gradleVersion = "8.8" +} \ No newline at end of file diff --git a/common/src/main/java/com/copycatsplus/copycats/CCShapes.java b/common/src/main/java/com/copycatsplus/copycats/CCShapes.java index 2539672cf..bd4cfcb68 100644 --- a/common/src/main/java/com/copycatsplus/copycats/CCShapes.java +++ b/common/src/main/java/com/copycatsplus/copycats/CCShapes.java @@ -78,18 +78,18 @@ public class CCShapes { aabb(layer * 2, 16, layer * 2).move(16 - layer * 2, 0, 16 - layer * 2) ) )); - public static final Map> HALF_LAYER_BOTTOM = - forHorizontalAxes(forAll(CopycatHalfLayerBlock.NEGATIVE_LAYERS, + public static final Map>> HALF_LAYER_BOTTOM = + forHorizontalAxes(forHalves(forAll(CopycatHalfLayerBlock.NEGATIVE_LAYERS, layer -> shape( aabb(16, layer * 2, 8) ) - )); - public static final Map> HALF_LAYER_TOP = - forHorizontalAxes(forAll(CopycatHalfLayerBlock.POSITIVE_LAYERS, + ))); + public static final Map>> HALF_LAYER_TOP = + forHorizontalAxes(forHalves(forAll(CopycatHalfLayerBlock.POSITIVE_LAYERS, layer -> shape( aabb(16, layer * 2, 8).move(0, 0, 8) ) - )); + ))); public static final Map>> VERTICAL_STAIR = forHorizontalDirections(forAll(CopycatVerticalStairBlock.SIDE, CopycatVerticalStairBlock.SHAPE, (side, shape) -> diff --git a/common/src/main/java/com/copycatsplus/copycats/content/copycat/half_layer/CopycatHalfLayerBlock.java b/common/src/main/java/com/copycatsplus/copycats/content/copycat/half_layer/CopycatHalfLayerBlock.java index 71720aa71..02549422c 100644 --- a/common/src/main/java/com/copycatsplus/copycats/content/copycat/half_layer/CopycatHalfLayerBlock.java +++ b/common/src/main/java/com/copycatsplus/copycats/content/copycat/half_layer/CopycatHalfLayerBlock.java @@ -7,6 +7,7 @@ import com.copycatsplus.copycats.foundation.copycat.model.ScaledBlockAndTintGetter; import com.copycatsplus.copycats.foundation.copycat.multistate.WaterloggedMultiStateCopycatBlock; import com.google.common.collect.ImmutableMap; +import com.mojang.math.OctahedralGroup; import com.simibubi.create.content.contraptions.StructureTransform; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; @@ -278,8 +279,10 @@ public void transformStorage(BlockState state, IMultiStateCopycatBlockEntity be, be.getMaterialItemStorage().remapStorage(s -> s.equals(POSITIVE_LAYERS.getName()) ? NEGATIVE_LAYERS.getName() : POSITIVE_LAYERS.getName()); } } - if (transform.mirror == Mirror.FRONT_BACK && axis == Axis.Z || transform.mirror == Mirror.LEFT_RIGHT && axis == Axis.X) { - be.getMaterialItemStorage().remapStorage(s -> s.equals(POSITIVE_LAYERS.getName()) ? NEGATIVE_LAYERS.getName() : POSITIVE_LAYERS.getName()); + if (transform.mirror != null) { + if (transform.mirror.rotation() == OctahedralGroup.INVERT_Z && axis == Axis.Z || transform.mirror.rotation() == OctahedralGroup.INVERT_X && axis == Axis.X) { + be.getMaterialItemStorage().remapStorage(s -> s.equals(POSITIVE_LAYERS.getName()) ? NEGATIVE_LAYERS.getName() : POSITIVE_LAYERS.getName()); + } } } @@ -296,8 +299,8 @@ protected void createBlockStateDefinition(StateDefinition.Builder s.equals(Half.BOTTOM.getSerializedName()) ? Half.TOP.getSerializedName() : Half.BOTTOM.getSerializedName()); + if (transform.mirror != null) { + if (transform.mirror.rotation() == OctahedralGroup.INVERT_Z && axis == Axis.Z || transform.mirror.rotation() == OctahedralGroup.INVERT_X && axis == Axis.X) { + be.getMaterialItemStorage().remapStorage(s -> s.equals(Half.BOTTOM.getSerializedName()) ? Half.TOP.getSerializedName() : Half.BOTTOM.getSerializedName()); + } } } diff --git a/common/src/main/java/com/copycatsplus/copycats/content/copycat/vertical_slice/CopycatVerticalSliceBlock.java b/common/src/main/java/com/copycatsplus/copycats/content/copycat/vertical_slice/CopycatVerticalSliceBlock.java index 72f2903b7..05dce6c9f 100644 --- a/common/src/main/java/com/copycatsplus/copycats/content/copycat/vertical_slice/CopycatVerticalSliceBlock.java +++ b/common/src/main/java/com/copycatsplus/copycats/content/copycat/vertical_slice/CopycatVerticalSliceBlock.java @@ -240,7 +240,7 @@ public boolean hidesNeighborFace(BlockGetter level, } } if (mirrorAxis == null || mirrorAxis.isVertical()) { - return super.mirror(pState, pMirror); + return pState; } Direction facing = pState.getValue(FACING); if (facing.getAxis() != mirrorAxis) { diff --git a/common/src/main/java/com/copycatsplus/copycats/content/copycat/vertical_slope/CopycatVerticalSlopeBlock.java b/common/src/main/java/com/copycatsplus/copycats/content/copycat/vertical_slope/CopycatVerticalSlopeBlock.java index 3040201b8..78e4cd0c7 100644 --- a/common/src/main/java/com/copycatsplus/copycats/content/copycat/vertical_slope/CopycatVerticalSlopeBlock.java +++ b/common/src/main/java/com/copycatsplus/copycats/content/copycat/vertical_slope/CopycatVerticalSlopeBlock.java @@ -224,7 +224,7 @@ public boolean hidesNeighborFace(BlockGetter level, BlockPos pos, BlockState sta } } if (mirrorAxis == null || mirrorAxis.isVertical()) { - return super.mirror(pState, pMirror); + return pState; } Direction facing = pState.getValue(FACING); if (facing.getAxis() != mirrorAxis) { diff --git a/common/src/main/java/com/copycatsplus/copycats/content/copycat/vertical_stairs/CopycatVerticalStairBlock.java b/common/src/main/java/com/copycatsplus/copycats/content/copycat/vertical_stairs/CopycatVerticalStairBlock.java index 8959963db..3514a2679 100644 --- a/common/src/main/java/com/copycatsplus/copycats/content/copycat/vertical_stairs/CopycatVerticalStairBlock.java +++ b/common/src/main/java/com/copycatsplus/copycats/content/copycat/vertical_stairs/CopycatVerticalStairBlock.java @@ -190,9 +190,9 @@ public static boolean isStairs(BlockState state) { public @NotNull BlockState mirror(@NotNull BlockState state, @NotNull Mirror mirror) { Direction facing = state.getValue(FACING); Side side = state.getValue(SIDE); - Axis axis = switch (mirror) { - case LEFT_RIGHT -> Axis.X; - case FRONT_BACK -> Axis.Z; + Axis axis = switch (mirror.rotation()) { + case INVERT_X -> Axis.X; + case INVERT_Z -> Axis.Z; default -> Axis.Y; }; if (axis == Axis.Y) return state; diff --git a/common/src/main/java/com/copycatsplus/copycats/content/copycat/vertical_step/CopycatVerticalStepBlock.java b/common/src/main/java/com/copycatsplus/copycats/content/copycat/vertical_step/CopycatVerticalStepBlock.java index 3671a9728..151fb63e3 100644 --- a/common/src/main/java/com/copycatsplus/copycats/content/copycat/vertical_step/CopycatVerticalStepBlock.java +++ b/common/src/main/java/com/copycatsplus/copycats/content/copycat/vertical_step/CopycatVerticalStepBlock.java @@ -193,7 +193,7 @@ public boolean hidesNeighborFace(BlockGetter level, } } if (mirrorAxis == null || mirrorAxis.isVertical()) { - return super.mirror(pState, pMirror); + return pState; } Direction facing = pState.getValue(FACING); if (facing.getAxis() != mirrorAxis) { diff --git a/common/src/main/resources/assets/copycats/lang/hu_hu.json b/common/src/main/resources/assets/copycats/lang/hu_hu.json index 9ed2077f8..bcd08a595 100644 --- a/common/src/main/resources/assets/copycats/lang/hu_hu.json +++ b/common/src/main/resources/assets/copycats/lang/hu_hu.json @@ -2,7 +2,7 @@ "block.copycats.copycat_base": "Imitátor-alap", "block.copycats.copycat_beam": "Imitátor-oszlop", "block.copycats.copycat_block": "Imitátor-blokk", - "block.copycats.copycat_board": "Imitátor-lap", + "block.copycats.copycat_board": "Imitátor-tábla", "block.copycats.copycat_byte": "Imitátor-darabka", "block.copycats.copycat_cogwheel": "Imitátor-fogaskerék", "block.copycats.copycat_door": "Imitátor-ajtó", @@ -10,7 +10,7 @@ "block.copycats.copycat_fence_gate": "Imitátor-kerítéskapu", "block.copycats.copycat_fluid_pipe": "Imitátor-csőszakasz", "block.copycats.copycat_ghost_block": "Imitátor-fantomblokk", - "block.copycats.copycat_glass_fluid_pipe": "Üveg imitátor-csőszakasz", + "block.copycats.copycat_glass_fluid_pipe": "Imitátor-csőszakasz ablakkal", "block.copycats.copycat_half_layer": "Imitátor-félréteg", "block.copycats.copycat_half_panel": "Imitátor-félpanel", "block.copycats.copycat_heavy_weighted_pressure_plate": "Nehéz súlymérő imitátor-nyomólap", @@ -38,7 +38,7 @@ "block.copycats.copycat_wooden_pressure_plate": "Fa imitátor-nyomólap", "block.copycats.wrapped_copycat": "Becsomagolt imitátor-blokk", "item.copycats.copycat_box": "Imitátor-doboz", - "item.copycats.copycat_catwalk": "Imitátor-szervízjárat", + "item.copycats.copycat_catwalk": "Imitátor-szervizjárat", "itemGroup.copycats.functional": "Create: Copycats+ | Használati", "itemGroup.copycats.main": "Create: Copycats+ | Dekorációs", "keyinfo.copycats.fill_copycat": "Imitátor kitöltése", @@ -47,15 +47,15 @@ "tooltip.copycats.characteristics.copycat.description": "Jobb-kattintás anyaggal: kinézet _megadása_ és _forgatása_; csavarkulccsal: _kinézet törlése_.", "tooltip.copycats.characteristics.copycat.title": "Imitátor", "tooltip.copycats.characteristics.ct_toggle.description": "Shift + Jobb-kattintás üres kézzel: _összekapcsolódó textúrák állítása_.", - "tooltip.copycats.characteristics.ct_toggle.title": "Ök. textúra állítás", + "tooltip.copycats.characteristics.ct_toggle.title": "Összekapcsolódó textúrák állítása", "tooltip.copycats.characteristics.functional.description": "_Ugyan az_ a használat, mint a nem imitátor megfelelőknél.", "tooltip.copycats.characteristics.functional.title": "Használati", "tooltip.copycats.characteristics.ghost.description": "_Nincs_ entitásokkal való _ütközés_.", "tooltip.copycats.characteristics.ghost.title": "Fantom", - "tooltip.copycats.characteristics.multi_state.description": "_Több másolat_ elhelyezése különböző anyagokkal egy blokk helyén.", + "tooltip.copycats.characteristics.multi_state.description": "_Több másolat_ elhelyezése különböző anyagokkal egy blokk helyén. Tartsd lenyomva a _%s_-t az összes rész kitöltéséhez.", "tooltip.copycats.characteristics.multi_state.title": "Több állapotú", "tooltip.copycats.characteristics.pre_assembled.description": "_Egyedi darabok_ lebontása lehelyezés után.", "tooltip.copycats.characteristics.pre_assembled.title": "Előre összeállított", - "tooltip.copycats.characteristics.stackable.description": "Ugyanazzal a imitátor-blokkal jobbkattintás: nagyítás.", + "tooltip.copycats.characteristics.stackable.description": "Ugyanazzal a imitátor-blokkal jobb kattintás: nagyítás.", "tooltip.copycats.characteristics.stackable.title": "Halmozható" } \ No newline at end of file diff --git a/fabric/src/main/java/com/copycatsplus/copycats/fabric/mixin/copycat/base/CopycatBlockMixin.java b/fabric/src/main/java/com/copycatsplus/copycats/fabric/mixin/copycat/base/CopycatBlockMixin.java index 80eeb22cf..dba5b9211 100644 --- a/fabric/src/main/java/com/copycatsplus/copycats/fabric/mixin/copycat/base/CopycatBlockMixin.java +++ b/fabric/src/main/java/com/copycatsplus/copycats/fabric/mixin/copycat/base/CopycatBlockMixin.java @@ -22,6 +22,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; +import net.minecraft.tags.BlockTags; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; @@ -142,7 +143,7 @@ public float getEnchantPowerBonus(BlockState state, LevelReader level, BlockPos return maybeMaterialAs( level, pos, EnchantmentBonusBlock.class, (material, block) -> block.getEnchantPowerBonus(material, level, pos), - material -> EnchantmentBonusBlock.super.getEnchantPowerBonus(material, level, pos) + material -> material.is(BlockTags.ENCHANTMENT_POWER_PROVIDER) ? 1f : 0f ); } diff --git a/fabric/src/main/java/com/copycatsplus/copycats/fabric/mixin/copycat/base/multistate/MultiStateCopycatBlockMixin.java b/fabric/src/main/java/com/copycatsplus/copycats/fabric/mixin/copycat/base/multistate/MultiStateCopycatBlockMixin.java index fc6f958b5..cd822bca8 100644 --- a/fabric/src/main/java/com/copycatsplus/copycats/fabric/mixin/copycat/base/multistate/MultiStateCopycatBlockMixin.java +++ b/fabric/src/main/java/com/copycatsplus/copycats/fabric/mixin/copycat/base/multistate/MultiStateCopycatBlockMixin.java @@ -12,6 +12,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; +import net.minecraft.tags.BlockTags; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; @@ -185,7 +186,7 @@ public float getEnchantPowerBonus(BlockState state, LevelReader level, BlockPos bonus.accumulateAndGet( maybeMaterialAs(level, pos, EnchantmentBonusBlock.class, mat, (material, enchantmentBlock) -> enchantmentBlock.getEnchantPowerBonus(material, level, pos), - (material) -> 0f + (material) -> material.is(BlockTags.ENCHANTMENT_POWER_PROVIDER) ? 1f : 0f ), Float::max ); diff --git a/fabric/src/main/java/com/copycatsplus/copycats/foundation/copycat/model/fabric/CopycatModelFabric.java b/fabric/src/main/java/com/copycatsplus/copycats/foundation/copycat/model/fabric/CopycatModelFabric.java index 6de8fe3b9..c2bde9a60 100644 --- a/fabric/src/main/java/com/copycatsplus/copycats/foundation/copycat/model/fabric/CopycatModelFabric.java +++ b/fabric/src/main/java/com/copycatsplus/copycats/foundation/copycat/model/fabric/CopycatModelFabric.java @@ -60,6 +60,11 @@ public CopycatModelFabric(BakedModel originalModel, CopycatModelCore core, boole core.registerModels(entries); } + @Override + public boolean isCustomRenderer() { + return true; // Stops Continuity from trying to wrap this model + } + private void gatherOcclusionData(BlockAndTintGetter world, BlockPos pos, BlockState state, BlockState material, OcclusionData occlusionData, ICopycatBlock copycatBlock) { if (VirtualEmptyBlockGetter.is(world)) diff --git a/forge/src/main/java/com/copycatsplus/copycats/foundation/copycat/model/forge/CopycatModelForge.java b/forge/src/main/java/com/copycatsplus/copycats/foundation/copycat/model/forge/CopycatModelForge.java index 024513b51..add7b541e 100644 --- a/forge/src/main/java/com/copycatsplus/copycats/foundation/copycat/model/forge/CopycatModelForge.java +++ b/forge/src/main/java/com/copycatsplus/copycats/foundation/copycat/model/forge/CopycatModelForge.java @@ -59,6 +59,11 @@ public CopycatModelForge(BakedModel originalModel, CopycatModelCore core, boolea core.registerModels(entries); } + @Override + public boolean isCustomRenderer() { + return true; + } + @Override public boolean useAmbientOcclusion() { return !disableAO && super.useAmbientOcclusion(); @@ -86,7 +91,12 @@ public boolean useAmbientOcclusion(@NotNull BlockState state, @NotNull RenderTyp BakedModel model = getModelForEntry(entry, state, material); if (model == null) continue; - renderTypes = ChunkRenderTypeSet.union(renderTypes, model.getRenderTypes(state, rand, data)); + if (entry.type().useCopycatLogic()) { + if (material != null) + renderTypes = ChunkRenderTypeSet.union(renderTypes, model.getRenderTypes(material, rand, data)); + } else { + renderTypes = ChunkRenderTypeSet.union(renderTypes, model.getRenderTypes(state, rand, data)); + } } return renderTypes; } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 7f93135c4..d64cd4917 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 3fa8f862f..a4413138c 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew.bat b/gradlew.bat index 93e3f59f1..25da30dbd 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -43,11 +43,11 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -57,11 +57,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail diff --git a/update.json b/update.json index 60f7db5d9..b2b5f0dee 100644 --- a/update.json +++ b/update.json @@ -1,8 +1,8 @@ { "homepage": "https://github.com/copycats-plus/copycats/", "promos": { - "1.20.1-recommended": "1.20.1-2.0.4", - "1.19.2-recommended": "1.19.2-2.0.4", - "1.18.2-recommended": "1.18.2-2.0.4" + "1.20.1-recommended": "1.20.1-2.0.5", + "1.19.2-recommended": "1.19.2-2.0.5", + "1.18.2-recommended": "1.18.2-2.0.5" } }