66 lines
3.1 KiB
Java
66 lines
3.1 KiB
Java
package net.minecraft.util.datafix.fixes;
|
|
|
|
import com.mojang.datafixers.DSL;
|
|
import com.mojang.datafixers.DataFix;
|
|
import com.mojang.datafixers.OpticFinder;
|
|
import com.mojang.datafixers.TypeRewriteRule;
|
|
import com.mojang.datafixers.Typed;
|
|
import com.mojang.datafixers.schemas.Schema;
|
|
import com.mojang.datafixers.types.Type;
|
|
import com.mojang.serialization.Dynamic;
|
|
|
|
public class EntityPaintingItemFrameDirectionFix extends DataFix {
|
|
private static final int[][] DIRECTIONS = new int[][]{{0, 0, 1}, {-1, 0, 0}, {0, 0, -1}, {1, 0, 0}};
|
|
|
|
public EntityPaintingItemFrameDirectionFix(Schema p_15499_, boolean p_15500_) {
|
|
super(p_15499_, p_15500_);
|
|
}
|
|
|
|
private Dynamic<?> doFix(Dynamic<?> p_15510_, boolean p_15511_, boolean p_15512_) {
|
|
if ((p_15511_ || p_15512_) && p_15510_.get("Facing").asNumber().result().isEmpty()) {
|
|
int i;
|
|
if (p_15510_.get("Direction").asNumber().result().isPresent()) {
|
|
i = p_15510_.get("Direction").asByte((byte)0) % DIRECTIONS.length;
|
|
int[] aint = DIRECTIONS[i];
|
|
p_15510_ = p_15510_.set("TileX", p_15510_.createInt(p_15510_.get("TileX").asInt(0) + aint[0]));
|
|
p_15510_ = p_15510_.set("TileY", p_15510_.createInt(p_15510_.get("TileY").asInt(0) + aint[1]));
|
|
p_15510_ = p_15510_.set("TileZ", p_15510_.createInt(p_15510_.get("TileZ").asInt(0) + aint[2]));
|
|
p_15510_ = p_15510_.remove("Direction");
|
|
if (p_15512_ && p_15510_.get("ItemRotation").asNumber().result().isPresent()) {
|
|
p_15510_ = p_15510_.set("ItemRotation", p_15510_.createByte((byte)(p_15510_.get("ItemRotation").asByte((byte)0) * 2)));
|
|
}
|
|
} else {
|
|
i = p_15510_.get("Dir").asByte((byte)0) % DIRECTIONS.length;
|
|
p_15510_ = p_15510_.remove("Dir");
|
|
}
|
|
|
|
p_15510_ = p_15510_.set("Facing", p_15510_.createByte((byte)i));
|
|
}
|
|
|
|
return p_15510_;
|
|
}
|
|
|
|
@Override
|
|
public TypeRewriteRule makeRule() {
|
|
Type<?> type = this.getInputSchema().getChoiceType(References.ENTITY, "Painting");
|
|
OpticFinder<?> opticfinder = DSL.namedChoice("Painting", type);
|
|
Type<?> type1 = this.getInputSchema().getChoiceType(References.ENTITY, "ItemFrame");
|
|
OpticFinder<?> opticfinder1 = DSL.namedChoice("ItemFrame", type1);
|
|
Type<?> type2 = this.getInputSchema().getType(References.ENTITY);
|
|
TypeRewriteRule typerewriterule = this.fixTypeEverywhereTyped(
|
|
"EntityPaintingFix",
|
|
type2,
|
|
p_15516_ -> p_15516_.updateTyped(
|
|
opticfinder, type, p_145300_ -> p_145300_.update(DSL.remainderFinder(), p_145302_ -> this.doFix(p_145302_, true, false))
|
|
)
|
|
);
|
|
TypeRewriteRule typerewriterule1 = this.fixTypeEverywhereTyped(
|
|
"EntityItemFrameFix",
|
|
type2,
|
|
p_15504_ -> p_15504_.updateTyped(
|
|
opticfinder1, type1, p_145296_ -> p_145296_.update(DSL.remainderFinder(), p_145298_ -> this.doFix(p_145298_, false, true))
|
|
)
|
|
);
|
|
return TypeRewriteRule.seq(typerewriterule, typerewriterule1);
|
|
}
|
|
} |