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

import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Streams;
import com.google.gson.JsonArray;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonObject;
import com.google.gson.JsonSerializationContext;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.function.UnaryOperator;
import javax.annotation.Nullable;

public class LootItemFunctionSetLore extends LootItemFunctionConditional {

    private final boolean a;
    private final List<IChatBaseComponent> c;
    @Nullable
    private final LootTableInfo.EntityTarget d;

    public LootItemFunctionSetLore(LootItemCondition[] alootitemcondition, boolean flag, List<IChatBaseComponent> list, @Nullable LootTableInfo.EntityTarget loottableinfo_entitytarget) {
        super(alootitemcondition);
        this.a = flag;
        this.c = ImmutableList.copyOf(list);
        this.d = loottableinfo_entitytarget;
    }

    @Override
    public Set<LootContextParameter<?>> a() {
        return this.d != null ? ImmutableSet.of(this.d.a()) : ImmutableSet.of();
    }

    @Override
    public ItemStack a(ItemStack itemstack, LootTableInfo loottableinfo) {
        NBTTagList nbttaglist = this.a(itemstack, !this.c.isEmpty());

        if (nbttaglist != null) {
            if (this.a) {
                nbttaglist.clear();
            }

            UnaryOperator<IChatBaseComponent> unaryoperator = LootItemFunctionSetName.a(loottableinfo, this.d);

            this.c.stream().map(unaryoperator).map(IChatBaseComponent.ChatSerializer::a).map(NBTTagString::a).forEach(nbttaglist::add);
        }

        return itemstack;
    }

    @Nullable
    private NBTTagList a(ItemStack itemstack, boolean flag) {
        NBTTagCompound nbttagcompound;

        if (itemstack.hasTag()) {
            nbttagcompound = itemstack.getTag();
        } else {
            if (!flag) {
                return null;
            }

            nbttagcompound = new NBTTagCompound();
            itemstack.setTag(nbttagcompound);
        }

        NBTTagCompound nbttagcompound1;

        if (nbttagcompound.hasKeyOfType("display", 10)) {
            nbttagcompound1 = nbttagcompound.getCompound("display");
        } else {
            if (!flag) {
                return null;
            }

            nbttagcompound1 = new NBTTagCompound();
            nbttagcompound.set("display", nbttagcompound1);
        }

        if (nbttagcompound1.hasKeyOfType("Lore", 9)) {
            return nbttagcompound1.getList("Lore", 8);
        } else if (flag) {
            NBTTagList nbttaglist = new NBTTagList();

            nbttagcompound1.set("Lore", nbttaglist);
            return nbttaglist;
        } else {
            return null;
        }
    }

    public static class b extends LootItemFunctionConditional.c<LootItemFunctionSetLore> {

        public b() {
            super(new MinecraftKey("set_lore"), LootItemFunctionSetLore.class);
        }

        public void a(JsonObject jsonobject, LootItemFunctionSetLore lootitemfunctionsetlore, JsonSerializationContext jsonserializationcontext) {
            super.a(jsonobject, (LootItemFunctionConditional) lootitemfunctionsetlore, jsonserializationcontext);
            jsonobject.addProperty("replace", lootitemfunctionsetlore.a);
            JsonArray jsonarray = new JsonArray();
            Iterator iterator = lootitemfunctionsetlore.c.iterator();

            while (iterator.hasNext()) {
                IChatBaseComponent ichatbasecomponent = (IChatBaseComponent) iterator.next();

                jsonarray.add(IChatBaseComponent.ChatSerializer.b(ichatbasecomponent));
            }

            jsonobject.add("lore", jsonarray);
            if (lootitemfunctionsetlore.d != null) {
                jsonobject.add("entity", jsonserializationcontext.serialize(lootitemfunctionsetlore.d));
            }

        }

        @Override
        public LootItemFunctionSetLore b(JsonObject jsonobject, JsonDeserializationContext jsondeserializationcontext, LootItemCondition[] alootitemcondition) {
            boolean flag = ChatDeserializer.a(jsonobject, "replace", false);
            List<IChatBaseComponent> list = (List) Streams.stream(ChatDeserializer.u(jsonobject, "lore")).map(IChatBaseComponent.ChatSerializer::a).collect(ImmutableList.toImmutableList());
            LootTableInfo.EntityTarget loottableinfo_entitytarget = (LootTableInfo.EntityTarget) ChatDeserializer.a(jsonobject, "entity", (Object) null, jsondeserializationcontext, LootTableInfo.EntityTarget.class);

            return new LootItemFunctionSetLore(alootitemcondition, flag, list, loottableinfo_entitytarget);
        }
    }
}