Изменить здоровье мобам

Версия Minecraft
1.7.10
Доброго времени суток, подскажите, как можно изменить здоровье всем мобам?
 
Решение
Потому что событие EntityJoinWorldEvent вызывается не только во время призыва сущности(spawnEntity), но и во время загрузки чанка. Чтобы сделать правильно, необходимо получить предыдущее значение максимального здоровья, если оно не соответствует новому, то установить на maxHealth на необходимое и там же setHealth.

Java:
private static final double ZOMBIE_MAX_HEALTH = 1000.0;

@SubscribeEvent
public void onEntityJoinWorld(EntityJoinWorldEvent e) {
    if (e.entity instanceof EntityZombie) {
        EntityZombie zombie = (EntityZombie) e.entity;
        IAttributeInstance attribute = zombie.getEntityAttribute(SharedMonsterAttributes.maxHealth);
        // Так как обычно значение скорей целое, чем с плавающей запятой, можно обойтись такой...
@Egorka
Java:
@SubscribeEvent
    public void onSpawnEntity(EntityJoinWorldEvent e) {
        if (e.entity instanceof EntityZombie){
            ((EntityZombie) e.entity).getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(1000.0D);
            ((EntityZombie) e.entity).setHealth(1000);
        }
    }

Java:
@Mod.EventHandler
    public void preInit(FMLPreInitializationEvent event) {
        MinecraftForge.EVENT_BUS.register(new EventsForge());
        MinecraftForge.EVENT_BUS.register(new EventsForgeClient());
        OTCreativeTabs.initialiseTabs();
        proxy.preInit();
        RegisterMessage.init(network);
        network.registerMessage(SPacketPlayerUpdate.class, SPacketPlayerUpdate.class, 0, Side.CLIENT);
        Entites.init();
        proxy.registerRenderers();
        proxy.registerTileEntities();
    }
 

Icosider

Kotliner
Администратор
3,603
99
664
Потому что событие EntityJoinWorldEvent вызывается не только во время призыва сущности(spawnEntity), но и во время загрузки чанка. Чтобы сделать правильно, необходимо получить предыдущее значение максимального здоровья, если оно не соответствует новому, то установить на maxHealth на необходимое и там же setHealth.

Java:
private static final double ZOMBIE_MAX_HEALTH = 1000.0;

@SubscribeEvent
public void onEntityJoinWorld(EntityJoinWorldEvent e) {
    if (e.entity instanceof EntityZombie) {
        EntityZombie zombie = (EntityZombie) e.entity;
        IAttributeInstance attribute = zombie.getEntityAttribute(SharedMonsterAttributes.maxHealth);
        // Так как обычно значение скорей целое, чем с плавающей запятой, можно обойтись такой проверкой
        if (attribute.getBaseValue() != ZOMBIE_MAX_HEALTH) {
            attribute.setBaseValue(ZOMBIE_MAX_HEALTH);
            zombie.setHealth(ZOMBIE_MAX_HEALTH);
        }
    }
}
 
Сверху