Как прибавить жизни игроку

Версия Minecraft
1.6.4
Хочу узнать, как можно прибавить/уменьшить ХП для игрока. Например с 20 до 100 или с 20 до 10. Это нужно в своем моде писать? Или редактировать класс с игроком (если да, то где он находится), ну или вообще с помощью ивента.
 

timaxa007

Модератор
5,831
409
672
cool56563 написал(а):
Код:
player.getEntityAttribute(SharedMonsterAttributes.maxHealth).setAttribute(100.0D);
---
cool56563 написал(а):
Код:
player.getEntityAttribute(SharedMonsterAttributes.maxHealth).setAttribute(10.0D);
---
cool56563 написал(а):
Это нужно в своем моде писать? Или редактировать класс с игроком (если да, то где он находится), ну или вообще с помощью ивента.
В эвенте при появлении в мире EntityJoinWorldEvent, я так предполагаю.
 
timaxa007 написал(а):
cool56563 написал(а):
Код:
player.getEntityAttribute(SharedMonsterAttributes.maxHealth).setAttribute(100.0D);
---
cool56563 написал(а):
Код:
player.getEntityAttribute(SharedMonsterAttributes.maxHealth).setAttribute(10.0D);
---
cool56563 написал(а):
Это нужно в своем моде писать? Или редактировать класс с игроком (если да, то где он находится), ну или вообще с помощью ивента.
В эвенте при появлении в мире EntityJoinWorldEvent, я так предполагаю.
Где прописывать? xD (Я рил не знаю .-. )
 

timaxa007

Модератор
5,831
409
672
В init:
Код:
MinecraftForge.EVENT_BUS.register(new Event());
Код:
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraftforge.event.ForgeSubscribe;
import net.minecraftforge.event.entity.EntityJoinWorldEvent;

public class Event {

	@ForgeSubscribe
	public void entityJoinWorldEvent(EntityJoinWorldEvent event) {
		if (event.entity instanceof EntityPlayer) {
			EntityPlayer player = (EntityPlayer)event.entity;
			player.getEntityAttribute(SharedMonsterAttributes.maxHealth).setAttribute(10.0D);
		}
	}

}
 
timaxa007 написал(а):
В init:
Код:
MinecraftForge.EVENT_BUS.register(new Event());
Код:
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraftforge.event.ForgeSubscribe;
import net.minecraftforge.event.entity.EntityJoinWorldEvent;

public class Event {

 @ForgeSubscribe
 public void entityJoinWorldEvent(EntityJoinWorldEvent event) {
 if (event.entity instanceof EntityPlayer) {
 EntityPlayer player = (EntityPlayer)event.entity;
 player.getEntityAttribute(SharedMonsterAttributes.maxHealth).setAttribute(10.0D);
 }
 }

}
Очень сильно благодарен. Вот только можно их сделать в линию и что-бы они не лезли в верх ибо не красиво, а что-бы налегали на друг друга?
 
2,505
81
397
Код:
.setAttribute();
Плохой подход.

Лучше так
Код:
UUID ID = UUID.randomUUID();
String name = "lalala";

...
double value = 10D;

float tmp = entity.getHealth() / entity.getMaxHealth();

IAttributeInstance attr= entity.getEntityAttribute(SharedMonsterAttributes.maxHealth);
AttributeModifier mod = attr.getModifier(ID);
if (mod != null) {
    attr.removeModifier(mod);
}
AttributeModifier newMod = new AttributeModifier(ID, name, value, 0).setSaved(true);
attr.applyModifier(newMod);

entity.setHealth(entity.getMaxHealth() * tmp);
 
Dahaka написал(а):
Код:
.setAttribute();
Плохой подход.

Лучше так
Код:
UUID ID = UUID.randomUUID();
String name = "lalala";

...
double value = 10D;

float tmp = entity.getHealth() / entity.getMaxHealth();

IAttributeInstance attr= entity.getEntityAttribute(SharedMonsterAttributes.maxHealth);
AttributeModifier mod = attr.getModifier(ID);
if (mod != null) {
    attr.removeModifier(mod);
}
AttributeModifier newMod = new AttributeModifier(ID, name, value, 0).setSaved(true);
attr.applyModifier(newMod);

entity.setHealth(entity.getMaxHealth() * tmp);

Сложна для меня =)
 
7,099
324
1,510
denuvo написал(а):
У меня в ClientEvents

А на сервере?

Кстати, есть  такие моды, как botania, tinkersconstruct, которые добавляют  хп игроку, если он носит определенные вещи. Так вот эти моды уживаются в одной сборке. Наверное, нужно для такого эффекта сначала получить значение атрибута максимального хп, а потом к нему прибавить и установить назад.
 
7,099
324
1,510
Так это не очень хорошо будет, если, например, игрок сначала оденет банки с сердцами и у него здоровье до 80 поднимется, а потом применит "наш" предмет и у него вместо повышения еще на +10хп, понизится до 30(20 изначальных и наши 10 обещанные). А если наоборот сделать: наш предмет добавит 10хп, установив макс. на 30, а потом игрок оденет банки и у него нормально поднимется до 90. Разница же есть.
 
2,505
81
397
Ты читал мой код? Если ты его не понял, не надо писать ересь


Надо делать так, чтобы от перестановки мест слагаемых сумма не менялась, иначе ваши костыли могут попортить чужие моды (если они на таких же костылях (всякое бывает)).
 
Сверху