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

import com.google.common.collect.Maps;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.stream.Stream;

public class PersistentCommandStorage {

    private final Map<String, PersistentCommandStorage.a> a = Maps.newHashMap();
    private final WorldPersistentData b;

    public PersistentCommandStorage(WorldPersistentData worldpersistentdata) {
        this.b = worldpersistentdata;
    }

    private PersistentCommandStorage.a a(String s, String s1) {
        PersistentCommandStorage.a persistentcommandstorage_a = new PersistentCommandStorage.a(s1);

        this.a.put(s, persistentcommandstorage_a);
        return persistentcommandstorage_a;
    }

    public NBTTagCompound a(MinecraftKey minecraftkey) {
        String s = minecraftkey.getNamespace();
        String s1 = a(s);
        PersistentCommandStorage.a persistentcommandstorage_a = (PersistentCommandStorage.a) this.b.b(() -> {
            return this.a(s, s1);
        }, s1);

        return persistentcommandstorage_a != null ? persistentcommandstorage_a.a(minecraftkey.getKey()) : new NBTTagCompound();
    }

    public void a(MinecraftKey minecraftkey, NBTTagCompound nbttagcompound) {
        String s = minecraftkey.getNamespace();
        String s1 = a(s);

        ((PersistentCommandStorage.a) this.b.a(() -> {
            return this.a(s, s1);
        }, s1)).a(minecraftkey.getKey(), nbttagcompound);
    }

    public Stream<MinecraftKey> a() {
        return this.a.entrySet().stream().flatMap((entry) -> {
            return ((PersistentCommandStorage.a) entry.getValue()).b((String) entry.getKey());
        });
    }

    private static String a(String s) {
        return "command_storage_" + s;
    }

    static class a extends PersistentBase {

        private final Map<String, NBTTagCompound> a = Maps.newHashMap();

        public a(String s) {
            super(s);
        }

        @Override
        public void a(NBTTagCompound nbttagcompound) {
            NBTTagCompound nbttagcompound1 = nbttagcompound.getCompound("contents");
            Iterator iterator = nbttagcompound1.getKeys().iterator();

            while (iterator.hasNext()) {
                String s = (String) iterator.next();

                this.a.put(s, nbttagcompound1.getCompound(s));
            }

        }

        @Override
        public NBTTagCompound b(NBTTagCompound nbttagcompound) {
            NBTTagCompound nbttagcompound1 = new NBTTagCompound();

            this.a.forEach((s, nbttagcompound2) -> {
                nbttagcompound1.set(s, nbttagcompound2.clone());
            });
            nbttagcompound.set("contents", nbttagcompound1);
            return nbttagcompound;
        }

        public NBTTagCompound a(String s) {
            NBTTagCompound nbttagcompound = (NBTTagCompound) this.a.get(s);

            return nbttagcompound != null ? nbttagcompound : new NBTTagCompound();
        }

        public void a(String s, NBTTagCompound nbttagcompound) {
            if (nbttagcompound.isEmpty()) {
                this.a.remove(s);
            } else {
                this.a.put(s, nbttagcompound);
            }

            this.b();
        }

        public Stream<MinecraftKey> b(String s) {
            return this.a.keySet().stream().map((s1) -> {
                return new MinecraftKey(s, s1);
            });
        }
    }
}