Newer
Older
void-pack-super-server / work / decompile-ee3ecae0 / net / minecraft / server / CriterionConditionFluid.java
package net.minecraft.server;

import com.google.gson.JsonElement;
import com.google.gson.JsonNull;
import com.google.gson.JsonObject;
import com.google.gson.JsonSyntaxException;
import javax.annotation.Nullable;

public class CriterionConditionFluid {

    public static final CriterionConditionFluid a = new CriterionConditionFluid((Tag) null, (FluidType) null, CriterionTriggerProperties.a);
    @Nullable
    private final Tag<FluidType> b;
    @Nullable
    private final FluidType c;
    private final CriterionTriggerProperties d;

    public CriterionConditionFluid(@Nullable Tag<FluidType> tag, @Nullable FluidType fluidtype, CriterionTriggerProperties criteriontriggerproperties) {
        this.b = tag;
        this.c = fluidtype;
        this.d = criteriontriggerproperties;
    }

    public boolean a(WorldServer worldserver, BlockPosition blockposition) {
        if (this == CriterionConditionFluid.a) {
            return true;
        } else if (!worldserver.n(blockposition)) {
            return false;
        } else {
            Fluid fluid = worldserver.getFluid(blockposition);
            FluidType fluidtype = fluid.getType();

            return this.b != null && !this.b.isTagged(fluidtype) ? false : (this.c != null && fluidtype != this.c ? false : this.d.a(fluid));
        }
    }

    public static CriterionConditionFluid a(@Nullable JsonElement jsonelement) {
        if (jsonelement != null && !jsonelement.isJsonNull()) {
            JsonObject jsonobject = ChatDeserializer.m(jsonelement, "fluid");
            FluidType fluidtype = null;

            if (jsonobject.has("fluid")) {
                MinecraftKey minecraftkey = new MinecraftKey(ChatDeserializer.h(jsonobject, "fluid"));

                fluidtype = (FluidType) IRegistry.FLUID.get(minecraftkey);
            }

            Tag<FluidType> tag = null;

            if (jsonobject.has("tag")) {
                MinecraftKey minecraftkey1 = new MinecraftKey(ChatDeserializer.h(jsonobject, "tag"));

                tag = TagsFluid.a().a(minecraftkey1);
                if (tag == null) {
                    throw new JsonSyntaxException("Unknown fluid tag '" + minecraftkey1 + "'");
                }
            }

            CriterionTriggerProperties criteriontriggerproperties = CriterionTriggerProperties.a(jsonobject.get("state"));

            return new CriterionConditionFluid(tag, fluidtype, criteriontriggerproperties);
        } else {
            return CriterionConditionFluid.a;
        }
    }

    public JsonElement a() {
        if (this == CriterionConditionFluid.a) {
            return JsonNull.INSTANCE;
        } else {
            JsonObject jsonobject = new JsonObject();

            if (this.c != null) {
                jsonobject.addProperty("fluid", IRegistry.FLUID.getKey(this.c).toString());
            }

            if (this.b != null) {
                jsonobject.addProperty("tag", this.b.c().toString());
            }

            jsonobject.add("state", this.d.a());
            return jsonobject;
        }
    }
}