diff --git a/src/main/java/com/minelittlepony/unicopia/ability/ChangelingFeedAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/ChangelingFeedAbility.java index dcd66470..6c71efd3 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/ChangelingFeedAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/ChangelingFeedAbility.java @@ -165,7 +165,7 @@ public class ChangelingFeedAbility implements Ability { @Override public void warmUp(Pony player, AbilitySlot slot) { - player.getMagicalReserves().getExertion().add(6); + player.getMagicalReserves().getExertion().addPercent(6); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyGrowAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyGrowAbility.java index 55755175..ef901a39 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyGrowAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyGrowAbility.java @@ -81,7 +81,7 @@ public class EarthPonyGrowAbility implements Ability { @Override public void warmUp(Pony player, AbilitySlot slot) { - player.getMagicalReserves().getExertion().add(30); + player.getMagicalReserves().getExertion().addPercent(30); if (player.asWorld().isClient()) { player.spawnParticles(MagicParticleEffect.UNICORN, 1); diff --git a/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyKickAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyKickAbility.java index 238d315a..0b3c0f07 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyKickAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyKickAbility.java @@ -183,7 +183,7 @@ public class EarthPonyKickAbility implements Ability { @Override public void warmUp(Pony player, AbilitySlot slot) { - player.getMagicalReserves().getExertion().add(40); + player.getMagicalReserves().getExertion().addPercent(40); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyStompAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyStompAbility.java index f9b59210..40fb5a36 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyStompAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyStompAbility.java @@ -204,7 +204,7 @@ public class EarthPonyStompAbility implements Ability { @Override public void warmUp(Pony player, AbilitySlot slot) { - player.getMagicalReserves().getExertion().add(40); + player.getMagicalReserves().getExertion().addPercent(40); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/ability/PegasusCaptureStormAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/PegasusCaptureStormAbility.java index 4c21ed46..3bbdd31f 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/PegasusCaptureStormAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/PegasusCaptureStormAbility.java @@ -112,7 +112,7 @@ public class PegasusCaptureStormAbility implements Ability { @Override public void warmUp(Pony player, AbilitySlot slot) { - player.getMagicalReserves().getExertion().add(6); + player.getMagicalReserves().getExertion().addPercent(6); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/ability/PegasusFlightToggleAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/PegasusFlightToggleAbility.java index 87ded42c..ebcd09bf 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/PegasusFlightToggleAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/PegasusFlightToggleAbility.java @@ -76,7 +76,7 @@ public class PegasusFlightToggleAbility implements Ability { @Override public void warmUp(Pony player, AbilitySlot slot) { - player.getMagicalReserves().getExertion().add(6); + player.getMagicalReserves().getExertion().addPercent(6); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/ability/PegasusRainboomAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/PegasusRainboomAbility.java index c04732d2..a390d231 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/PegasusRainboomAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/PegasusRainboomAbility.java @@ -80,7 +80,7 @@ public class PegasusRainboomAbility implements Ability { @Override public void warmUp(Pony player, AbilitySlot slot) { - player.getMagicalReserves().getExertion().add(6); + player.getMagicalReserves().getExertion().addPercent(6); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/ability/UnicornCastingAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/UnicornCastingAbility.java index c786be66..a3eb1dc6 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/UnicornCastingAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/UnicornCastingAbility.java @@ -88,7 +88,7 @@ public class UnicornCastingAbility extends AbstractSpellCastingAbility { if (amount < 0) { ChargeableItem.consumeEnergy(stack, amount); - player.getMagicalReserves().getMana().add(amount * player.getMagicalReserves().getMana().getMax()); + player.getMagicalReserves().getMana().add(amount); player.asWorld().playSoundFromEntity(null, player.asEntity(), USounds.ITEM_AMULET_RECHARGE, SoundCategory.PLAYERS, 1, 1); } } diff --git a/src/main/java/com/minelittlepony/unicopia/ability/UnicornTeleportAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/UnicornTeleportAbility.java index 69be769a..d3ee138f 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/UnicornTeleportAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/UnicornTeleportAbility.java @@ -199,7 +199,7 @@ public class UnicornTeleportAbility implements Ability { @Override public void warmUp(Pony player, AbilitySlot slot) { - player.getMagicalReserves().getExertion().add(30); + player.getMagicalReserves().getExertion().addPercent(30); player.spawnParticles(MagicParticleEffect.UNICORN, 5); } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/effect/RaceChangeStatusEffect.java b/src/main/java/com/minelittlepony/unicopia/entity/effect/RaceChangeStatusEffect.java index 002c68a9..906fc91d 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/effect/RaceChangeStatusEffect.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/effect/RaceChangeStatusEffect.java @@ -98,7 +98,7 @@ public class RaceChangeStatusEffect extends StatusEffect { if (eq instanceof Pony pony) { MagicReserves magic = pony.getMagicalReserves(); pony.setRespawnRace(race); - magic.getExertion().add(50); + magic.getExertion().addPercent(5); magic.getEnergy().add(3); magic.getExhaustion().add(3); diff --git a/src/main/java/com/minelittlepony/unicopia/entity/player/MagicReserves.java b/src/main/java/com/minelittlepony/unicopia/entity/player/MagicReserves.java index 47a70a16..5db0b016 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/MagicReserves.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/MagicReserves.java @@ -63,8 +63,15 @@ public interface MagicReserves { /** * Adds a percentage increment to this bar's current value */ - default void add(float step) { - set(get() + (step / getMax())); + default void addPercent(float percentChange) { + set(get() + ((percentChange / 100F) * getMax())); + } + + /** + * Adds a flat amount to this bar's current value + */ + default void add(float flatAmount) { + set(get() + flatAmount); } /** diff --git a/src/main/java/com/minelittlepony/unicopia/entity/player/ManaContainer.java b/src/main/java/com/minelittlepony/unicopia/entity/player/ManaContainer.java index 9a22a1ae..96441f63 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/ManaContainer.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/ManaContainer.java @@ -11,7 +11,7 @@ import net.minecraft.entity.data.TrackedData; import net.minecraft.nbt.NbtCompound; import net.minecraft.util.math.MathHelper; -public class ManaContainer implements MagicReserves, Tickable, NbtSerialisable, Copyable { +class ManaContainer implements MagicReserves, Tickable, NbtSerialisable, Copyable { private final Pony pony; private final Map bars = new HashMap<>(); @@ -87,23 +87,23 @@ public class ManaContainer implements MagicReserves, Tickable, NbtSerialisable, public void tick() { bars.values().forEach(BarInst::tick); - exertion.add(-10); + exertion.addPercent(-10); if (energy.get() > 5) { energy.multiply(0.8F); } else { - energy.add(-1); + energy.addPercent(-1); } if (pony.getSpecies().canFly() && !pony.getPhysics().isFlying()) { exhaustion.multiply(0.8F); } else { - exhaustion.add(-1); + exhaustion.addPercent(-1); } if (!pony.getSpecies().canFly() || !pony.getPhysics().isFlying()) { if (mana.getPercentFill() < 1 && mana.getShadowFill() == mana.getPercentFill()) { - mana.add((mana.getMax() / 10F) * Math.max(1, pony.getLevel().get() * 4)); + mana.addPercent(MathHelper.clamp(1 + pony.getLevel().get(), 1, 50)); } } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerLevelStore.java b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerLevelStore.java index 42e1dc23..006f20f8 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerLevelStore.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerLevelStore.java @@ -29,7 +29,7 @@ class PlayerLevelStore implements Levelled.LevelStore { Levelled.LevelStore.super.add(levels); if (levels > 0) { if (upgradeMana) { - pony.getMagicalReserves().getMana().add(pony.getMagicalReserves().getMana().getMax() / 2); + pony.getMagicalReserves().getMana().addPercent(50); } pony.asWorld().playSound(null, pony.getOrigin(), levelUpSound, SoundCategory.PLAYERS, 1, 2); } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java index 7416cfd3..d0b2b097 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java @@ -339,7 +339,7 @@ public class PlayerPhysics extends EntityPhysics implements Tickab } if (ticksDiving > 0 && ticksDiving % 25 == 0) { - pony.getMagicalReserves().getCharge().add(25); + pony.getMagicalReserves().getCharge().addPercent(12.5F); } } else { prevStrafe = 0; @@ -474,15 +474,15 @@ public class PlayerPhysics extends EntityPhysics implements Tickab if (ticksInAir > (level * 100)) { Bar mana = pony.getMagicalReserves().getMana(); - float cost = (float)-getHorizontalMotion() * 20F / level; - if (entity.isSneaking()) { + float cost = (float)-getHorizontalMotion() / 2F; + if (((LivingEntityDuck)entity).isJumping()) { cost /= 10; } - mana.add(cost); + mana.add(MathHelper.clamp(cost, -100, 0)); if (mana.getPercentFill() < 0.2) { - pony.getMagicalReserves().getExertion().add(2); + pony.getMagicalReserves().getExertion().addPercent(2); pony.getMagicalReserves().getExhaustion().add(2 + (int)(getHorizontalMotion() * 50)); if (mana.getPercentFill() < 0.1 && ticksInAir % 10 == 0) { @@ -499,7 +499,7 @@ public class PlayerPhysics extends EntityPhysics implements Tickab if (entity.getWorld().random.nextInt(110) == 1 && !pony.isClient()) { pony.getLevel().add(1); - pony.getMagicalReserves().getCharge().add(4); + pony.getMagicalReserves().getCharge().addPercent(4); pony.getMagicalReserves().getExertion().set(0); pony.getMagicalReserves().getExhaustion().set(0); mana.set(mana.getMax() * 100); diff --git a/src/main/java/com/minelittlepony/unicopia/item/AlicornAmuletItem.java b/src/main/java/com/minelittlepony/unicopia/item/AlicornAmuletItem.java index 87dd68f1..c42798b0 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/AlicornAmuletItem.java +++ b/src/main/java/com/minelittlepony/unicopia/item/AlicornAmuletItem.java @@ -228,12 +228,12 @@ public class AlicornAmuletItem extends AmuletItem implements ItemTracker.Trackab // constantly increase exertion if (reserves.getExertion().get() < reserves.getExertion().getMax()) { - reserves.getExertion().add(2); + reserves.getExertion().add(0.02F); } // gradual corruption accumulation if (fullSecond && world.random.nextInt(12) == 0 && !pony.asEntity().isCreative()) { - reserves.getEnergy().add(reserves.getEnergy().getMax() / 10F); + reserves.getEnergy().add(10); pony.getCorruption().add((int)MathHelper.clamp(attachedTicks / ItemTracker.HOURS, 1, pony.getCorruption().getMax())); } @@ -245,8 +245,8 @@ public class AlicornAmuletItem extends AmuletItem implements ItemTracker.Trackab InteractionManager.INSTANCE.playLoopingSound(player, InteractionManager.SOUND_HEART_BEAT, 0); } - reserves.getExertion().add(reserves.getExertion().getMax()); - reserves.getEnergy().add(reserves.getEnergy().getMax() / 2F); + reserves.getExertion().addPercent(10); + reserves.getEnergy().add(10); living.asEntity().removeStatusEffect(StatusEffects.WEAKNESS); living.asEntity().removeStatusEffect(StatusEffects.NAUSEA); } diff --git a/src/main/java/com/minelittlepony/unicopia/item/enchantment/StressfulEnchantment.java b/src/main/java/com/minelittlepony/unicopia/item/enchantment/StressfulEnchantment.java index f4706035..08a81367 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/enchantment/StressfulEnchantment.java +++ b/src/main/java/com/minelittlepony/unicopia/item/enchantment/StressfulEnchantment.java @@ -17,7 +17,7 @@ public class StressfulEnchantment extends SimpleEnchantment { Bar bar = ((Pony)user).getMagicalReserves().getEnergy(); float targetPercent = (level / (float)getMaxLevel()) * 0.25F; if (bar.getPercentFill() < targetPercent) { - bar.add(10); + bar.add(0.1F); } } }