Фильтр на предметы.

Версия Minecraft
1.7.10
90
1
Здравствуйте. Как сделать так чтоб в слот моего блока можно было положить только конкретную вещь, например только камень или дубовые доски. А все остальное положить в данный слот нельзя было бы. Что нужно прописать и где? В Tile моего блока?
 
В Container'е блока.
В addSlot методе.
И в тайле.
Что бы тем же хоппером нельзя было добавлять.
 
Doc написал(а):
В Container'е блока.
В addSlot методе.
И в тайле.
Что бы тем же хоппером нельзя было добавлять.

А каким образом это сделать, не подскажите? В методе addSlotToContainer() нельзя указать, какие блоки должен принимать этот слот. Да и в тайле тоже неясно как это сделать. Вернее я сделал, но появилось куча багов, значит как то по другому нужно.
 
Код:
public class SlotD extends Slot {

	public SlotD(IInventory p_i1824_1_, int p_i1824_2_, int p_i1824_3_, int p_i1824_4_) {
		super(p_i1824_1_, p_i1824_2_, p_i1824_3_, p_i1824_4_);
		// TODO Auto-generated constructor stub
	}
	
	@Override
	public boolean isItemValid(ItemStack p_75214_1_) {
		return false;
	}
}
В тайле тот похожий метод.


А еще можно посмотреть например !!!ПЕЧКУ!!!.
Там есть слот только для топлива.
 
Doc написал(а):
А еще можно посмотреть например !!!ПЕЧКУ!!!.
Там есть слот только для топлива.

Я уже тебе это говорил -_-
В 1.7.10 в !!!ПЕЧКЕ!!! обычные слоты
 
WhiteWarrior написал(а):
Я уже тебе это говорил -_-
В 1.7.10 в !!!ПЕЧКЕ!!! обычные слоты

НИЧОСИ

А зачем там:
        this.addSlotToContainer(new SlotFurnace(p_i1812_1_.player, p_i1812_2_, 2, 116, 35));

????
 
Doc написал(а):
НИЧОСИ

А зачем там:
        this.addSlotToContainer(new SlotFurnace(p_i1812_1_.player, p_i1812_2_, 2, 116, 35));

????
в этот слот нельзя ничего положить -_-
 
WhiteWarrior написал(а):
в этот слот нельзя ничего положить -_-

Это Output слот для печки.
Следовательно, это не "обычный слот"...
 
Что то теперь в этот кастомный слот вообще нельзя ничего положить :(

вот так сделал
public class TestSlot extends Slot {
   public TestSlot(IInventory p_i1824_1_, int p_i1824_2_, int p_i1824_3_, int p_i1824_4_) {
       super(p_i1824_1_, p_i1824_2_, p_i1824_3_, p_i1824_4_);
   }

   @Override
   public boolean isItemValid(ItemStack p_75214_1_) {
       if(p_75214_1_!=null){
           return p_75214_1_.getItem().equals(Blocks.cobblestone);
       } else return false;
   }
}
 
Doc написал(а):
WhiteWarrior написал(а):
в этот слот нельзя ничего положить -_-

Это Output слот для печки.
Следовательно, это не "обычный слот"...

Я имел в виду слоты для топлива


Код:
public class ReactorSlot extends Slot {

public ReactorSlot(IInventory inv, int id, int x, int y) {
super(inv, id, x, y);
}
@Override
public boolean isItemValid(ItemStack is) {
 return (is != null && is.getItem() == OverworldObjects.NuclearFuel) ? super.isItemValid(is) : false;

}

}
 
Putnik написал(а):
Что то теперь в этот кастомный слот вообще нельзя ничего положить :(

вот так сделал
public class TestSlot extends Slot {
   public TestSlot(IInventory p_i1824_1_, int p_i1824_2_, int p_i1824_3_, int p_i1824_4_) {
       super(p_i1824_1_, p_i1824_2_, p_i1824_3_, p_i1824_4_);
   }

   @Override
   public boolean isItemValid(ItemStack p_75214_1_) {
       if(p_75214_1_!=null){
           return p_75214_1_.getItem().equals(Blocks.cobblestone);
       } else return false;
   }
}

Омг, топчик.
return p_75214_1_.getItem() instanceof BlockCobblestone;
Вроде так.
 
Спасибо, заработало. Но теперь другая проблема. Во всех моих блоках с гуи одно и то же содержимое слота. тое сть если я в слот одного блока положил пять булыжника, то какой бы свой блок с гуи я не открыл в каждом будет по 5 булыжника, то есть он работает на подобие эндер-сундука. P.S. Однако пр нажатии на слот любого другого блока кроме того, в окоторый я клал булыжник, этот "фантомный" булыжник исчезает.
 
Putnik написал(а):
Спасибо, заработало. Но теперь другая проблема. Во всех моих блоках с гуи одно и то же содержимое слота. тое сть если я в слот одного блока положил пять булыжника, то какой бы  свой блок с гуи я не открыл в каждом будет по 5 булыжника, то есть он работает на подобие эндер-сундука.

Убери модификатор static у слота, у всего вообще в твоем гуи
 
WhiteWarrior написал(а):
Putnik написал(а):
Спасибо, заработало. Но теперь другая проблема. Во всех моих блоках с гуи одно и то же содержимое слота. тое сть если я в слот одного блока положил пять булыжника, то какой бы  свой блок с гуи я не открыл в каждом будет по 5 булыжника, то есть он работает на подобие эндер-сундука.

Убери модификатор static у слота, у всего вообще в твоем гуи
В ходе проверки выяснилось, что при нажатии на слот, в который я не клал булыжник он исчезает. То есть он там есть только визуально, и при взаимодействии со слотом фантомный булыжник исчезает. Статиков в гуи нет вообще.
 
Putnik написал(а):
В ходе проверки выяснилось, что при нажатии на слот, в который я не клал булыжник он исчезает. То есть он там есть только визуально, и при взаимодействии со слотом фантомный булыжник исчезает. Статиков в гуи нет вообще.

А в тайле? убери все статики, иначе все гуи будут как одно
 
WhiteWarrior написал(а):
Putnik написал(а):
В ходе проверки выяснилось, что при нажатии на слот, в который я не клал булыжник он исчезает. То есть он там есть только визуально, и при взаимодействии со слотом фантомный булыжник исчезает. Статиков в гуи нет вообще.

А в тайле? убери все статики, иначе все гуи будут как одно

Я вот думаю может проблема в GuiHandler`e ?
вот такой код:
public class BlockTestGuiHandler implements IGuiHandler {

   TestBlockGui gui;

   @Override
   public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
       switch (ID) {
           case 0: {
               if (world.getBlock(x, y, z).equals(TestMod.BlockTest)) {
                   return new BlockTestContainer(player.inventory, BlockTest.tile);
               }
           }
       }
       return null;
   }

   
   @Override
   public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
           switch (ID) {
               case 0: {
                   if (gui == null) {
                       gui = new TestBlockGui(player.inventory, BlockTest.tile);
                   }
                   if (world.getBlock(x, y, z).equals(TestMod.BlockTest))
                       return gui;
               }
       }
       return null;
   }
}

 
Назад
Сверху