Пример #1
0
  protected boolean a(ItemStack itemstack, int i, int j, boolean flag) {
    boolean flag1 = false;
    int k = i;

    if (flag) {
      k = j - 1;
    }

    Slot slot;
    ItemStack itemstack1;

    if (itemstack.isStackable()) {
      while (itemstack.count > 0 && (!flag && k < j || flag && k >= i)) {
        slot = (Slot) this.c.get(k);
        itemstack1 = slot.getItem();
        if (itemstack1 != null
            && itemstack1.id == itemstack.id
            && (!itemstack.usesData() || itemstack.getData() == itemstack1.getData())
            && ItemStack.equals(itemstack, itemstack1)) {
          int l = itemstack1.count + itemstack.count;

          if (l <= itemstack.getMaxStackSize()) {
            itemstack.count = 0;
            itemstack1.count = l;
            slot.e();
            flag1 = true;
          } else if (itemstack1.count < itemstack.getMaxStackSize()) {
            itemstack.count -= itemstack.getMaxStackSize() - itemstack1.count;
            itemstack1.count = itemstack.getMaxStackSize();
            slot.e();
            flag1 = true;
          }
        }

        if (flag) {
          --k;
        } else {
          ++k;
        }
      }
    }

    if (itemstack.count > 0) {
      if (flag) {
        k = j - 1;
      } else {
        k = i;
      }

      while (!flag && k < j || flag && k >= i) {
        slot = (Slot) this.c.get(k);
        itemstack1 = slot.getItem();
        if (itemstack1 == null) {
          slot.set(itemstack.cloneItemStack());
          slot.e();
          itemstack.count = 0;
          flag1 = true;
          break;
        }

        if (flag) {
          --k;
        } else {
          ++k;
        }
      }
    }

    return flag1;
  }
Пример #2
0
  public ItemStack clickItem(int i, int j, int k, EntityHuman entityhuman) {
    ItemStack itemstack = null;
    PlayerInventory playerinventory = entityhuman.inventory;
    Slot slot;
    ItemStack itemstack1;
    int l;
    ItemStack itemstack2;

    if ((k == 0 || k == 1) && (j == 0 || j == 1)) {
      if (i == -999) {
        if (playerinventory.getCarried() != null && i == -999) {
          if (j == 0) {
            entityhuman.drop(playerinventory.getCarried());
            playerinventory.setCarried((ItemStack) null);
          }

          if (j == 1) {
            // CraftBukkit start - store a reference
            ItemStack itemstack3 = playerinventory.getCarried();
            if (itemstack3.count > 0) {
              entityhuman.drop(itemstack3.a(1));
            }

            if (itemstack3.count == 0) {
              // CraftBukkit end
              playerinventory.setCarried((ItemStack) null);
            }
          }
        }
      } else if (k == 1) {
        slot = (Slot) this.c.get(i);
        if (slot != null && slot.a(entityhuman)) {
          itemstack1 = this.b(entityhuman, i);
          if (itemstack1 != null) {
            int i1 = itemstack1.id;

            itemstack = itemstack1.cloneItemStack();
            if (slot != null && slot.getItem() != null && slot.getItem().id == i1) {
              this.a(i, j, true, entityhuman);
            }
          }
        }
      } else {
        if (i < 0) {
          return null;
        }

        slot = (Slot) this.c.get(i);
        if (slot != null) {
          itemstack1 = slot.getItem();
          ItemStack itemstack3 = playerinventory.getCarried();

          if (itemstack1 != null) {
            itemstack = itemstack1.cloneItemStack();
          }

          if (itemstack1 == null) {
            if (itemstack3 != null && slot.isAllowed(itemstack3)) {
              l = j == 0 ? itemstack3.count : 1;
              if (l > slot.a()) {
                l = slot.a();
              }

              // CraftBukkit start
              if (itemstack3.count >= l) {
                slot.set(itemstack3.a(l));
              }
              // CraftBukkit end

              if (itemstack3.count == 0) {
                playerinventory.setCarried((ItemStack) null);
              }
            }
          } else if (slot.a(entityhuman)) {
            if (itemstack3 == null) {
              l = j == 0 ? itemstack1.count : (itemstack1.count + 1) / 2;
              itemstack2 = slot.a(l);
              playerinventory.setCarried(itemstack2);
              if (itemstack1.count == 0) {
                slot.set((ItemStack) null);
              }

              slot.a(entityhuman, playerinventory.getCarried());
            } else if (slot.isAllowed(itemstack3)) {
              if (itemstack1.id == itemstack3.id
                  && (!itemstack1.usesData() || itemstack1.getData() == itemstack3.getData())
                  && ItemStack.equals(itemstack1, itemstack3)) {
                l = j == 0 ? itemstack3.count : 1;
                if (l > slot.a() - itemstack1.count) {
                  l = slot.a() - itemstack1.count;
                }

                if (l > itemstack3.getMaxStackSize() - itemstack1.count) {
                  l = itemstack3.getMaxStackSize() - itemstack1.count;
                }

                itemstack3.a(l);
                if (itemstack3.count == 0) {
                  playerinventory.setCarried((ItemStack) null);
                }

                itemstack1.count += l;
              } else if (itemstack3.count <= slot.a()) {
                slot.set(itemstack3);
                playerinventory.setCarried(itemstack1);
              }
            } else if (itemstack1.id == itemstack3.id
                && itemstack3.getMaxStackSize() > 1
                && (!itemstack1.usesData() || itemstack1.getData() == itemstack3.getData())
                && ItemStack.equals(itemstack1, itemstack3)) {
              l = itemstack1.count;
              if (l > 0 && l + itemstack3.count <= itemstack3.getMaxStackSize()) {
                itemstack3.count += l;
                itemstack1 = slot.a(l);
                if (itemstack1.count == 0) {
                  slot.set((ItemStack) null);
                }

                slot.a(entityhuman, playerinventory.getCarried());
              }
            }
          }

          slot.e();
        }
      }
    } else if (k == 2 && j >= 0 && j < 9) {
      slot = (Slot) this.c.get(i);
      if (slot.a(entityhuman)) {
        itemstack1 = playerinventory.getItem(j);
        boolean flag =
            itemstack1 == null || slot.inventory == playerinventory && slot.isAllowed(itemstack1);

        l = -1;
        if (!flag) {
          l = playerinventory.i();
          flag |= l > -1;
        }

        if (slot.d() && flag) {
          itemstack2 = slot.getItem();
          playerinventory.setItem(j, itemstack2);
          if ((slot.inventory != playerinventory || !slot.isAllowed(itemstack1))
              && itemstack1 != null) {
            if (l > -1) {
              playerinventory.pickup(itemstack1);
              slot.set((ItemStack) null);
              slot.a(entityhuman, itemstack2);
            }
          } else {
            slot.set(itemstack1);
            slot.a(entityhuman, itemstack2);
          }
        } else if (!slot.d() && itemstack1 != null && slot.isAllowed(itemstack1)) {
          playerinventory.setItem(j, (ItemStack) null);
          slot.set(itemstack1);
        }
      }
    } else if (k == 3
        && entityhuman.abilities.canInstantlyBuild
        && playerinventory.getCarried() == null
        && i >= 0) {
      slot = (Slot) this.c.get(i);
      if (slot != null && slot.d()) {
        itemstack1 = slot.getItem().cloneItemStack();
        itemstack1.count = itemstack1.getMaxStackSize();
        playerinventory.setCarried(itemstack1);
      }
    }

    return itemstack;
  }