- 74
- 0
Решил перейти на 1.6.4 и переделать систему здоровья. Максимальное здоровье определяется уровнем персонажа и одетой на него броней. Сегодня весь день пытался реализовать, в EntityLivingBase нашел
Пробовал делать так, чтобы возвращал значение здоровья, которое рассчитывается в моем классе
И все бы вроде работало, но максимальное здоровье всех игроков становится одинаковым. Тогда пробовал прямо в getMaxHealth просчитывать здоровье по броне и уровню, но сразу краш, делал проверку this instanceof EntityPlayer, но как понял, краш из-за попытки проверить есть ли броня.
Систему отдельного здоровья тоже пытался сделать, но, опять же, руки не дошли.
Нашел на форуме player.getEntityAttribute(SharedMonsterAttributes.maxHealth).setAttribute(100.0D);
Меняет только максимальное отображаемое число, здоровье не регенерируется выше 20.
Код:
public final float getMaxHealth() {
return (float)this.getEntityAttribute(SharedMonsterAttributes.maxHealth).getAttributeValue();
}
Код:
package assets.samael.castlecraft;
import java.util.EnumSet;
import net.minecraft.client.Minecraft;
import cpw.mods.fml.common.ITickHandler;
import cpw.mods.fml.common.TickType;
import cpw.mods.fml.relauncher.Side;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import assets.samael.castlecraft.CastleCraftInf;
import cpw.mods.fml.server.FMLServerHandler;
public class TickEvent implements ITickHandler{
// private int slt = -1;
private int tickcount = 0;
private int maxHP;
private int REGEN;
public static int maxHPstatic;
public static int HPstatic=0;
public static int REGENstatic;
@Override
public void tickStart(EnumSet<TickType> type, Object... tickData) {
if(Minecraft.getMinecraft().theWorld != null)
{
maxHP=0;
for(int i=1;i<5;i++)
if(Minecraft.getMinecraft().thePlayer.getCurrentItemOrArmor(i)!=null)
{
maxHP+=CastleCraftInf.getArmorHP(Minecraft.getMinecraft().thePlayer.getCurrentItemOrArmor(i).itemID);
}
maxHP+=CastleCraftInf.getLevelMaxHealth(Minecraft.getMinecraft().thePlayer.experienceLevel);
REGEN=Minecraft.getMinecraft().thePlayer.experienceLevel/3+2;
REGENstatic=REGEN;
maxHPstatic=maxHP;
if(maxHPstatic==0) maxHPstatic=1;
tickcount++;
if(tickcount==39)
{
//Minecraft.getMinecraft().thePlayer.setHealth(Minecraft.getMinecraft().thePlayer.getHealth()+REGEN);
tickcount=0;
}
else
{
tickcount++;
}
}
}
@Override
public void tickEnd(EnumSet<TickType> type, Object... tickData) {
// TODO Auto-generated method stub
}
@Override
public EnumSet<TickType> ticks() {
return EnumSet.of(TickType.CLIENT);
}
@Override
public String getLabel() {
return "MyTickHandler";
}
}
Систему отдельного здоровья тоже пытался сделать, но, опять же, руки не дошли.
Нашел на форуме player.getEntityAttribute(SharedMonsterAttributes.maxHealth).setAttribute(100.0D);
Меняет только максимальное отображаемое число, здоровье не регенерируется выше 20.