Move vanilla loot tables to datagen. Changes:

- Fixed coarse dirt not dropping gemstones or wheat worms
- Fixed desert well loot tables
- Adjusted looting amounts in some places
- Gemstone and wheatworm drops are now affected by looting
- All crops are now recognised by bees and will preserve farmland
This commit is contained in:
Sollace 2024-03-19 13:12:40 +00:00
parent e07377f91e
commit 00b625815c
No known key found for this signature in database
GPG key ID: E52FACE7B5C773DB
27 changed files with 245 additions and 1001 deletions

View file

@ -1,10 +1,12 @@
package com.minelittlepony.unicopia.datagen; package com.minelittlepony.unicopia.datagen;
import com.minelittlepony.unicopia.datagen.providers.UBlockLootTableProvider;
import com.minelittlepony.unicopia.datagen.providers.UBlockTagProvider; import com.minelittlepony.unicopia.datagen.providers.UBlockTagProvider;
import com.minelittlepony.unicopia.datagen.providers.UItemTagProvider; import com.minelittlepony.unicopia.datagen.providers.UItemTagProvider;
import com.minelittlepony.unicopia.datagen.providers.UModelProvider; import com.minelittlepony.unicopia.datagen.providers.UModelProvider;
import com.minelittlepony.unicopia.datagen.providers.URecipeProvider; import com.minelittlepony.unicopia.datagen.providers.URecipeProvider;
import com.minelittlepony.unicopia.datagen.providers.loot.UBlockAdditionsLootTableProvider;
import com.minelittlepony.unicopia.datagen.providers.loot.UBlockLootTableProvider;
import com.minelittlepony.unicopia.datagen.providers.loot.UChestAdditionsLootTableProvider;
import com.minelittlepony.unicopia.server.world.UWorldGen; import com.minelittlepony.unicopia.server.world.UWorldGen;
import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint; import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint;
@ -27,6 +29,8 @@ public class Datagen implements DataGeneratorEntrypoint {
pack.addProvider(UModelProvider::new); pack.addProvider(UModelProvider::new);
pack.addProvider(URecipeProvider::new); pack.addProvider(URecipeProvider::new);
pack.addProvider(UBlockLootTableProvider::new); pack.addProvider(UBlockLootTableProvider::new);
pack.addProvider(UBlockAdditionsLootTableProvider::new);
pack.addProvider(UChestAdditionsLootTableProvider::new);
} }
@Override @Override

View file

