When switching bodies you will now inherit the race and abilities of whoever you switch with

This commit is contained in:
Sollace 2022-10-14 16:22:09 +02:00
parent 9a19ed36c1
commit 8b38c54df0
4 changed files with 34 additions and 8 deletions

View file

@ -4,6 +4,7 @@ import com.minelittlepony.unicopia.ability.magic.Caster;
import com.minelittlepony.unicopia.ability.magic.spell.*; import com.minelittlepony.unicopia.ability.magic.spell.*;
import com.minelittlepony.unicopia.ability.magic.spell.trait.Trait; import com.minelittlepony.unicopia.ability.magic.spell.trait.Trait;
import com.minelittlepony.unicopia.entity.EntityReference; import com.minelittlepony.unicopia.entity.EntityReference;
import com.minelittlepony.unicopia.entity.Living;
import com.minelittlepony.unicopia.particle.FollowingParticleEffect; import com.minelittlepony.unicopia.particle.FollowingParticleEffect;
import com.minelittlepony.unicopia.particle.MagicParticleEffect; import com.minelittlepony.unicopia.particle.MagicParticleEffect;
import com.minelittlepony.unicopia.particle.UParticles; import com.minelittlepony.unicopia.particle.UParticles;
@ -120,6 +121,7 @@ public class AttractiveSpell extends ShieldSpell implements ProjectileSpell, Hom
} }
} }
target.setVelocity(x, y, z); target.setVelocity(x, y, z);
Living.updateVelocity(target);
} }
@Override @Override

View file

@ -125,7 +125,7 @@ public class UHud extends DrawableHelper {
matrices.pop(); matrices.pop();
if (pony.getSpecies().canCast()) { if (pony.getActualSpecies().canCast()) {
renderSpell(pony.getCharms().getEquippedSpell(Hand.MAIN_HAND), hudX + 15 - xDirection * 13, hudY + 3); renderSpell(pony.getCharms().getEquippedSpell(Hand.MAIN_HAND), hudX + 15 - xDirection * 13, hudY + 3);
renderSpell(pony.getCharms().getEquippedSpell(Hand.OFF_HAND), hudX + 15 - xDirection * 2, hudY - 3); renderSpell(pony.getCharms().getEquippedSpell(Hand.OFF_HAND), hudX + 15 - xDirection * 2, hudY - 3);
} }

View file

@ -348,14 +348,19 @@ public class EntityAppearance implements NbtSerialisable, PlayerDimensions.Provi
entityNbt.putString("playerName", profile.getName()); entityNbt.putString("playerName", profile.getName());
entityNbt.putByte("playerVisibleParts", player.getDataTracker().get(Disguise.PlayerAccess.getModelBitFlag())); entityNbt.putByte("playerVisibleParts", player.getDataTracker().get(Disguise.PlayerAccess.getModelBitFlag()));
NbtCompound playerNbt = player.writeNbt(new NbtCompound()); return NbtSerialisable.subTag("playerNbt", entityNbt, playerNbt -> {
playerNbt.remove("unicopia_caster"); player.writeNbt(playerNbt);
entityNbt.put("playerNbt", playerNbt); playerNbt.remove("unicopia_caster");
} else { Pony pony = Pony.of(player);
entity.saveSelfNbt(entityNbt); if (pony != null) {
entityNbt.remove("unicopia_caster"); NbtSerialisable.subTag("unicopia_caster", playerNbt, pony::toSyncronisedNbt);
}
});
} }
entity.saveSelfNbt(entityNbt);
entityNbt.remove("unicopia_caster");
return entityNbt; return entityNbt;
} }

View file

@ -1,7 +1,7 @@
package com.minelittlepony.unicopia.util; package com.minelittlepony.unicopia.util;
import java.util.*; import java.util.*;
import java.util.function.Function; import java.util.function.*;
import java.util.stream.Stream; import java.util.stream.Stream;
import com.mojang.datafixers.util.Pair; import com.mojang.datafixers.util.Pair;
@ -54,6 +54,17 @@ public interface NbtSerialisable {
return codec.encodeStart(NbtOps.INSTANCE, value).result().get(); return codec.encodeStart(NbtOps.INSTANCE, value).result().get();
} }
static NbtCompound subTag(String name, NbtCompound parent) {
NbtCompound child = new NbtCompound();
parent.put(name, child);
return child;
}
static NbtCompound subTag(String name, NbtCompound parent, Consumer<NbtCompound> writer) {
writer.accept(subTag(name, parent));
return parent;
}
interface Serializer<T> { interface Serializer<T> {
T read(NbtCompound compound); T read(NbtCompound compound);
@ -83,6 +94,14 @@ public interface NbtSerialisable {
return list.stream().map(this::read).filter(Objects::nonNull); return list.stream().map(this::read).filter(Objects::nonNull);
} }
static <T extends NbtSerialisable> Serializer<T> of(Supplier<T> factory) {
return of(nbt -> {
T value = factory.get();
value.fromNBT(nbt);
return value;
}, value -> value.toNBT());
}
static <T> Serializer<T> of(Function<NbtCompound, T> read, Function<T, NbtCompound> write) { static <T> Serializer<T> of(Function<NbtCompound, T> read, Function<T, NbtCompound> write) {
return new Serializer<>() { return new Serializer<>() {
@Override @Override