RecipeBookSettings.java

net.minecraft.stats.RecipeBookSettings

信息

  • 全限定名:net.minecraft.stats.RecipeBookSettings
  • 类型:public final class
  • 包:net.minecraft.stats
  • 源码路径:src/main/java/net/minecraft/stats/RecipeBookSettings.java
  • 起始行号:L14
  • 职责:

    TODO

字段/常量

  • STREAM_CODEC

    • 类型: StreamCodec<FriendlyByteBuf,RecipeBookSettings>
    • 修饰符: public static final
    • 源码定位: L15
    • 说明:

      TODO

  • MAP_CODEC

    • 类型: MapCodec<RecipeBookSettings>
    • 修饰符: public static final
    • 源码定位: L26
    • 说明:

      TODO

  • crafting

    • 类型: RecipeBookSettings.TypeSettings
    • 修饰符: private
    • 源码定位: L35
    • 说明:

      TODO

  • furnace

    • 类型: RecipeBookSettings.TypeSettings
    • 修饰符: private
    • 源码定位: L36
    • 说明:

      TODO

  • blastFurnace

    • 类型: RecipeBookSettings.TypeSettings
    • 修饰符: private
    • 源码定位: L37
    • 说明:

      TODO

  • smoker

    • 类型: RecipeBookSettings.TypeSettings
    • 修饰符: private
    • 源码定位: L38
    • 说明:

      TODO

内部类/嵌套类型

  • net.minecraft.stats.RecipeBookSettings.TypeSettings
    • 类型: record
    • 修饰符: public
    • 源码定位: L114
    • 说明:

      TODO

构造器

public RecipeBookSettings() @ L40

  • 构造器名:RecipeBookSettings
  • 源码定位:L40
  • 修饰符:public

参数:

说明:

TODO

private RecipeBookSettings(RecipeBookSettings.TypeSettings crafting, RecipeBookSettings.TypeSettings furnace, RecipeBookSettings.TypeSettings blastFurnace, RecipeBookSettings.TypeSettings smoker) @ L49

  • 构造器名:RecipeBookSettings
  • 源码定位:L49
  • 修饰符:private

参数:

  • crafting: RecipeBookSettings.TypeSettings
  • furnace: RecipeBookSettings.TypeSettings
  • blastFurnace: RecipeBookSettings.TypeSettings
  • smoker: RecipeBookSettings.TypeSettings

说明:

TODO

方法

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

public RecipeBookSettings.TypeSettings getSettings(RecipeBookType type) @ L61

  • 方法名:getSettings
  • 源码定位:L61
  • 返回类型:RecipeBookSettings.TypeSettings
  • 修饰符:public

参数:

  • type: RecipeBookType

说明:

TODO

private void updateSettings(RecipeBookType recipeBookType, UnaryOperator<RecipeBookSettings.TypeSettings> operator) @ L71

  • 方法名:updateSettings
  • 源码定位:L71
  • 返回类型:void
  • 修饰符:private

参数:

  • recipeBookType: RecipeBookType
  • operator: UnaryOperator<RecipeBookSettings.TypeSettings>

说明:

TODO

public boolean isOpen(RecipeBookType type) @ L87

  • 方法名:isOpen
  • 源码定位:L87
  • 返回类型:boolean
  • 修饰符:public

参数:

  • type: RecipeBookType

说明:

TODO

public void setOpen(RecipeBookType type, boolean open) @ L91

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

参数:

  • type: RecipeBookType
  • open: boolean

说明:

TODO

public boolean isFiltering(RecipeBookType type) @ L95

  • 方法名:isFiltering
  • 源码定位:L95
  • 返回类型:boolean
  • 修饰符:public

参数:

  • type: RecipeBookType

说明:

TODO

public void setFiltering(RecipeBookType type, boolean filtering) @ L99

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

参数:

  • type: RecipeBookType
  • filtering: boolean

说明:

TODO

public RecipeBookSettings copy() @ L103

  • 方法名:copy
  • 源码定位:L103
  • 返回类型:RecipeBookSettings
  • 修饰符:public

参数:

说明:

TODO

public void replaceFrom(RecipeBookSettings other) @ L107

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

参数:

  • other: RecipeBookSettings

说明:

TODO

代码

public final class RecipeBookSettings {
    public static final StreamCodec<FriendlyByteBuf, RecipeBookSettings> STREAM_CODEC = StreamCodec.composite(
        RecipeBookSettings.TypeSettings.STREAM_CODEC,
        o -> o.crafting,
        RecipeBookSettings.TypeSettings.STREAM_CODEC,
        o -> o.furnace,
        RecipeBookSettings.TypeSettings.STREAM_CODEC,
        o -> o.blastFurnace,
        RecipeBookSettings.TypeSettings.STREAM_CODEC,
        o -> o.smoker,
        RecipeBookSettings::new
    );
    public static final MapCodec<RecipeBookSettings> MAP_CODEC = RecordCodecBuilder.mapCodec(
        i -> i.group(
                RecipeBookSettings.TypeSettings.CRAFTING_MAP_CODEC.forGetter(o -> o.crafting),
                RecipeBookSettings.TypeSettings.FURNACE_MAP_CODEC.forGetter(o -> o.furnace),
                RecipeBookSettings.TypeSettings.BLAST_FURNACE_MAP_CODEC.forGetter(o -> o.blastFurnace),
                RecipeBookSettings.TypeSettings.SMOKER_MAP_CODEC.forGetter(o -> o.smoker)
            )
            .apply(i, RecipeBookSettings::new)
    );
    private RecipeBookSettings.TypeSettings crafting;
    private RecipeBookSettings.TypeSettings furnace;
    private RecipeBookSettings.TypeSettings blastFurnace;
    private RecipeBookSettings.TypeSettings smoker;
 