@ -20,7 +20,7 @@ import net.minecraft.data.client.TextureKey;
import net.minecraft.data.client.TextureMap; import net.minecraft.data.client.TextureMap;
public class UModelProvider extends FabricModelProvider { public class UModelProvider extends FabricModelProvider {
static final Map<Block, Item> FRUITS = Map.of(UBlocks.GREEN_APPLE, UItems.GREEN_APPLE, public static final Map<Block, Item> FRUITS = Map.of(UBlocks.GREEN_APPLE, UItems.GREEN_APPLE,
UBlocks.GOLDEN_APPLE, Items.GOLDEN_APPLE, UBlocks.GOLDEN_APPLE, Items.GOLDEN_APPLE,
UBlocks.MANGO, UItems.MANGO, UBlocks.MANGO, UItems.MANGO,
UBlocks.SOUR_APPLE, UItems.SOUR_APPLE, UBlocks.SOUR_APPLE, UItems.SOUR_APPLE,

View file

@ -0,0 +1,126 @@
package com.minelittlepony.unicopia.datagen.providers.loot;
import java.util.function.Function;
import com.minelittlepony.unicopia.item.UItems;
import com.minelittlepony.unicopia.item.enchantment.UEnchantments;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricBlockLootTableProvider;
import net.minecraft.block.Block;
import net.minecraft.block.Blocks;
import net.minecraft.data.server.loottable.BlockLootTableGenerator;
import net.minecraft.enchantment.Enchantments;
import net.minecraft.loot.LootPool;
import net.minecraft.loot.LootTable;
import net.minecraft.loot.condition.LootCondition;
import net.minecraft.loot.condition.MatchToolLootCondition;
import net.minecraft.loot.condition.RandomChanceLootCondition;
import net.minecraft.loot.condition.TableBonusLootCondition;
import net.minecraft.loot.entry.ItemEntry;
import net.minecraft.loot.entry.LootPoolEntry;
import net.minecraft.loot.function.ApplyBonusLootFunction;
import net.minecraft.loot.function.SetCountLootFunction;
import net.minecraft.loot.provider.number.ConstantLootNumberProvider;
import net.minecraft.loot.provider.number.UniformLootNumberProvider;
import net.minecraft.predicate.NumberRange;
import net.minecraft.predicate.item.EnchantmentPredicate;
import net.minecraft.predicate.item.ItemPredicate;
import net.minecraft.util.Identifier;
public class UBlockAdditionsLootTableProvider extends FabricBlockLootTableProvider {
public static final LootCondition.Builder WITH_GEM_FINDER = MatchToolLootCondition.builder(ItemPredicate.Builder.create().enchantment(new EnchantmentPredicate(UEnchantments.GEM_FINDER, NumberRange.IntRange.atLeast(1))));
public static final LootCondition.Builder WITHOUT_SILK_TOUCH_AND_GEM_FINDER = WITHOUT_SILK_TOUCH.and(WITH_GEM_FINDER);
public static final float[] GEMSTONES_FORTUNE_CHANCE = { 0.1F, 0.14285715F, 0.25F, 1F };
public UBlockAdditionsLootTableProvider(FabricDataOutput dataOutput) {
super(dataOutput);
}
@Override
public String getName() {
return "Block Loot Table Additions";
}
@Override
public void generate() {
addVanillaDrop(Blocks.STONE, this::gemstoneDrops);
addVanillaDrop(Blocks.DIRT, block -> gemstoneAndWormDrops(block, 2, 0.05F, 0.052222223F, 0.055F, 0.066666665F, 0.1F));
addVanillaDrop(Blocks.COARSE_DIRT, block -> gemstoneAndWormDrops(block, 2, 0.05F, 0.052222223F, 0.055F, 0.066666665F, 0.1F));
addVanillaDrop(Blocks.GRASS_BLOCK, block -> gemstoneAndWormDrops(block, 2, 0.05F, 0.052222223F, 0.055F, 0.066666665F, 0.1F));
addVanillaDrop(Blocks.GRASS, block -> wormDrops(block, 2, 0.05F, 0.052222223F, 0.055F, 0.066666665F, 0.1F));
addVanillaDrop(Blocks.MYCELIUM, block -> wormDrops(block, 3, 0.06F, 0.062222223F, 0.065F, 0.077777776F, 0.2F));
addVanillaDrop(Blocks.PODZOL, block -> wormDrops(block, 4, 0.06F, 0.062222223F, 0.065F, 0.077777776F, 0.2F));
addVanillaDrop(Blocks.DIAMOND_ORE, this::crystalShardDrops);
addVanillaDrop(Blocks.DEEPSLATE_DIAMOND_ORE, this::crystalShardDrops);
}
private void addVanillaDrop(Block block, Function<Block, LootTable.Builder> lootTableFunction) {
lootTables.put(new Identifier("unicopiamc", block.getLootTableId().getPath()), lootTableFunction.apply(block));
}
public LootTable.Builder wormDrops(Block block, int max, float...chance) {
return LootTable.builder()
.pool(LootPool.builder()
.rolls(ConstantLootNumberProvider.create(1))
.conditionally(WITHOUT_SILK_TOUCH)
.with(wheatwormDrops(block, max, chance))
);
}
public LootTable.Builder gemstoneAndWormDrops(Block block, int max, float...chance) {
return LootTable.builder()
.pool(LootPool.builder()
.rolls(ConstantLootNumberProvider.create(1))
.conditionally(WITHOUT_SILK_TOUCH)
.with(gemstoneDrops(block, 0.1F))
.with(wheatwormDrops(block, max, chance))
);
}
public LootTable.Builder gemstoneDrops(Block block) {
return LootTable.builder()
.pool(LootPool.builder()
.rolls(ConstantLootNumberProvider.create(1))
.conditionally(WITHOUT_SILK_TOUCH)
.with(gemstoneDrops(block, 0.1F))
);
}
public LootTable.Builder crystalShardDrops(Block block) {
return LootTable.builder()
.pool(LootPool.builder()
.rolls(ConstantLootNumberProvider.create(1))
.conditionally(WITHOUT_SILK_TOUCH)
.with(applyExplosionDecay(block, ItemEntry.builder(UItems.CRYSTAL_SHARD)
.apply(SetCountLootFunction.builder(UniformLootNumberProvider.create(1, 2)))
.apply(ApplyBonusLootFunction.oreDrops(Enchantments.FORTUNE))
)
.conditionally(RandomChanceLootCondition.builder(0.25F))
)
);
}
public LootPoolEntry.Builder<?> gemstoneDrops(Block block, float chance) {
return applyExplosionDecay(block, ItemEntry.builder(UItems.GEMSTONE)
.apply(SetCountLootFunction.builder(UniformLootNumberProvider.create(1, 2)))
)
.conditionally(WITH_GEM_FINDER)
.conditionally(RandomChanceLootCondition.builder(0.1F))
.conditionally(TableBonusLootCondition.builder(Enchantments.FORTUNE, GEMSTONES_FORTUNE_CHANCE));
}
public LootPoolEntry.Builder<?> wheatwormDrops(Block block, int max, float...chance) {
return applyExplosionDecay(block, ItemEntry.builder(UItems.WHEAT_WORMS)
.apply(SetCountLootFunction.builder(UniformLootNumberProvider.create(1, max)))
)
.conditionally(TableBonusLootCondition.builder(Enchantments.FORTUNE, chance));
}
public static LootTable.Builder dropsWithGemfinding(Block drop, LootPoolEntry.Builder<?> child) {
return BlockLootTableGenerator.drops(drop, WITHOUT_SILK_TOUCH_AND_GEM_FINDER, child);
}
}

View file

@ -1,7 +1,8 @@
package com.minelittlepony.unicopia.datagen.providers; package com.minelittlepony.unicopia.datagen.providers.loot;
import java.util.List; import java.util.List;
import com.minelittlepony.unicopia.block.UBlocks; import com.minelittlepony.unicopia.block.UBlocks;
import com.minelittlepony.unicopia.datagen.providers.UModelProvider;
import com.minelittlepony.unicopia.item.UItems; import com.minelittlepony.unicopia.item.UItems;
import com.minelittlepony.unicopia.server.world.Tree; import com.minelittlepony.unicopia.server.world.Tree;
import com.minelittlepony.unicopia.server.world.UTreeGen; import com.minelittlepony.unicopia.server.world.UTreeGen;
@ -30,7 +31,6 @@ public class UBlockLootTableProvider extends FabricBlockLootTableProvider {
@Override @Override
public void generate() { public void generate() {
// simple drops // simple drops
List.of( List.of(
UBlocks.CARVED_CLOUD, UBlocks.UNSTABLE_CLOUD, UBlocks.CARVED_CLOUD, UBlocks.UNSTABLE_CLOUD,
@ -111,7 +111,7 @@ public class UBlockLootTableProvider extends FabricBlockLootTableProvider {
addDrop(UBlocks.FROSTED_OBSIDIAN, Blocks.OBSIDIAN); addDrop(UBlocks.FROSTED_OBSIDIAN, Blocks.OBSIDIAN);
} }
public LootTable.Builder fruitLeavesDrops(Block leaves) { private LootTable.Builder fruitLeavesDrops(Block leaves) {
return LootTable.builder() return LootTable.builder()
.pool(LootPool.builder() .pool(LootPool.builder()
.rolls(ConstantLootNumberProvider.create(1)) .rolls(ConstantLootNumberProvider.create(1))
@ -128,4 +128,5 @@ public class UBlockLootTableProvider extends FabricBlockLootTableProvider {
) )
); );
} }
} }

View file

@ -0,0 +1,109 @@
package com.minelittlepony.unicopia.datagen.providers.loot;
import java.util.function.BiConsumer;
import com.minelittlepony.unicopia.UTags;
import com.minelittlepony.unicopia.item.UItems;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.datagen.v1.provider.SimpleFabricLootTableProvider;
import net.minecraft.loot.LootTable.Builder;
import net.minecraft.loot.LootPool;
import net.minecraft.loot.LootTable;
import net.minecraft.loot.LootTables;
import net.minecraft.loot.context.LootContextTypes;
import net.minecraft.loot.entry.ItemEntry;
import net.minecraft.loot.entry.TagEntry;
import net.minecraft.loot.function.SetCountLootFunction;
import net.minecraft.loot.provider.number.UniformLootNumberProvider;
import net.minecraft.util.Identifier;
public class UChestAdditionsLootTableProvider extends SimpleFabricLootTableProvider {
public UChestAdditionsLootTableProvider(FabricDataOutput dataOutput) {
super(dataOutput, LootContextTypes.CHEST);
}
@Override
public void accept(BiConsumer<Identifier, Builder> exporter) {
acceptAdditions((id, builder) -> exporter.accept(new Identifier("unicopiamc", id.getPath()), builder));
}
public void acceptAdditions(BiConsumer<Identifier, Builder> exporter) {
exporter.accept(LootTables.ABANDONED_MINESHAFT_CHEST, LootTable.builder().pool(LootPool.builder()
.rolls(UniformLootNumberProvider.create(2, 4))
.with(ItemEntry.builder(UItems.GRYPHON_FEATHER).weight(2).apply(SetCountLootFunction.builder(UniformLootNumberProvider.create(1, 4))))
));
exporter.accept(LootTables.WOODLAND_MANSION_CHEST, LootTable.builder().pool(LootPool.builder()
.rolls(UniformLootNumberProvider.create(2, 4))
.with(ItemEntry.builder(UItems.GRYPHON_FEATHER).weight(10).apply(SetCountLootFunction.builder(UniformLootNumberProvider.create(1, 7))))
.with(ItemEntry.builder(UItems.GOLDEN_WING).weight(1).apply(SetCountLootFunction.builder(UniformLootNumberProvider.create(1, 2))))
.with(TagEntry.expandBuilder(UTags.FRESH_APPLES).weight(1).apply(SetCountLootFunction.builder(UniformLootNumberProvider.create(2, 5))))
));
exporter.accept(LootTables.VILLAGE_FLETCHER_CHEST, LootTable.builder().pool(LootPool.builder()
.rolls(UniformLootNumberProvider.create(2, 4))
.with(ItemEntry.builder(UItems.GRYPHON_FEATHER).weight(10).apply(SetCountLootFunction.builder(UniformLootNumberProvider.create(1, 2))))
.with(ItemEntry.builder(UItems.PEGASUS_FEATHER).weight(1).apply(SetCountLootFunction.builder(UniformLootNumberProvider.create(1, 2))))
));
exporter.accept(LootTables.VILLAGE_PLAINS_CHEST, LootTable.builder().pool(LootPool.builder()
.rolls(UniformLootNumberProvider.create(3, 4))
.with(TagEntry.expandBuilder(UTags.FRESH_APPLES).weight(1))
.with(TagEntry.expandBuilder(UTags.APPLE_SEEDS).weight(1))
));
exporter.accept(LootTables.ANCIENT_CITY_CHEST, LootTable.builder().pool(LootPool.builder()
.rolls(UniformLootNumberProvider.create(0, 1))
.with(ItemEntry.builder(UItems.GROGARS_BELL).weight(1))
));
exporter.accept(LootTables.BURIED_TREASURE_CHEST, LootTable.builder().pool(LootPool.builder()
.rolls(UniformLootNumberProvider.create(1, 4))
.with(ItemEntry.builder(UItems.PEARL_NECKLACE).weight(1))
.with(TagEntry.expandBuilder(UTags.item("food_types/shells")).weight(3))
));
exporter.accept(LootTables.SHIPWRECK_SUPPLY_CHEST, LootTable.builder().pool(LootPool.builder()
.rolls(UniformLootNumberProvider.create(1, 6))
.with(TagEntry.expandBuilder(UTags.item("food_types/shells")).weight(3))
));
exporter.accept(LootTables.SHIPWRECK_TREASURE_CHEST, LootTable.builder().pool(LootPool.builder()
.rolls(UniformLootNumberProvider.create(1, 4))
.with(ItemEntry.builder(UItems.PEARL_NECKLACE).weight(1))
.with(TagEntry.expandBuilder(UTags.item("food_types/shells")).weight(3))
));
exporter.accept(LootTables.UNDERWATER_RUIN_BIG_CHEST, LootTable.builder().pool(LootPool.builder()
.rolls(UniformLootNumberProvider.create(1, 2))
.with(ItemEntry.builder(UItems.PEARL_NECKLACE).weight(1))
.with(ItemEntry.builder(UItems.SHELLY).weight(4))
.with(TagEntry.expandBuilder(UTags.item("food_types/shells")).weight(8))
));
exporter.accept(LootTables.UNDERWATER_RUIN_SMALL_CHEST, LootTable.builder().pool(LootPool.builder()
.rolls(UniformLootNumberProvider.create(1, 4))
.with(TagEntry.expandBuilder(UTags.item("food_types/shells")).weight(1))
));
exporter.accept(LootTables.DESERT_WELL_ARCHAEOLOGY, LootTable.builder().pool(LootPool.builder()
.rolls(UniformLootNumberProvider.create(1, 4))
.with(ItemEntry.builder(UItems.WEIRD_ROCK).weight(2))
.with(ItemEntry.builder(UItems.ROCK).weight(1))
.with(ItemEntry.builder(UItems.TOM).weight(1))
.with(ItemEntry.builder(UItems.ROCK_STEW).weight(1))
.with(ItemEntry.builder(UItems.PEBBLES).weight(1))
.with(ItemEntry.builder(UItems.SHELLY).weight(1))
.with(TagEntry.expandBuilder(UTags.item("food_types/shells")).weight(1))
.with(ItemEntry.builder(UItems.PEARL_NECKLACE).weight(1))
));
exporter.accept(LootTables.TRAIL_RUINS_COMMON_ARCHAEOLOGY, LootTable.builder().pool(LootPool.builder()
.rolls(UniformLootNumberProvider.create(1, 4))
.with(ItemEntry.builder(UItems.MEADOWBROOKS_STAFF).weight(2))
.with(ItemEntry.builder(UItems.BOTCHED_GEM).weight(3))
.with(ItemEntry.builder(UItems.PEGASUS_FEATHER).weight(1))
));
exporter.accept(LootTables.TRAIL_RUINS_RARE_ARCHAEOLOGY, LootTable.builder().pool(LootPool.builder()
.rolls(UniformLootNumberProvider.create(1, 4))
.with(ItemEntry.builder(UItems.BROKEN_SUNGLASSES).weight(2))
.with(ItemEntry.builder(UItems.EMPTY_JAR).weight(2))
.with(ItemEntry.builder(UItems.MUSIC_DISC_CRUSADE).weight(1))
));
}
}

View file

@ -1,54 +0,0 @@
{
"type": "minecraft:archaeology",
"pools": [
{
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:item",
"name": "unicopia:weird_rock",
"weight": 2
},
{
"type": "minecraft:item",
"name": "unicopia:rock",
"weight": 1
},
{
"type": "minecraft:item",
"name": "unicopia:tom",
"weight": 1
},
{
"type": "minecraft:item",
"name": "unicopia:rock_stew",
"weight": 1
},
{
"type": "minecraft:item",
"name": "unicopia:pebbles",
"weight": 1
},
{
"type": "minecraft:item",
"name": "unicopia:shelly",
"weight": 1
},
{
"type": "minecraft:tag",
"name": "unicopia:food_types/shells",
"expand": true,
"weight": 2
},
{
"type": "minecraft:tag",
"name": "unicopia:food_types/pearl_necklace",
"expand": true,
"weight": 1
}
],
"rolls": 1.0
}
],
"random_sequence": "minecraft:archaeology/desert_well"
}

View file

@ -1,27 +0,0 @@
{
"type": "minecraft:archaeology",
"pools": [
{
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:item",
"name": "unicopia:meadowbrooks_staff",
"weight": 2
},
{
"type": "minecraft:item",
"name": "unicopia:botched_gem",
"weight": 3
},
{
"type": "minecraft:item",
"name": "unicopia:pegasus_feather",
"weight": 1
}
],
"rolls": 1.0
}
],
"random_sequence": "minecraft:archaeology/desert_well"
}

View file

@ -1,27 +0,0 @@
{
"type": "minecraft:archaeology",
"pools": [
{
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:item",
"name": "unicopia:broken_sunglasses",
"weight": 2
},
{
"type": "minecraft:item",
"name": "unicopia:empty_jar",
"weight": 2
},
{
"type": "minecraft:item",
"name": "unicopia:music_disc_crusade",
"weight": 1
}
],
"rolls": 1.0
}
],
"random_sequence": "minecraft:archaeology/desert_well"
}

