mirror of
https://github.com/Sollace/Unicopia.git
synced 2025-02-21 12:24:22 +01:00
Fixed ponies without magical abilities being able to use gemstones to swap spells
This commit is contained in:
parent
3c739ce252
commit
9ebe391a2b
2 changed files with 20 additions and 0 deletions
|
@ -157,6 +157,11 @@ public class Pony extends Living<PlayerEntity> implements Copyable<Pony>, Update
|
||||||
respawnRace = race;
|
respawnRace = race;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets this player's species as it appears when interacting physically with other players or the world.
|
||||||
|
* This includes temporary race swaps due to illusions/shape shifting as well as artifacts that merely
|
||||||
|
* grant the abilities of a race, such as the alicorn amulet.
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Race getSpecies() {
|
public Race getSpecies() {
|
||||||
if (AmuletSelectors.ALICORN_AMULET.test(entity)) {
|
if (AmuletSelectors.ALICORN_AMULET.test(entity)) {
|
||||||
|
@ -166,6 +171,10 @@ public class Pony extends Living<PlayerEntity> implements Copyable<Pony>, Update
|
||||||
return getObservedSpecies();
|
return getObservedSpecies();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the species this player appears to be.
|
||||||
|
* This includes illusions and shape-shifting but excludes items that grant abilities without changing their race.
|
||||||
|
*/
|
||||||
public Race getObservedSpecies() {
|
public Race getObservedSpecies() {
|
||||||
return getSpellSlot()
|
return getSpellSlot()
|
||||||
.get(SpellPredicate.IS_MIMIC, true)
|
.get(SpellPredicate.IS_MIMIC, true)
|
||||||
|
@ -176,11 +185,18 @@ public class Pony extends Living<PlayerEntity> implements Copyable<Pony>, Update
|
||||||
.orElse(getActualSpecies());
|
.orElse(getActualSpecies());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the composite race that represents what this player is capable of.
|
||||||
|
* Physical is the race they appear to have, whilst pseudo is the race who's abilities they have been granted by magical means.
|
||||||
|
*/
|
||||||
public Race.Composite getCompositeRace() {
|
public Race.Composite getCompositeRace() {
|
||||||
Race observed = getObservedSpecies();
|
Race observed = getObservedSpecies();
|
||||||
return new Race.Composite(observed, AmuletSelectors.ALICORN_AMULET.test(entity) ? Race.ALICORN : observed);
|
return new Race.Composite(observed, AmuletSelectors.ALICORN_AMULET.test(entity) ? Race.ALICORN : observed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the origin species of the player. This excludes any shapeshifting, illusions, or magic.
|
||||||
|
*/
|
||||||
public Race getActualSpecies() {
|
public Race getActualSpecies() {
|
||||||
return Race.fromName(entity.getDataTracker().get(RACE), Race.HUMAN);
|
return Race.fromName(entity.getDataTracker().get(RACE), Race.HUMAN);
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,6 +40,10 @@ public class GemstoneItem extends Item implements MultiItem, EnchantableItem {
|
||||||
ItemStack stack = user.getStackInHand(hand);
|
ItemStack stack = user.getStackInHand(hand);
|
||||||
PlayerCharmTracker charms = Pony.of(user).getCharms();
|
PlayerCharmTracker charms = Pony.of(user).getCharms();
|
||||||
|
|
||||||
|
if (!Pony.of(user).getObservedSpecies().canCast()) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
TypedActionResult<CustomisedSpellType<?>> spell = EnchantableItem.consumeSpell(stack, user, ((Predicate<CustomisedSpellType<?>>)charms.getEquippedSpell(hand)::equals).negate());
|
TypedActionResult<CustomisedSpellType<?>> spell = EnchantableItem.consumeSpell(stack, user, ((Predicate<CustomisedSpellType<?>>)charms.getEquippedSpell(hand)::equals).negate());
|
||||||
|
|
||||||
CustomisedSpellType<?> existing = charms.getEquippedSpell(hand);
|
CustomisedSpellType<?> existing = charms.getEquippedSpell(hand);
|
||||||
|
|
Loading…
Reference in a new issue