PrivateRegistry fromTag/ toTag parallelization
This commit is contained in:
parent
53e32f88c3
commit
6ad76061d7
2 changed files with 23 additions and 17 deletions
|
@ -9,7 +9,6 @@ import java.nio.file.Paths;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.ExecutionException;
|
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
|
|
@ -2,10 +2,14 @@ package org.dimdev.dimdoors.world.pocket;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import com.google.common.collect.BiMap;
|
import com.google.common.collect.BiMap;
|
||||||
import com.google.common.collect.HashBiMap;
|
import com.google.common.collect.HashBiMap;
|
||||||
|
|
||||||
|
import net.minecraft.nbt.Tag;
|
||||||
|
import net.minecraft.util.Pair;
|
||||||
import org.dimdev.dimdoors.world.level.DimensionalRegistry;
|
import org.dimdev.dimdoors.world.level.DimensionalRegistry;
|
||||||
|
|
||||||
import net.minecraft.nbt.CompoundTag;
|
import net.minecraft.nbt.CompoundTag;
|
||||||
|
@ -48,26 +52,29 @@ public class PrivateRegistry {
|
||||||
public PrivateRegistry() {
|
public PrivateRegistry() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: async
|
public void fromTag(CompoundTag tag) {
|
||||||
public void fromTag(CompoundTag nbt) {
|
privatePocketMap.clear();
|
||||||
CompoundTag tag = nbt.getCompound("privatePocketMap");
|
CompoundTag privatePocketMapTag = tag.getCompound("private_pocket_map");
|
||||||
|
CompletableFuture<Map<UUID, PocketInfo>> futurePrivatePocketMap = CompletableFuture.supplyAsync(() ->
|
||||||
|
privatePocketMapTag.getKeys().stream().unordered().map(key -> {
|
||||||
|
CompoundTag pocketInfoTag = privatePocketMapTag.getCompound(key);
|
||||||
|
return CompletableFuture.supplyAsync(() -> new Pair<>(UUID.fromString(key), PocketInfo.fromTag(pocketInfoTag)));
|
||||||
|
}).parallel().map(CompletableFuture::join).collect(Collectors.toConcurrentMap(Pair::getLeft, Pair::getRight)));
|
||||||
|
|
||||||
HashBiMap<UUID, PocketInfo> bm = HashBiMap.create();
|
futurePrivatePocketMap.join().forEach(this.privatePocketMap::put);
|
||||||
for (String t : tag.getKeys()) {
|
|
||||||
bm.put(UUID.fromString(t), PocketInfo.fromTag(tag.getCompound(t)));
|
|
||||||
}
|
|
||||||
this.privatePocketMap = bm;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: async
|
public CompoundTag toTag(CompoundTag tag) {
|
||||||
public CompoundTag toTag(CompoundTag nbt) {
|
CompletableFuture<CompoundTag> futurePrivatePocketMapTag = CompletableFuture.supplyAsync(() -> {
|
||||||
CompoundTag tag = new CompoundTag();
|
Map<String, Tag> privatePocketTagMap = this.privatePocketMap.entrySet().parallelStream().unordered().collect(Collectors.toConcurrentMap(entry -> entry.getKey().toString(), entry -> PocketInfo.toTag(entry.getValue())));
|
||||||
for (Map.Entry<UUID, PocketInfo> entry : this.privatePocketMap.entrySet()) {
|
CompoundTag privatePocketMapTag = new CompoundTag();
|
||||||
tag.put(entry.getKey().toString(), PocketInfo.toTag(entry.getValue()));
|
privatePocketTagMap.forEach(privatePocketMapTag::put);
|
||||||
}
|
return privatePocketMapTag;
|
||||||
nbt.put("privatePocketMap", tag);
|
});
|
||||||
|
|
||||||
return nbt;
|
tag.put("private_pocket_map", futurePrivatePocketMapTag.join());
|
||||||
|
|
||||||
|
return tag;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PrivatePocket getPrivatePocket(UUID playerUUID) {
|
public PrivatePocket getPrivatePocket(UUID playerUUID) {
|
||||||
|
|
Loading…
Reference in a new issue