Posted September 12, 20196 yr So I found this LootUtils class from Draco18s and edited it so I could also add Items to LootTables. If I run my mod within eclipse (runClient) it all works but if I build the mod and use it in my normal minecraft all block do not drop anything. Here's the LootUtils code: Spoiler public class LootUtils { private static Field tablePools; private static Field poolEntries; private static Field entryItem; static { tablePools = ObfuscationReflectionHelper.findField(LootTable.class, "pools"); tablePools.setAccessible(true); poolEntries = ObfuscationReflectionHelper.findField(LootPool.class, "lootEntries"); poolEntries.setAccessible(true); entryItem = ObfuscationReflectionHelper.findField(ItemLootEntry.class, "item"); entryItem.setAccessible(true); } public static boolean removeLootFromTable(LootTable table, Item toRemove) { try { List<LootPool> pools = (List<LootPool>) tablePools.get(table); for(LootPool pool : pools) { List<LootEntry> entries = (List<LootEntry>) poolEntries.get(pool); Iterator<LootEntry> iterator = entries.iterator(); while(iterator.hasNext()) { LootEntry entry = iterator.next(); if(entry instanceof ItemLootEntry) { ItemLootEntry itemLootEntry = (ItemLootEntry) entry; Item item = (Item) entryItem.get(itemLootEntry); if(item == toRemove) { iterator.remove(); return true; } } } } } catch(Exception exception) { exception.printStackTrace(); return false; } return false; } public static LootPool createLootPool(String name, RandomValueRange numRolls, RandomValueRange bonusRolls, LootEntry.Builder entryBuilder, ILootCondition.IBuilder conditionBuilder, ILootFunction.IBuilder functionBuilder) { LootPool.Builder builder = LootPool.builder(); builder.name(name); builder.rolls(numRolls); builder.bonusRolls(bonusRolls.getMin(), bonusRolls.getMax()); builder.addEntry(entryBuilder); builder.acceptCondition(conditionBuilder); builder.acceptFunction(functionBuilder); return builder.build(); } public static void addItemToTable(LootTable table, LootPool pool) { table.addPool(pool); } public static void addItemToTable(LootTable table, Item item, int weight, float probability, int minQuantity, int maxQuantity, String name) { addItemToTable(table, item, weight, 1, probability, minQuantity, maxQuantity, name); } public static void addItemToTable(LootTable table, Item item, int weight, float probability, int quantity, String name) { addItemToTable(table, item, weight, 1, probability, quantity, quantity, name); } private static void addItemToTable(LootTable table, Item item, int weight, float numRolls, float probability, int minQuantity, int maxQuantity, String name) { RandomChance.IBuilder conditionBuilder = RandomChance.builder(probability); SetCount.IBuilder functionBuilder = SetCount.func_215932_a(new RandomValueRange(minQuantity, maxQuantity)); ItemLootEntry.Builder entryBuilder = ItemLootEntry.builder(item); entryBuilder.weight(weight); entryBuilder.quality(1); entryBuilder.acceptCondition(conditionBuilder); entryBuilder.acceptFunction(functionBuilder); LootPool newPool = createLootPool(name, new RandomValueRange(numRolls), new RandomValueRange(0), entryBuilder, conditionBuilder, functionBuilder); addItemToTable(table, newPool); } And my Event: Spoiler private static final ResourceLocation STONE = new ResourceLocation("blocks/stone"); @SubscribeEvent public void onLootTableLoad(LootTableLoadEvent event) { LootTable table = event.getTable(); if(event.getName().equals(STONE)) { LootUtils.removeLootFromTable(table, Item.getItemFromBlock(Blocks.COBBLESTONE)); LootUtils.addItemToTable(table, ItemRegistry.ROCK, 10, 1f, 2, 4, "rock"); } } Edited September 12, 20196 yr by Boy132 solved :)
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.