package net.minecraft.util; import java.util.Random; import net.minecraft.inventory.IInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntityDispenser; import net.minecraftforge.common.ChestGenHooks; public class WeightedRandomChestContent extends WeightedRandom.Item { /** The Item/Block ID to generate in the Chest. */ public ItemStack theItemId; /** The minimum chance of item generating. */ public int theMinimumChanceToGenerateItem; /** The maximum chance of item generating. */ public int theMaximumChanceToGenerateItem; private static final String __OBFID = "CL_00001505"; public WeightedRandomChestContent(Item p_i45311_1_, int p_i45311_2_, int p_i45311_3_, int p_i45311_4_, int p_i45311_5_) { super(p_i45311_5_); this.theItemId = new ItemStack(p_i45311_1_, 1, p_i45311_2_); this.theMinimumChanceToGenerateItem = p_i45311_3_; this.theMaximumChanceToGenerateItem = p_i45311_4_; } public WeightedRandomChestContent(ItemStack p_i1558_1_, int p_i1558_2_, int p_i1558_3_, int p_i1558_4_) { super(p_i1558_4_); this.theItemId = p_i1558_1_; this.theMinimumChanceToGenerateItem = p_i1558_2_; this.theMaximumChanceToGenerateItem = p_i1558_3_; } /** * Generates the Chest contents. */ public static void generateChestContents(Random p_76293_0_, WeightedRandomChestContent[] p_76293_1_, IInventory p_76293_2_, int p_76293_3_) { for (int j = 0; j < p_76293_3_; ++j) { WeightedRandomChestContent weightedrandomchestcontent = (WeightedRandomChestContent)WeightedRandom.getRandomItem(p_76293_0_, p_76293_1_); ItemStack[] stacks = weightedrandomchestcontent.generateChestContent(p_76293_0_, p_76293_2_); for (ItemStack item : stacks) { p_76293_2_.setInventorySlotContents(p_76293_0_.nextInt(p_76293_2_.getSizeInventory()), item); } } } public static void generateDispenserContents(Random p_150706_0_, WeightedRandomChestContent[] p_150706_1_, TileEntityDispenser p_150706_2_, int p_150706_3_) { for (int j = 0; j < p_150706_3_; ++j) { WeightedRandomChestContent weightedrandomchestcontent = (WeightedRandomChestContent)WeightedRandom.getRandomItem(p_150706_0_, p_150706_1_); int k = weightedrandomchestcontent.theMinimumChanceToGenerateItem + p_150706_0_.nextInt(weightedrandomchestcontent.theMaximumChanceToGenerateItem - weightedrandomchestcontent.theMinimumChanceToGenerateItem + 1); ItemStack[] stacks = weightedrandomchestcontent.generateChestContent(p_150706_0_, p_150706_2_); for (ItemStack item : stacks) { p_150706_2_.setInventorySlotContents(p_150706_0_.nextInt(p_150706_2_.getSizeInventory()), item); } } } public static WeightedRandomChestContent[] func_92080_a(WeightedRandomChestContent[] p_92080_0_, WeightedRandomChestContent ... p_92080_1_) { WeightedRandomChestContent[] aweightedrandomchestcontent1 = new WeightedRandomChestContent[p_92080_0_.length + p_92080_1_.length]; int i = 0; for (int j = 0; j < p_92080_0_.length; ++j) { aweightedrandomchestcontent1[i++] = p_92080_0_[j]; } WeightedRandomChestContent[] aweightedrandomchestcontent2 = p_92080_1_; int k = p_92080_1_.length; for (int l = 0; l < k; ++l) { WeightedRandomChestContent weightedrandomchestcontent1 = aweightedrandomchestcontent2[l]; aweightedrandomchestcontent1[i++] = weightedrandomchestcontent1; } return aweightedrandomchestcontent1; } // -- Forge hooks /** * Allow a mod to submit a custom implementation that can delegate item stack generation beyond simple stack lookup * * @param random The current random for generation * @param newInventory The inventory being generated (do not populate it, but you can refer to it) * @return An array of {@link ItemStack} to put into the chest */ protected ItemStack[] generateChestContent(Random random, IInventory newInventory) { return ChestGenHooks.generateStacks(random, theItemId, theMinimumChanceToGenerateItem, theMaximumChanceToGenerateItem); } }