SoundEventRegistrationSerializer.java

net.minecraft.client.resources.sounds.SoundEventRegistrationSerializer

信息

  • 全限定名:net.minecraft.client.resources.sounds.SoundEventRegistrationSerializer
  • 类型:public class
  • 包:net.minecraft.client.resources.sounds
  • 源码路径:src/main/java/net/minecraft/client/resources/sounds/SoundEventRegistrationSerializer.java
  • 起始行号:L22
  • 实现:JsonDeserializer
  • 职责:

    TODO

字段/常量

  • DEFAULT_FLOAT
    • 类型: FloatProvider
    • 修饰符: private static final
    • 源码定位: L23
    • 说明:

      TODO

内部类/嵌套类型

构造器

方法

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

public SoundEventRegistration deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) @ L25

  • 方法名:deserialize
  • 源码定位:L25
  • 返回类型:SoundEventRegistration
  • 修饰符:public

参数:

  • json: JsonElement
  • typeOfT: Type
  • context: JsonDeserializationContext

说明:

TODO

private List<Sound> getSounds(JsonObject object) @ L33

  • 方法名:getSounds
  • 源码定位:L33
  • 返回类型:List
  • 修饰符:private

参数:

  • object: JsonObject

说明:

TODO

private Sound getSound(JsonObject object) @ L52

  • 方法名:getSound
  • 源码定位:L52
  • 返回类型:Sound
  • 修饰符:private

参数:

  • object: JsonObject

说明:

TODO

private Sound.Type getType(JsonObject sound, Sound.Type fallback) @ L67

  • 方法名:getType
  • 源码定位:L67
  • 返回类型:Sound.Type
  • 修饰符:private

参数:

  • sound: JsonObject
  • fallback: Sound.Type

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class SoundEventRegistrationSerializer implements JsonDeserializer<SoundEventRegistration> {
    private static final FloatProvider DEFAULT_FLOAT = ConstantFloat.of(1.0F);
 
    public SoundEventRegistration deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        JsonObject object = GsonHelper.convertToJsonObject(json, "entry");
        boolean replace = GsonHelper.getAsBoolean(object, "replace", false);
        String subtitle = GsonHelper.getAsString(object, "subtitle", null);
        List<Sound> sounds = this.getSounds(object);
        return new SoundEventRegistration(sounds, replace, subtitle);
    }
 
    private List<Sound> getSounds(JsonObject object) {
        List<Sound> result = Lists.newArrayList();
        if (object.has("sounds")) {
            JsonArray array = GsonHelper.getAsJsonArray(object, "sounds");
 
            for (int i = 0; i < array.size(); i++) {
                JsonElement element = array.get(i);
                if (GsonHelper.isStringValue(element)) {
                    Identifier name = Identifier.parse(GsonHelper.convertToString(element, "sound"));
                    result.add(new Sound(name, DEFAULT_FLOAT, DEFAULT_FLOAT, 1, Sound.Type.FILE, false, false, 16));
                } else {
                    result.add(this.getSound(GsonHelper.convertToJsonObject(element, "sound")));
                }
            }
        }
 
        return result;
    }
 
    private Sound getSound(JsonObject object) {
        Identifier name = Identifier.parse(GsonHelper.getAsString(object, "name"));
        Sound.Type type = this.getType(object, Sound.Type.FILE);
        float volume = GsonHelper.getAsFloat(object, "volume", 1.0F);
        Validate.isTrue(volume > 0.0F, "Invalid volume");
        float pitch = GsonHelper.getAsFloat(object, "pitch", 1.0F);
        Validate.isTrue(pitch > 0.0F, "Invalid pitch");
        int weight = GsonHelper.getAsInt(object, "weight", 1);
        Validate.isTrue(weight > 0, "Invalid weight");
        boolean preload = GsonHelper.getAsBoolean(object, "preload", false);
        boolean stream = GsonHelper.getAsBoolean(object, "stream", false);
        int attenuationDistance = GsonHelper.getAsInt(object, "attenuation_distance", 16);
        return new Sound(name, ConstantFloat.of(volume), ConstantFloat.of(pitch), weight, type, stream, preload, attenuationDistance);
    }
 
    private Sound.Type getType(JsonObject sound, Sound.Type fallback) {
        Sound.Type type = fallback;
        if (sound.has("type")) {
            type = Sound.Type.getByName(GsonHelper.getAsString(sound, "type"));
            Objects.requireNonNull(type, "Invalid type");
        }
 
        return type;
    }
}

引用的其他类

  • Sound

    • 引用位置: 参数/方法调用/构造调用/返回值
    • 关联成员: Sound(), Sound.Type.getByName()
  • SoundEventRegistration

    • 引用位置: 实现/构造调用/返回值
    • 关联成员: SoundEventRegistration()
  • Identifier

    • 引用位置: 方法调用
    • 关联成员: Identifier.parse()
  • GsonHelper

    • 引用位置: 方法调用
    • 关联成员: GsonHelper.convertToJsonObject(), GsonHelper.convertToString(), GsonHelper.getAsBoolean(), GsonHelper.getAsFloat(), GsonHelper.getAsInt(), GsonHelper.getAsJsonArray(), GsonHelper.getAsString(), GsonHelper.isStringValue()
  • ConstantFloat

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

    • 引用位置: 字段