Skip to content

Commit

Permalink
Fix a vanilla breakage for 'unconnected' Redstone wires during the le…
Browse files Browse the repository at this point in the history
…gacy Redstone Wire Fixer process.
  • Loading branch information
sakura-ryoko committed Aug 17, 2024
1 parent be038e7 commit 0a140e9
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 42 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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) -> {
Expand Down
Original file line number Diff line number Diff line change
@@ -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
{
Expand Down

0 comments on commit 0a140e9

Please sign in to comment.