public void mergeWith(EntityLootBall other) { if (other == this) { return; } other.setDead(); items.addAll(Lists.newArrayList(other.getItemList())); other.getItemList().clear(); ItemHelper.compactItemList(items); }
public EntityLootBall(World world, List<ItemStack> drops, double x, double y, double z) { super(world); items = drops; this.setSize(0.25F, 0.25F); this.yOffset = this.height / 2.0F; this.setPosition(x, y, z); this.motionX = (double) ((float) (Math.random() * 0.20000000298023224D - 0.10000000149011612D)); this.motionY = 0.20000000298023224D; this.motionZ = (double) ((float) (Math.random() * 0.20000000298023224D - 0.10000000149011612D)); ItemHelper.compactItemList(items); }
@Override public void onCollideWithPlayer(EntityPlayer player) { if (this.worldObj.isRemote) { return; } boolean playSound = false; List<ItemStack> list = Lists.newArrayList(); if (player.openContainer instanceof AlchBagContainer) { IInventory inv = ((AlchBagContainer) player.openContainer).inventory; if (ItemHelper.invContainsItem(inv, new ItemStack(ObjHandler.blackHole, 1, 1))) { for (ItemStack stack : items) { ItemStack remain = ItemHelper.pushStackInInv(inv, stack); if (remain == null) { if (!playSound) { playSound = true; } continue; } else { remain = ItemHelper.pushStackInInv(player.inventory, remain); if (remain == null) { if (!playSound) { playSound = true; } continue; } else { list.add(remain); } if (!playSound && !ItemHelper.areItemStacksEqual(stack, remain)) { playSound = true; } } } if (playSound) { this.worldObj.playSoundAtEntity( player, "random.pop", 0.2F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F); } if (list.size() > 0) { items = list; } else { this.setDead(); } return; } } else { ItemStack bag = AlchemicalBag.getFirstBagWithSuctionItem(player, player.inventory.mainInventory); if (bag != null) { ItemStack[] inv = AlchemicalBags.get(player, (byte) bag.getItemDamage()); for (ItemStack stack : items) { ItemStack remain = ItemHelper.pushStackInInv(inv, stack); if (remain == null) { if (!playSound) { playSound = true; } continue; } else { remain = ItemHelper.pushStackInInv(player.inventory, remain); if (remain == null) { if (!playSound) { playSound = true; } continue; } else { list.add(remain); } if (!playSound && !ItemHelper.areItemStacksEqual(stack, remain)) { playSound = true; } } } if (playSound) { AlchemicalBags.set(player, (byte) bag.getItemDamage(), inv); AlchemicalBags.syncPartial(player, bag.getItemDamage()); } } else { for (ItemStack stack : items) { ItemStack remaining = ItemHelper.pushStackInInv(player.inventory, stack); if (remaining == null) { if (!playSound) { playSound = true; } continue; } else { list.add(remaining); } if (!playSound && !ItemHelper.areItemStacksEqual(stack, remaining)) { playSound = true; } } } if (playSound) { this.worldObj.playSoundAtEntity( player, "random.pop", 0.2F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F); } if (list.size() > 0) { items = list; } else { this.setDead(); } } }