Code/net/minecraft/util/datafix/fixes/EntityProjectileOwnerFix.java

72 lines
3.5 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.Typed;
import com.mojang.datafixers.schemas.Schema;
import com.mojang.datafixers.types.Type;
import com.mojang.serialization.Dynamic;
import com.mojang.serialization.OptionalDynamic;
import java.util.Arrays;
import java.util.function.Function;
public class EntityProjectileOwnerFix extends DataFix {
public EntityProjectileOwnerFix(Schema p_15558_) {
super(p_15558_, false);
}
@Override
protected TypeRewriteRule makeRule() {
Schema schema = this.getInputSchema();
return this.fixTypeEverywhereTyped("EntityProjectileOwner", schema.getType(References.ENTITY), this::updateProjectiles);
}
private Typed<?> updateProjectiles(Typed<?> p_15563_) {
p_15563_ = this.updateEntity(p_15563_, "minecraft:egg", this::updateOwnerThrowable);
p_15563_ = this.updateEntity(p_15563_, "minecraft:ender_pearl", this::updateOwnerThrowable);
p_15563_ = this.updateEntity(p_15563_, "minecraft:experience_bottle", this::updateOwnerThrowable);
p_15563_ = this.updateEntity(p_15563_, "minecraft:snowball", this::updateOwnerThrowable);
p_15563_ = this.updateEntity(p_15563_, "minecraft:potion", this::updateOwnerThrowable);
p_15563_ = this.updateEntity(p_15563_, "minecraft:llama_spit", this::updateOwnerLlamaSpit);
p_15563_ = this.updateEntity(p_15563_, "minecraft:arrow", this::updateOwnerArrow);
p_15563_ = this.updateEntity(p_15563_, "minecraft:spectral_arrow", this::updateOwnerArrow);
return this.updateEntity(p_15563_, "minecraft:trident", this::updateOwnerArrow);
}
private Dynamic<?> updateOwnerArrow(Dynamic<?> p_15569_) {
long i = p_15569_.get("OwnerUUIDMost").asLong(0L);
long j = p_15569_.get("OwnerUUIDLeast").asLong(0L);
return this.setUUID(p_15569_, i, j).remove("OwnerUUIDMost").remove("OwnerUUIDLeast");
}
private Dynamic<?> updateOwnerLlamaSpit(Dynamic<?> p_15578_) {
OptionalDynamic<?> optionaldynamic = p_15578_.get("Owner");
long i = optionaldynamic.get("OwnerUUIDMost").asLong(0L);
long j = optionaldynamic.get("OwnerUUIDLeast").asLong(0L);
return this.setUUID(p_15578_, i, j).remove("Owner");
}
private Dynamic<?> updateOwnerThrowable(Dynamic<?> p_15582_) {
String s = "owner";
OptionalDynamic<?> optionaldynamic = p_15582_.get("owner");
long i = optionaldynamic.get("M").asLong(0L);
long j = optionaldynamic.get("L").asLong(0L);
return this.setUUID(p_15582_, i, j).remove("owner");
}
private Dynamic<?> setUUID(Dynamic<?> p_15571_, long p_15572_, long p_15573_) {
String s = "OwnerUUID";
return p_15572_ != 0L && p_15573_ != 0L ? p_15571_.set("OwnerUUID", p_15571_.createIntList(Arrays.stream(createUUIDArray(p_15572_, p_15573_)))) : p_15571_;
}
private static int[] createUUIDArray(long p_15560_, long p_15561_) {
return new int[]{(int)(p_15560_ >> 32), (int)p_15560_, (int)(p_15561_ >> 32), (int)p_15561_};
}
private Typed<?> updateEntity(Typed<?> p_15565_, String p_15566_, Function<Dynamic<?>, Dynamic<?>> p_15567_) {
Type<?> type = this.getInputSchema().getChoiceType(References.ENTITY, p_15566_);
Type<?> type1 = this.getOutputSchema().getChoiceType(References.ENTITY, p_15566_);
return p_15565_.updateTyped(DSL.namedChoice(p_15566_, type), type1, p_15576_ -> p_15576_.update(DSL.remainderFinder(), p_15567_));
}
}