Prevent dealing damage if it has no effect

This commit is contained in:
Sollace 2023-03-05 21:29:49 +00:00
parent 87a6078300
commit bc4e6ca316

View file

@ -6,7 +6,7 @@ import net.minecraft.entity.player.HungerManager;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
public interface ManaConsumptionUtil { public interface ManaConsumptionUtil {
float FOOD_PER_MANA = 0.1F; float MANA_PER_FOOD = 10F;
float HEARTS_PER_FOOD = 0.5F; float HEARTS_PER_FOOD = 0.5F;
float SATURATION_PER_FOOD = 0.8F; float SATURATION_PER_FOOD = 0.8F;
@ -17,7 +17,7 @@ public interface ManaConsumptionUtil {
} }
float availableMana = mana.get(); float availableMana = mana.get();
float consumedMana = (float)foodSubtract / FOOD_PER_MANA; float consumedMana = (float)foodSubtract * MANA_PER_FOOD;
if (consumedMana <= availableMana) { if (consumedMana <= availableMana) {
mana.set(availableMana - consumedMana); mana.set(availableMana - consumedMana);
@ -25,7 +25,7 @@ public interface ManaConsumptionUtil {
} }
mana.set(0); mana.set(0);
return (float)foodSubtract - (availableMana * FOOD_PER_MANA); return (float)foodSubtract - (availableMana / MANA_PER_FOOD);
} }
static float burnFood(PlayerEntity entity, float foodSubtract) { static float burnFood(PlayerEntity entity, float foodSubtract) {
@ -58,15 +58,25 @@ public interface ManaConsumptionUtil {
float availableHearts = entity.getHealth(); float availableHearts = entity.getHealth();
if (foodSubtract > 0) { if (foodSubtract > 0) {
float consumedHearts = Math.max(0.001F, Math.min(availableHearts - 1, foodSubtract * HEARTS_PER_FOOD)); float consumedHearts = Math.max(0, Math.min(availableHearts - 1, foodSubtract * HEARTS_PER_FOOD));
foodSubtract = addExhaustion(hunger, foodSubtract); foodSubtract = addExhaustion(hunger, foodSubtract);
foodSubtract -= (consumedHearts / HEARTS_PER_FOOD); foodSubtract -= (consumedHearts / HEARTS_PER_FOOD);
entity.damage(MagicalDamageSource.EXHAUSTION, consumedHearts); if (consumedHearts > 0) {
entity.damage(MagicalDamageSource.EXHAUSTION, consumedHearts);
}
} }
return Math.max(0, foodSubtract); return Math.max(0, foodSubtract);
} }
static float getCombinedTotalMana(Pony pony) {
HungerManager hunger = pony.asEntity().getHungerManager();
return hunger.getFoodLevel()
+ (pony.getMagicalReserves().getMana().get() / MANA_PER_FOOD)
+ (hunger.getSaturationLevel() / SATURATION_PER_FOOD)
+ (pony.asEntity().getHealth() / HEARTS_PER_FOOD);
}
static float addExhaustion(HungerManager hunger, float foodSubtract) { static float addExhaustion(HungerManager hunger, float foodSubtract) {
hunger.addExhaustion(0.1F); hunger.addExhaustion(0.1F);
return Math.max(0, foodSubtract - 0.1F); return Math.max(0, foodSubtract - 0.1F);