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

import com.google.common.collect.Lists;
import com.google.gson.JsonArray;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonNull;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import java.lang.reflect.Type;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import javax.annotation.Nullable;

public class AdvancementRewards {

    public static final AdvancementRewards a = new AdvancementRewards(0, new MinecraftKey[0], new MinecraftKey[0], CustomFunction.a.a);
    private final int b;
    private final MinecraftKey[] c;
    private final MinecraftKey[] d;
    private final CustomFunction.a e;

    public AdvancementRewards(int i, MinecraftKey[] aminecraftkey, MinecraftKey[] aminecraftkey1, CustomFunction.a customfunction_a) {
        this.b = i;
        this.c = aminecraftkey;
        this.d = aminecraftkey1;
        this.e = customfunction_a;
    }

    public void a(EntityPlayer entityplayer) {
        entityplayer.giveExp(this.b);
        LootTableInfo loottableinfo = (new LootTableInfo.Builder(entityplayer.getWorldServer())).set(LootContextParameters.THIS_ENTITY, entityplayer).set(LootContextParameters.POSITION, new BlockPosition(entityplayer)).a(entityplayer.getRandom()).build(LootContextParameterSets.ADVANCEMENT_REWARD);
        boolean flag = false;
        MinecraftKey[] aminecraftkey = this.c;
        int i = aminecraftkey.length;

        for (int j = 0; j < i; ++j) {
            MinecraftKey minecraftkey = aminecraftkey[j];
            Iterator iterator = entityplayer.server.getLootTableRegistry().getLootTable(minecraftkey).populateLoot(loottableinfo).iterator();

            while (iterator.hasNext()) {
                ItemStack itemstack = (ItemStack) iterator.next();

                if (entityplayer.g(itemstack)) {
                    entityplayer.world.playSound((EntityHuman) null, entityplayer.locX(), entityplayer.locY(), entityplayer.locZ(), SoundEffects.ENTITY_ITEM_PICKUP, SoundCategory.PLAYERS, 0.2F, ((entityplayer.getRandom().nextFloat() - entityplayer.getRandom().nextFloat()) * 0.7F + 1.0F) * 2.0F);
                    flag = true;
                } else {
                    EntityItem entityitem = entityplayer.drop(itemstack, false);

                    if (entityitem != null) {
                        entityitem.n();
                        entityitem.setOwner(entityplayer.getUniqueID());
                    }
                }
            }
        }

        if (flag) {
            entityplayer.defaultContainer.c();
        }

        if (this.d.length > 0) {
            entityplayer.a(this.d);
        }

        MinecraftServer minecraftserver = entityplayer.server;

        this.e.a(minecraftserver.getFunctionData()).ifPresent((customfunction) -> {
            minecraftserver.getFunctionData().a(customfunction, entityplayer.getCommandListener().a().a(2));
        });
    }

    public String toString() {
        return "AdvancementRewards{experience=" + this.b + ", loot=" + Arrays.toString(this.c) + ", recipes=" + Arrays.toString(this.d) + ", function=" + this.e + '}';
    }

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

            if (this.b != 0) {
                jsonobject.addProperty("experience", this.b);
            }

            JsonArray jsonarray;
            MinecraftKey[] aminecraftkey;
            int i;
            MinecraftKey minecraftkey;
            int j;

            if (this.c.length > 0) {
                jsonarray = new JsonArray();
                aminecraftkey = this.c;
                i = aminecraftkey.length;

                for (j = 0; j < i; ++j) {
                    minecraftkey = aminecraftkey[j];
                    jsonarray.add(minecraftkey.toString());
                }

                jsonobject.add("loot", jsonarray);
            }

            if (this.d.length > 0) {
                jsonarray = new JsonArray();
                aminecraftkey = this.d;
                i = aminecraftkey.length;

                for (j = 0; j < i; ++j) {
                    minecraftkey = aminecraftkey[j];
                    jsonarray.add(minecraftkey.toString());
                }

                jsonobject.add("recipes", jsonarray);
            }

            if (this.e.a() != null) {
                jsonobject.addProperty("function", this.e.a().toString());
            }

            return jsonobject;
        }
    }

    public static class a {

        private int a;
        private final List<MinecraftKey> b = Lists.newArrayList();
        private final List<MinecraftKey> c = Lists.newArrayList();
        @Nullable
        private MinecraftKey d;

        public a() {}

        public static AdvancementRewards.a a(int i) {
            return (new AdvancementRewards.a()).b(i);
        }

        public AdvancementRewards.a b(int i) {
            this.a += i;
            return this;
        }

        public static AdvancementRewards.a c(MinecraftKey minecraftkey) {
            return (new AdvancementRewards.a()).d(minecraftkey);
        }

        public AdvancementRewards.a d(MinecraftKey minecraftkey) {
            this.c.add(minecraftkey);
            return this;
        }

        public AdvancementRewards a() {
            return new AdvancementRewards(this.a, (MinecraftKey[]) this.b.toArray(new MinecraftKey[0]), (MinecraftKey[]) this.c.toArray(new MinecraftKey[0]), this.d == null ? CustomFunction.a.a : new CustomFunction.a(this.d));
        }
    }

    public static class b implements JsonDeserializer<AdvancementRewards> {

        public b() {}

        public AdvancementRewards deserialize(JsonElement jsonelement, Type type, JsonDeserializationContext jsondeserializationcontext) throws JsonParseException {
            JsonObject jsonobject = ChatDeserializer.m(jsonelement, "rewards");
            int i = ChatDeserializer.a(jsonobject, "experience", (int) 0);
            JsonArray jsonarray = ChatDeserializer.a(jsonobject, "loot", new JsonArray());
            MinecraftKey[] aminecraftkey = new MinecraftKey[jsonarray.size()];

            for (int j = 0; j < aminecraftkey.length; ++j) {
                aminecraftkey[j] = new MinecraftKey(ChatDeserializer.a(jsonarray.get(j), "loot[" + j + "]"));
            }

            JsonArray jsonarray1 = ChatDeserializer.a(jsonobject, "recipes", new JsonArray());
            MinecraftKey[] aminecraftkey1 = new MinecraftKey[jsonarray1.size()];

            for (int k = 0; k < aminecraftkey1.length; ++k) {
                aminecraftkey1[k] = new MinecraftKey(ChatDeserializer.a(jsonarray1.get(k), "recipes[" + k + "]"));
            }

            CustomFunction.a customfunction_a;

            if (jsonobject.has("function")) {
                customfunction_a = new CustomFunction.a(new MinecraftKey(ChatDeserializer.h(jsonobject, "function")));
            } else {
                customfunction_a = CustomFunction.a.a;
            }

            return new AdvancementRewards(i, aminecraftkey, aminecraftkey1, customfunction_a);
        }
    }
}