View file

@ -1,92 +0,0 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"bonus_rolls": 0,
"conditions": [
{
"condition": "minecraft:inverted",
"term": {
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
}
],
"entries": [
{
"type": "minecraft:item",
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "unicopia:gem_finder",
"levels": {
"min": 1
}
}
]
}
},
{
"condition": "minecraft:table_bonus",
"enchantment": "unicopia:gem_finder",
"chances": [ 0.060555554 ]
}
],
"functions": [
{
"function": "minecraft:set_count",
"count": {
"min": 1.0,
"max": 2.0,
"type": "minecraft:uniform"
}
},
{
"function": "minecraft:explosion_decay"
}
],
"name": "unicopia:gemstone"
},
{
"type": "minecraft:item",
"conditions": [
{
"condition": "minecraft:table_bonus",
"enchantment": "minecraft:fortune",
"chances": [
0.05, 0.052222223, 0.055, 0.066666665, 0.1
]
}
],
"functions": [
{
"function": "minecraft:set_count",
"count": {
"min": 1.0,
"max": 2.0,
"type": "minecraft:uniform"
}
},
{
"function": "minecraft:explosion_decay"
}
],
"name": "unicopia:wheat_worms"
}
]
}
]
}

View file

@ -1,49 +0,0 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"bonus_rolls": 0,
"conditions": [
{
"condition": "minecraft:inverted",
"term": {
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
}
],
"entries": [
{
"type": "minecraft:item",
"conditions": [
{
"condition": "minecraft:random_chance",
"chance": 0.25
}
],
"functions": [
{
"function": "minecraft:apply_bonus",
"enchantment": "minecraft:fortune",
"formula": "minecraft:ore_drops"
},
{
"function": "minecraft:explosion_decay"
}
],
"name": "unicopia:crystal_shard"
}
]
}
]
}

