package net.minecraft.commands; import com.mojang.serialization.Codec; import java.util.Optional; import net.minecraft.commands.functions.CommandFunction; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.ServerFunctionManager; public class CacheableFunction { public static final Codec CODEC = ResourceLocation.CODEC.xmap(CacheableFunction::new, CacheableFunction::getId); private final ResourceLocation id; private boolean resolved; private Optional> function = Optional.empty(); public CacheableFunction(ResourceLocation id) { this.id = id; } public Optional> get(ServerFunctionManager functionManager) { if (!this.resolved) { this.function = functionManager.get(this.id); this.resolved = true; } return this.function; } public ResourceLocation getId() { return this.id; } public boolean equals(Object object) { return object == this ? true : object instanceof CacheableFunction cacheableFunction && this.getId().equals(cacheableFunction.getId()); } }