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

import com.google.common.collect.Lists;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonObject;
import com.google.gson.JsonSerializationContext;
import java.util.List;
import java.util.function.Predicate;

public abstract class LootEntryAbstract implements LootEntryChildren {

    protected final LootItemCondition[] d;
    private final Predicate<LootTableInfo> c;

    protected LootEntryAbstract(LootItemCondition[] alootitemcondition) {
        this.d = alootitemcondition;
        this.c = LootItemConditions.a((Predicate[]) alootitemcondition);
    }

    public void a(LootCollector lootcollector) {
        for (int i = 0; i < this.d.length; ++i) {
            this.d[i].a(lootcollector.b(".condition[" + i + "]"));
        }

    }

    protected final boolean a(LootTableInfo loottableinfo) {
        return this.c.test(loottableinfo);
    }

    public abstract static class b<T extends LootEntryAbstract> {

        private final MinecraftKey a;
        private final Class<T> b;

        protected b(MinecraftKey minecraftkey, Class<T> oclass) {
            this.a = minecraftkey;
            this.b = oclass;
        }

        public MinecraftKey a() {
            return this.a;
        }

        public Class<T> b() {
            return this.b;
        }

        public abstract void a(JsonObject jsonobject, T t0, JsonSerializationContext jsonserializationcontext);

        public abstract T b(JsonObject jsonobject, JsonDeserializationContext jsondeserializationcontext, LootItemCondition[] alootitemcondition);
    }

    public abstract static class a<T extends LootEntryAbstract.a<T>> implements LootItemConditionUser<T> {

        private final List<LootItemCondition> a = Lists.newArrayList();

        public a() {}

        protected abstract T d();

        @Override
        public T b(LootItemCondition.a lootitemcondition_a) {
            this.a.add(lootitemcondition_a.build());
            return this.d();
        }

        @Override
        public final T c() {
            return this.d();
        }

        protected LootItemCondition[] f() {
            return (LootItemCondition[]) this.a.toArray(new LootItemCondition[0]);
        }

        public LootEntryAlternatives.a a(LootEntryAbstract.a<?> lootentryabstract_a) {
            return new LootEntryAlternatives.a(new LootEntryAbstract.a[]{this, lootentryabstract_a});
        }

        public abstract LootEntryAbstract b();
    }
}