View file

@ -1,49 +0,0 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"bonus_rolls": 0,
"conditions": [
{
"condition": "minecraft:inverted",
"term": {
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
}
],
"entries": [
{
"type": "minecraft:item",
"conditions": [
{
"condition": "minecraft:random_chance",
"chance": 0.25
}
],
"functions": [
{
"function": "minecraft:apply_bonus",
"enchantment": "minecraft:fortune",
"formula": "minecraft:ore_drops"
},
{
"function": "minecraft:explosion_decay"
}
],
"name": "unicopia:crystal_shard"
}
]
}
]
}

View file

@ -1,92 +0,0 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"bonus_rolls": 0,
"conditions": [
{
"condition": "minecraft:inverted",
"term": {
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
}
],
"entries": [
{
"type": "minecraft:item",
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "unicopia:gem_finder",
"levels": {
"min": 1
}
}
]
}
},
{
"condition": "minecraft:table_bonus",
"enchantment": "unicopia:gem_finder",
"chances": [ 0.055555554 ]
}
],
"functions": [
{
"function": "minecraft:set_count",
"count": {
"min": 1.0,
"max": 2.0,
"type": "minecraft:uniform"
}
},
{
"function": "minecraft:explosion_decay"
}
],
"name": "unicopia:gemstone"
},
{
"type": "minecraft:item",
"conditions": [
{
"condition": "minecraft:table_bonus",
"enchantment": "minecraft:fortune",
"chances": [
0.05, 0.052222223, 0.055, 0.066666665, 0.1
]
}
],
"functions": [
{
"function": "minecraft:set_count",
"count": {
"min": 1.0,
"max": 2.0,
"type": "minecraft:uniform"
}
},
{
"function": "minecraft:explosion_decay"
}
],
"name": "unicopia:wheat_worms"
}
]
}
]
}

