package net.minecraft.world.level.storage; import com.mojang.serialization.Codec; import com.mojang.serialization.DynamicOps; import com.mojang.serialization.MapCodec; import java.util.Collections; import java.util.Iterator; import java.util.Optional; import java.util.stream.Stream; import net.minecraft.core.HolderLookup; import net.minecraft.nbt.Tag; public class ValueInputContextHelper { final HolderLookup.Provider lookup; private final DynamicOps ops; final ValueInput.ValueInputList emptyChildList = new ValueInput.ValueInputList() { @Override public boolean isEmpty() { return true; } @Override public Stream stream() { return Stream.empty(); } public Iterator iterator() { return Collections.emptyIterator(); } }; private final ValueInput.TypedInputList emptyTypedList = new ValueInput.TypedInputList() { @Override public boolean isEmpty() { return true; } @Override public Stream stream() { return Stream.empty(); } public Iterator iterator() { return Collections.emptyIterator(); } }; private final ValueInput empty = new ValueInput() { @Override public Optional read(String key, Codec codec) { return Optional.empty(); } @Override public Optional read(MapCodec codec) { return Optional.empty(); } @Override public Optional child(String key) { return Optional.empty(); } @Override public ValueInput childOrEmpty(String key) { return this; } @Override public Optional childrenList(String key) { return Optional.empty(); } @Override public ValueInput.ValueInputList childrenListOrEmpty(String key) { return ValueInputContextHelper.this.emptyChildList; } @Override public Optional> list(String key, Codec elementCodec) { return Optional.empty(); } @Override public ValueInput.TypedInputList listOrEmpty(String key, Codec elementCodec) { return ValueInputContextHelper.this.emptyTypedList(); } @Override public boolean getBooleanOr(String key, boolean defaultValue) { return defaultValue; } @Override public byte getByteOr(String key, byte defaultValue) { return defaultValue; } @Override public int getShortOr(String key, short defaultValue) { return defaultValue; } @Override public Optional getInt(String key) { return Optional.empty(); } @Override public int getIntOr(String key, int defaultValue) { return defaultValue; } @Override public long getLongOr(String key, long defaultValue) { return defaultValue; } @Override public Optional getLong(String key) { return Optional.empty(); } @Override public float getFloatOr(String key, float defaultValue) { return defaultValue; } @Override public double getDoubleOr(String key, double defaultValue) { return defaultValue; } @Override public Optional getString(String key) { return Optional.empty(); } @Override public String getStringOr(String key, String defaultValue) { return defaultValue; } @Override public HolderLookup.Provider lookup() { return ValueInputContextHelper.this.lookup; } @Override public Optional getIntArray(String key) { return Optional.empty(); } }; public ValueInputContextHelper(HolderLookup.Provider lookup, DynamicOps ops) { this.lookup = lookup; this.ops = lookup.createSerializationContext(ops); } public DynamicOps ops() { return this.ops; } public HolderLookup.Provider lookup() { return this.lookup; } public ValueInput empty() { return this.empty; } public ValueInput.ValueInputList emptyList() { return this.emptyChildList; } public ValueInput.TypedInputList emptyTypedList() { return (ValueInput.TypedInputList)this.emptyTypedList; } }