mirror of
https://github.com/Sollace/Unicopia.git
synced 2025-02-08 06:26:43 +01:00
Distribute mana cost between party members
This commit is contained in:
parent
17233f425a
commit
082e5e37f2
2 changed files with 32 additions and 5 deletions
|
@ -14,8 +14,7 @@ import com.minelittlepony.unicopia.client.render.PlayerPoser.Animation;
|
|||
import com.minelittlepony.unicopia.*;
|
||||
import com.minelittlepony.unicopia.ability.AbilityDispatcher;
|
||||
import com.minelittlepony.unicopia.ability.EarthPonyStompAbility;
|
||||
import com.minelittlepony.unicopia.ability.magic.Affine;
|
||||
import com.minelittlepony.unicopia.ability.magic.SpellPredicate;
|
||||
import com.minelittlepony.unicopia.ability.magic.*;
|
||||
import com.minelittlepony.unicopia.ability.magic.spell.Spell;
|
||||
import com.minelittlepony.unicopia.ability.magic.spell.effect.SpellType;
|
||||
import com.minelittlepony.unicopia.ability.magic.spell.trait.TraitDiscovery;
|
||||
|
@ -23,6 +22,7 @@ import com.minelittlepony.unicopia.advancement.UCriteria;
|
|||
import com.minelittlepony.unicopia.entity.*;
|
||||
import com.minelittlepony.unicopia.entity.effect.SunBlindnessStatusEffect;
|
||||
import com.minelittlepony.unicopia.entity.effect.UEffects;
|
||||
import com.minelittlepony.unicopia.item.FriendshipBraceletItem;
|
||||
import com.minelittlepony.unicopia.item.UItems;
|
||||
import com.minelittlepony.unicopia.item.toxin.Toxin;
|
||||
import com.minelittlepony.unicopia.network.Channel;
|
||||
|
@ -451,6 +451,22 @@ public class Pony extends Living<PlayerEntity> implements Transmittable, Copieab
|
|||
|
||||
@Override
|
||||
public boolean subtractEnergyCost(double foodSubtract) {
|
||||
|
||||
List<Pony> partyMembers = FriendshipBraceletItem.getPartyMembers(this, 10).toList();
|
||||
|
||||
if (!partyMembers.isEmpty()) {
|
||||
foodSubtract /= (partyMembers.size() + 1);
|
||||
for (Pony member : partyMembers) {
|
||||
member.directTakeEnergy(foodSubtract);
|
||||
}
|
||||
}
|
||||
|
||||
directTakeEnergy(foodSubtract);
|
||||
|
||||
return entity.getHealth() > 0;
|
||||
}
|
||||
|
||||
protected void directTakeEnergy(double foodSubtract) {
|
||||
if (!entity.isCreative() && !entity.world.isClient) {
|
||||
|
||||
float currentMana = mana.getMana().get();
|
||||
|
@ -465,8 +481,6 @@ public class Pony extends Living<PlayerEntity> implements Transmittable, Copieab
|
|||
magicExhaustion += foodSubtract;
|
||||
}
|
||||
}
|
||||
|
||||
return entity.getHealth() > 0;
|
||||
}
|
||||
|
||||
private float burnFood(float foodSubtract) {
|
||||
|
@ -615,8 +629,14 @@ public class Pony extends Living<PlayerEntity> implements Transmittable, Copieab
|
|||
return player == null ? null : ((PonyContainer<Pony>)player).get();
|
||||
}
|
||||
|
||||
public static Stream<Pony> stream(Stream<Entity> entities) {
|
||||
return entities.flatMap(entity -> of(entity).stream());
|
||||
}
|
||||
|
||||
public static Optional<Pony> of(Entity entity) {
|
||||
return entity instanceof PlayerEntity ? PonyContainer.of(entity).map(a -> (Pony)a.get()) : Optional.empty();
|
||||
return entity instanceof PlayerEntity
|
||||
? PonyContainer.of(entity).map(a -> (Pony)a.get())
|
||||
: Optional.empty();
|
||||
}
|
||||
|
||||
public static boolean equal(GameProfile one, GameProfile two) {
|
||||
|
|
|
@ -2,12 +2,15 @@ package com.minelittlepony.unicopia.item;
|
|||
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import com.minelittlepony.unicopia.EquinePredicates;
|
||||
import com.minelittlepony.unicopia.USounds;
|
||||
import com.minelittlepony.unicopia.ability.magic.Caster;
|
||||
import com.minelittlepony.unicopia.entity.player.Pony;
|
||||
|
||||
import net.fabricmc.api.EnvType;
|
||||
import net.fabricmc.api.Environment;
|
||||
import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
|
||||
|
@ -119,4 +122,8 @@ public class FriendshipBraceletItem extends WearableItem implements DyeableItem,
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static Stream<Pony> getPartyMembers(Caster<?> caster, double radius) {
|
||||
return Pony.stream(caster.findAllEntitiesInRange(radius, entity -> isComrade(caster, entity)));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue