重构loottable生成

This commit is contained in:
17146 2025-04-06 22:25:15 +08:00 committed by Light_Quanta
parent 5a6a08d753
commit 68b80323ac
No known key found for this signature in database
GPG key ID: 11A39A1B8C890959
6 changed files with 33 additions and 16 deletions

View file

@ -1,4 +1,4 @@
// 1.21.1 2025-04-02T18:07:51.8657658 Loot Tables // 1.21.1 2025-04-07T06:07:51.636744 Loot Tables
98386b2e65b2afb7cf5b0cabf6a7b0f062c1e640 data/superbwarfare/loot_table/blocks/barbed_wire.json 98386b2e65b2afb7cf5b0cabf6a7b0f062c1e640 data/superbwarfare/loot_table/blocks/barbed_wire.json
811e69929a14e6736015849c220100bb58d914c9 data/superbwarfare/loot_table/blocks/cemented_carbide_block.json 811e69929a14e6736015849c220100bb58d914c9 data/superbwarfare/loot_table/blocks/cemented_carbide_block.json
1f482bc1f0a1026d0e1b75ee28c6f541b56747a5 data/superbwarfare/loot_table/blocks/charging_station.json 1f482bc1f0a1026d0e1b75ee28c6f541b56747a5 data/superbwarfare/loot_table/blocks/charging_station.json
@ -20,4 +20,5 @@ fb31a40f6a04000f317823cbb80eda8588ba9c69 data/superbwarfare/loot_table/blocks/si
073b9c242ea372f7b34883835c0b02a9ca8d94e5 data/superbwarfare/loot_table/blocks/small_container.json 073b9c242ea372f7b34883835c0b02a9ca8d94e5 data/superbwarfare/loot_table/blocks/small_container.json
83112ebff477e322bd3d23ed4653c7c02b230473 data/superbwarfare/loot_table/blocks/steel_block.json 83112ebff477e322bd3d23ed4653c7c02b230473 data/superbwarfare/loot_table/blocks/steel_block.json
71fc892124b5343e10688cabc2fb7c87d83cfef8 data/superbwarfare/loot_table/blocks/tungsten_block.json 71fc892124b5343e10688cabc2fb7c87d83cfef8 data/superbwarfare/loot_table/blocks/tungsten_block.json
6e2346c664cd643bff31c0a26e463c6c8dd46e37 data/superbwarfare/loot_table/chests/ancient_cpu.json
7e75ff103ccdbcf6be6f61413a4173115195f0a9 data/superbwarfare/loot_table/containers/blueprints.json 7e75ff103ccdbcf6be6f61413a4173115195f0a9 data/superbwarfare/loot_table/containers/blueprints.json

View file

@ -2,20 +2,21 @@
"type": "minecraft:chest", "type": "minecraft:chest",
"pools": [ "pools": [
{ {
"rolls": 1, "bonus_rolls": 1.0,
"bonus_rolls": 1, "conditions": [
{
"chance": 0.4,
"condition": "minecraft:random_chance"
}
],
"entries": [ "entries": [
{ {
"type": "minecraft:item", "type": "minecraft:item",
"name": "superbwarfare:ancient_cpu" "name": "superbwarfare:ancient_cpu",
"quality": 1
} }
], ],
"conditions": [ "rolls": 1.0
{
"condition": "minecraft:random_chance",
"chance": 0.4
}
]
} }
], ],
"random_sequence": "superbwarfare:chests/ancient_cpu" "random_sequence": "superbwarfare:chests/ancient_cpu"

View file

