1)из инвентаря тайлэнтити.какое-то количество определенного предмета?
3)удалить сначала из 1 потом из 2ого не выйдет. может выйти так,что и в первом не хватает, и во втором не хватает и т.п.Удаляй один из первого, второй из второго
HashMap collect = new HashMap<Integer, Integer>();
for(int i =0;i<tte.SIZE;i++){
if(tte.itemStackHandler.getStackInSlot(i).isEmpty()){
continue;
}
if(tte.itemStackHandler.getStackInSlot(i).getCount() <= Integer.valueOf(tte.Count) && i == 0){
continue;
}
if(!collect.isEmpty()){
int all = collect(collect);
if(tte.itemStackHandler.getStackInSlot(i).getCount() < Integer.valueOf(tte.Count)-all) {
collect.put(i,tte.itemStackHandler.getStackInSlot(i).getCount());
}
else{
ArrayList<Integer> keys = new ArrayList<Integer>(collect.keySet());
for(int tmp : keys)
tte.itemStackHandler.setStackInSlot(tmp,ItemStack.EMPTY);
break;
}
}
if(tte.itemStackHandler.getStackInSlot(i).getCount() < Integer.valueOf(tte.Count)){
collect.put(i,tte.itemStackHandler.getStackInSlot(i).getCount());
continue;
}
else
tte.itemStackHandler.getStackInSlot(i).setCount(tte.itemStackHandler.getStackInSlot(i).getCount()-Integer.valueOf(tte.Count));
}
// if(!collect.isEmpty())
ItemHandlerHelper.giveItemToPlayer(player,new ItemStack(tte.itemStackHandler.getStackInSlot(0).getItem(),Integer.valueOf(tte.Count),tte.itemStackHandler.getStackInSlot(0).getMetadata()));
Тогда совсем просто: пробегаешься по всему инвентарю циклом, сравниваешь stackInSlot.stackSize >= нужное_количество, сохраняешь этот стак в переменную и выходишь из цикла с помощью break.При этом по задумке я не хотел бы изменений в 0 слоту...
def consume(list: List[Int], requiredSize: Int): Stream[(Int, Int)] = {
if(list.nonEmpty) {
val consumed = min(requiredSize, list.head)
(requiredSize,consumed) #:: consume(list.tail, requiredSize - consumed)
}else
Stream.empty
}
takeWhule(_._1 > 0)
map(_._2)
этот контейнер только для владельца) а так пользователи могут нажать на только 1 кнопку "купить 4шт за 10$"(к примеру)а другой захочет купить 9?
Это утверждение абсолютно о другом.этот контейнер только для владельца) а так пользователи могут нажать на только 1 кнопку "купить 4шт за 10$"(к примеру)
Мани свои. Да и надо когда-то свой блок с энтити сделать, правда?))сборку не поставить?
ArrayList<Integer> list = new ArrayList<>();
public BuyItem(EntityPlayer player, TestContainerTileEntity tte){
try{
if(!tte.infinity) {
for (int i = 1; i < tte.SIZE; i++) {
int Count = Integer.valueOf(tte.Count);
ItemStack is = tte.itemStackHandler.getStackInSlot(i);
if (tte.itemStackHandler.getStackInSlot(i).isEmpty()) {
continue;
}
int k = is.getCount() + combineAL();
if (!list.isEmpty() && (k > Count)) {
int e = Count;
for (int tmp : list) {
int slot = getSlotFromCount(tmp, tte);
e -= tmp;
tte.itemStackHandler.getStackInSlot(slot).setCount(0);
}
is.setCount(is.getCount() - e);
break;
}
if (is.getCount() >= Count) {
is.setCount(is.getCount() - Count);
break;
}
if (is.getCount() < Count) {
list.add(is.getCount());
continue;
}
}
}
ItemHandlerHelper.giveItemToPlayer(player,new ItemStack(tte.itemStackHandler.getStackInSlot(0).getItem(),Integer.valueOf(tte.Count),tte.itemStackHandler.getStackInSlot(0).getMetadata()));
}catch (Exception e){e.printStackTrace();}
}
private int getSlotFromCount(int count, TestContainerTileEntity tte){
for(int i = 1;i < tte.SIZE;i++)
if(tte.itemStackHandler.getStackInSlot(i).getCount() == count)
return i;
return -999;
}
private int combineAL(){
int tmp = 0;
for(int i : list)
tmp+=i;
return tmp;
}