minecraft-source/src/net/minecraft/util/datafix/fixes/BlockEntityBlockStateFix.java

31 lines
1.7 KiB
Java

package net.minecraft.util.datafix.fixes;
import com.mojang.datafixers.OpticFinder;
import java.util.Optional;
import com.mojang.datafixers.Dynamic;
import com.mojang.datafixers.types.Type;
import com.mojang.datafixers.DSL;
import com.mojang.datafixers.Typed;
import com.mojang.datafixers.schemas.Schema;
public class BlockEntityBlockStateFix extends NamedEntityFix {
public BlockEntityBlockStateFix(final Schema schema, final boolean boolean2) {
super(schema, boolean2, "BlockEntityBlockStateFix", References.BLOCK_ENTITY, "minecraft:piston");
}
@Override
protected Typed<?> fix(final Typed<?> typed) {
final Type<?> type3 = this.getOutputSchema().getChoiceType(References.BLOCK_ENTITY, "minecraft:piston");
final Type<?> type4 = type3.findFieldType("blockState");
final OpticFinder<?> opticFinder5 = DSL.fieldFinder("blockState", (Type)type4);
Dynamic<?> dynamic6 = typed.get(DSL.remainderFinder());
final int integer7 = dynamic6.get("blockId").asInt(0);
dynamic6 = dynamic6.remove("blockId");
final int integer8 = dynamic6.get("blockData").asInt(0) & 0xF;
dynamic6 = dynamic6.remove("blockData");
final Dynamic<?> dynamic7 = BlockStateData.getTag(integer7 << 4 | integer8);
final Typed<?> typed2 = type3.pointTyped(typed.getOps()).<Throwable>orElseThrow(() -> new IllegalStateException("Could not create new piston block entity."));
return typed2.set(DSL.remainderFinder(), dynamic6).set((OpticFinder)opticFinder5, (Typed)((Optional)type4.readTyped((Dynamic)dynamic7).getSecond()).<Throwable>orElseThrow(() -> new IllegalStateException("Could not parse newly created block state tag.")));
}
}