Получить предмет из матрицы крафта

Версия Minecraft
1.6.4
243
28
207
Здравствуйте! Нужно получить предмет, который находится в слоте результата (блок - аналог верстака). Планирую добавлять результат крафта в инвентарь игрока по нажатию кнопки. Как получить из контейнера предмет, который находится в выходном слоте при крафте?
 
Решение
А, не то. У тебя там NPE, потому что обращаешься к null объекту.


Вот так запили
Код:
@Override
public void actionPerformed(GuiButton button)
{
    // Можно достать инвентарь
    IInventory craftResult = ((ContainerMortar) this.inventorySlots).craftResult;
    
    // А можно достать i-тый слот, где i последовательный номер добавления соответствующего слота в конструкторе контейнера
    Slot slot = this.inventorySlots.getSlot(i);
}
В тайле блока написать такую фунуюкцию и вызывать ее. 

Код:
public ItemStack getResult() 
{
return stack[i];
}


где stack - масив с итемстаками а i - номер того, что хранит рещультат.


(по крайней мере у меня в 1.7 так, и что могли моджанги изменить при переходе с 1.6 на 1.7 я хз)
 
Из матрицы? Тут без Нео не обойтись!
:D
 
Agravaine написал(а):
Так у тебя в контейнере есть инвентарь.

 Я пытаюсь его получить, но постоянно получаю NullPoinerException.
Код:
public class ContainerMortar extends Container {

...
    public IInventory craftResult = new InventoryCraftResult();
...

    public ContainerMortar(InventoryExtended inventory, World world, int par3, int par4, int par5) {
     
...
        this.addSlotToContainer(new SlotCraftingExtended(inventory.player, this.craftMatrix, this.craftResult, 0, 105, 37 - 8));//Нужный слот
...
А вот где нужно получить инвентарь, ну и предмет из него.
Код:
public class GuiMortar extends GuiContainer {
    
...   
    ContainerMortar containerm;
    public IInventory craftResult = containerm.craftResult;//NullPointerException
...
    
    @Override
    public void actionPerformed(GuiButton button) {
     
        if (button == this.craftbutton) {
         
         System.out.println(craftResult.getSizeInventory());
...
Может я не правильно ссылаюсь на контейнер?
 
IInvenotry, Container и Gui - это ты создаешь сам.
 
У тебя там null, потому что инициализатор вызывается раньше конструктора, а контейнер создается именно в нем. Напиши что-то подобное в конструкторе.
((ContainerMortar) this.container).craftResult
 
А, не то. У тебя там NPE, потому что обращаешься к null объекту.


Вот так запили
Код:
@Override
public void actionPerformed(GuiButton button)
{
    // Можно достать инвентарь
    IInventory craftResult = ((ContainerMortar) this.inventorySlots).craftResult;
    
    // А можно достать i-тый слот, где i последовательный номер добавления соответствующего слота в конструкторе контейнера
    Slot slot = this.inventorySlots.getSlot(i);
}
 
Назад
Сверху