mirror of
https://github.com/Sollace/Unicopia.git
synced 2025-02-01 19:46:42 +01:00
Anyone who can use the change form ability can also sign and use the friendship bracelets
This commit is contained in:
parent
a2c78c2b35
commit
3948bf4a58
3 changed files with 31 additions and 17 deletions
|
@ -1,6 +1,8 @@
|
||||||
package com.minelittlepony.unicopia.ability;
|
package com.minelittlepony.unicopia.ability;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
@ -8,6 +10,7 @@ import com.minelittlepony.unicopia.Race;
|
||||||
import com.minelittlepony.unicopia.USounds;
|
import com.minelittlepony.unicopia.USounds;
|
||||||
import com.minelittlepony.unicopia.ability.data.Hit;
|
import com.minelittlepony.unicopia.ability.data.Hit;
|
||||||
import com.minelittlepony.unicopia.entity.player.Pony;
|
import com.minelittlepony.unicopia.entity.player.Pony;
|
||||||
|
import com.minelittlepony.unicopia.item.FriendshipBraceletItem;
|
||||||
|
|
||||||
import net.minecraft.particle.ParticleTypes;
|
import net.minecraft.particle.ParticleTypes;
|
||||||
import net.minecraft.sound.SoundCategory;
|
import net.minecraft.sound.SoundCategory;
|
||||||
|
@ -67,12 +70,17 @@ public class ChangeFormAbility implements Ability<Hit> {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
player.subtractEnergyCost(5);
|
List<Pony> targets = getTargets(player).toList();
|
||||||
|
player.subtractEnergyCost(5 * targets.size());
|
||||||
Race.Composite composite = player.getCompositeRace();
|
boolean isTransforming = player.getSuppressedRace().isUnset();
|
||||||
Race actualRace = player.getSpecies();
|
targets.forEach(target -> {
|
||||||
player.setSpecies(composite.potential());
|
Race supressed = target.getSuppressedRace();
|
||||||
player.setSuppressedRace(actualRace.availability().isGrantable() ? actualRace : Race.UNSET);
|
if (target == player || supressed.isUnset() == isTransforming) {
|
||||||
|
Race actualRace = target.getSpecies();
|
||||||
|
target.setSpecies(supressed.or(player.getCompositeRace().potential()));
|
||||||
|
target.setSuppressedRace(isTransforming ? actualRace : Race.UNSET);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -80,20 +88,25 @@ public class ChangeFormAbility implements Ability<Hit> {
|
||||||
@Override
|
@Override
|
||||||
public void warmUp(Pony player, AbilitySlot slot) {
|
public void warmUp(Pony player, AbilitySlot slot) {
|
||||||
player.getMagicalReserves().getExertion().addPercent(6);
|
player.getMagicalReserves().getExertion().addPercent(6);
|
||||||
|
getTargets(player).forEach(target -> {
|
||||||
if (player.getAbilities().getStat(slot).getWarmup() % 5 == 0) {
|
if (player.getAbilities().getStat(slot).getWarmup() % 5 == 0) {
|
||||||
player.asWorld().playSound(null, player.getOrigin(), SoundEvents.BLOCK_BUBBLE_COLUMN_WHIRLPOOL_INSIDE, SoundCategory.PLAYERS);
|
player.asWorld().playSound(target.asEntity(), target.getOrigin(), SoundEvents.BLOCK_BUBBLE_COLUMN_WHIRLPOOL_INSIDE, SoundCategory.PLAYERS);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (player.asWorld().random.nextInt(5) == 0) {
|
if (player.asWorld().random.nextInt(5) == 0) {
|
||||||
player.asWorld().playSound(null, player.getOrigin(), USounds.Vanilla.BLOCK_BUBBLE_COLUMN_BUBBLE_POP, SoundCategory.PLAYERS);
|
player.asWorld().playSound(target.asEntity(), target.getOrigin(), USounds.Vanilla.BLOCK_BUBBLE_COLUMN_BUBBLE_POP, SoundCategory.PLAYERS);
|
||||||
}
|
}
|
||||||
|
|
||||||
player.spawnParticles(ParticleTypes.BUBBLE_COLUMN_UP, 15);
|
target.spawnParticles(ParticleTypes.BUBBLE_COLUMN_UP, 15);
|
||||||
player.spawnParticles(ParticleTypes.BUBBLE_POP, 15);
|
target.spawnParticles(ParticleTypes.BUBBLE_POP, 15);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void coolDown(Pony player, AbilitySlot slot) {
|
public void coolDown(Pony player, AbilitySlot slot) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Stream<Pony> getTargets(Pony player) {
|
||||||
|
return Stream.concat(Stream.of(player), FriendshipBraceletItem.getPartyMembers(player, 3));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -247,7 +247,7 @@ public class Pony extends Living<PlayerEntity> implements Copyable<Pony>, Update
|
||||||
setSuppressedRace(Race.UNSET);
|
setSuppressedRace(Race.UNSET);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Race getSuppressedRace() {
|
public Race getSuppressedRace() {
|
||||||
return Race.fromName(entity.getDataTracker().get(SUPPRESSED_RACE), Race.UNSET);
|
return Race.fromName(entity.getDataTracker().get(SUPPRESSED_RACE), Race.UNSET);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@ import com.minelittlepony.unicopia.EquinePredicates;
|
||||||
import com.minelittlepony.unicopia.USounds;
|
import com.minelittlepony.unicopia.USounds;
|
||||||
import com.minelittlepony.unicopia.ability.magic.Caster;
|
import com.minelittlepony.unicopia.ability.magic.Caster;
|
||||||
import com.minelittlepony.unicopia.compat.trinkets.TrinketsDelegate;
|
import com.minelittlepony.unicopia.compat.trinkets.TrinketsDelegate;
|
||||||
|
import com.minelittlepony.unicopia.entity.AmuletSelectors;
|
||||||
import com.minelittlepony.unicopia.entity.player.Pony;
|
import com.minelittlepony.unicopia.entity.player.Pony;
|
||||||
|
|
||||||
import net.fabricmc.api.EnvType;
|
import net.fabricmc.api.EnvType;
|
||||||
|
@ -37,7 +38,7 @@ public class FriendshipBraceletItem extends WearableItem implements DyeableItem,
|
||||||
public TypedActionResult<ItemStack> use(World world, PlayerEntity player, Hand hand) {
|
public TypedActionResult<ItemStack> use(World world, PlayerEntity player, Hand hand) {
|
||||||
ItemStack stack = player.getStackInHand(hand);
|
ItemStack stack = player.getStackInHand(hand);
|
||||||
|
|
||||||
if (!isSigned(stack) && EquinePredicates.PLAYER_UNICORN.test(player)) {
|
if (!isSigned(stack) && (EquinePredicates.PLAYER_UNICORN.test(player) || AmuletSelectors.PEARL_NECKLACE.test(player))) {
|
||||||
player.setCurrentHand(hand);
|
player.setCurrentHand(hand);
|
||||||
|
|
||||||
ItemStack result = stack.copy();
|
ItemStack result = stack.copy();
|
||||||
|
|
Loading…
Reference in a new issue