    public RecipeBookSettings() {
        this(
            RecipeBookSettings.TypeSettings.DEFAULT,
            RecipeBookSettings.TypeSettings.DEFAULT,
            RecipeBookSettings.TypeSettings.DEFAULT,
            RecipeBookSettings.TypeSettings.DEFAULT
        );
    }
 
    private RecipeBookSettings(
        RecipeBookSettings.TypeSettings crafting,
        RecipeBookSettings.TypeSettings furnace,
        RecipeBookSettings.TypeSettings blastFurnace,
        RecipeBookSettings.TypeSettings smoker
    ) {
        this.crafting = crafting;
        this.furnace = furnace;
        this.blastFurnace = blastFurnace;
        this.smoker = smoker;
    }
 
    @VisibleForTesting
    public RecipeBookSettings.TypeSettings getSettings(RecipeBookType type) {
        return switch (type) {
            case CRAFTING -> this.crafting;
            case FURNACE -> this.furnace;
            case BLAST_FURNACE -> this.blastFurnace;
            case SMOKER -> this.smoker;
        };
    }
 
    private void updateSettings(RecipeBookType recipeBookType, UnaryOperator<RecipeBookSettings.TypeSettings> operator) {
        switch (recipeBookType) {
            case CRAFTING:
                this.crafting = operator.apply(this.crafting);
                break;
            case FURNACE:
                this.furnace = operator.apply(this.furnace);
                break;
            case BLAST_FURNACE:
                this.blastFurnace = operator.apply(this.blastFurnace);
                break;
            case SMOKER:
                this.smoker = operator.apply(this.smoker);
        }
    }
 
    public boolean isOpen(RecipeBookType type) {
        return this.getSettings(type).open;
    }
 
    public void setOpen(RecipeBookType type, boolean open) {
        this.updateSettings(type, s -> s.setOpen(open));
    }
 
    public boolean isFiltering(RecipeBookType type) {
        return this.getSettings(type).filtering;
    }
 
    public void setFiltering(RecipeBookType type, boolean filtering) {
        this.updateSettings(type, s -> s.setFiltering(filtering));
    }
 
    public RecipeBookSettings copy() {
        return new RecipeBookSettings(this.crafting, this.furnace, this.blastFurnace, this.smoker);
    }
 
    public void replaceFrom(RecipeBookSettings other) {
        this.crafting = other.crafting;
        this.furnace = other.furnace;
        this.blastFurnace = other.blastFurnace;
        this.smoker = other.smoker;
    }
 
    public record TypeSettings(boolean open, boolean filtering) {
        public static final RecipeBookSettings.TypeSettings DEFAULT = new RecipeBookSettings.TypeSettings(false, false);
        public static final MapCodec<RecipeBookSettings.TypeSettings> CRAFTING_MAP_CODEC = codec("isGuiOpen", "isFilteringCraftable");
        public static final MapCodec<RecipeBookSettings.TypeSettings> FURNACE_MAP_CODEC = codec("isFurnaceGuiOpen", "isFurnaceFilteringCraftable");
        public static final MapCodec<RecipeBookSettings.TypeSettings> BLAST_FURNACE_MAP_CODEC = codec(
            "isBlastingFurnaceGuiOpen", "isBlastingFurnaceFilteringCraftable"
        );
        public static final MapCodec<RecipeBookSettings.TypeSettings> SMOKER_MAP_CODEC = codec("isSmokerGuiOpen", "isSmokerFilteringCraftable");
        public static final StreamCodec<ByteBuf, RecipeBookSettings.TypeSettings> STREAM_CODEC = StreamCodec.composite(
            ByteBufCodecs.BOOL,
            RecipeBookSettings.TypeSettings::open,
            ByteBufCodecs.BOOL,
            RecipeBookSettings.TypeSettings::filtering,
            RecipeBookSettings.TypeSettings::new
        );
 
        @Override
        public String toString() {
            return "[open=" + this.open + ", filtering=" + this.filtering + "]";
        }
 
        public RecipeBookSettings.TypeSettings setOpen(boolean open) {
            return new RecipeBookSettings.TypeSettings(open, this.filtering);
        }
 
        public RecipeBookSettings.TypeSettings setFiltering(boolean filtering) {
            return new RecipeBookSettings.TypeSettings(this.open, filtering);
        }
 
        private static MapCodec<RecipeBookSettings.TypeSettings> codec(String openFieldName, String filteringFieldName) {
            return RecordCodecBuilder.mapCodec(
                i -> i.group(
                        Codec.BOOL.optionalFieldOf(openFieldName, false).forGetter(RecipeBookSettings.TypeSettings::open),
                        Codec.BOOL.optionalFieldOf(filteringFieldName, false).forGetter(RecipeBookSettings.TypeSettings::filtering)
                    )
                    .apply(i, RecipeBookSettings.TypeSettings::new)
            );
        }
    }
}

引用的其他类