From 1d8cd318542fcf217a938f30cda01fe80f0e87fd Mon Sep 17 00:00:00 2001 From: Burkino <24849979+Burkino@users.noreply.github.com> Date: Sat, 4 Jul 2026 10:11:09 -0400 Subject: [PATCH 1/2] Disable Mekanism --- platform/minecraft/gradle.properties | 2 +- .../minecraft/gradle/source-excludes/26.1.2/main-java.txt | 6 ++++++ .../sfm/common/registry/registration/SFMResourceTypes.java | 6 +++--- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/platform/minecraft/gradle.properties b/platform/minecraft/gradle.properties index f1dfe4254..4ae576062 100644 --- a/platform/minecraft/gradle.properties +++ b/platform/minecraft/gradle.properties @@ -14,7 +14,7 @@ minecraft_version=26.1.2 # as they do not follow standard versioning conventions. minecraft_version_range=[26.1, 26.2) # The Neo version must agree with the Minecraft version to get a valid artifact -neo_version=26.1.2.72 +neo_version=26.1.2.74 # The Neo version range can use any version of Neo as bounds neo_version_range=[26.1.2.29-beta,) # The loader version range can only use the major version of FML as bounds diff --git a/platform/minecraft/gradle/source-excludes/26.1.2/main-java.txt b/platform/minecraft/gradle/source-excludes/26.1.2/main-java.txt index 377ca595b..64055fe86 100644 --- a/platform/minecraft/gradle/source-excludes/26.1.2/main-java.txt +++ b/platform/minecraft/gradle/source-excludes/26.1.2/main-java.txt @@ -7,3 +7,9 @@ ca/teamdman/sfm/common/resourcetype/GasResourceType.java ca/teamdman/sfm/common/resourcetype/InfuseResourceType.java ca/teamdman/sfm/common/resourcetype/PigmentResourceType.java ca/teamdman/sfm/common/resourcetype/SlurryResourceType.java + +ca/teamdman/sfm/common/compat/SFMMekanismCompat.java +ca/teamdman/sfm/common/resourcetype/ChemicalResourceType.java +ca/teamdman/sfm/common/program/linting/compat/mekanism/MekanismSidednessProgramLinter.java + +ca/teamdman/sfm/common/capability/CauldronBlockCapabilityProvider.java \ No newline at end of file diff --git a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/registry/registration/SFMResourceTypes.java b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/registry/registration/SFMResourceTypes.java index dc6a3e8b2..b291e7e0f 100644 --- a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/registry/registration/SFMResourceTypes.java +++ b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/registry/registration/SFMResourceTypes.java @@ -2,7 +2,7 @@ import ca.teamdman.sfm.SFM; import ca.teamdman.sfm.common.capability.SFMBlockCapabilityKind; -import ca.teamdman.sfm.common.compat.SFMMekanismCompat; +//import ca.teamdman.sfm.common.compat.SFMMekanismCompat; import ca.teamdman.sfm.common.compat.SFMModCompat; import ca.teamdman.sfm.common.registry.SFMDeferredRegister; import ca.teamdman.sfm.common.registry.SFMDeferredRegisterBuilder; @@ -46,11 +46,11 @@ public class SFMResourceTypes { private static final Object2ObjectOpenHashMap> DEFERRED_TYPES_BY_ID = new Object2ObjectOpenHashMap<>(); - static { +/* static { if (SFMModCompat.isMekanismLoaded()) { SFMMekanismCompat.registerResourceTypes(REGISTERER); } - } + }*/ public static int getResourceTypeCount() { From a2404867ad320bccd3d9723d070c2b55650dced2 Mon Sep 17 00:00:00 2001 From: Burkino <24849979+Burkino@users.noreply.github.com> Date: Thu, 2 Jul 2026 22:51:04 -0400 Subject: [PATCH 2/2] Fixing facades --- .../dependencies/26.1.2/dependencies.gradle | 28 +++++---- .../sfm/common/block/CableFacadeBlock.java | 62 ++++++++++++++----- .../sfm/common/block/FancyCableBlock.java | 2 +- .../common/block/FancyCableFacadeBlock.java | 6 +- .../sfm/common/block/IFacadableBlock.java | 2 - .../common/block/ToughCableFacadeBlock.java | 14 +---- .../block/ToughFancyCableFacadeBlock.java | 8 --- .../block/TunnelledCableFacadeBlock.java | 14 +---- .../block/TunnelledFancyCableFacadeBlock.java | 10 +-- .../blockentity/CommonFacadeBlockEntity.java | 3 + .../common/facade/ApplyFacadesFacadePlan.java | 18 +++--- .../facade/ChangeWorldBlockFacadePlan.java | 34 +++++----- .../sfm/common/facade/FacadeData.java | 17 +++++ .../sfm/common/facade/FacadePlanner.java | 8 +-- .../sfm/common/facade/FacadeProperties.java | 7 +++ .../sfm/common/facade/FacadeTransparency.java | 20 ------ .../sfm/common/facade/IFacadePlan.java | 2 + 17 files changed, 128 insertions(+), 127 deletions(-) create mode 100644 platform/minecraft/src/main/java/ca/teamdman/sfm/common/facade/FacadeProperties.java delete mode 100644 platform/minecraft/src/main/java/ca/teamdman/sfm/common/facade/FacadeTransparency.java diff --git a/platform/minecraft/gradle/dependencies/26.1.2/dependencies.gradle b/platform/minecraft/gradle/dependencies/26.1.2/dependencies.gradle index 9e6c935ec..c66a1e66f 100644 --- a/platform/minecraft/gradle/dependencies/26.1.2/dependencies.gradle +++ b/platform/minecraft/gradle/dependencies/26.1.2/dependencies.gradle @@ -31,18 +31,18 @@ dependencies { // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html // http://www.gradle.org/docs/current/userguide/dependency_management.html - antlr 'org.antlr:antlr4:4.13.1' - jarJar(implementation('org.antlr:antlr4-runtime:4.13.1')) { - version { - strictly '[4.13.1]' - } - } - testImplementation 'com.github.javaparser:javaparser-symbol-solver-core:3.26.4' - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' - testRuntimeOnly 'org.junit.platform:junit-platform-launcher:1.8.1' - - // https://github.com/ollama4j/ollama4j + antlr 'org.antlr:antlr4:4.13.1' + jarJar(implementation('org.antlr:antlr4-runtime:4.13.1')) { + version { + strictly '[4.13.1]' + } + } + testImplementation 'com.github.javaparser:javaparser-symbol-solver-core:3.26.4' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher:1.8.1' + + // https://github.com/ollama4j/ollama4j // jarJar(implementation("io.github.ollama4j:ollama4j")) { // version { // strictly "[1.0.100]" @@ -74,4 +74,8 @@ dependencies { //compileOnly "org.appliedenergistics:appliedenergistics2:19.2.15:api" //implementation "curse.maven:building-gadgets-298187:6850515" + implementation "curse.maven:ctm-lib-1568397:8260644" + implementation "curse.maven:crystalix-1187033:8229127" + implementation "curse.maven:chisel-3-225236:8224767" + implementation "curse.maven:worldedit-225608:8037379" } diff --git a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/block/CableFacadeBlock.java b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/block/CableFacadeBlock.java index 7b5785b3c..cd627331e 100644 --- a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/block/CableFacadeBlock.java +++ b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/block/CableFacadeBlock.java @@ -1,13 +1,17 @@ package ca.teamdman.sfm.common.block; -import ca.teamdman.sfm.common.facade.FacadeTransparency; +import ca.teamdman.sfm.common.facade.FacadeData; +import ca.teamdman.sfm.common.facade.FacadeProperties; import ca.teamdman.sfm.common.localization.LocalizationEntry; import ca.teamdman.sfm.common.localization.SFMLocalizationDatagen; import ca.teamdman.sfm.common.registry.registration.SFMBlockEntities; import ca.teamdman.sfm.common.registry.registration.SFMBlocks; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.BlockAndLightGetter; +import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.EntityBlock; @@ -17,9 +21,9 @@ import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; +import net.neoforged.neoforge.common.extensions.IBlockStateExtension; import org.jetbrains.annotations.Nullable; - public class CableFacadeBlock extends CableBlock implements EntityBlock, IFacadableBlock { @SFMLocalizationDatagen public static final LocalizationEntry CABLE_FACADE_BLOCK = new LocalizationEntry( @@ -28,15 +32,11 @@ public class CableFacadeBlock extends CableBlock implements EntityBlock, IFacada ); public CableFacadeBlock(Properties properties) { - super(properties.lightLevel(LightBlock.LIGHT_EMISSION)); registerDefaultState( getStateDefinition() .any() - .setValue( - FacadeTransparency.FACADE_TRANSPARENCY_PROPERTY, - FacadeTransparency.OPAQUE - ) + .setValue(FacadeProperties.SOLID, true) .setValue(LightBlock.LEVEL, 0) ); } @@ -54,10 +54,9 @@ public CableFacadeBlock(Properties properties) { public VoxelShape getOcclusionShape( BlockState pState ) { - // Translucent blocks should have no occlusion - return pState.getValue(FacadeTransparency.FACADE_TRANSPARENCY_PROPERTY) == FacadeTransparency.TRANSLUCENT ? - Shapes.empty() : - Shapes.block(); + return pState.getValue(FacadeProperties.SOLID) ? + Shapes.block() : + Shapes.empty(); } @Override @@ -66,17 +65,46 @@ public ItemStack getCloneItemStack(LevelReader level, BlockPos pos, BlockState s } @Override - public boolean propagatesSkylightDown( - BlockState pState - ) { + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + createFacadeBlockStateDefinition(builder); + builder.add(FacadeProperties.SOLID); + } + + @Override + public BlockState getAppearance(BlockState state, BlockAndLightGetter level, BlockPos pos, Direction side, @Nullable BlockState queryState, @Nullable BlockPos queryPos) { + BlockState mimicState = FacadeData.resolveAppearance(level, pos, state); + if (state == mimicState) { + return super.getAppearance(state, level, pos, side, queryState, queryPos); + } + return mimicState.getAppearance(level, pos, side, queryState, queryPos); + } - return pState.getValue(FacadeTransparency.FACADE_TRANSPARENCY_PROPERTY) == FacadeTransparency.TRANSLUCENT; + @Override + protected boolean propagatesSkylightDown(BlockState state) { + return !state.getValue(FacadeProperties.SOLID); } @Override - protected void createBlockStateDefinition(StateDefinition.Builder builder) { + public boolean supportsExternalFaceHiding(BlockState state) { + return !state.getValue(FacadeProperties.SOLID); + } - createFacadeBlockStateDefinition(builder); + @Override + public boolean hidesNeighborFace( + BlockGetter level, + BlockPos pos, + BlockState state, + BlockState neighborState, + Direction dir + ) { + BlockState ourAppearance = FacadeData.resolveAppearance(level, pos, state); + BlockPos neighborPos = pos.relative(dir); + BlockState neighborAppearance = FacadeData.resolveAppearance(level, neighborPos, neighborState); + return ourAppearance.skipRendering(neighborAppearance, dir); } +/* @Override + protected boolean skipRendering(BlockState state, BlockState neighborState, Direction direction) { + return false; + }*/ } diff --git a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/block/FancyCableBlock.java b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/block/FancyCableBlock.java index 8695b0533..b0023fc2a 100644 --- a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/block/FancyCableBlock.java +++ b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/block/FancyCableBlock.java @@ -75,7 +75,7 @@ public class FancyCableBlock extends CableBlock implements IFacadableBlock, Simp public FancyCableBlock(Properties properties) { - super(properties); + super(properties.noOcclusion()); registerDefaultState( defaultBlockState() .setValue(WATERLOGGED, false) diff --git a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/block/FancyCableFacadeBlock.java b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/block/FancyCableFacadeBlock.java index bd1d8914c..4ddcb37af 100644 --- a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/block/FancyCableFacadeBlock.java +++ b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/block/FancyCableFacadeBlock.java @@ -1,6 +1,5 @@ package ca.teamdman.sfm.common.block; -import ca.teamdman.sfm.common.facade.FacadeTransparency; import ca.teamdman.sfm.common.registry.registration.SFMBlockEntities; import ca.teamdman.sfm.common.registry.registration.SFMBlocks; import ca.teamdman.sfm.common.util.MCVersionDependentBehaviour; @@ -14,14 +13,15 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; +import net.neoforged.neoforge.common.extensions.IBlockStateExtension; import org.jetbrains.annotations.Nullable; public class FancyCableFacadeBlock extends FancyCableBlock implements EntityBlock, IFacadableBlock { public FancyCableFacadeBlock(Properties properties) { super(properties.lightLevel(LightBlock.LIGHT_EMISSION)); registerDefaultState( - defaultBlockState() - .setValue(FacadeTransparency.FACADE_TRANSPARENCY_PROPERTY, FacadeTransparency.TRANSLUCENT) + getStateDefinition() + .any() .setValue(LightBlock.LEVEL, 0) ); } diff --git a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/block/IFacadableBlock.java b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/block/IFacadableBlock.java index 92c8920ae..36f360345 100644 --- a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/block/IFacadableBlock.java +++ b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/block/IFacadableBlock.java @@ -1,6 +1,5 @@ package ca.teamdman.sfm.common.block; -import ca.teamdman.sfm.common.facade.FacadeTransparency; import net.minecraft.core.BlockPos; import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.block.Block; @@ -19,7 +18,6 @@ BlockState getStateForPlacementByFacadePlan( ); default void createFacadeBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(FacadeTransparency.FACADE_TRANSPARENCY_PROPERTY); builder.add(LightBlock.LEVEL); } } diff --git a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/block/ToughCableFacadeBlock.java b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/block/ToughCableFacadeBlock.java index a5ecd8f7f..a454379c7 100644 --- a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/block/ToughCableFacadeBlock.java +++ b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/block/ToughCableFacadeBlock.java @@ -2,7 +2,6 @@ import ca.teamdman.sfm.common.blockentity.IFacadeBlockEntity; import ca.teamdman.sfm.common.facade.FacadeData; -import ca.teamdman.sfm.common.facade.FacadeTransparency; import ca.teamdman.sfm.common.localization.LocalizationEntry; import ca.teamdman.sfm.common.localization.SFMLocalizationDatagen; import ca.teamdman.sfm.common.registry.registration.SFMBlockEntities; @@ -16,7 +15,6 @@ import net.minecraft.world.level.Explosion; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.EntityBlock; -import net.minecraft.world.level.block.LightBlock; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.Nullable; @@ -35,17 +33,7 @@ public class ToughCableFacadeBlock extends CableFacadeBlock implements EntityBlo ); public ToughCableFacadeBlock(Properties properties) { - - super(properties.lightLevel(LightBlock.LIGHT_EMISSION)); - registerDefaultState( - getStateDefinition() - .any() - .setValue( - FacadeTransparency.FACADE_TRANSPARENCY_PROPERTY, - FacadeTransparency.OPAQUE - ) - .setValue(LightBlock.LEVEL, 0) - ); + super(properties); } @Override diff --git a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/block/ToughFancyCableFacadeBlock.java b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/block/ToughFancyCableFacadeBlock.java index c86317322..2c948062d 100644 --- a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/block/ToughFancyCableFacadeBlock.java +++ b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/block/ToughFancyCableFacadeBlock.java @@ -1,6 +1,5 @@ package ca.teamdman.sfm.common.block; -import ca.teamdman.sfm.common.facade.FacadeTransparency; import ca.teamdman.sfm.common.localization.LocalizationEntry; import ca.teamdman.sfm.common.localization.SFMLocalizationDatagen; import ca.teamdman.sfm.common.registry.registration.SFMBlockEntities; @@ -14,7 +13,6 @@ import net.minecraft.world.level.Explosion; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.EntityBlock; -import net.minecraft.world.level.block.LightBlock; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.Nullable; @@ -30,13 +28,7 @@ public class ToughFancyCableFacadeBlock extends FancyCableFacadeBlock implements ); public ToughFancyCableFacadeBlock(Properties properties) { - super(properties); - registerDefaultState( - defaultBlockState() - .setValue(FacadeTransparency.FACADE_TRANSPARENCY_PROPERTY, FacadeTransparency.TRANSLUCENT) - .setValue(LightBlock.LEVEL, 0) - ); } @Override diff --git a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/block/TunnelledCableFacadeBlock.java b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/block/TunnelledCableFacadeBlock.java index bbabc534f..7191c100f 100644 --- a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/block/TunnelledCableFacadeBlock.java +++ b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/block/TunnelledCableFacadeBlock.java @@ -1,6 +1,5 @@ package ca.teamdman.sfm.common.block; -import ca.teamdman.sfm.common.facade.FacadeTransparency; import ca.teamdman.sfm.common.localization.LocalizationEntry; import ca.teamdman.sfm.common.localization.SFMLocalizationDatagen; import ca.teamdman.sfm.common.registry.registration.SFMBlockEntities; @@ -11,7 +10,6 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.EntityBlock; -import net.minecraft.world.level.block.LightBlock; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.Nullable; @@ -24,17 +22,7 @@ public class TunnelledCableFacadeBlock extends CableFacadeBlock implements Entit ); public TunnelledCableFacadeBlock(Properties properties) { - - super(properties.lightLevel(LightBlock.LIGHT_EMISSION)); - registerDefaultState( - getStateDefinition() - .any() - .setValue( - FacadeTransparency.FACADE_TRANSPARENCY_PROPERTY, - FacadeTransparency.OPAQUE - ) - .setValue(LightBlock.LEVEL, 0) - ); + super(properties); } @Override diff --git a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/block/TunnelledFancyCableFacadeBlock.java b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/block/TunnelledFancyCableFacadeBlock.java index 8e088de08..fe21ac4f2 100644 --- a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/block/TunnelledFancyCableFacadeBlock.java +++ b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/block/TunnelledFancyCableFacadeBlock.java @@ -1,6 +1,5 @@ package ca.teamdman.sfm.common.block; -import ca.teamdman.sfm.common.facade.FacadeTransparency; import ca.teamdman.sfm.common.localization.LocalizationEntry; import ca.teamdman.sfm.common.localization.SFMLocalizationDatagen; import ca.teamdman.sfm.common.registry.registration.SFMBlockEntities; @@ -11,7 +10,6 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.EntityBlock; -import net.minecraft.world.level.block.LightBlock; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.Nullable; @@ -24,13 +22,7 @@ public class TunnelledFancyCableFacadeBlock extends FancyCableFacadeBlock implem ); public TunnelledFancyCableFacadeBlock(Properties properties) { - - super(properties.lightLevel(LightBlock.LIGHT_EMISSION)); - registerDefaultState( - defaultBlockState() - .setValue(FacadeTransparency.FACADE_TRANSPARENCY_PROPERTY, FacadeTransparency.TRANSLUCENT) - .setValue(LightBlock.LEVEL, 0) - ); + super(properties); } @Override diff --git a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/blockentity/CommonFacadeBlockEntity.java b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/blockentity/CommonFacadeBlockEntity.java index d11b5d8f9..6f033e81e 100644 --- a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/blockentity/CommonFacadeBlockEntity.java +++ b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/blockentity/CommonFacadeBlockEntity.java @@ -42,6 +42,7 @@ public void updateFacadeData( if (level != null) { BlockState state = getBlockState(); level.sendBlockUpdated(worldPosition, state, state, Block.UPDATE_IMMEDIATE); + level.getLightEngine().checkBlock(worldPosition); } requestModelDataUpdate(); } @@ -58,6 +59,8 @@ protected void loadAdditional( if (tried != null) { this.facadeData = tried; requestModelDataUpdate(); + if (level != null) + level.getLightEngine().checkBlock(worldPosition); } } diff --git a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/facade/ApplyFacadesFacadePlan.java b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/facade/ApplyFacadesFacadePlan.java index 19c5bf870..2eadd17cb 100644 --- a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/facade/ApplyFacadesFacadePlan.java +++ b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/facade/ApplyFacadesFacadePlan.java @@ -1,7 +1,7 @@ package ca.teamdman.sfm.common.facade; import ca.teamdman.sfm.SFM; -import ca.teamdman.sfm.common.block.IFacadableBlock; +import ca.teamdman.sfm.common.block.*; import ca.teamdman.sfm.common.blockentity.IFacadeBlockEntity; import ca.teamdman.sfm.common.localization.LocalizationEntry; import ca.teamdman.sfm.common.localization.SFMLocalizationDatagen; @@ -14,13 +14,9 @@ import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.Nullable; -import static ca.teamdman.sfm.common.facade.FacadeTransparency.FACADE_TRANSPARENCY_PROPERTY; public record ApplyFacadesFacadePlan( FacadeData facadeData, - - FacadeTransparency facadeTransparency, - BlockPosSet positions ) implements IFacadePlan { @SFMLocalizationDatagen @@ -42,12 +38,20 @@ public void apply(Level level) { BlockState blockState = level.getBlockState(pos); Block block = blockState.getBlock(); if (block instanceof IFacadableBlock facadableBlock) { + BlockState facadeBlockState = facadeData.facadeBlockState(); BlockState nextBlockState = facadableBlock .getFacadeBlock() .getStateForPlacementByFacadePlan(level, pos) - .setValue(FACADE_TRANSPARENCY_PROPERTY, this.facadeTransparency()) - .setValue(LightBlock.LEVEL, facadeData.facadeBlockState().getLightEmission(level, pos)); + .setValue(LightBlock.LEVEL, facadeBlockState.getLightEmission(level, pos)); + + if ( + facadableBlock instanceof CableBlock && !(facadableBlock instanceof FancyCableBlock) + ) { + nextBlockState = nextBlockState.setValue(FacadeProperties.SOLID, facadeBlockState.isSolidRender()); + } + level.setBlock(pos, nextBlockState, Block.UPDATE_IMMEDIATE | Block.UPDATE_CLIENTS); + BlockEntity blockEntity = level.getBlockEntity(pos); if (blockEntity instanceof IFacadeBlockEntity facadeBlockEntity) { facadeBlockEntity.updateFacadeData(this.facadeData()); diff --git a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/facade/ChangeWorldBlockFacadePlan.java b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/facade/ChangeWorldBlockFacadePlan.java index cb73e4425..6f569c5ff 100644 --- a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/facade/ChangeWorldBlockFacadePlan.java +++ b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/facade/ChangeWorldBlockFacadePlan.java @@ -1,6 +1,8 @@ package ca.teamdman.sfm.common.facade; import ca.teamdman.sfm.SFM; +import ca.teamdman.sfm.common.block.CableBlock; +import ca.teamdman.sfm.common.block.FancyCableBlock; import ca.teamdman.sfm.common.block.IFacadableBlock; import ca.teamdman.sfm.common.blockentity.IFacadeBlockEntity; import ca.teamdman.sfm.common.localization.LocalizationEntry; @@ -14,8 +16,6 @@ import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.Nullable; -import static ca.teamdman.sfm.common.facade.FacadeTransparency.FACADE_TRANSPARENCY_PROPERTY; - public record ChangeWorldBlockFacadePlan( IFacadableBlock worldBlock, @@ -41,25 +41,27 @@ public void apply(Level level) { // this position already has a facade // get the old state - BlockState oldState = level.getBlockState(pos); FacadeData oldFacadeData = oldFacadeBlockEntity.getFacadeData(); // if the old state is valid, we can set the new world block and restore the facade - if (oldFacadeData != null && oldState.hasProperty(FACADE_TRANSPARENCY_PROPERTY)) { + if (oldFacadeData != null) { + BlockState facadeBlockState = oldFacadeData.facadeBlockState(); + + BlockState nextBlockState = this.worldBlock() + .getFacadeBlock() + .getStateForPlacementByFacadePlan(level, pos) + .setValue(LightBlock.LEVEL, facadeBlockState.getLightEmission(level, pos)); + + + if ( + nextBlockState.getBlock() instanceof CableBlock && !(nextBlockState.getBlock() instanceof FancyCableBlock) + ) { + nextBlockState = nextBlockState.setValue(FacadeProperties.SOLID, facadeBlockState.isSolidRender()); + } + level.setBlock( pos, - this - .worldBlock() - .getFacadeBlock() - .getStateForPlacementByFacadePlan(level, pos) - .setValue( - FACADE_TRANSPARENCY_PROPERTY, - oldState.getValue(FACADE_TRANSPARENCY_PROPERTY) - ) - .setValue( - LightBlock.LEVEL, - oldState.getValue(LightBlock.LEVEL) - ), + nextBlockState, Block.UPDATE_IMMEDIATE | Block.UPDATE_CLIENTS ); BlockEntity blockEntity = level.getBlockEntity(pos); diff --git a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/facade/FacadeData.java b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/facade/FacadeData.java index 4e58c9c17..a96526785 100644 --- a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/facade/FacadeData.java +++ b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/facade/FacadeData.java @@ -1,6 +1,9 @@ package ca.teamdman.sfm.common.facade; +import ca.teamdman.sfm.common.blockentity.IFacadeBlockEntity; +import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.ValueInput; @@ -34,6 +37,20 @@ public void save(ValueOutput output) { return null; } + public static BlockState resolveAppearance( + BlockGetter level, + BlockPos pos, + BlockState actualState + ) { + if (level.getBlockEntity(pos) instanceof IFacadeBlockEntity facadeBlockEntity) { + FacadeData data = facadeBlockEntity.getFacadeData(); + if (data != null) { + return data.facadeBlockState(); + } + } + return actualState; + } + /** * See {@link net.minecraft.world.level.block.piston.MovingPistonBlock::load} */ diff --git a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/facade/FacadePlanner.java b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/facade/FacadePlanner.java index 3ce803888..f87306807 100644 --- a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/facade/FacadePlanner.java +++ b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/facade/FacadePlanner.java @@ -81,16 +81,12 @@ public class FacadePlanner { )), renderBlock.defaultBlockState() ); - FacadeTransparency facadeTransparency = renderBlockState.isSolidRender() - ? FacadeTransparency.OPAQUE - : FacadeTransparency.TRANSLUCENT; return new ApplyFacadesFacadePlan( new FacadeData( renderBlockState, msg.hitResult().getDirection(), FacadeTextureMode.FILL ), - facadeTransparency, getPositions(level, msg, hitPos, hitBlock) ); } @@ -119,7 +115,7 @@ private static BlockPosSet getPositions( .filter(cablePos -> { if ( level.getBlockEntity(cablePos) instanceof IFacadeBlockEntity otherFacadeBlockEntity - && otherFacadeBlockEntity.getClass().equals(existingFacadeBlockEntityClass) + && otherFacadeBlockEntity.getClass().equals(existingFacadeBlockEntityClass) ) { return Objects.equals(otherFacadeBlockEntity.getFacadeData(), existingFacadeData); } else { @@ -155,7 +151,7 @@ private static BlockPosSet getPositions( } if ( level.getBlockEntity(neighbour) instanceof IFacadeBlockEntity otherCableFacadeBlockEntity - && otherCableFacadeBlockEntity.getClass().equals(existingFacadeBlockEntityClass) + && otherCableFacadeBlockEntity.getClass().equals(existingFacadeBlockEntityClass) ) { FacadeData otherFacadeData = otherCableFacadeBlockEntity.getFacadeData(); return Objects.equals(otherFacadeData, existingFacadeData); diff --git a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/facade/FacadeProperties.java b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/facade/FacadeProperties.java new file mode 100644 index 000000000..bb0e7721e --- /dev/null +++ b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/facade/FacadeProperties.java @@ -0,0 +1,7 @@ +package ca.teamdman.sfm.common.facade; + +import net.minecraft.world.level.block.state.properties.BooleanProperty; + +public final class FacadeProperties { + public static final BooleanProperty SOLID = BooleanProperty.create("solid"); +} diff --git a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/facade/FacadeTransparency.java b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/facade/FacadeTransparency.java deleted file mode 100644 index c801b105b..000000000 --- a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/facade/FacadeTransparency.java +++ /dev/null @@ -1,20 +0,0 @@ -package ca.teamdman.sfm.common.facade; - -import net.minecraft.util.StringRepresentable; -import net.minecraft.world.level.block.state.properties.EnumProperty; - -public enum FacadeTransparency implements StringRepresentable { - OPAQUE, TRANSLUCENT; - public static final EnumProperty FACADE_TRANSPARENCY_PROPERTY = EnumProperty.create("facade_transparency", FacadeTransparency.class); - - FacadeTransparency() { - } - - @Override - public String getSerializedName() { - return switch (this) { - case OPAQUE -> "opaque"; - case TRANSLUCENT -> "translucent"; - }; - } -} \ No newline at end of file diff --git a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/facade/IFacadePlan.java b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/facade/IFacadePlan.java index dea6c2879..b6b7a5958 100644 --- a/platform/minecraft/src/main/java/ca/teamdman/sfm/common/facade/IFacadePlan.java +++ b/platform/minecraft/src/main/java/ca/teamdman/sfm/common/facade/IFacadePlan.java @@ -7,6 +7,8 @@ public interface IFacadePlan { void apply(Level level); + BlockPosSet positions(); + @Nullable ConfirmationParams computeWarning(Level level); }