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

import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonObject;
import com.google.gson.JsonSerializationContext;

public class LootItemConditionLocationCheck implements LootItemCondition {

    private final CriterionConditionLocation a;
    private final BlockPosition b;

    public LootItemConditionLocationCheck(CriterionConditionLocation criterionconditionlocation, BlockPosition blockposition) {
        this.a = criterionconditionlocation;
        this.b = blockposition;
    }

    public boolean test(LootTableInfo loottableinfo) {
        BlockPosition blockposition = (BlockPosition) loottableinfo.getContextParameter(LootContextParameters.POSITION);

        return blockposition != null && this.a.a(loottableinfo.c(), (float) (blockposition.getX() + this.b.getX()), (float) (blockposition.getY() + this.b.getY()), (float) (blockposition.getZ() + this.b.getZ()));
    }

    public static LootItemCondition.a a(CriterionConditionLocation.a criterionconditionlocation_a) {
        return () -> {
            return new LootItemConditionLocationCheck(criterionconditionlocation_a.b(), BlockPosition.ZERO);
        };
    }

    public static class a extends LootItemCondition.b<LootItemConditionLocationCheck> {

        public a() {
            super(new MinecraftKey("location_check"), LootItemConditionLocationCheck.class);
        }

        public void a(JsonObject jsonobject, LootItemConditionLocationCheck lootitemconditionlocationcheck, JsonSerializationContext jsonserializationcontext) {
            jsonobject.add("predicate", lootitemconditionlocationcheck.a.a());
            if (lootitemconditionlocationcheck.b.getX() != 0) {
                jsonobject.addProperty("offsetX", lootitemconditionlocationcheck.b.getX());
            }

            if (lootitemconditionlocationcheck.b.getY() != 0) {
                jsonobject.addProperty("offsetY", lootitemconditionlocationcheck.b.getY());
            }

            if (lootitemconditionlocationcheck.b.getZ() != 0) {
                jsonobject.addProperty("offsetZ", lootitemconditionlocationcheck.b.getZ());
            }

        }

        @Override
        public LootItemConditionLocationCheck b(JsonObject jsonobject, JsonDeserializationContext jsondeserializationcontext) {
            CriterionConditionLocation criterionconditionlocation = CriterionConditionLocation.a(jsonobject.get("predicate"));
            int i = ChatDeserializer.a(jsonobject, "offsetX", (int) 0);
            int j = ChatDeserializer.a(jsonobject, "offsetY", (int) 0);
            int k = ChatDeserializer.a(jsonobject, "offsetZ", (int) 0);

            return new LootItemConditionLocationCheck(criterionconditionlocation, new BlockPosition(i, j, k));
        }
    }
}