Search in sources :

Example 1 with LootTable

use of ivorius.reccomplex.world.storage.loot.LootTable in project RecurrentComplex by Ivorforce.

the class ItemLootGenMultiTag method generateInInventory.

@Override
public void generateInInventory(WorldServer server, IItemHandlerModifiable inventory, Random random, ItemStack stack, int fromSlot) {
    LootTable lootTable = lootTable(stack);
    inventory.setStackInSlot(fromSlot, ItemStack.EMPTY);
    if (lootTable != null) {
        IntegerRange range = getGenerationCount(stack);
        int amount = range.getMin() < range.getMax() ? random.nextInt(range.getMax() - range.getMin() + 1) + range.getMin() : 0;
        TIntList emptySlots = emptySlots(inventory);
        for (int i = 0; i < amount; i++) {
            int slot = emptySlots.isEmpty() ? random.nextInt(inventory.getSlots()) : emptySlots.removeAt(random.nextInt(emptySlots.size()));
            ItemStack generated = lootTable.getRandomItemStack(server, random);
            if (generated != null)
                inventory.setStackInSlot(slot, generated);
        }
    }
}
Also used : LootTable(ivorius.reccomplex.world.storage.loot.LootTable) IntegerRange(ivorius.ivtoolkit.gui.IntegerRange) TIntList(gnu.trove.list.TIntList) ItemStack(net.minecraft.item.ItemStack) GuiEditItemStack(ivorius.reccomplex.gui.loot.GuiEditItemStack)

Example 2 with LootTable

use of ivorius.reccomplex.world.storage.loot.LootTable in project RecurrentComplex by Ivorforce.

the class RCForgeEventHandler method onItemGeneration.

@SubscribeEvent
public void onItemGeneration(ItemGenerationEvent event) {
    Pair<String, Float> pair = null;
    if (event instanceof ItemGenerationEvent.Artifact)
        pair = RCConfig.customArtifactTag;
    else if (event instanceof ItemGenerationEvent.Book)
        pair = RCConfig.customBookTag;
    if (pair != null && pair.getRight() > 0.0f && event.random.nextFloat() < pair.getRight()) {
        LootTable lootTable = WeightedItemCollectionRegistry.INSTANCE.get(pair.getLeft());
        if (lootTable != null)
            event.inventory.setStackInSlot(event.fromSlot, lootTable.getRandomItemStack(event.server, event.random));
        event.setCanceled(true);
    }
}
Also used : LootTable(ivorius.reccomplex.world.storage.loot.LootTable) TextComponentString(net.minecraft.util.text.TextComponentString) ItemGenerationEvent(ivorius.reccomplex.events.ItemGenerationEvent) SubscribeEvent(net.minecraftforge.fml.common.eventhandler.SubscribeEvent)

Aggregations

LootTable (ivorius.reccomplex.world.storage.loot.LootTable)2 TIntList (gnu.trove.list.TIntList)1 IntegerRange (ivorius.ivtoolkit.gui.IntegerRange)1 ItemGenerationEvent (ivorius.reccomplex.events.ItemGenerationEvent)1 GuiEditItemStack (ivorius.reccomplex.gui.loot.GuiEditItemStack)1 ItemStack (net.minecraft.item.ItemStack)1 TextComponentString (net.minecraft.util.text.TextComponentString)1 SubscribeEvent (net.minecraftforge.fml.common.eventhandler.SubscribeEvent)1