View file

@ -1,55 +0,0 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"bonus_rolls": 0,
"conditions": [
{
"condition": "minecraft:inverted",
"term": {
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
}
],
"entries": [
{
"type": "minecraft:item",
"conditions": [
{
"condition": "minecraft:table_bonus",
"enchantment": "minecraft:fortune",
"chances": [
0.05, 0.052222223, 0.055, 0.066666665, 0.1
]
}
],
"functions": [
{
"function": "minecraft:set_count",
"count": {
"min": 1.0,
"max": 2.0,
"type": "minecraft:uniform"
}
},
{
"function": "minecraft:explosion_decay"
}
],
"name": "unicopia:oat_seeds"
}
]
}
]
}

View file

@ -1,92 +0,0 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"bonus_rolls": 0,
"conditions": [
{
"condition": "minecraft:inverted",
"term": {
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
}
],
"entries": [
{
"type": "minecraft:item",
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "unicopia:gem_finder",
"levels": {
"min": 1
}
}
]
}
},
{
"condition": "minecraft:table_bonus",
"enchantment": "unicopia:gem_finder",
"chances": [ 0.055555554 ]
}
],
"functions": [
{
"function": "minecraft:set_count",
"count": {
"min": 1.0,
"max": 2.0,
"type": "minecraft:uniform"
}
},
{
"function": "minecraft:explosion_decay"
}
],
"name": "unicopia:gemstone"
},
{
"type": "minecraft:item",
"conditions": [
{
"condition": "minecraft:table_bonus",
"enchantment": "minecraft:fortune",
"chances": [
0.05, 0.052222223, 0.055, 0.066666665, 0.1
]
}
],
"functions": [
{
"function": "minecraft:set_count",
"count": {
"min": 1.0,
"max": 2.0,
"type": "minecraft:uniform"
}
},
{
"function": "minecraft:explosion_decay"
}
],
"name": "unicopia:wheat_worms"
}
]
}
]
}

