Distribute mana cost between party members

This commit is contained in:
Sollace 2022-09-16 12:46:48 +02:00
parent 17233f425a
commit 082e5e37f2
2 changed files with 32 additions and 5 deletions

View file

@ -14,8 +14,7 @@ import com.minelittlepony.unicopia.client.render.PlayerPoser.Animation;
import com.minelittlepony.unicopia.*; import com.minelittlepony.unicopia.*;
import com.minelittlepony.unicopia.ability.AbilityDispatcher; import com.minelittlepony.unicopia.ability.AbilityDispatcher;
import com.minelittlepony.unicopia.ability.EarthPonyStompAbility; import com.minelittlepony.unicopia.ability.EarthPonyStompAbility;
import com.minelittlepony.unicopia.ability.magic.Affine; import com.minelittlepony.unicopia.ability.magic.*;
import com.minelittlepony.unicopia.ability.magic.SpellPredicate;
import com.minelittlepony.unicopia.ability.magic.spell.Spell; import com.minelittlepony.unicopia.ability.magic.spell.Spell;
import com.minelittlepony.unicopia.ability.magic.spell.effect.SpellType; import com.minelittlepony.unicopia.ability.magic.spell.effect.SpellType;
import com.minelittlepony.unicopia.ability.magic.spell.trait.TraitDiscovery; 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.*;
import com.minelittlepony.unicopia.entity.effect.SunBlindnessStatusEffect; import com.minelittlepony.unicopia.entity.effect.SunBlindnessStatusEffect;
import com.minelittlepony.unicopia.entity.effect.UEffects; import com.minelittlepony.unicopia.entity.effect.UEffects;
import com.minelittlepony.unicopia.item.FriendshipBraceletItem;
import com.minelittlepony.unicopia.item.UItems; import com.minelittlepony.unicopia.item.UItems;
import com.minelittlepony.unicopia.item.toxin.Toxin; import com.minelittlepony.unicopia.item.toxin.Toxin;
import com.minelittlepony.unicopia.network.Channel; import com.minelittlepony.unicopia.network.Channel;
@ -451,6 +451,22 @@ public class Pony extends Living<PlayerEntity> implements Transmittable, Copieab
@Override @Override
public boolean subtractEnergyCost(double foodSubtract) { 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) { if (!entity.isCreative() && !entity.world.isClient) {
float currentMana = mana.getMana().get(); float currentMana = mana.getMana().get();
@ -465,8 +481,6 @@ public class Pony extends Living<PlayerEntity> implements Transmittable, Copieab
magicExhaustion += foodSubtract; magicExhaustion += foodSubtract;
} }
} }
return entity.getHealth() > 0;
} }
private float burnFood(float foodSubtract) { 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(); 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) { 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) { public static boolean equal(GameProfile one, GameProfile two) {

View file

@ -2,12 +2,15 @@ package com.minelittlepony.unicopia.item;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
import java.util.stream.Stream;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import com.minelittlepony.unicopia.EquinePredicates; 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.entity.player.Pony;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment; import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.item.v1.FabricItemSettings; import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
@ -119,4 +122,8 @@ public class FriendshipBraceletItem extends WearableItem implements DyeableItem,
} }
return false; return false;
} }
public static Stream<Pony> getPartyMembers(Caster<?> caster, double radius) {
return Pony.stream(caster.findAllEntitiesInRange(radius, entity -> isComrade(caster, entity)));
}
} }