From 7b267ecadcf323090cf8ea9978a617d09803c394 Mon Sep 17 00:00:00 2001 From: SD Date: Wed, 31 Mar 2021 16:44:14 +0530 Subject: [PATCH] Make PocketTemplate s store their id --- .../org/dimdev/dimdoors/command/PocketCommand.java | 9 ++------- .../org/dimdev/dimdoors/pockets/PocketLoader.java | 14 ++++++++------ .../dimdev/dimdoors/pockets/PocketTemplate.java | 11 +++++++++-- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/main/java/org/dimdev/dimdoors/command/PocketCommand.java b/src/main/java/org/dimdev/dimdoors/command/PocketCommand.java index 81df7c3e..d6fbd61a 100644 --- a/src/main/java/org/dimdev/dimdoors/command/PocketCommand.java +++ b/src/main/java/org/dimdev/dimdoors/command/PocketCommand.java @@ -6,18 +6,14 @@ import java.io.IOException; import java.util.concurrent.CompletableFuture; import java.util.function.Consumer; -import com.google.common.collect.HashBiMap; import com.mojang.brigadier.Command; import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.sk89q.jnbt.NBTInputStream; import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.extent.clipboard.Clipboard; -import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormat; -import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormats; import com.sk89q.worldedit.extent.clipboard.io.SpongeSchematicReader; import com.sk89q.worldedit.fabric.FabricAdapter; -import com.sk89q.worldedit.function.operation.Operations; import com.sk89q.worldedit.session.ClipboardHolder; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -25,7 +21,6 @@ import org.dimdev.dimdoors.DimensionalDoorsInitializer; import org.dimdev.dimdoors.api.util.BlockPlacementType; import org.dimdev.dimdoors.command.arguments.EnumArgumentType; import org.dimdev.dimdoors.command.arguments.PocketTemplateArgumentType; -import org.dimdev.dimdoors.pockets.PocketLoader; import org.dimdev.dimdoors.pockets.PocketTemplate; import org.dimdev.dimdoors.util.schematic.Schematic; import org.dimdev.dimdoors.util.schematic.SchematicPlacer; @@ -95,7 +90,7 @@ public class PocketCommand { throw new RuntimeException(e); // Can't happen, the stream is a ByteArrayInputStream } WorldEdit.getInstance().getSessionManager().get(FabricAdapter.adaptPlayer(player)).setClipboard(new ClipboardHolder(clipboard)); - messageSender.accept(new TranslatableText("commands.pocket.loadedSchem", HashBiMap.create(PocketLoader.getInstance().getTemplates()).inverse().get(template).reduce(String::concat).get())); + messageSender.accept(new TranslatableText("commands.pocket.loadedSchem", template.getId())); }; if (async) { CompletableFuture.runAsync(task); @@ -113,7 +108,7 @@ public class PocketCommand { blockPlacementType ); - String id = HashBiMap.create(PocketLoader.getInstance().getTemplates()).inverse().get(template).reduce(String::concat).get(); + String id = template.getId().toString(); source.getCommandSource().sendFeedback(new TranslatableText("commands.pocket.placedSchem", id, "" + source.getBlockPos().getX() + ", " + source.getBlockPos().getY() + ", " + source.getBlockPos().getZ(), source.world.getRegistryKey().getValue().toString()), true); return Command.SINGLE_SUCCESS; } diff --git a/src/main/java/org/dimdev/dimdoors/pockets/PocketLoader.java b/src/main/java/org/dimdev/dimdoors/pockets/PocketLoader.java index a5bc51bb..1d3ddd43 100644 --- a/src/main/java/org/dimdev/dimdoors/pockets/PocketLoader.java +++ b/src/main/java/org/dimdev/dimdoors/pockets/PocketLoader.java @@ -4,7 +4,9 @@ import java.io.IOException; import java.io.InputStreamReader; import java.util.*; import java.util.concurrent.CompletableFuture; +import java.util.function.BiFunction; import java.util.function.Function; +import java.util.function.UnaryOperator; import java.util.stream.Collectors; import com.google.gson.*; @@ -83,17 +85,17 @@ public class PocketLoader implements SimpleSynchronousResourceReloadListener { }); } - private CompletableFuture> loadResourcePathFromCompressedNbtToTree(ResourceManager manager, String startingPath, String extension, Function reader) { + private CompletableFuture> loadResourcePathFromCompressedNbtToTree(ResourceManager manager, String startingPath, String extension, BiFunction reader) { int sub = startingPath.endsWith("/") ? 0 : 1; - + Function> normalizer = id -> Path.stringPath(id.getNamespace() + ":" + id.getPath().substring(0, id.getPath().lastIndexOf(".")).substring(startingPath.length() + sub)); Collection ids = manager.findResources(startingPath, str -> str.endsWith(extension)); return CompletableFuture.supplyAsync(() -> { SimpleTree tree = new SimpleTree<>(String.class); tree.putAll(ids.parallelStream().unordered().collect(Collectors.toConcurrentMap( - id -> Path.stringPath(id.getNamespace() + ":" + id.getPath().substring(0, id.getPath().lastIndexOf(".")).substring(startingPath.length() + sub)), + normalizer, id -> { try { - return reader.apply(NbtIo.readCompressed(manager.getResource(id).getInputStream())); + return reader.apply(NbtIo.readCompressed(manager.getResource(id).getInputStream()), normalizer.apply(id).reduce(String::concat).get()); } catch (IOException e) { throw new RuntimeException("Error loading resource: " + id); } @@ -139,9 +141,9 @@ public class PocketLoader implements SimpleSynchronousResourceReloadListener { return PocketGenerator.deserialize(NbtUtil.asCompoundTag(tag, "Could not load PocketGenerator since its json does not represent a CompoundTag!")); } - private PocketTemplate loadPocketTemplate(CompoundTag tag) { + private PocketTemplate loadPocketTemplate(CompoundTag tag, String id) { try { - return new PocketTemplate(Schematic.fromTag(tag)); + return new PocketTemplate(Schematic.fromTag(tag), new Identifier(id)); } catch (Exception e) { throw new RuntimeException("Error loading " + tag.toString(), e); } diff --git a/src/main/java/org/dimdev/dimdoors/pockets/PocketTemplate.java b/src/main/java/org/dimdev/dimdoors/pockets/PocketTemplate.java index f076c253..629878a2 100644 --- a/src/main/java/org/dimdev/dimdoors/pockets/PocketTemplate.java +++ b/src/main/java/org/dimdev/dimdoors/pockets/PocketTemplate.java @@ -1,5 +1,6 @@ package org.dimdev.dimdoors.pockets; +import net.minecraft.util.Identifier; import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; import org.apache.logging.log4j.LogManager; @@ -21,10 +22,12 @@ public class PocketTemplate { private static final Logger LOGGER = LogManager.getLogger(); private static final boolean replacingPlaceholders = false; private final Schematic schematic; + private final Identifier id; - public PocketTemplate(Schematic schematic) { + public PocketTemplate(Schematic schematic, Identifier id) { this.schematic = schematic; - } + this.id = id; + } /* public void setup(Pocket pocket, VirtualTarget linkTo, LinkProperties linkProperties) { @@ -87,4 +90,8 @@ public class PocketTemplate { public Schematic getSchematic() { return this.schematic; } + + public Identifier getId() { + return id; + } }