View file

@ -1,55 +0,0 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"bonus_rolls": 0,
"conditions": [
{
"condition": "minecraft:inverted",
"term": {
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
}
],
"entries": [
{
"type": "minecraft:item",
"conditions": [
{
"condition": "minecraft:table_bonus",
"enchantment": "minecraft:fortune",
"chances": [
0.05, 0.052222223, 0.055, 0.066666665, 0.1
]
}
],
"functions": [
{
"function": "minecraft:set_count",
"count": {
"min": 1.0,
"max": 3.0,
"type": "minecraft:uniform"
}
},
{
"function": "minecraft:explosion_decay"
}
],
"name": "unicopia:wheat_worms"
}
]
}
]
}

View file

@ -1,55 +0,0 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"bonus_rolls": 0,
"conditions": [
{
"condition": "minecraft:inverted",
"term": {
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
}
],
"entries": [
{
"type": "minecraft:item",
"conditions": [
{
"condition": "minecraft:table_bonus",
"enchantment": "minecraft:fortune",
"chances": [
0.05, 0.052222223, 0.055, 0.066666665, 0.1
]
}
],
"functions": [
{
"function": "minecraft:set_count",
"count": {
"min": 1.0,
"max": 4.0,
"type": "minecraft:uniform"
}
},
{
"function": "minecraft:explosion_decay"
}
],
"name": "unicopia:wheat_worms"
}
]
}
]
}

