[Change] Loot-Tables for fishing and chests are generated in DataGen

This commit is contained in:
Frank 2023-06-13 22:12:28 +02:00
parent d25a2a63e4
commit bd48693f5a
11 changed files with 256 additions and 216 deletions

View file

@ -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.BCLBiome;
import org.betterx.bclib.api.v2.levelgen.biomes.BiomeAPI; import org.betterx.bclib.api.v2.levelgen.biomes.BiomeAPI;
import org.betterx.bclib.complexmaterials.WoodenComplexMaterial;
import org.betterx.betterend.BetterEnd; import org.betterx.betterend.BetterEnd;
import org.betterx.betterend.registry.EndBiomes; import org.betterx.betterend.registry.EndBiomes;
import org.betterx.betterend.registry.EndBlocks;
import org.betterx.betterend.registry.EndItems; import org.betterx.betterend.registry.EndItems;
import org.betterx.betterend.registry.EndTemplates; 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.item.Items;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.biome.Biome; 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.BuiltInLootTables;
import net.minecraft.world.level.storage.loot.LootPool; 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.EmptyLootItem;
import net.minecraft.world.level.storage.loot.entries.LootItem; 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.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.LocationCheck;
import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; import net.minecraft.world.level.storage.loot.predicates.LootItemCondition;
import net.minecraft.world.level.storage.loot.predicates.LootItemRandomChanceCondition; 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; import net.fabricmc.fabric.api.loot.v2.LootTableEvents;
public class LootTableUtil { public class LootTableUtil {
private static final ResourceLocation COMMON = BetterEnd.makeID("chests/common"); //TODO: 1.20 - find where Betterend Injects Loot into chests and make it conform to regular minecraft
private static final ResourceLocation FOGGY_MUSHROOMLAND = BetterEnd.makeID("chests/foggy_mushroomland"); public static final ResourceLocation VILLAGE_LOOT = BetterEnd.makeID("chests/end_village_loot");
private static final ResourceLocation CHORUS_FOREST = BetterEnd.makeID("chests/chorus_forest"); public static final ResourceLocation VILLAGE_TEMPLATE_LOOT = BetterEnd.makeID("chests/end_village_template_loot");
private static final ResourceLocation SHADOW_FOREST = BetterEnd.makeID("chests/shadow_forest"); public static final ResourceLocation VILLAGE_BONUS_LOOT = BetterEnd.makeID("chests/end_village_bonus_loot");
private static final ResourceLocation LANTERN_WOODS = BetterEnd.makeID("chests/lantern_woods"); public static final ResourceLocation COMMON = BetterEnd.makeID("chests/common");
private static final ResourceLocation UMBRELLA_JUNGLE = BetterEnd.makeID("chests/umbrella_jungle"); public static final ResourceLocation FOGGY_MUSHROOMLAND = BetterEnd.makeID("chests/foggy_mushroomland");
private static final ResourceLocation FISHING_FISH = BetterEnd.makeID("gameplay/fishing/fish"); public static final ResourceLocation CHORUS_FOREST = BetterEnd.makeID("chests/chorus_forest");
private static final ResourceLocation FISHING_TREASURE = BetterEnd.makeID("gameplay/fishing/treasure"); public static final ResourceLocation SHADOW_FOREST = BetterEnd.makeID("chests/shadow_forest");
private static final ResourceLocation FISHING_JUNK = BetterEnd.makeID("gameplay/fishing/junk"); 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)); = 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)); = 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)); = 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)); = 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)); = 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)); = 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)); = 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)); = 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)); = 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)); = 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)); = 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)); = LocationCheck.checkLocation(LocationPredicate.Builder.location().setBiome(EndBiomes.UMBRELLA_JUNGLE));
public static void init() { public static void init() {
//TODO: 1.20 Move to LootTable Datagen
LootTableEvents.MODIFY.register((resourceManager, lootManager, id, table, setter) -> { LootTableEvents.MODIFY.register((resourceManager, lootManager, id, table, setter) -> {
if (BuiltInLootTables.END_CITY_TREASURE.equals(id)) { if (BuiltInLootTables.END_CITY_TREASURE.equals(id)) {
LootPool.Builder builder = LootPool.lootPool(); LootPool.Builder builder = LootPool.lootPool();
@ -110,92 +109,6 @@ public class LootTableUtil {
.add(LootTableReference.lootTableReference(FISHING_JUNK) .add(LootTableReference.lootTableReference(FISHING_JUNK)
.setWeight(10) .setWeight(10)
.setQuality(-2))); .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; 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);
}
} }

View file

@ -1,9 +1,10 @@
package org.betterx.datagen.betterend.recipes; 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.EndBlocks;
import org.betterx.betterend.registry.EndItems; import org.betterx.betterend.registry.EndItems;
import org.betterx.betterend.registry.EndTemplates; import org.betterx.betterend.registry.EndTemplates;
import org.betterx.betterend.util.LootTableUtil;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.Items; 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.LootPool;
import net.minecraft.world.level.storage.loot.LootTable; import net.minecraft.world.level.storage.loot.LootTable;
import net.minecraft.world.level.storage.loot.entries.LootItem; 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.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.parameters.LootContextParamSets;
import net.minecraft.world.level.storage.loot.predicates.LootItemRandomChanceCondition; import net.minecraft.world.level.storage.loot.predicates.LootItemRandomChanceCondition;
import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; import net.minecraft.world.level.storage.loot.providers.number.ConstantValue;
@ -30,23 +33,18 @@ public class EndChestLootTableProvider extends SimpleFabricLootTableProvider {
super(output, LootContextParamSets.CHEST); 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 @Override
public void generate(BiConsumer<ResourceLocation, LootTable.Builder> biConsumer) { public void generate(BiConsumer<ResourceLocation, LootTable.Builder> biConsumer) {
biConsumer.accept( biConsumer.accept(
VILLAGE_LOOT, LootTableUtil.VILLAGE_LOOT,
LootTable.lootTable() LootTable.lootTable()
.withPool(simpleVillageLoot()) .withPool(simpleVillageLoot())
.withPool(plateUpgradeLootPool()) .withPool(plateUpgradeLootPool())
); );
biConsumer.accept( biConsumer.accept(
VILLAGE_TEMPLATE_LOOT, LootTableUtil.VILLAGE_TEMPLATE_LOOT,
LootTable.lootTable() LootTable.lootTable()
.withPool(simpleVillageLoot()) .withPool(simpleVillageLoot())
.withPool(handleLootPool()) .withPool(handleLootPool())
@ -56,15 +54,167 @@ public class EndChestLootTableProvider extends SimpleFabricLootTableProvider {
); );
biConsumer.accept( biConsumer.accept(
VILLAGE_BONUS_LOOT, LootTableUtil.VILLAGE_BONUS_LOOT,
LootTable.lootTable() LootTable.lootTable()
.withPool(leatherHandleLootPool()) .withPool(leatherHandleLootPool())
.withPool(plateUpgradeLootPool()) .withPool(plateUpgradeLootPool())
.withPool(villageBonusLoot()) .withPool(villageBonusLoot())
.withPool(elytraLoot(0.2f)) .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() { private LootPool.Builder upgradeLootPool() {
return LootPool return LootPool
.lootPool() .lootPool()
@ -206,4 +356,74 @@ public class EndChestLootTableProvider extends SimpleFabricLootTableProvider {
.apply(SetItemCountFunction.setCount(ConstantValue.exactly(1))) .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;
}
} }

View file

@ -1,4 +0,0 @@
{
"type": "minecraft:chest",
"pools": []
}

View file

@ -1,4 +0,0 @@
{
"type": "minecraft:chest",
"pools": []
}

View file

@ -1,4 +0,0 @@
{
"type": "minecraft:chest",
"pools": []
}

View file

@ -1,4 +0,0 @@
{
"type": "minecraft:chest",
"pools": []
}

View file

@ -1,4 +0,0 @@
{
"type": "minecraft:chest",
"pools": []
}

View file

@ -1,4 +0,0 @@
{
"type": "minecraft:chest",
"pools": []
}

View file

@ -1,4 +0,0 @@
{
"type": "minecraft:fishing",
"pools": []
}

View file

@ -1,4 +0,0 @@
{
"type": "minecraft:fishing",
"pools": []
}

View file

@ -1,4 +0,0 @@
{
"type": "minecraft:fishing",
"pools": []
}