RandomizableContainer.java

net.minecraft.world.RandomizableContainer

信息

  • 全限定名:net.minecraft.world.RandomizableContainer
  • 类型:public interface
  • 包:net.minecraft.world
  • 源码路径:src/main/java/net/minecraft/world/RandomizableContainer.java
  • 起始行号:L21
  • 继承:Container
  • 职责:

    TODO

字段/常量

  • LOOT_TABLE_TAG

    • 类型: String
    • 修饰符: package-private
    • 源码定位: L22
    • 说明:

      TODO

  • LOOT_TABLE_SEED_TAG

    • 类型: String
    • 修饰符: package-private
    • 源码定位: L23
    • 说明:

      TODO

内部类/嵌套类型

构造器

方法

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

ResourceKey<LootTable> getLootTable() @ L25

  • 方法名:getLootTable
  • 源码定位:L25
  • 返回类型:ResourceKey
  • 修饰符:package-private

参数:

说明:

TODO

void setLootTable(ResourceKey<LootTable> lootTable) @ L27

  • 方法名:setLootTable
  • 源码定位:L27
  • 返回类型:void
  • 修饰符:package-private

参数:

  • lootTable: ResourceKey

说明:

TODO

default void setLootTable(ResourceKey<LootTable> lootTable, long seed) @ L29

  • 方法名:setLootTable
  • 源码定位:L29
  • 返回类型:void
  • 修饰符:default

参数:

  • lootTable: ResourceKey
  • seed: long

说明:

TODO

long getLootTableSeed() @ L34

  • 方法名:getLootTableSeed
  • 源码定位:L34
  • 返回类型:long
  • 修饰符:package-private

参数:

说明:

TODO

void setLootTableSeed(long lootTableSeed) @ L36

  • 方法名:setLootTableSeed
  • 源码定位:L36
  • 返回类型:void
  • 修饰符:package-private

参数:

  • lootTableSeed: long

说明:

TODO

BlockPos getBlockPos() @ L38

  • 方法名:getBlockPos
  • 源码定位:L38
  • 返回类型:BlockPos
  • 修饰符:package-private

参数:

说明:

TODO

Level getLevel() @ L40

  • 方法名:getLevel
  • 源码定位:L40
  • 返回类型:Level
  • 修饰符:package-private

参数:

说明:

TODO

static void setBlockEntityLootTable(BlockGetter level, RandomSource random, BlockPos blockEntityPos, ResourceKey<LootTable> lootTable) @ L42

  • 方法名:setBlockEntityLootTable
  • 源码定位:L42
  • 返回类型:void
  • 修饰符:static

参数:

  • level: BlockGetter
  • random: RandomSource
  • blockEntityPos: BlockPos
  • lootTable: ResourceKey

说明:

TODO

default boolean tryLoadLootTable(ValueInput base) @ L48

  • 方法名:tryLoadLootTable
  • 源码定位:L48
  • 返回类型:boolean
  • 修饰符:default

参数:

  • base: ValueInput

说明:

TODO

default boolean trySaveLootTable(ValueOutput base) @ L55

  • 方法名:trySaveLootTable
  • 源码定位:L55
  • 返回类型:boolean
  • 修饰符:default

参数:

  • base: ValueOutput

说明:

TODO

default void unpackLootTable(Player player) @ L70

  • 方法名:unpackLootTable
  • 源码定位:L70
  • 返回类型:void
  • 修饰符:default

参数:

  • player: Player

说明:

TODO

代码

public interface RandomizableContainer extends Container {
    String LOOT_TABLE_TAG = "LootTable";
    String LOOT_TABLE_SEED_TAG = "LootTableSeed";
 
    @Nullable ResourceKey<LootTable> getLootTable();
 
    void setLootTable(final @Nullable ResourceKey<LootTable> lootTable);
 
    default void setLootTable(ResourceKey<LootTable> lootTable, long seed) {
        this.setLootTable(lootTable);
        this.setLootTableSeed(seed);
    }
 
    long getLootTableSeed();
 
    void setLootTableSeed(final long lootTableSeed);
 
    BlockPos getBlockPos();
 
    @Nullable Level getLevel();
 
    static void setBlockEntityLootTable(BlockGetter level, RandomSource random, BlockPos blockEntityPos, ResourceKey<LootTable> lootTable) {
        if (level.getBlockEntity(blockEntityPos) instanceof RandomizableContainer randomizableContainer) {
            randomizableContainer.setLootTable(lootTable, random.nextLong());
        }
    }
 
    default boolean tryLoadLootTable(ValueInput base) {
        ResourceKey<LootTable> lootTable = base.read("LootTable", LootTable.KEY_CODEC).orElse(null);
        this.setLootTable(lootTable);
        this.setLootTableSeed(base.getLongOr("LootTableSeed", 0L));
        return lootTable != null;
    }
 
    default boolean trySaveLootTable(ValueOutput base) {
        ResourceKey<LootTable> lootTable = this.getLootTable();
        if (lootTable == null) {
            return false;
        } else {
            base.store("LootTable", LootTable.KEY_CODEC, lootTable);
            long lootTableSeed = this.getLootTableSeed();
            if (lootTableSeed != 0L) {
                base.putLong("LootTableSeed", lootTableSeed);
            }
 
            return true;
        }
    }
 
    default void unpackLootTable(@Nullable Player player) {
        Level level = this.getLevel();
        BlockPos worldPosition = this.getBlockPos();
        ResourceKey<LootTable> lootTableKey = this.getLootTable();
        if (lootTableKey != null && level != null && level.getServer() != null) {
            LootTable lootTable = level.getServer().reloadableRegistries().getLootTable(lootTableKey);
            if (player instanceof ServerPlayer) {
                CriteriaTriggers.GENERATE_LOOT.trigger((ServerPlayer)player, lootTableKey);
            }
 
            this.setLootTable(null);
            LootParams.Builder params = new LootParams.Builder((ServerLevel)level).withParameter(LootContextParams.ORIGIN, Vec3.atCenterOf(worldPosition));
            if (player != null) {
                params.withLuck(player.getLuck()).withParameter(LootContextParams.THIS_ENTITY, player);
            }
 
            lootTable.fill(this, params.create(LootContextParamSets.CHEST), this.getLootTableSeed());
        }
    }
}

引用的其他类