package game.item; import java.util.Collections; import game.inventory.IInventory; import game.rng.Random; import game.rng.RngItem; import game.rng.WeightedList; import game.tileentity.TileEntityDispenser; public class RngLoot extends RngItem { private ItemStack item; private int minStackSize; private int maxStackSize; public RngLoot(Item item, int amount, int min, int max, int weight) { super(weight); this.item = new ItemStack(item, 1, amount); this.minStackSize = min; this.maxStackSize = max; } public RngLoot(ItemStack stack, int min, int max, int weight) { super(weight); this.item = stack; this.minStackSize = min; this.maxStackSize = max; } public ItemStack getItem(Random rand) { if(this.item == null) return null; ItemStack stack = this.item.copy(); stack.stackSize = this.minStackSize + rand.zrange(this.maxStackSize - this.minStackSize + 1); return stack; } public static void generateChestContents(Random random, WeightedList list, IInventory inv, int max) { for (int i = 0; i < max; ++i) { RngLoot loot = (RngLoot)list.pick(random); int j = loot.minStackSize + random.zrange(loot.maxStackSize - loot.minStackSize + 1); if (loot.item.getMaxStackSize() >= j) { ItemStack itemstack1 = loot.item.copy(); itemstack1.stackSize = j; inv.setInventorySlotContents(random.zrange(inv.getSizeInventory()), itemstack1); } else { for (int k = 0; k < j; ++k) { ItemStack itemstack = loot.item.copy(); itemstack.stackSize = 1; inv.setInventorySlotContents(random.zrange(inv.getSizeInventory()), itemstack); } } } } public static void generateDispenserContents(Random random, WeightedList list, TileEntityDispenser dispenser, int max) { for (int i = 0; i < max; ++i) { RngLoot loot = (RngLoot)list.pick(random); int j = loot.minStackSize + random.zrange(loot.maxStackSize - loot.minStackSize + 1); if (loot.item.getMaxStackSize() >= j) { ItemStack itemstack1 = loot.item.copy(); itemstack1.stackSize = j; dispenser.setInventorySlotContents(random.zrange(dispenser.getSizeInventory()), itemstack1); } else { for (int k = 0; k < j; ++k) { ItemStack itemstack = loot.item.copy(); itemstack.stackSize = 1; dispenser.setInventorySlotContents(random.zrange(dispenser.getSizeInventory()), itemstack); } } } } public static WeightedList addToList(WeightedList items, RngLoot... add) { WeightedList list = new WeightedList(items); Collections.addAll(list, add); return list; } }