50 lines
2 KiB
Java
50 lines
2 KiB
Java
package net.minecraft.util.datafix.fixes;
|
|
|
|
import com.mojang.datafixers.DSL;
|
|
import com.mojang.datafixers.DataFix;
|
|
import com.mojang.datafixers.TypeRewriteRule;
|
|
import com.mojang.datafixers.schemas.Schema;
|
|
import com.mojang.serialization.Dynamic;
|
|
|
|
public class RedstoneWireConnectionsFix extends DataFix {
|
|
public RedstoneWireConnectionsFix(Schema outputSchema) {
|
|
super(outputSchema, false);
|
|
}
|
|
|
|
@Override
|
|
protected TypeRewriteRule makeRule() {
|
|
Schema schema = this.getInputSchema();
|
|
return this.fixTypeEverywhereTyped(
|
|
"RedstoneConnectionsFix", schema.getType(References.BLOCK_STATE), typed -> typed.update(DSL.remainderFinder(), this::updateRedstoneConnections)
|
|
);
|
|
}
|
|
|
|
private <T> Dynamic<T> updateRedstoneConnections(Dynamic<T> dynamic) {
|
|
boolean bl = dynamic.get("Name").asString().result().filter("minecraft:redstone_wire"::equals).isPresent();
|
|
return !bl
|
|
? dynamic
|
|
: dynamic.update(
|
|
"Properties",
|
|
dynamicx -> {
|
|
String string = dynamicx.get("east").asString("none");
|
|
String string2 = dynamicx.get("west").asString("none");
|
|
String string3 = dynamicx.get("north").asString("none");
|
|
String string4 = dynamicx.get("south").asString("none");
|
|
boolean blx = isConnected(string) || isConnected(string2);
|
|
boolean bl2 = isConnected(string3) || isConnected(string4);
|
|
String string5 = !isConnected(string) && !bl2 ? "side" : string;
|
|
String string6 = !isConnected(string2) && !bl2 ? "side" : string2;
|
|
String string7 = !isConnected(string3) && !blx ? "side" : string3;
|
|
String string8 = !isConnected(string4) && !blx ? "side" : string4;
|
|
return dynamicx.update("east", dynamicxx -> dynamicxx.createString(string5))
|
|
.update("west", dynamicxx -> dynamicxx.createString(string6))
|
|
.update("north", dynamicxx -> dynamicxx.createString(string7))
|
|
.update("south", dynamicxx -> dynamicxx.createString(string8));
|
|
}
|
|
);
|
|
}
|
|
|
|
private static boolean isConnected(String state) {
|
|
return !"none".equals(state);
|
|
}
|
|
}
|