33 lines
1.6 KiB
Java
33 lines
1.6 KiB
Java
|
package net.minecraft.util.datafix.fixes;
|
||
|
|
||
|
import com.mojang.datafixers.DSL;
|
||
|
import com.mojang.datafixers.OpticFinder;
|
||
|
import com.mojang.datafixers.Typed;
|
||
|
import com.mojang.datafixers.schemas.Schema;
|
||
|
import com.mojang.datafixers.types.Type;
|
||
|
import com.mojang.serialization.Dynamic;
|
||
|
|
||
|
public class BlockEntityBlockStateFix extends NamedEntityFix {
|
||
|
public BlockEntityBlockStateFix(Schema p_14810_, boolean p_14811_) {
|
||
|
super(p_14810_, p_14811_, "BlockEntityBlockStateFix", References.BLOCK_ENTITY, "minecraft:piston");
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
protected Typed<?> fix(Typed<?> p_14814_) {
|
||
|
Type<?> type = this.getOutputSchema().getChoiceType(References.BLOCK_ENTITY, "minecraft:piston");
|
||
|
Type<?> type1 = type.findFieldType("blockState");
|
||
|
OpticFinder<?> opticfinder = DSL.fieldFinder("blockState", type1);
|
||
|
Dynamic<?> dynamic = p_14814_.get(DSL.remainderFinder());
|
||
|
int i = dynamic.get("blockId").asInt(0);
|
||
|
dynamic = dynamic.remove("blockId");
|
||
|
int j = dynamic.get("blockData").asInt(0) & 15;
|
||
|
dynamic = dynamic.remove("blockData");
|
||
|
Dynamic<?> dynamic1 = BlockStateData.getTag(i << 4 | j);
|
||
|
Typed<?> typed = type.pointTyped(p_14814_.getOps()).orElseThrow(() -> new IllegalStateException("Could not create new piston block entity."));
|
||
|
return typed.set(DSL.remainderFinder(), dynamic)
|
||
|
.set(
|
||
|
opticfinder,
|
||
|
type1.readTyped(dynamic1).result().orElseThrow(() -> new IllegalStateException("Could not parse newly created block state tag.")).getFirst()
|
||
|
);
|
||
|
}
|
||
|
}
|