package jk_5.nailed.server.utils; import jk_5.nailed.api.gamerule.GameRuleKey; import jk_5.nailed.api.player.Player; import jk_5.nailed.api.world.Difficulty; import jk_5.nailed.api.world.World; import jk_5.nailed.server.NailedPlatform; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemFood; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.DamageSource; import net.minecraft.util.FoodStats; public class NailedFoodStats extends FoodStats { private int foodLevel = 20; private float saturation = 5F; private float exhaustion = 0F; private int timer = 0; @Override public void addStats(int food, float saturation) { foodLevel = Math.min(food + foodLevel, 20); this.saturation = Math.min(this.saturation + food * saturation * 2.0F, foodLevel); } @Override public void addStats(ItemFood foodItem, ItemStack is) { this.addStats(foodItem.getHealAmount(is), foodItem.getSaturationModifier(is)); } @Override public void onUpdate(EntityPlayer playerEntity) { Player player = NailedPlatform.instance().getPlayerFromEntity(((EntityPlayerMP) playerEntity)); World world = player.getWorld(); if(world.getConfig().disableFood()){ foodLevel = 20; return; } Difficulty difficulty = world.getDifficulty(); if(exhaustion > 4){ exhaustion -= 4; if(saturation > 0){ saturation = Math.max(saturation - 1, 0); }else if(difficulty != Difficulty.PEACEFUL){ foodLevel = Math.max(foodLevel - 1, 0); } } if((Boolean) world.getGameRules().<Boolean>get(GameRuleKey.NATURAL_REGENERATION).getValue() && foodLevel >= 18 && playerEntity.shouldHeal()){ timer += 1; if(timer >= 80){ player.heal(1); addExhaustion(3); timer = 0; } }else if(foodLevel <= 0){ timer += 1; if(timer >= 80){ if(player.getHealth() > 10 || difficulty == Difficulty.HARD || player.getHealth() > 1 && difficulty == Difficulty.NORMAL){ playerEntity.attackEntityFrom(DamageSource.starve, 1); } timer = 0; } }else{ timer = 0; } } @Override public void readNBT(NBTTagCompound tag) { if(tag.hasKey("foodLevel", 99)){ foodLevel = tag.getInteger("foodLevel"); timer = tag.getInteger("foodTickTimer"); saturation = tag.getFloat("saturation"); exhaustion = tag.getFloat("exhaustion"); } } @Override public void writeNBT(NBTTagCompound tag) { tag.setInteger("foodLevel", foodLevel); tag.setInteger("foodTickTimer", timer); tag.setFloat("saturation", saturation); tag.setFloat("exhaustion", exhaustion); } @Override public int getFoodLevel() { return this.foodLevel; } @Override public boolean needFood() { return this.foodLevel < 20; } @Override public void addExhaustion(float amount) { this.exhaustion = Math.min(this.exhaustion + amount, 40.0F); } @Override public float getSaturationLevel() { return this.saturation; } @Override public void setFoodLevel(int foodLevel) { this.foodLevel = foodLevel; } }