diff --git a/src/main/java/fi/dy/masa/litematica/schematic/conversion/SchematicConversionFixers.java b/src/main/java/fi/dy/masa/litematica/schematic/conversion/SchematicConversionFixers.java index 44198224..8694e27b 100644 --- a/src/main/java/fi/dy/masa/litematica/schematic/conversion/SchematicConversionFixers.java +++ b/src/main/java/fi/dy/masa/litematica/schematic/conversion/SchematicConversionFixers.java @@ -32,12 +32,14 @@ import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtList; import net.minecraft.state.property.BooleanProperty; +import net.minecraft.state.property.Properties; import net.minecraft.util.DyeColor; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; import net.minecraft.util.math.MathHelper; import net.minecraft.world.BlockView; +import fi.dy.masa.litematica.Litematica; import fi.dy.masa.litematica.mixin.IMixinFenceGateBlock; import fi.dy.masa.litematica.mixin.IMixinRedstoneWireBlock; import fi.dy.masa.litematica.mixin.IMixinStairsBlock; @@ -345,15 +347,20 @@ public class SchematicConversionFixers public static final IStateFixer FIXER_REDSTONE_WIRE = (reader, state, pos) -> { RedstoneWireBlock wire = (RedstoneWireBlock) state.getBlock(); - state = ((IMixinRedstoneWireBlock) wire).litematicaGetPlacementState(reader, state, pos); + BlockState stateAdj = ((IMixinRedstoneWireBlock) wire).litematicaGetPlacementState(reader, state, pos); + if (stateAdj.equals(state) == false) + { + // Vanilla breaks Redstone connections when it doesn't detect the neighbor being powered + stateAdj = state; + } // Turn all old dots into crosses, while keeping the power level - if (state.equals(REDSTONE_WIRE_DOT) == false && state.with(RedstoneWireBlock.POWER, 0) == REDSTONE_WIRE_DOT_OLD) + if (stateAdj.equals(REDSTONE_WIRE_DOT) == false && stateAdj.with(RedstoneWireBlock.POWER, 0) == REDSTONE_WIRE_DOT_OLD) { - state = REDSTONE_WIRE_CROSS.with(RedstoneWireBlock.POWER, state.get(RedstoneWireBlock.POWER)); + stateAdj = REDSTONE_WIRE_CROSS.with(RedstoneWireBlock.POWER, stateAdj.get(RedstoneWireBlock.POWER)); } - return state; + return stateAdj; }; public static final IStateFixer FIXER_SIGN = (reader, state, pos) -> { diff --git a/src/main/java/fi/dy/masa/litematica/schematic/conversion/SchematicConverter.java b/src/main/java/fi/dy/masa/litematica/schematic/conversion/SchematicConverter.java index 2b67078b..8e50b45d 100644 --- a/src/main/java/fi/dy/masa/litematica/schematic/conversion/SchematicConverter.java +++ b/src/main/java/fi/dy/masa/litematica/schematic/conversion/SchematicConverter.java @@ -1,53 +1,19 @@ package fi.dy.masa.litematica.schematic.conversion; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashMap; -import java.util.IdentityHashMap; -import java.util.Map; +import java.util.*; import javax.annotation.Nullable; -import net.minecraft.block.BannerBlock; -import net.minecraft.block.BedBlock; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.block.ChorusPlantBlock; -import net.minecraft.block.DoorBlock; -import net.minecraft.block.FenceBlock; -import net.minecraft.block.FenceGateBlock; -import net.minecraft.block.FireBlock; -import net.minecraft.block.FlowerPotBlock; -import net.minecraft.block.GrassBlock; -import net.minecraft.block.MyceliumBlock; -import net.minecraft.block.NoteBlock; -import net.minecraft.block.PaneBlock; -import net.minecraft.block.RedstoneWireBlock; -import net.minecraft.block.RepeaterBlock; -import net.minecraft.block.SignBlock; -import net.minecraft.block.SkullBlock; -import net.minecraft.block.SnowyBlock; -import net.minecraft.block.StainedGlassPaneBlock; -import net.minecraft.block.StairsBlock; -import net.minecraft.block.StemBlock; -import net.minecraft.block.TallFlowerBlock; -import net.minecraft.block.TallPlantBlock; -import net.minecraft.block.TripwireBlock; -import net.minecraft.block.VineBlock; -import net.minecraft.block.WallBannerBlock; -import net.minecraft.block.WallBlock; -import net.minecraft.block.WallSignBlock; -import net.minecraft.block.WallSkullBlock; +import net.minecraft.block.*; import net.minecraft.block.entity.BlockEntity; import net.minecraft.fluid.FluidState; import net.minecraft.nbt.NbtCompound; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3i; -import fi.dy.masa.litematica.schematic.container.LitematicaBlockStateContainer; -import fi.dy.masa.litematica.schematic.conversion.SchematicConversionFixers.IStateFixer; import fi.dy.masa.malilib.gui.Message.MessageType; import fi.dy.masa.malilib.util.InfoUtils; +import fi.dy.masa.litematica.schematic.container.LitematicaBlockStateContainer; +import fi.dy.masa.litematica.schematic.conversion.SchematicConversionFixers.IStateFixer; public class SchematicConverter {