package net.lerariemann.infinity.options; import net.lerariemann.infinity.util.core.NbtUtils; import net.minecraft.nbt.CompoundTag; import java.util.function.Function; import static net.lerariemann.infinity.util.core.NbtUtils.getFloat; public interface PitchShifter { Function applier(); enum Empty implements PitchShifter { INSTANCE; @Override public Function applier() { return Function.identity(); } } record Constant(float value) implements PitchShifter { @Override public Function applier() { return f -> value; } } record Add(float value) implements PitchShifter { @Override public Function applier() { return f -> f + value; } } static PitchShifter decode(CompoundTag comp) { return switch(NbtUtils.getString(comp, "type")) { case "constant" -> new Constant(getFloat(comp, "value", 1)); case "add" -> new Add(getFloat(comp, "value", 1)); default -> Empty.INSTANCE; }; } }