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.Objects; import java.util.Optional; import java.util.stream.Stream; import net.minecraft.core.HolderLookup; import net.minecraft.nbt.Tag; public class ValueInputContextHelper { private final HolderLookup.Provider lookup; private final DynamicOps ops; private final ValueInput.ValueInputList emptyChildList = new ValueInput.ValueInputList() { { Objects.requireNonNull(ValueInputContextHelper.this); } @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() { { Objects.requireNonNull(ValueInputContextHelper.this); } @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() { { Objects.requireNonNull(ValueInputContextHelper.this); } @Override public Optional read(final String name, final Codec codec) { return Optional.empty(); } @Override public Optional read(final MapCodec codec) { return Optional.empty(); } @Override public Optional child(final String name) { return Optional.empty(); } @Override public ValueInput childOrEmpty(final String name) { return this; } @Override public Optional childrenList(final String name) { return Optional.empty(); } @Override public ValueInput.ValueInputList childrenListOrEmpty(final String name) { return ValueInputContextHelper.this.emptyChildList; } @Override public Optional> list(final String name, final Codec codec) { return Optional.empty(); } @Override public ValueInput.TypedInputList listOrEmpty(final String name, final Codec codec) { return ValueInputContextHelper.this.emptyTypedList(); } @Override public boolean getBooleanOr(final String name, final boolean defaultValue) { return defaultValue; } @Override public byte getByteOr(final String name, final byte defaultValue) { return defaultValue; } @Override public int getShortOr(final String name, final short defaultValue) { return defaultValue; } @Override public Optional getInt(final String name) { return Optional.empty(); } @Override public int getIntOr(final String name, final int defaultValue) { return defaultValue; } @Override public long getLongOr(final String name, final long defaultValue) { return defaultValue; } @Override public Optional getLong(final String name) { return Optional.empty(); } @Override public float getFloatOr(final String name, final float defaultValue) { return defaultValue; } @Override public double getDoubleOr(final String name, final double defaultValue) { return defaultValue; } @Override public Optional getString(final String name) { return Optional.empty(); } @Override public String getStringOr(final String name, final String defaultValue) { return defaultValue; } @Override public HolderLookup.Provider lookup() { return ValueInputContextHelper.this.lookup; } @Override public Optional getIntArray(final String name) { return Optional.empty(); } }; public ValueInputContextHelper(final HolderLookup.Provider lookup, final 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; } }