View file

@ -1,66 +0,0 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"bonus_rolls": 0,
"conditions": [
{
"condition": "minecraft:inverted",
"term": {
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
}
],
"entries": [
{
"type": "minecraft:item",
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "unicopia:gem_finder",
"levels": {
"min": 1
}
}
]
}
},
{
"condition": "minecraft:table_bonus",
"enchantment": "unicopia:gem_finder",
"chances": [ 0.1 ]
}
],
"functions": [
{
"function": "minecraft:set_count",
"count": {
"min": 1.0,
"max": 2.0,
"type": "minecraft:uniform"
}
},
{
"function": "minecraft:explosion_decay"
}
],
"name": "unicopia:gemstone"
}
]
}
]
}

View file

@ -1,29 +0,0 @@
{
"type": "minecraft:chest",
"pools": [
{
"rolls": {
"min": 2.0,
"max": 4.0,
"type": "minecraft:uniform"
},
"entries": [
{
"type": "minecraft:item",
"weight": 2,
"functions": [
{
"function": "minecraft:set_count",
"count": {
"min": 1.0,
"max": 5.0,
"type": "minecraft:uniform"
}
}
],
"name": "unicopia:gryphon_feather"
}
]
}
]
}

View file

@ -1,19 +0,0 @@
{
"type": "minecraft:chest",
"pools": [
{
"rolls": {
"min": 0.0,
"max": 1.0,
"type": "minecraft:uniform"
},
"entries": [
{
"type": "minecraft:item",
"weight": 1,
"name": "unicopia:grogars_bell"
}
]
}
]
}

