Всё тот же AttributeModifear

Версия Minecraft
1.7.10
19
0
Цель - броня должна давать +макс ХП
Java:
    boolean counter = true;
    IAttributeInstance iai;
 
    public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack){
        iai = player.getEntityAttribute(SharedMonsterAttributes.maxHealth);
        if(player.inventory.armorItemInSlot(0).getItem() == Main.WoodenBoots){
            if(counter){
                iai.setBaseValue(iai.getBaseValue() + 20D);
                counter = false;
            }
        } else {
            iai.setBaseValue(iai.getBaseValue() - 20D);
            counter = true;
        }
    
    }
В чём же проблема? хп не возвращается к нормальному при снимании брони.
 
929
30
66
} else { iai.setBaseValue(iai.getBaseValue() - 20D); counter = true; }
А должен?
Java:
public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack){
        iai = player.getEntityAttribute(SharedMonsterAttributes.maxHealth);
        if(player.inventory.armorItemInSlot(0).getItem() == Main.WoodenBoots){
            if(counter){
                iai.setBaseValue(iai.getBaseValue() + 20D);
                counter = false;
            }
        } else if(player.inventory.armorItemInSlot(0).getItem() != Main.WoodenBoots){
            iai.setBaseValue(iai.getBaseValue() - 20D);
            counter = true;
        }
}
 
19
0
уже 3 день пытаюсь решить сие проблему... безуспешно.

при чём логической то ошибки вроде нет, но... не работает.
1 подозрение есть, а если уменьшить это значение нужно как то не так

iai.setBaseValue(iai.getBaseValue() - 20D);

или переменную counter использовать по другому?
 

timaxa007

Модератор
5,831
409
672
при чём логической то ошибки вроде нет
В коде - может и нет, кроме того что, что переменная counter не сбрасываться. А вот как он должен работать есть и даже несколько - у тебя должен работать на каждого игрока индивидуально, т.е.:
Либо использовать Map в котором: ключ - игрок, а значение - твоя переменная boolean.
Либо использовать свой IEEP и в нём использовать переменную boolean.
В обоих случаях нужно будет сохранять и загружать значение, когда выходишь и входишь на карту. И так-же использовать эвент смерти для изменения boolean переменной.
 
19
0
более того, моя попытка найти эвент смерти не увенчалась успехом, если многого прошу, можешь смело игнорировать, я знаю что вам срать что я обижусь)))
 
Последнее редактирование модератором:

timaxa007

Модератор
5,831
409
672
в такой форме мне ничего не понятно...
Ага, всем так не понятно, для новичков, которые им больше понятно виде кода, для изучения.
можно код, как это примерно должно выглядеть?
Эм... Тот который тебе нужен - нету. А примерного для простого понимания, не знаю есть или нет. Но скорее всего - нет.
а то что такое карта
Если ты про Map, то можешь поискать в интернете типа "java HashMap".
Нужно будет сделать типа словаря, что значат подобное слова. IEEP - это сокращение от IExtendedEntityProperties - это интерфейс (interface). IEEP можно тоже найти в поисковике, но лучше в Google, типа "IExtendedEntityProperties Minecraft Forge" (типа ищешь сайт от Forge).
найти эвент смерти
net.minecraftforge.event.entity.living.LivingDeathEvent и проверяешь, что кто умер это игрок.
я знаю что вам срать
Плохо знаешь. Для меня это не так. У меня не столько свободного времени, чтобы писать в любой момент и отвечать правильно на любой вопрос.
 

Icosider

Kotliner
Администратор
3,603
99
664
И так-же использовать эвент смерти для изменения boolean переменной.
Вот только это не сработает с IEEP, ибо объекта игрока как такого не будет. В данном случаи тогда ничего не придётся делать и значения все вернутся к исходному. Поправьте если я, что-то упустил.
 

timaxa007

Модератор
5,831
409
672
@Ivasik, ну да. Для IEEP будет исходное значение. Но бывает всякие писатели кода, что могут сделать, то что не надо и/или не понимая что написали. По этому типа перестраховка, в случаи если он сделает всё по примеру от Forge. и типа будет вопрос почему у него переменная опять не работает, как он этого хочет.
 

tox1cozZ

aka Agravaine
8,456
598
2,893
Вот только это не сработает с IEEP, ибо объекта игрока как такого не будет. В данном случаи тогда ничего не придётся делать и значения все вернутся к исходному. Поправьте если я, что-то упустил.
Игрок еще есть, а данные скопируются в PlayerCloneEvent.
 
Сверху