Как получить переменную для тайла из предмета

Версия Minecraft
1.12.2
103
2
2
Я всё ещё мучаю улучшения, я придумал схему по которой можно получать бусты от нескольких одинаковых улучшений.
Я думал прописать в каждом предмете переменные fuelcostmultiplier, cooktimemultiplier. И через 3 переменные
ItemStack upgrade1 = this.furnaceItemStacks.get(3);
ItemStack upgrade2 = this.furnaceItemStacks.get(4);
ItemStack upgrade3 = this.furnaceItemStacks.get(5);
в onUpdate у тайлентити получать переменные из предметов и потом в конце складывать результат.
fuelcostmultiplier = upgrade1.fuelcostmultiplier + upgrade2.fuelcostmultiplier + upgrade3.fuelcostmultiplier
но просто так я сделать это не могу.
Какой код надо использовать чтобы это сделать?
 
Решение
в джаве я такую конструкцию же не сделаю?
Сделаешь.

Типо так:
int someName = 0;
ItemStack upgrade = inventory.get(0);
if (upgrade.getItem() instanceof MyClassItem) {
MyClassItem itemUpgrade = (MyClassItem) upgrade.getItem();
someName += itemUpgrade.getFuelCost();
}

И в MyClassItem пишешь
public int getFuelCost() {
return 0; // TODO: Impl.
}
3,005
192
592
но просто так я сделать это не могу.
Каждый раз, когда что-то пробудешь и не получается, ты лучше скинь код, покажи аля "вот смотрите, я думаю, что я должен делать так, а не получается", после люди по той информации, что ты дашь могут дать тебе другое направление, которое тебе нужно.

~~~

У тебя есть SomeClass extends Item, в нем ты указываешь эти параметры.
После чего у тебя из инвентаря идет ItemStack.
У метода ItemStack есть метод getItem, который возвращает объект твоего SomeClass предмета.
Дальше, проверить что этот итем твой - instanceof SomeClass.
Из него ты уже и берешь все необходимые параметры.

(Например, в конструкторе SomeClass ты можешь указывать, например: name и 2 свои переменные)

~~

Какой код надо использовать чтобы это сделать?
И да, тут ты нарушаешь правило, что требуешь код. Сделай то, что написано выше, и по идеи, "мы будем смотреть твой код и исправлять его, а не просто написывать свое".
 
103
2
2
Каждый раз, когда что-то пробудешь и не получается, ты лучше скинь код, покажи аля "вот смотрите, я думаю, что я должен делать так, а не получается", после люди по той информации, что ты дашь могут дать тебе другое направление, которое тебе нужно
Когда я говорил про fuelcostmultiplier = upgrade1.fuelcostmultiplier + upgrade2.fuelcostmultiplier + upgrade3.fuelcostmultiplier, то я имел ввиду что в джаве я такую конструкцию же не сделаю? Типо в классе предмета написать
public int getfuelcost(){
return fuelcostmultiplier;
}
и потом вызывать эту функцию. Типо в Lua или GML я бы так смог, но как такое сделать в Java я не понимаю. Я хочу просто в предметы запихать несколько переменных с разными множителями и потом в каждом обновлении тайлентити проверять наличие улучшений в ячейках. И потом все множители от улучшений складывать. И есть ли сайт со описанием всех функций в forge? потому как я понял что в доке форджа там не всё вроде.
 
3,005
192
592
в джаве я такую конструкцию же не сделаю?
Сделаешь.

Типо так:
int someName = 0;
ItemStack upgrade = inventory.get(0);
if (upgrade.getItem() instanceof MyClassItem) {
MyClassItem itemUpgrade = (MyClassItem) upgrade.getItem();
someName += itemUpgrade.getFuelCost();
}

И в MyClassItem пишешь
public int getFuelCost() {
return 0; // TODO: Impl.
}
 
103
2
2
Сделаешь.

Типо так:
int someName = 0;
ItemStack upgrade = inventory.get(0);
if (upgrade.getItem() instanceof MyClassItem) {
MyClassItem itemUpgrade = (MyClassItem) upgrade.getItem();
someName += itemUpgrade.getFuelCost();
}

И в MyClassItem пишешь
public int getFuelCost() {
return 0; // TODO: Impl.
}
Спасибо, я смог сделать то что хотел.
Вот как выглядит код у меня теперь
Код:
ItemStack upgrade = this.furnaceItemStacks.get(3);
            if (upgrade.getItem() instanceof ItemFurnaceFuelUpgrade) {
                ItemFurnaceFuelUpgrade itemUpgrade = (ItemFurnaceFuelUpgrade) upgrade.getItem();
                fuelcostup1=itemUpgrade.getfuelcost();
            }

            ItemStack upgrade2 = this.furnaceItemStacks.get(4);
            if (upgrade2.getItem() instanceof ItemFurnaceFuelUpgrade) {
                ItemFurnaceFuelUpgrade itemUpgrade = (ItemFurnaceFuelUpgrade) upgrade2.getItem();
                fuelcostup2=itemUpgrade.getfuelcost();
            }

            ItemStack upgrade3 = this.furnaceItemStacks.get(5);
            if (upgrade3.getItem() instanceof ItemFurnaceFuelUpgrade) {
                ItemFurnaceFuelUpgrade itemUpgrade = (ItemFurnaceFuelUpgrade) upgrade3.getItem();
                fuelcostup3=itemUpgrade.getfuelcost();
            }

            this.fuelcostmultiplier=1+fuelcostup1+fuelcostup2+fuelcostup3;
И ещё, можно ли в дебаггере смотреть переменные нужного мне tile entity? потому-что если поставить несколько печей и использовать брейк поинты, то оно проходится по всем экземплярам блока.
 
3,005
192
592
Вот как выглядит код у меня теперь
Можно еще так, кода меньше (кек).
Код:
            this.fuelcostmultiplier = 1;
          
            ItemStack upgrade = this.furnaceItemStacks.get(3);
            if (upgrade.getItem() instanceof ItemFurnaceFuelUpgrade) {
                this.fuelcostmultiplier += ((ItemFurnaceFuelUpgrade) upgrade.getItem()).getfuelcost();
            }

            ItemStack upgrade2 = this.furnaceItemStacks.get(4);
            if (upgrade2.getItem() instanceof ItemFurnaceFuelUpgrade) {
                this.fuelcostmultiplier += ((ItemFurnaceFuelUpgrade) upgrade2.getItem()).getfuelcost();
            }

            ItemStack upgrade3 = this.furnaceItemStacks.get(5);
            if (upgrade3.getItem() instanceof ItemFurnaceFuelUpgrade) {
                this.fuelcostmultiplier += ((ItemFurnaceFuelUpgrade) upgrade3.getItem()).getfuelcost();
            }

И еще, мне кажется, не нужно каждый раз делать сет переменной, сделать текущую и что была в прошлом тике.

По поводу debug'а - сделай просто sout, как вариант.
Брекпоинты работают на все блоки, это нормально
 
1,057
50
234
Java:
this.fuelcostmultiplier = 1;
for(int i = 3; i < 5; i++)
{
    ItemStack upgrade = this.furnaceItemStacks.get(i);
    if (upgrade.getItem() instanceof ItemFurnaceFuelUpgrade) {
         this.fuelcostmultiplier += ((ItemFurnaceFuelUpgrade) upgrade.getItem()).getfuelcost();
    }
}
 
Сверху