diff --git a/src/main/java/org/betterx/betterend/util/LootTableUtil.java b/src/main/java/org/betterx/betterend/util/LootTableUtil.java index 82c413a7..bdb1f74a 100644 --- a/src/main/java/org/betterx/betterend/util/LootTableUtil.java +++ b/src/main/java/org/betterx/betterend/util/LootTableUtil.java @@ -2,10 +2,8 @@ package org.betterx.betterend.util; import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiome; import org.betterx.bclib.api.v2.levelgen.biomes.BiomeAPI; -import org.betterx.bclib.complexmaterials.WoodenComplexMaterial; import org.betterx.betterend.BetterEnd; import org.betterx.betterend.registry.EndBiomes; -import org.betterx.betterend.registry.EndBlocks; import org.betterx.betterend.registry.EndItems; import org.betterx.betterend.registry.EndTemplates; @@ -15,15 +13,11 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.storage.loot.BuiltInLootTables; import net.minecraft.world.level.storage.loot.LootPool; -import net.minecraft.world.level.storage.loot.LootTable; import net.minecraft.world.level.storage.loot.entries.EmptyLootItem; import net.minecraft.world.level.storage.loot.entries.LootItem; import net.minecraft.world.level.storage.loot.entries.LootTableReference; -import net.minecraft.world.level.storage.loot.functions.EnchantWithLevelsFunction; -import net.minecraft.world.level.storage.loot.functions.SetItemDamageFunction; import net.minecraft.world.level.storage.loot.predicates.LocationCheck; import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; import net.minecraft.world.level.storage.loot.predicates.LootItemRandomChanceCondition; @@ -33,43 +27,48 @@ import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator; import net.fabricmc.fabric.api.loot.v2.LootTableEvents; public class LootTableUtil { - private static final ResourceLocation COMMON = BetterEnd.makeID("chests/common"); - private static final ResourceLocation FOGGY_MUSHROOMLAND = BetterEnd.makeID("chests/foggy_mushroomland"); - private static final ResourceLocation CHORUS_FOREST = BetterEnd.makeID("chests/chorus_forest"); - private static final ResourceLocation SHADOW_FOREST = BetterEnd.makeID("chests/shadow_forest"); - private static final ResourceLocation LANTERN_WOODS = BetterEnd.makeID("chests/lantern_woods"); - private static final ResourceLocation UMBRELLA_JUNGLE = BetterEnd.makeID("chests/umbrella_jungle"); - private static final ResourceLocation FISHING_FISH = BetterEnd.makeID("gameplay/fishing/fish"); - private static final ResourceLocation FISHING_TREASURE = BetterEnd.makeID("gameplay/fishing/treasure"); - private static final ResourceLocation FISHING_JUNK = BetterEnd.makeID("gameplay/fishing/junk"); + //TODO: 1.20 - find where Betterend Injects Loot into chests and make it conform to regular minecraft + public static final ResourceLocation VILLAGE_LOOT = BetterEnd.makeID("chests/end_village_loot"); + public static final ResourceLocation VILLAGE_TEMPLATE_LOOT = BetterEnd.makeID("chests/end_village_template_loot"); + public static final ResourceLocation VILLAGE_BONUS_LOOT = BetterEnd.makeID("chests/end_village_bonus_loot"); + public static final ResourceLocation COMMON = BetterEnd.makeID("chests/common"); + public static final ResourceLocation FOGGY_MUSHROOMLAND = BetterEnd.makeID("chests/foggy_mushroomland"); + public static final ResourceLocation CHORUS_FOREST = BetterEnd.makeID("chests/chorus_forest"); + public static final ResourceLocation SHADOW_FOREST = BetterEnd.makeID("chests/shadow_forest"); + public static final ResourceLocation LANTERN_WOODS = BetterEnd.makeID("chests/lantern_woods"); + public static final ResourceLocation UMBRELLA_JUNGLE = BetterEnd.makeID("chests/umbrella_jungle"); + public static final ResourceLocation BIOME_CHEST = BetterEnd.makeID("chests/biome"); + public static final ResourceLocation FISHING_FISH = BetterEnd.makeID("gameplay/fishing/fish"); + public static final ResourceLocation FISHING_TREASURE = BetterEnd.makeID("gameplay/fishing/treasure"); + public static final ResourceLocation FISHING_JUNK = BetterEnd.makeID("gameplay/fishing/junk"); - private static final LootItemCondition.Builder IN_END + + public static final LootItemCondition.Builder IN_END = LocationCheck.checkLocation(LocationPredicate.Builder.location().setDimension(Level.END)); - private static final LootItemCondition.Builder IN_FOGGY_MUSHROOMLAND + public static final LootItemCondition.Builder IN_FOGGY_MUSHROOMLAND = LocationCheck.checkLocation(LocationPredicate.Builder.location().setBiome(EndBiomes.FOGGY_MUSHROOMLAND)); - private static final LootItemCondition.Builder IN_CHORUS_FOREST + public static final LootItemCondition.Builder IN_CHORUS_FOREST = LocationCheck.checkLocation(LocationPredicate.Builder.location().setBiome(EndBiomes.CHORUS_FOREST)); - private static final LootItemCondition.Builder IN_AMBER_LAND + public static final LootItemCondition.Builder IN_AMBER_LAND = LocationCheck.checkLocation(LocationPredicate.Builder.location().setBiome(EndBiomes.AMBER_LAND)); - private static final LootItemCondition.Builder IN_GLOWING_GRASSLANDS + public static final LootItemCondition.Builder IN_GLOWING_GRASSLANDS = LocationCheck.checkLocation(LocationPredicate.Builder.location().setBiome(EndBiomes.GLOWING_GRASSLANDS)); - private static final LootItemCondition.Builder IN_LANTERN_WOODS + public static final LootItemCondition.Builder IN_LANTERN_WOODS = LocationCheck.checkLocation(LocationPredicate.Builder.location().setBiome(EndBiomes.LANTERN_WOODS)); - private static final LootItemCondition.Builder IN_MEGALAKE + public static final LootItemCondition.Builder IN_MEGALAKE = LocationCheck.checkLocation(LocationPredicate.Builder.location().setBiome(EndBiomes.MEGALAKE)); - private static final LootItemCondition.Builder IN_MEGALAKE_GROVE + public static final LootItemCondition.Builder IN_MEGALAKE_GROVE = LocationCheck.checkLocation(LocationPredicate.Builder.location().setBiome(EndBiomes.MEGALAKE_GROVE)); - private static final LootItemCondition.Builder IN_NEON_OASIS + public static final LootItemCondition.Builder IN_NEON_OASIS = LocationCheck.checkLocation(LocationPredicate.Builder.location().setBiome(EndBiomes.NEON_OASIS)); - private static final LootItemCondition.Builder IN_SHADOW_FOREST + public static final LootItemCondition.Builder IN_SHADOW_FOREST = LocationCheck.checkLocation(LocationPredicate.Builder.location().setBiome(EndBiomes.SHADOW_FOREST)); - private static final LootItemCondition.Builder IN_SULPHUR_SPRINGS + public static final LootItemCondition.Builder IN_SULPHUR_SPRINGS = LocationCheck.checkLocation(LocationPredicate.Builder.location().setBiome(EndBiomes.SULPHUR_SPRINGS)); - private static final LootItemCondition.Builder IN_UMBRELLA_JUNGLE + public static final LootItemCondition.Builder IN_UMBRELLA_JUNGLE = LocationCheck.checkLocation(LocationPredicate.Builder.location().setBiome(EndBiomes.UMBRELLA_JUNGLE)); public static void init() { - //TODO: 1.20 Move to LootTable Datagen LootTableEvents.MODIFY.register((resourceManager, lootManager, id, table, setter) -> { if (BuiltInLootTables.END_CITY_TREASURE.equals(id)) { LootPool.Builder builder = LootPool.lootPool(); @@ -110,92 +109,6 @@ public class LootTableUtil { .add(LootTableReference.lootTableReference(FISHING_JUNK) .setWeight(10) .setQuality(-2))); - } else if (id.getNamespace().equals(BetterEnd.MOD_ID)) { - if (FISHING_FISH.equals(id)) { - LootPool.Builder builder = LootPool.lootPool() - .add(LootItem.lootTableItem(EndItems.END_FISH_RAW)); - table.withPool(builder); - return; - } else if (FISHING_JUNK.equals(id)) { - LootPool.Builder builder = LootPool.lootPool() - .add(LootItem.lootTableItem(EndItems.END_LILY_LEAF)) - .add(LootItem.lootTableItem(Items.ENDER_PEARL)) - .add(LootItem.lootTableItem(Items.CHORUS_FRUIT)) - .add(LootItem.lootTableItem(EndItems.GELATINE)) - .add(LootItem.lootTableItem(EndItems.CRYSTAL_SHARDS)) - .add(LootItem.lootTableItem(EndItems.HYDRALUX_PETAL) - .when(IN_SULPHUR_SPRINGS)); - addCharnia(builder); - table.withPool(builder); - return; - } else if (FISHING_TREASURE.equals(id)) { - LootPool.Builder builder = LootPool.lootPool() - .add(LootItem.lootTableItem(EndBlocks.TERMINITE.swordBlade)) - .add(LootItem.lootTableItem(EndBlocks.TERMINITE.forgedPlate)) - .add(LootItem.lootTableItem(EndBlocks.MENGER_SPONGE)) - .add(LootItem.lootTableItem(Items.BOW) - .apply(SetItemDamageFunction.setDamage( - UniformGenerator.between(0.0F, 0.25F))) - .apply(EnchantWithLevelsFunction.enchantWithLevels( - ConstantValue.exactly(30.0F)) - .allowTreasure())) - .add(LootItem.lootTableItem(Items.FISHING_ROD) - .apply(SetItemDamageFunction.setDamage( - UniformGenerator.between(0.0F, 0.25F))) - .apply(EnchantWithLevelsFunction.enchantWithLevels( - ConstantValue.exactly(30.0F)) - .allowTreasure())) - .add(LootItem.lootTableItem(Items.BOOK) - .apply(EnchantWithLevelsFunction.enchantWithLevels( - ConstantValue.exactly(30.0F)) - .allowTreasure())); - table.withPool(builder); - return; - } - - if (FOGGY_MUSHROOMLAND.equals(id)) { - addCommonItems(table); - LootPool.Builder builder = LootPool.lootPool(); - builder.setRolls(UniformGenerator.between(4, 8)); - builder.add(LootItem.lootTableItem(EndBlocks.MOSSY_GLOWSHROOM.getBlock(WoodenComplexMaterial.BLOCK_PLANKS))); - builder.add(LootItem.lootTableItem(EndBlocks.MOSSY_GLOWSHROOM_SAPLING)); - builder.add(LootItem.lootTableItem(EndBlocks.BLUE_VINE_SEED)); - table.withPool(builder); - } else if (CHORUS_FOREST.equals(id)) { - addCommonItems(table); - LootPool.Builder builder = LootPool.lootPool(); - builder.setRolls(UniformGenerator.between(4, 8)); - builder.add(LootItem.lootTableItem(EndBlocks.PYTHADENDRON.getBlock(WoodenComplexMaterial.BLOCK_PLANKS))); - builder.add(LootItem.lootTableItem(EndBlocks.PYTHADENDRON_SAPLING)); - builder.add(LootItem.lootTableItem(EndBlocks.CHORUS_MUSHROOM)); - builder.add(LootItem.lootTableItem(EndTemplates.HANDLE_ATTACHMENT)); - table.withPool(builder); - } else if (SHADOW_FOREST.equals(id)) { - addCommonItems(table); - LootPool.Builder builder = LootPool.lootPool(); - builder.setRolls(UniformGenerator.between(4, 8)); - builder.add(LootItem.lootTableItem(EndBlocks.DRAGON_TREE.getBlock(WoodenComplexMaterial.BLOCK_PLANKS))); - builder.add(LootItem.lootTableItem(EndBlocks.DRAGON_TREE_SAPLING)); - builder.add(LootItem.lootTableItem(EndBlocks.SHADOW_BERRY)); - builder.add(LootItem.lootTableItem(EndItems.SHADOW_BERRY_RAW)); - table.withPool(builder); - } else if (LANTERN_WOODS.equals(id)) { - addCommonItems(table); - LootPool.Builder builder = LootPool.lootPool(); - builder.setRolls(UniformGenerator.between(4, 8)); - builder.add(LootItem.lootTableItem(EndBlocks.LUCERNIA.getBlock(WoodenComplexMaterial.BLOCK_PLANKS))); - builder.add(LootItem.lootTableItem(EndBlocks.LUCERNIA_SAPLING)); - builder.add(LootItem.lootTableItem(EndBlocks.BOLUX_MUSHROOM)); - table.withPool(builder); - } else if (UMBRELLA_JUNGLE.equals(id)) { - addCommonItems(table); - LootPool.Builder builder = LootPool.lootPool(); - builder.setRolls(UniformGenerator.between(4, 8)); - builder.add(LootItem.lootTableItem(EndBlocks.UMBRELLA_TREE.getBlock(WoodenComplexMaterial.BLOCK_PLANKS))); - builder.add(LootItem.lootTableItem(EndBlocks.UMBRELLA_TREE_SAPLING)); - builder.add(LootItem.lootTableItem(EndBlocks.SMALL_JELLYSHROOM)); - table.withPool(builder); - } } }); } @@ -216,61 +129,4 @@ public class LootTableUtil { return COMMON; } - private static void addCharnia(LootPool.Builder pool) { - pool.add(LootItem.lootTableItem(EndBlocks.CHARNIA_CYAN) - .when(IN_GLOWING_GRASSLANDS.or(IN_MEGALAKE).or(IN_MEGALAKE_GROVE).or(IN_NEON_OASIS))); - pool.add(LootItem.lootTableItem(EndBlocks.CHARNIA_LIGHT_BLUE) - .when(IN_FOGGY_MUSHROOMLAND.or(IN_GLOWING_GRASSLANDS) - .or(IN_MEGALAKE) - .or(IN_MEGALAKE_GROVE) - .or(IN_UMBRELLA_JUNGLE))); - pool.add(LootItem.lootTableItem(EndBlocks.CHARNIA_GREEN) - .when(IN_GLOWING_GRASSLANDS.or(IN_NEON_OASIS).or(IN_SULPHUR_SPRINGS).or(IN_UMBRELLA_JUNGLE))); - pool.add(LootItem.lootTableItem(EndBlocks.CHARNIA_RED) - .when(IN_AMBER_LAND.or(IN_LANTERN_WOODS).or(IN_NEON_OASIS))); - pool.add(LootItem.lootTableItem(EndBlocks.CHARNIA_ORANGE) - .when(IN_AMBER_LAND.or(IN_LANTERN_WOODS).or(IN_SULPHUR_SPRINGS))); - pool.add(LootItem.lootTableItem(EndBlocks.CHARNIA_PURPLE) - .when(IN_CHORUS_FOREST.or(IN_SHADOW_FOREST))); - } - - private static void addCommonItems(LootTable.Builder table) { - LootPool.Builder builder = LootPool.lootPool(); - builder.setRolls(UniformGenerator.between(0, 2)); - builder.add(LootItem.lootTableItem(EndItems.MUSIC_DISC_STRANGE_AND_ALIEN)); - builder.add(LootItem.lootTableItem(EndItems.MUSIC_DISC_GRASPING_AT_STARS)); - builder.add(LootItem.lootTableItem(EndItems.MUSIC_DISC_ENDSEEKER)); - builder.add(LootItem.lootTableItem(EndItems.MUSIC_DISC_EO_DRACONA)); - table.withPool(builder); - - builder = LootPool.lootPool(); - builder.setRolls(UniformGenerator.between(4, 8)); - builder.add(LootItem.lootTableItem(EndBlocks.THALLASIUM.ingot)); - builder.add(LootItem.lootTableItem(EndBlocks.THALLASIUM.rawOre)); - builder.add(LootItem.lootTableItem(Items.ENDER_PEARL)); - table.withPool(builder); - - builder = LootPool.lootPool(); - builder.setRolls(UniformGenerator.between(2, 4)); - builder.add(LootItem.lootTableItem(EndBlocks.TERMINITE.ingot)); - builder.add(LootItem.lootTableItem(EndItems.ENDER_SHARD)); - builder.add(LootItem.lootTableItem(EndBlocks.AURORA_CRYSTAL)); - builder.add(LootItem.lootTableItem(EndBlocks.THALLASIUM.axe)); - builder.add(LootItem.lootTableItem(EndBlocks.THALLASIUM.pickaxe)); - builder.add(LootItem.lootTableItem(EndBlocks.THALLASIUM.hoe)); - builder.add(LootItem.lootTableItem(EndBlocks.THALLASIUM.sword)); - builder.add(LootItem.lootTableItem(EndBlocks.THALLASIUM.shovel)); - builder.add(LootItem.lootTableItem(Items.ENDER_EYE)); - builder.add(LootItem.lootTableItem(Blocks.OBSIDIAN)); - table.withPool(builder); - - builder = LootPool.lootPool(); - builder.setRolls(UniformGenerator.between(0, 4)); - builder.add(LootItem.lootTableItem(EndBlocks.FLAVOLITE_RUNED)); - builder.add(LootItem.lootTableItem(EndItems.AETERNIUM_INGOT)); - builder.add(LootItem.lootTableItem(EndItems.AMBER_GEM)); - builder.add(LootItem.lootTableItem(Items.END_CRYSTAL)); - builder.add(LootItem.lootTableItem(Items.GHAST_TEAR)); - table.withPool(builder); - } } diff --git a/src/main/java/org/betterx/datagen/betterend/recipes/EndChestLootTableProvider.java b/src/main/java/org/betterx/datagen/betterend/recipes/EndChestLootTableProvider.java index b0c5a073..d4fef8bb 100644 --- a/src/main/java/org/betterx/datagen/betterend/recipes/EndChestLootTableProvider.java +++ b/src/main/java/org/betterx/datagen/betterend/recipes/EndChestLootTableProvider.java @@ -1,9 +1,10 @@ package org.betterx.datagen.betterend.recipes; -import org.betterx.betterend.BetterEnd; +import org.betterx.bclib.complexmaterials.WoodenComplexMaterial; import org.betterx.betterend.registry.EndBlocks; import org.betterx.betterend.registry.EndItems; import org.betterx.betterend.registry.EndTemplates; +import org.betterx.betterend.util.LootTableUtil; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Items; @@ -11,7 +12,9 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.storage.loot.LootPool; import net.minecraft.world.level.storage.loot.LootTable; import net.minecraft.world.level.storage.loot.entries.LootItem; +import net.minecraft.world.level.storage.loot.functions.EnchantWithLevelsFunction; import net.minecraft.world.level.storage.loot.functions.SetItemCountFunction; +import net.minecraft.world.level.storage.loot.functions.SetItemDamageFunction; import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; import net.minecraft.world.level.storage.loot.predicates.LootItemRandomChanceCondition; import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; @@ -30,23 +33,18 @@ public class EndChestLootTableProvider extends SimpleFabricLootTableProvider { super(output, LootContextParamSets.CHEST); } - //TODO: 1.20 - find where Betterend Injects Loot into chests and make it conform to regular minecraft - public static final ResourceLocation VILLAGE_LOOT = BetterEnd.makeID("chests/end_village_loot"); - public static final ResourceLocation VILLAGE_TEMPLATE_LOOT = BetterEnd.makeID("chests/end_village_template_loot"); - public static final ResourceLocation VILLAGE_BONUS_LOOT = BetterEnd.makeID("chests/end_village_bonus_loot"); - @Override public void generate(BiConsumer biConsumer) { biConsumer.accept( - VILLAGE_LOOT, + LootTableUtil.VILLAGE_LOOT, LootTable.lootTable() .withPool(simpleVillageLoot()) .withPool(plateUpgradeLootPool()) ); biConsumer.accept( - VILLAGE_TEMPLATE_LOOT, + LootTableUtil.VILLAGE_TEMPLATE_LOOT, LootTable.lootTable() .withPool(simpleVillageLoot()) .withPool(handleLootPool()) @@ -56,15 +54,167 @@ public class EndChestLootTableProvider extends SimpleFabricLootTableProvider { ); biConsumer.accept( - VILLAGE_BONUS_LOOT, + LootTableUtil.VILLAGE_BONUS_LOOT, LootTable.lootTable() .withPool(leatherHandleLootPool()) .withPool(plateUpgradeLootPool()) .withPool(villageBonusLoot()) .withPool(elytraLoot(0.2f)) ); + + biConsumer.accept( + LootTableUtil.FISHING_FISH, + LootTable.lootTable() + .withPool(fishing()) + ); + + biConsumer.accept( + LootTableUtil.FISHING_JUNK, + LootTable.lootTable() + .withPool(fishingJunk()) + ); + + biConsumer.accept( + LootTableUtil.FISHING_TREASURE, + LootTable.lootTable() + .withPool(fishingTreasure()) + ); + + biConsumer.accept( + LootTableUtil.FOGGY_MUSHROOMLAND, + includeCommonItems(LootTable.lootTable()) + .withPool(foggyMushroomland()) + ); + + biConsumer.accept( + LootTableUtil.CHORUS_FOREST, + includeCommonItems(LootTable.lootTable()) + .withPool(chorusForest()) + ); + + biConsumer.accept( + LootTableUtil.SHADOW_FOREST, + includeCommonItems(LootTable.lootTable()) + .withPool(shadowForest()) + ); + + biConsumer.accept( + LootTableUtil.LANTERN_WOODS, + includeCommonItems(LootTable.lootTable()) + .withPool(lanternWoods()) + ); + + biConsumer.accept( + LootTableUtil.UMBRELLA_JUNGLE, + includeCommonItems(LootTable.lootTable()) + .withPool(umbrellaJungle()) + ); + + biConsumer.accept( + LootTableUtil.BIOME_CHEST, + includeCommonItems(LootTable.lootTable()) + .withPool(umbrellaJungle().when(LootTableUtil.IN_UMBRELLA_JUNGLE)) + .withPool(lanternWoods().when(LootTableUtil.IN_LANTERN_WOODS)) + .withPool(shadowForest().when(LootTableUtil.IN_SHADOW_FOREST)) + .withPool(chorusForest().when(LootTableUtil.IN_CHORUS_FOREST)) + .withPool(foggyMushroomland().when(LootTableUtil.IN_FOGGY_MUSHROOMLAND)) + ); + + biConsumer.accept( + LootTableUtil.COMMON, + includeCommonItems(LootTable.lootTable()) + ); } + private LootPool.Builder fishing() { + return LootPool + .lootPool() + .setRolls(UniformGenerator.between(1, 2)) + .add(LootItem.lootTableItem(EndItems.END_FISH_RAW)); + } + + private LootPool.Builder fishingJunk() { + final LootPool.Builder builder = LootPool + .lootPool() + .setRolls(UniformGenerator.between(1, 2)) + .add(LootItem.lootTableItem(EndItems.END_LILY_LEAF)) + .add(LootItem.lootTableItem(Items.ENDER_PEARL)) + .add(LootItem.lootTableItem(Items.CHORUS_FRUIT)) + .add(LootItem.lootTableItem(EndItems.GELATINE)) + .add(LootItem.lootTableItem(EndItems.CRYSTAL_SHARDS)) + .add(LootItem.lootTableItem(EndItems.HYDRALUX_PETAL).when(LootTableUtil.IN_SULPHUR_SPRINGS)); + addCharnia(builder); + return builder; + } + + private LootPool.Builder fishingTreasure() { + return LootPool + .lootPool() + .setRolls(ConstantValue.exactly(1)) + .add(LootItem.lootTableItem(EndBlocks.TERMINITE.swordBlade)) + .add(LootItem.lootTableItem(EndBlocks.TERMINITE.forgedPlate)) + .add(LootItem.lootTableItem(EndBlocks.MENGER_SPONGE)) + .add(LootItem.lootTableItem(Items.BOW) + .apply(SetItemDamageFunction.setDamage(UniformGenerator.between(0.0F, 0.25F))) + .apply(EnchantWithLevelsFunction.enchantWithLevels(ConstantValue.exactly(30.0F)) + .allowTreasure())) + .add(LootItem.lootTableItem(Items.FISHING_ROD) + .apply(SetItemDamageFunction.setDamage(UniformGenerator.between(0.0F, 0.25F))) + .apply(EnchantWithLevelsFunction.enchantWithLevels(ConstantValue.exactly(30.0F)) + .allowTreasure())) + .add(LootItem.lootTableItem(Items.BOOK) + .apply(EnchantWithLevelsFunction.enchantWithLevels(ConstantValue.exactly(30.0F)) + .allowTreasure())); + } + + private LootPool.Builder foggyMushroomland() { + return LootPool + .lootPool() + .setRolls(UniformGenerator.between(4, 8)) + .add(LootItem.lootTableItem(EndBlocks.MOSSY_GLOWSHROOM.getBlock(WoodenComplexMaterial.BLOCK_PLANKS))) + .add(LootItem.lootTableItem(EndBlocks.MOSSY_GLOWSHROOM_SAPLING)) + .add(LootItem.lootTableItem(EndBlocks.BLUE_VINE_SEED)); + } + + private LootPool.Builder chorusForest() { + return LootPool + .lootPool() + .setRolls(UniformGenerator.between(4, 8)) + .add(LootItem.lootTableItem(EndBlocks.PYTHADENDRON.getBlock(WoodenComplexMaterial.BLOCK_PLANKS))) + .add(LootItem.lootTableItem(EndBlocks.PYTHADENDRON_SAPLING)) + .add(LootItem.lootTableItem(EndBlocks.CHORUS_MUSHROOM)) + .add(LootItem.lootTableItem(EndTemplates.HANDLE_ATTACHMENT)); + } + + private LootPool.Builder shadowForest() { + return LootPool + .lootPool() + .setRolls(UniformGenerator.between(4, 8)) + .add(LootItem.lootTableItem(EndBlocks.DRAGON_TREE.getBlock(WoodenComplexMaterial.BLOCK_PLANKS))) + .add(LootItem.lootTableItem(EndBlocks.DRAGON_TREE_SAPLING)) + .add(LootItem.lootTableItem(EndBlocks.SHADOW_BERRY)) + .add(LootItem.lootTableItem(EndItems.SHADOW_BERRY_RAW)); + } + + private LootPool.Builder lanternWoods() { + return LootPool + .lootPool() + .setRolls(UniformGenerator.between(4, 8)) + .add(LootItem.lootTableItem(EndBlocks.LUCERNIA.getBlock(WoodenComplexMaterial.BLOCK_PLANKS))) + .add(LootItem.lootTableItem(EndBlocks.LUCERNIA_SAPLING)) + .add(LootItem.lootTableItem(EndBlocks.BOLUX_MUSHROOM)); + } + + private LootPool.Builder umbrellaJungle() { + return LootPool + .lootPool() + .setRolls(UniformGenerator.between(4, 8)) + .add(LootItem.lootTableItem(EndBlocks.UMBRELLA_TREE.getBlock(WoodenComplexMaterial.BLOCK_PLANKS))) + .add(LootItem.lootTableItem(EndBlocks.UMBRELLA_TREE_SAPLING)) + .add(LootItem.lootTableItem(EndBlocks.SMALL_JELLYSHROOM)); + } + + private LootPool.Builder upgradeLootPool() { return LootPool .lootPool() @@ -206,4 +356,74 @@ public class EndChestLootTableProvider extends SimpleFabricLootTableProvider { .apply(SetItemCountFunction.setCount(ConstantValue.exactly(1))) ); } + + private static void addCharnia(LootPool.Builder pool) { + pool.add(LootItem.lootTableItem(EndBlocks.CHARNIA_CYAN) + .when(LootTableUtil.IN_GLOWING_GRASSLANDS.or(LootTableUtil.IN_MEGALAKE) + .or(LootTableUtil.IN_MEGALAKE_GROVE) + .or( + LootTableUtil.IN_NEON_OASIS))); + pool.add(LootItem.lootTableItem(EndBlocks.CHARNIA_LIGHT_BLUE) + .when(LootTableUtil.IN_FOGGY_MUSHROOMLAND.or(LootTableUtil.IN_GLOWING_GRASSLANDS) + .or(LootTableUtil.IN_MEGALAKE) + .or(LootTableUtil.IN_MEGALAKE_GROVE) + .or(LootTableUtil.IN_UMBRELLA_JUNGLE))); + pool.add(LootItem.lootTableItem(EndBlocks.CHARNIA_GREEN) + .when(LootTableUtil.IN_GLOWING_GRASSLANDS.or(LootTableUtil.IN_NEON_OASIS) + .or(LootTableUtil.IN_SULPHUR_SPRINGS) + .or( + LootTableUtil.IN_UMBRELLA_JUNGLE))); + pool.add(LootItem.lootTableItem(EndBlocks.CHARNIA_RED) + .when(LootTableUtil.IN_AMBER_LAND.or(LootTableUtil.IN_LANTERN_WOODS) + .or(LootTableUtil.IN_NEON_OASIS))); + pool.add(LootItem.lootTableItem(EndBlocks.CHARNIA_ORANGE) + .when(LootTableUtil.IN_AMBER_LAND.or(LootTableUtil.IN_LANTERN_WOODS) + .or(LootTableUtil.IN_SULPHUR_SPRINGS))); + pool.add(LootItem.lootTableItem(EndBlocks.CHARNIA_PURPLE) + .when(LootTableUtil.IN_CHORUS_FOREST.or(LootTableUtil.IN_SHADOW_FOREST))); + } + + private static LootTable.Builder includeCommonItems(LootTable.Builder table) { + LootPool.Builder builder = LootPool.lootPool(); + builder.setRolls(UniformGenerator.between(0, 2)); + builder.add(LootItem.lootTableItem(EndItems.MUSIC_DISC_STRANGE_AND_ALIEN)); + builder.add(LootItem.lootTableItem(EndItems.MUSIC_DISC_GRASPING_AT_STARS)); + builder.add(LootItem.lootTableItem(EndItems.MUSIC_DISC_ENDSEEKER)); + builder.add(LootItem.lootTableItem(EndItems.MUSIC_DISC_EO_DRACONA)); + table.withPool(builder); + + builder = LootPool.lootPool(); + builder.setRolls(UniformGenerator.between(4, 8)); + builder.add(LootItem.lootTableItem(EndBlocks.THALLASIUM.ingot)); + builder.add(LootItem.lootTableItem(EndBlocks.THALLASIUM.rawOre)); + builder.add(LootItem.lootTableItem(Items.ENDER_PEARL)); + table.withPool(builder); + + builder = LootPool.lootPool(); + builder.setRolls(UniformGenerator.between(2, 4)); + builder.add(LootItem.lootTableItem(EndBlocks.TERMINITE.ingot)); + builder.add(LootItem.lootTableItem(EndItems.ENDER_SHARD)); + builder.add(LootItem.lootTableItem(EndBlocks.AURORA_CRYSTAL)); + builder.add(LootItem.lootTableItem(EndBlocks.THALLASIUM.axe)); + builder.add(LootItem.lootTableItem(EndBlocks.THALLASIUM.pickaxe)); + builder.add(LootItem.lootTableItem(EndBlocks.THALLASIUM.hoe)); + builder.add(LootItem.lootTableItem(EndBlocks.THALLASIUM.sword)); + builder.add(LootItem.lootTableItem(EndBlocks.THALLASIUM.shovel)); + builder.add(LootItem.lootTableItem(Items.ENDER_EYE)); + builder.add(LootItem.lootTableItem(Blocks.OBSIDIAN)); + table.withPool(builder); + + builder = LootPool.lootPool(); + builder.setRolls(UniformGenerator.between(0, 4)); + builder.add(LootItem.lootTableItem(EndBlocks.FLAVOLITE_RUNED)); + builder.add(LootItem.lootTableItem(EndItems.AETERNIUM_INGOT)); + builder.add(LootItem.lootTableItem(EndItems.AMBER_GEM)); + builder.add(LootItem.lootTableItem(Items.END_CRYSTAL)); + builder.add(LootItem.lootTableItem(Items.GHAST_TEAR)); + table.withPool(builder); + + return table; + } + + } diff --git a/src/main/resources/data/betterend/loot_tables/chests/chorus_forest.json b/src/main/resources/data/betterend/loot_tables/chests/chorus_forest.json deleted file mode 100644 index c135faf3..00000000 --- a/src/main/resources/data/betterend/loot_tables/chests/chorus_forest.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [] -} diff --git a/src/main/resources/data/betterend/loot_tables/chests/common.json b/src/main/resources/data/betterend/loot_tables/chests/common.json deleted file mode 100644 index c135faf3..00000000 --- a/src/main/resources/data/betterend/loot_tables/chests/common.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [] -} diff --git a/src/main/resources/data/betterend/loot_tables/chests/foggy_mushroomland.json b/src/main/resources/data/betterend/loot_tables/chests/foggy_mushroomland.json deleted file mode 100644 index c135faf3..00000000 --- a/src/main/resources/data/betterend/loot_tables/chests/foggy_mushroomland.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [] -} diff --git a/src/main/resources/data/betterend/loot_tables/chests/lantern_woods.json b/src/main/resources/data/betterend/loot_tables/chests/lantern_woods.json deleted file mode 100644 index c135faf3..00000000 --- a/src/main/resources/data/betterend/loot_tables/chests/lantern_woods.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [] -} diff --git a/src/main/resources/data/betterend/loot_tables/chests/shadow_forest.json b/src/main/resources/data/betterend/loot_tables/chests/shadow_forest.json deleted file mode 100644 index c135faf3..00000000 --- a/src/main/resources/data/betterend/loot_tables/chests/shadow_forest.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [] -} diff --git a/src/main/resources/data/betterend/loot_tables/chests/umbrella_jungle.json b/src/main/resources/data/betterend/loot_tables/chests/umbrella_jungle.json deleted file mode 100644 index c135faf3..00000000 --- a/src/main/resources/data/betterend/loot_tables/chests/umbrella_jungle.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [] -} diff --git a/src/main/resources/data/betterend/loot_tables/gameplay/fishing/fish.json b/src/main/resources/data/betterend/loot_tables/gameplay/fishing/fish.json deleted file mode 100644 index 16cac10a..00000000 --- a/src/main/resources/data/betterend/loot_tables/gameplay/fishing/fish.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "minecraft:fishing", - "pools": [] -} diff --git a/src/main/resources/data/betterend/loot_tables/gameplay/fishing/junk.json b/src/main/resources/data/betterend/loot_tables/gameplay/fishing/junk.json deleted file mode 100644 index 16cac10a..00000000 --- a/src/main/resources/data/betterend/loot_tables/gameplay/fishing/junk.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "minecraft:fishing", - "pools": [] -} diff --git a/src/main/resources/data/betterend/loot_tables/gameplay/fishing/treasure.json b/src/main/resources/data/betterend/loot_tables/gameplay/fishing/treasure.json deleted file mode 100644 index 16cac10a..00000000 --- a/src/main/resources/data/betterend/loot_tables/gameplay/fishing/treasure.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "minecraft:fishing", - "pools": [] -}