View file

@ -1,25 +0,0 @@
{
"type": "minecraft:chest",
"pools": [
{
"rolls": {
"min": 1.0,
"max": 4.0,
"type": "minecraft:uniform"
},
"entries": [
{
"type": "minecraft:item",
"weight": 1,
"name": "unicopia:pearl_necklace"
},
{
"type": "minecraft:tag",
"weight": 3,
"expand": true,
"name": "unicopia:food_types/shells"
}
]
}
]
}

View file

@ -1,20 +0,0 @@
{
"type": "minecraft:chest",
"pools": [
{
"rolls": {
"min": 1.0,
"max": 6.0,
"type": "minecraft:uniform"
},
"entries": [
{
"type": "minecraft:tag",
"weight": 3,
"expand": true,
"name": "unicopia:food_types/shells"
}
]
}
]
}

View file

@ -1,25 +0,0 @@
{
"type": "minecraft:chest",
"pools": [
{
"rolls": {
"min": 1.0,
"max": 4.0,
"type": "minecraft:uniform"
},
"entries": [
{
"type": "minecraft:item",
"weight": 1,
"name": "unicopia:pearl_necklace"
},
{
"type": "minecraft:tag",
"weight": 3,
"expand": true,
"name": "unicopia:food_types/shells"
}
]
}
]
}

View file

@ -1,30 +0,0 @@
{
"type": "minecraft:chest",
"pools": [
{
"rolls": {
"min": 1.0,
"max": 2.0,
"type": "minecraft:uniform"
},
"entries": [
{
"type": "minecraft:item",
"weight": 1,
"name": "unicopia:pearl_necklace"
},
{
"type": "minecraft:item",
"weight": 4,
"name": "unicopia:shelly"
},
{
"type": "minecraft:tag",
"weight": 8,
"expand": true,
"name": "unicopia:food_types/shells"
}
]
}
]
}

View file

@ -1,20 +0,0 @@
{
"type": "minecraft:chest",
"pools": [
{
"rolls": {
"min": 1.0,
"max": 4.0,
"type": "minecraft:uniform"
},
"entries": [
{
"type": "minecraft:tag",
"weight": 1,
"expand": true,
"name": "unicopia:food_types/shells"
}
]
}
]
}

View file

@ -1,29 +0,0 @@
{
"type": "minecraft:chest",
"pools": [
{
"rolls": {
"min": 2.0,
"max": 4.0,
"type": "minecraft:uniform"
},
"entries": [
{
"type": "minecraft:item",
"weight": 10,
"functions": [
{
"function": "minecraft:set_count",
"count": {
"min": 1.0,
"max": 2.0,
"type": "minecraft:uniform"
}
}
],
"name": "unicopia:gryphon_feather"
}
]
}
]
}

View file

@ -1,26 +0,0 @@
{
"type": "minecraft:chest",
"pools": [
{
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:tag",
"name": "unicopia:fresh_apples",
"expand": true,
"weight": 1
},
{
"type": "minecraft:tag",
"name": "unicopia:apple_seeds",
"expand": true
}
],
"rolls": {
"type": "minecraft:uniform",
"max": 8.0,
"min": 3.0
}
}
]
}

View file

@ -1,60 +0,0 @@
{
"type": "minecraft:chest",
"pools": [
{
"rolls": {
"min": 2.0,
"max": 4.0,
"type": "minecraft:uniform"
},
"entries": [
{
"type": "minecraft:item",
"weight": 10,
"functions": [
{
"function": "minecraft:set_count",
"count": {
"min": 1.0,
"max": 7.0,
"type": "minecraft:uniform"
}
}
],
"name": "unicopia:gryphon_feather"
},
{
"type": "minecraft:item",
"weight": 1,
"functions": [
{
"function": "minecraft:set_count",
"count": {
"min": 1.0,
"max": 2.0,
"type": "minecraft:uniform"
}
}
],
"name": "unicopia:golden_wing"
},
{
"type": "minecraft:tag",
"weight": 1,
"functions": [
{
"function": "minecraft:set_count",
"count": {
"min": 2.0,
"max": 5.0,
"type": "minecraft:uniform"
}
}
],
"expand": true,
"name": "unicopia:fresh_apples"
}
]
}
]
}