Fixed disguises applied via commands not remaining when applied to a non-changeling entity

This commit is contained in:
Sollace 2024-09-21 21:41:04 +01:00
parent 74e68f2e09
commit 0f4826e802
No known key found for this signature in database
GPG key ID: E52FACE7B5C773DB
2 changed files with 19 additions and 2 deletions

View file

@ -26,11 +26,18 @@ public class DispersableDisguiseSpell extends AbstractDisguiseSpell implements I
private final DataTracker.Entry<Boolean> suppressed = dataTracker.startTracking(TrackableDataType.BOOLEAN, false);
private int suppressionCounter;
private boolean forced;
public DispersableDisguiseSpell(CustomisedSpellType<?> type) {
super(type);
setHidden(true);
}
public void setForced() {
forced = true;
setHidden(false);
}
@Override
public boolean isVulnerable(Caster<?> otherSource, Spell other) {
return suppressionCounter <= otherSource.getLevel().get();
@ -59,7 +66,7 @@ public class DispersableDisguiseSpell extends AbstractDisguiseSpell implements I
}
}
if (!source.canUse(Abilities.DISGUISE)) {
if (!forced && !source.canUse(Abilities.DISGUISE)) {
setDead();
}
@ -91,12 +98,14 @@ public class DispersableDisguiseSpell extends AbstractDisguiseSpell implements I
public void toNBT(NbtCompound compound) {
super.toNBT(compound);
compound.putInt("suppressionCounter", suppressionCounter);
compound.putBoolean("forced", forced);
}
@Override
public void fromNBT(NbtCompound compound) {
super.fromNBT(compound);
suppressionCounter = compound.getInt("suppressionCounter");
forced = compound.getBoolean("forced");
if (suppressionCounter > 0) {
suppressed.set(true);
}

View file

@ -4,8 +4,10 @@ import java.util.function.Function;
import com.minelittlepony.unicopia.EquinePredicates;
import com.minelittlepony.unicopia.InteractionManager;
import com.minelittlepony.unicopia.ability.Abilities;
import com.minelittlepony.unicopia.ability.magic.SpellPredicate;
import com.minelittlepony.unicopia.ability.magic.spell.CastingMethod;
import com.minelittlepony.unicopia.ability.magic.spell.DispersableDisguiseSpell;
import com.minelittlepony.unicopia.ability.magic.spell.effect.SpellType;
import com.minelittlepony.unicopia.entity.player.Pony;
import com.mojang.authlib.GameProfile;
@ -81,7 +83,13 @@ public class DisguiseCommand {
Pony iplayer = Pony.of(player);
iplayer.getSpellSlot().get(SpellType.CHANGELING_DISGUISE)
.orElseGet(() -> SpellType.CHANGELING_DISGUISE.withTraits().apply(iplayer, CastingMethod.INNATE))
.orElseGet(() -> {
DispersableDisguiseSpell spell = SpellType.CHANGELING_DISGUISE.withTraits().apply(iplayer, CastingMethod.INNATE);
if (!iplayer.canUse(Abilities.DISGUISE)) {
spell.setForced();
}
return spell;
})
.setDisguise(entity);
if (source.getEntity() == player) {