eagler-1-12-4 / src /game /java /net /minecraft /util /datafix /fixes /BlockEntityBlockStateFix.java
soiz1's picture
Upload folder using huggingface_hub
d46f4a3 verified
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()
);
}
}