VanillaChargedCreeperExplosionLoot.java

net.minecraft.data.loot.packs.VanillaChargedCreeperExplosionLoot

信息

  • 全限定名:net.minecraft.data.loot.packs.VanillaChargedCreeperExplosionLoot
  • 类型:public record
  • 包:net.minecraft.data.loot.packs
  • 源码路径:src/main/java/net/minecraft/data/loot/packs/VanillaChargedCreeperExplosionLoot.java
  • 起始行号:L28
  • 实现:LootTableSubProvider
  • 职责:

    TODO

字段/常量

  • ENTRIES
    • 类型: List<VanillaChargedCreeperExplosionLoot.Entry>
    • 修饰符: private static final
    • 源码定位: L29
    • 说明:

      TODO

内部类/嵌套类型

  • net.minecraft.data.loot.packs.VanillaChargedCreeperExplosionLoot.Entry
    • 类型: record
    • 修饰符: private
    • 源码定位: L64
    • 说明:

      TODO

构造器

方法

下面的方法块按源码顺序生成。

public void generate(BiConsumer<ResourceKey<LootTable>,LootTable.Builder> output) @ L37

  • 方法名:generate
  • 源码定位:L37
  • 返回类型:void
  • 修饰符:public

参数:

  • output: BiConsumer<ResourceKey,LootTable.Builder>

说明:

TODO

代码

public record VanillaChargedCreeperExplosionLoot(HolderLookup.Provider registries) implements LootTableSubProvider {
    private static final List<VanillaChargedCreeperExplosionLoot.Entry> ENTRIES = List.of(
        new VanillaChargedCreeperExplosionLoot.Entry(BuiltInLootTables.CHARGED_CREEPER_PIGLIN, EntityType.PIGLIN, Items.PIGLIN_HEAD),
        new VanillaChargedCreeperExplosionLoot.Entry(BuiltInLootTables.CHARGED_CREEPER_CREEPER, EntityType.CREEPER, Items.CREEPER_HEAD),
        new VanillaChargedCreeperExplosionLoot.Entry(BuiltInLootTables.CHARGED_CREEPER_SKELETON, EntityType.SKELETON, Items.SKELETON_SKULL),
        new VanillaChargedCreeperExplosionLoot.Entry(BuiltInLootTables.CHARGED_CREEPER_WITHER_SKELETON, EntityType.WITHER_SKELETON, Items.WITHER_SKELETON_SKULL),
        new VanillaChargedCreeperExplosionLoot.Entry(BuiltInLootTables.CHARGED_CREEPER_ZOMBIE, EntityType.ZOMBIE, Items.ZOMBIE_HEAD)
    );
 
    @Override
    public void generate(BiConsumer<ResourceKey<LootTable>, LootTable.Builder> output) {
        HolderGetter<EntityType<?>> entityTypes = this.registries.lookupOrThrow(Registries.ENTITY_TYPE);
        List<LootPoolEntryContainer.Builder<?>> alternatives = new ArrayList<>(ENTRIES.size());
 
        for (VanillaChargedCreeperExplosionLoot.Entry entry : ENTRIES) {
            output.accept(
                entry.lootTable,
                LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(entry.item)))
            );
            LootItemCondition.Builder predicate = LootItemEntityPropertyCondition.hasProperties(
                LootContext.EntityTarget.THIS, EntityPredicate.Builder.entity().entityType(EntityTypePredicate.of(entityTypes, entry.entityType))
            );
            alternatives.add(NestedLootTable.lootTableReference(entry.lootTable).when(predicate));
        }
 
        output.accept(
            BuiltInLootTables.CHARGED_CREEPER,
            LootTable.lootTable()
                .withPool(
                    LootPool.lootPool()
                        .setRolls(ConstantValue.exactly(1.0F))
                        .add(AlternativesEntry.alternatives(alternatives.toArray(LootPoolEntryContainer.Builder[]::new)))
                )
        );
    }
 
    private record Entry(ResourceKey<LootTable> lootTable, EntityType<?> entityType, Item item) {
    }
}

引用的其他类

  • EntityPredicate

    • 引用位置: 方法调用
    • 关联成员: EntityPredicate.Builder.entity()
  • EntityTypePredicate

    • 引用位置: 方法调用
    • 关联成员: EntityTypePredicate.of()
  • LootTableSubProvider

    • 引用位置: 实现
  • ResourceKey

    • 引用位置: 参数
  • LootPool

    • 引用位置: 方法调用
    • 关联成员: LootPool.lootPool()
  • LootTable

    • 引用位置: 参数/方法调用
    • 关联成员: LootTable.lootTable()
  • AlternativesEntry

    • 引用位置: 方法调用
    • 关联成员: AlternativesEntry.alternatives()
  • LootItem

    • 引用位置: 方法调用
    • 关联成员: LootItem.lootTableItem()
  • NestedLootTable

    • 引用位置: 方法调用
    • 关联成员: NestedLootTable.lootTableReference()
  • LootItemEntityPropertyCondition

    • 引用位置: 方法调用
    • 关联成员: LootItemEntityPropertyCondition.hasProperties()
  • ConstantValue

    • 引用位置: 方法调用
    • 关联成员: ConstantValue.exactly()