From 186d7cdbeeebc4390f2ad77d2148a742110e9685 Mon Sep 17 00:00:00 2001 From: Sollace Date: Sat, 30 Jan 2021 18:32:04 +0200 Subject: [PATCH] Smooth out consumption of food levels/fix food consumption being roudned UP --- .../unicopia/entity/player/Pony.java | 34 ++++++++++++++----- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java b/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java index 68917d1b..5764f5cf 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java @@ -92,6 +92,8 @@ public class Pony implements Caster, Equine, Transmi private int ticksHanging; + private float magicExhaustion = 0; + @Nullable private Race clientPreferredRace; @@ -255,6 +257,8 @@ public class Pony implements Caster, Equine, Transmi } } + magicExhaustion = burnFood(magicExhaustion); + powers.tick(); return false; @@ -384,21 +388,29 @@ public class Pony implements Caster, Equine, Transmi mana.getMana().set(0); foodSubtract -= currentMana / foodManaRatio; - int lostLevels = (int)Math.ceil(foodSubtract); - int food = entity.getHungerManager().getFoodLevel() - lostLevels; - - if (food < 0) { - entity.getHungerManager().add(-entity.getHungerManager().getFoodLevel(), 0); - entity.damage(MagicalDamageSource.EXHAUSTION, -food/2); - } else { - entity.getHungerManager().add(-lostLevels, 0); - } + magicExhaustion += foodSubtract; } } return entity.getHealth() > 0; } + private float burnFood(float foodSubtract) { + int lostLevels = (int)Math.floor(foodSubtract); + if (lostLevels > 0) { + int food = entity.getHungerManager().getFoodLevel() - lostLevels; + + if (food < 0) { + entity.getHungerManager().add(-entity.getHungerManager().getFoodLevel(), 0); + entity.damage(MagicalDamageSource.EXHAUSTION, -food/2); + } else { + entity.getHungerManager().add(-lostLevels, 0); + } + } + + return foodSubtract - lostLevels; + } + public Optional trySleep(BlockPos pos) { return findAllSpellsInRange(10) .filter(p -> p instanceof Pony && ((Pony)p).isEnemy(this)) @@ -416,6 +428,8 @@ public class Pony implements Caster, Equine, Transmi public void toNBT(CompoundTag compound) { compound.putString("playerSpecies", getSpecies().name()); + compound.putFloat("magicExhaustion", magicExhaustion); + compound.put("powers", powers.toNBT()); compound.put("gravity", gravity.toNBT()); @@ -434,6 +448,8 @@ public class Pony implements Caster, Equine, Transmi powers.fromNBT(compound.getCompound("powers")); gravity.fromNBT(compound.getCompound("gravity")); + magicExhaustion = compound.getFloat("magicExhaustion"); + if (compound.contains("effect")) { effectDelegate.set(SpellRegistry.instance().createEffectFromNBT(compound.getCompound("effect"))); }