Стакаются бонусы за улучшения в слотах

Версия Minecraft
1.7.10
API
Forge
Здравствуйте, буду благодарен, если поможете. Я написал типо некий бонус, если положить предмет в слот, то он удваивает выработку энергии (это солнечная панель), улучшений таких есть несколько тиров каждый доёт свой бонус, но я столкнулся с проблемой, что если положить улучшение 1 тира в первый слот и такой же во второй, то их бонус суммируется, а такое не должно быть. Я пытался это решить, но без успешно, надеюсь всё понятно расписал, буду благодарен, если поможете.

Вот код:
Upgrade Bonus:
if (this.generation > 0) {
                for (int i = 3; i < 6; ++i) {
                    if (this.inventory[i] != null && this.inventory[i].getItem() == IndItems.advancedInverterUpgrade) {
                        if (this.storage + this.generation <= this.maxStorage) {
                            this.storage += (this.generation * 10);
                        } else {
                            this.storage = this.maxStorage;
                        }
                    } else {
                        if (this.storage + this.generation <= this.maxStorage) {
                            this.storage += this.generation;
                        } else {
                            this.storage = this.maxStorage;
                        }
                    }
                }
            }
 
Оно суммируются потому что ты суммируешь
Используй для расчёта генерации что-то вроде этого
Calculate:
for (int i = 1; i < upgradeCount + 1; i++) {
     generation += baseGeneration * (2.01D / i);
}
// первое что пришло в голову
 
Последнее редактирование:
generation += baseGeneration * (2.01D / i);
Странная формула, должна даже работать не так, как заявлено =/

Лучше сделать что-то вроде этого (чтоб и масштабировать было легко, и расчёт был "как заявлено"):
Java:
//Около псевдокод на Java
public double getGeneration(IGenerationBoostItem[] items) {
    double baseGen = 100;
    // Начальное значение множителя = 1.0;
    double genMult = 1.0d;

    //Делегируем значение буста на предмет-бустер, таким образом получается 1..n тиров со своими значениями. Главное отрицательными их не сделать ^_^
    for(IGenerationBoostItem item : items) {
        //Значение getBoost должно лежать на (0; 1].
        gen *= item.getBoost();
        // Подобная формула приведёт к тому, что значение genMult будет 0 < genBoost <= 1.
    }
   
    //Поэтому мы его прибавим к 1 и домножим на какое-то базовое значение.
    //Ну и обработаем слувай, когда улучшений нет, конечно же.
    return items.length == 0 ? baseGen : baseGen * (1 + genMult);
}

А автору темы рекомендую разобраться с тем, как работает математическое моделирование, а точнее, зачем в школе дают задачи вида "Боб сделал 34 крана, сколько кранов сделают 2 Боба".
 
Назад
Сверху