@ -6,24 +6,39 @@ import net.minecraft.core.HolderLookup;
import net.minecraft.core.registries.Registries; import net.minecraft.core.registries.Registries;
import net.minecraft.data.loot.LootTableSubProvider; import net.minecraft.data.loot.LootTableSubProvider;
import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.ItemLike; import net.minecraft.world.level.ItemLike;
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.predicates.LootItemRandomChanceCondition;
import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; import net.minecraft.world.level.storage.loot.providers.number.ConstantValue;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
public class ModContainerLootProvider implements LootTableSubProvider { public class ModCustomLootProvider implements LootTableSubProvider {
public ModContainerLootProvider(HolderLookup.Provider provider) { public static ResourceLocation containers(String name) {
return Mod.loc("containers/" + name);
}
public static ResourceLocation chests(String name) {
return Mod.loc("chests/" + name);
}
public ModCustomLootProvider(HolderLookup.Provider provider) {
super(); super();
} }
@Override @Override
public void generate(@NotNull BiConsumer<ResourceKey<LootTable>, LootTable.Builder> output) { public void generate(@NotNull BiConsumer<ResourceKey<LootTable>, LootTable.Builder> output) {
output.accept(ResourceKey.create(Registries.LOOT_TABLE, Mod.loc("containers/blueprints")), output.accept(ResourceKey.create(Registries.LOOT_TABLE, chests("ancient_cpu")),
LootTable.lootTable().withPool(singleItem(ModItems.ANCIENT_CPU.get(), 1, 1, 1, 1)
.when(() -> LootItemRandomChanceCondition.randomChance(0.4f).build()))
);
output.accept(ResourceKey.create(Registries.LOOT_TABLE, containers("blueprints")),
LootTable.lootTable().withPool(multiItems(1, 0, LootTable.lootTable().withPool(multiItems(1, 0,
new PoolTriple(ModItems.GLOCK_17_BLUEPRINT.get(), 60, 0), new PoolTriple(ModItems.GLOCK_17_BLUEPRINT.get(), 60, 0),
new PoolTriple(ModItems.MP_443_BLUEPRINT.get(), 60, 0), new PoolTriple(ModItems.MP_443_BLUEPRINT.get(), 60, 0),

View file

@ -13,7 +13,7 @@ public class ModLootTableProvider {
public static LootTableProvider create(PackOutput output, CompletableFuture<HolderLookup.Provider> registries) { public static LootTableProvider create(PackOutput output, CompletableFuture<HolderLookup.Provider> registries) {
return new LootTableProvider(output, Set.of(), List.of( return new LootTableProvider(output, Set.of(), List.of(
new LootTableProvider.SubProviderEntry(ModBlockLootProvider::new, LootContextParamSets.BLOCK), new LootTableProvider.SubProviderEntry(ModBlockLootProvider::new, LootContextParamSets.BLOCK),
new LootTableProvider.SubProviderEntry(ModContainerLootProvider::new, LootContextParamSets.CHEST) new LootTableProvider.SubProviderEntry(ModCustomLootProvider::new, LootContextParamSets.CHEST)
), registries); ), registries);
} }
} }

View file

@ -500,7 +500,7 @@
"tips.superbwarfare.shoot.rings": "Rings", "tips.superbwarfare.shoot.rings": "Rings",
"tips.superbwarfare.annihilator.energy_not_enough": "Energy is Not Enough", "tips.superbwarfare.annihilator.energy_not_enough": "Energy is Not Enough",
"tips.superbwarfare.target.down": "Target Down %1$s", "tips.superbwarfare.target.down": "Target Down %1$s",
"tips.superbwarfare.target.damage": "Damage: %1$s Distance: %2$sm", "tips.superbwarfare.target.damage": "Damage: %1$s Distance: %2$s",
"tips.superbwarfare.mortar.range": "Range: ", "tips.superbwarfare.mortar.range": "Range: ",
"tips.superbwarfare.mortar.yaw": "Yaw: ", "tips.superbwarfare.mortar.yaw": "Yaw: ",
"tips.superbwarfare.mortar.pitch": "Pitch: ", "tips.superbwarfare.mortar.pitch": "Pitch: ",

View file

@ -498,7 +498,7 @@
"tips.superbwarfare.shoot.rings": "环", "tips.superbwarfare.shoot.rings": "环",
"tips.superbwarfare.annihilator.energy_not_enough": "能量不足", "tips.superbwarfare.annihilator.energy_not_enough": "能量不足",
"tips.superbwarfare.target.down": "击倒目标 %1$s", "tips.superbwarfare.target.down": "击倒目标 %1$s",
"tips.superbwarfare.target.damage": "伤害:%1$s 距离:%2$sm", "tips.superbwarfare.target.damage": "伤害:%1$s 距离:%2$s",
"tips.superbwarfare.mortar.range": "射程:", "tips.superbwarfare.mortar.range": "射程:",
"tips.superbwarfare.mortar.yaw": "水平朝向:", "tips.superbwarfare.mortar.yaw": "水平朝向:",
"tips.superbwarfare.mortar.pitch": "俯仰角度:", "tips.superbwarfare.mortar.pitch": "俯仰角度:",