From 325d17c72e59aff4608080d9c0b6d120ffb8821c Mon Sep 17 00:00:00 2001 From: Waterpicker Date: Thu, 18 Feb 2021 05:41:30 -0600 Subject: [PATCH 1/3] Pushed Clamp --- src/main/java/org/dimdev/dimdoors/util/math/Equation.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/org/dimdev/dimdoors/util/math/Equation.java b/src/main/java/org/dimdev/dimdoors/util/math/Equation.java index 3cdbbf60..72dba5c1 100644 --- a/src/main/java/org/dimdev/dimdoors/util/math/Equation.java +++ b/src/main/java/org/dimdev/dimdoors/util/math/Equation.java @@ -7,6 +7,8 @@ import net.minecraft.util.Pair; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import net.minecraft.util.math.MathHelper; + public interface Equation { double FALSE = 0d; double TRUE = 1d; @@ -114,6 +116,9 @@ public interface Equation { return min; }))); + // clamp + parseRules.add(new FunctionParser("clamp", 3, 3, (stringDoubleMap, equations) -> MathHelper.clamp(equations[0].apply(stringDoubleMap), equations[1].apply(stringDoubleMap), equations[2].apply(stringDoubleMap)))); + // variable replacer parseRules.add(new VariableReplacer()); } From 7b75764542f9d487bd6f926bb40b61daa4b18b03 Mon Sep 17 00:00:00 2001 From: SD Date: Thu, 18 Feb 2021 19:27:12 +0530 Subject: [PATCH 2/3] V2 Resource reload listener (WIP) --- .../dimdoors/DimensionalDoorsInitializer.java | 6 +- .../dimdoors/pockets/SchematicV2Handler.java | 99 ++++++++++++++----- .../pockets/virtual/VirtualPocket.java | 4 +- 3 files changed, 84 insertions(+), 25 deletions(-) diff --git a/src/main/java/org/dimdev/dimdoors/DimensionalDoorsInitializer.java b/src/main/java/org/dimdev/dimdoors/DimensionalDoorsInitializer.java index 7d1b8bf0..5e617b9e 100644 --- a/src/main/java/org/dimdev/dimdoors/DimensionalDoorsInitializer.java +++ b/src/main/java/org/dimdev/dimdoors/DimensionalDoorsInitializer.java @@ -10,6 +10,8 @@ import net.fabricmc.fabric.api.event.player.AttackBlockCallback; import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; import me.sargunvohra.mcmods.autoconfig1u.serializer.JanksonConfigSerializer; + +import net.minecraft.resource.ResourceType; import net.minecraft.util.math.Vec3i; import org.dimdev.dimdoors.block.ModBlocks; import org.dimdev.dimdoors.block.entity.ModBlockEntityTypes; @@ -45,6 +47,7 @@ import net.minecraft.world.World; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; +import net.fabricmc.fabric.api.resource.ResourceManagerHelper; public class DimensionalDoorsInitializer implements ModInitializer { public static final Identifier MONOLITH_PARTICLE_PACKET = new Identifier("dimdoors", "monolith_particle_packet"); @@ -94,7 +97,8 @@ public class DimensionalDoorsInitializer implements ModInitializer { PocketGenerator.PocketGeneratorType.register(); AbstractPocket.AbstractPocketType.register(); - SchematicV2Handler.getInstance().load(); + ResourceManagerHelper.get(ResourceType.SERVER_DATA).registerReloadListener(SchematicV2Handler.getInstance()); +// SchematicV2Handler.getInstance().load(); SchematicHandler.INSTANCE.loadSchematics(); registerListeners(); diff --git a/src/main/java/org/dimdev/dimdoors/pockets/SchematicV2Handler.java b/src/main/java/org/dimdev/dimdoors/pockets/SchematicV2Handler.java index d7002fea..0d1ed843 100644 --- a/src/main/java/org/dimdev/dimdoors/pockets/SchematicV2Handler.java +++ b/src/main/java/org/dimdev/dimdoors/pockets/SchematicV2Handler.java @@ -1,11 +1,14 @@ package org.dimdev.dimdoors.pockets; import java.io.IOException; +import java.io.InputStreamReader; import java.net.URISyntaxException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Executor; import java.util.function.BiConsumer; import java.util.function.Function; import java.util.stream.Collectors; @@ -14,11 +17,15 @@ import com.google.common.collect.*; import com.google.gson.*; import com.mojang.serialization.JsonOps; +import net.fabricmc.fabric.api.resource.SimpleSynchronousResourceReloadListener; import net.fabricmc.fabric.api.util.NbtType; import net.minecraft.nbt.*; +import net.minecraft.resource.Resource; +import net.minecraft.resource.ResourceManager; import net.minecraft.util.Identifier; +import net.minecraft.util.profiler.Profiler; -import org.apache.logging.log4j.Level; +import org.apache.commons.lang3.ArrayUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.dimdev.dimdoors.pockets.generator.PocketGenerator; @@ -26,43 +33,84 @@ import org.dimdev.dimdoors.pockets.virtual.VirtualPocket; import org.dimdev.dimdoors.util.PocketGenerationParameters; import org.dimdev.dimdoors.util.WeightedList; import org.dimdev.dimdoors.util.schematic.v2.Schematic; +import org.lwjgl.system.CallbackI; -public class SchematicV2Handler { +public class SchematicV2Handler implements SimpleSynchronousResourceReloadListener { private static final Logger LOGGER = LogManager.getLogger(); private static final Gson GSON = new GsonBuilder().setLenient().setPrettyPrinting().create(); private static final SchematicV2Handler INSTANCE = new SchematicV2Handler(); private final Map pocketGeneratorMap = Maps.newHashMap(); private final Map pocketGroups = Maps.newHashMap(); private final Map templates = Maps.newHashMap(); - private boolean loaded = false; private SchematicV2Handler() { } - public void load() { - if (this.loaded) { - throw new UnsupportedOperationException("Attempted to load pockets twice!"); - } - this.loaded = true; - long startTime = System.currentTimeMillis(); + @Override + public void apply(ResourceManager manager) { + pocketGeneratorMap.clear(); + pocketGroups.clear(); + templates.clear(); - try { - Path path = Paths.get(SchematicV2Handler.class.getResource("/data/dimdoors/pockets/generators").toURI()); - loadJson(path, new String[0], this::loadPocketGenerator); - LOGGER.info("Loaded pockets in {} seconds", System.currentTimeMillis() - startTime); - } catch (URISyntaxException e) { - LOGGER.error(e); + Collection groupIds = manager.findResources("pockets/groups", str -> str.endsWith(".json")); + for (Identifier groupId : groupIds) { + JsonObject[] groupData = new JsonObject[0]; + List groups; + try { + groups = manager.getAllResources(groupId); + } catch (IOException e) { + throw new RuntimeException("Error loading pocket group " + groupId, e); + } + for (Resource group : groups) { + JsonObject[] objects = GSON.fromJson(new InputStreamReader(group.getInputStream()), JsonObject[].class); + groupData = ArrayUtils.addAll(groupData, objects); + } + String[] path = groupId.getPath().split("/"); + String id = path[path.length - 1]; // Last one is the file name + id = id.substring(0, id.indexOf('.')); // Remove extension + JsonArray arr = new JsonArray(); + for (JsonObject groupDatum : groupData) { + arr.add(groupDatum); + } + this.loadPocketGroup(id, JsonOps.INSTANCE.convertTo(NbtOps.INSTANCE, arr)); } - startTime = System.currentTimeMillis(); - try { - Path path = Paths.get(SchematicV2Handler.class.getResource("/data/dimdoors/pockets/groups").toURI()); - loadJson(path, new String[0], this::loadPocketGroup); - LOGGER.info("Loaded pocket groups in {} seconds", System.currentTimeMillis() - startTime); - } catch (URISyntaxException e) { - LOGGER.error(e); + Collection generatorIds = manager.findResources("pockets/generators", str -> str.endsWith(".json")); + for (Identifier generatorId : generatorIds) { + Resource generator; + try { + generator = manager.getResource(generatorId); + } catch (IOException e) { + throw new RuntimeException("Error loading pocket generator " + generatorId, e); + } + JsonObject json = GSON.fromJson(new InputStreamReader(generator.getInputStream()), JsonObject.class); + String[] path = generatorId.toString().split("/"); + String id = String.join("/", ArrayUtils.subarray(path, 1, path.length)); + id = id.substring(0, id.lastIndexOf(".")); + this.loadPocketGenerator(id, JsonOps.INSTANCE.convertTo(NbtOps.INSTANCE, json)); } - } + } + +// public void load() { +// long startTime = System.currentTimeMillis(); +// +// try { +// Path path = Paths.get(SchematicV2Handler.class.getResource("/data/dimdoors/pockets/generators").toURI()); +// loadJson(path, new String[0], this::loadPocketGenerator); +// LOGGER.info("Loaded pockets in {} seconds", System.currentTimeMillis() - startTime); +// } catch (URISyntaxException e) { +// LOGGER.error(e); +// } +// +// startTime = System.currentTimeMillis(); +// try { +// Path path = Paths.get(SchematicV2Handler.class.getResource("/data/dimdoors/pockets/groups").toURI()); +// loadJson(path, new String[0], this::loadPocketGroup); +// LOGGER.info("Loaded pocket groups in {} seconds", System.currentTimeMillis() - startTime); +// } catch (URISyntaxException e) { +// LOGGER.error(e); +// } +// } public Tag readNbtFromJson(String id) { try { @@ -170,4 +218,9 @@ public class SchematicV2Handler { public PocketGenerator getGenerator(String id) { return pocketGeneratorMap.get(id); } + + @Override + public Identifier getFabricId() { + return new Identifier("dimdoors", "schematics_v2"); + } } diff --git a/src/main/java/org/dimdev/dimdoors/pockets/virtual/VirtualPocket.java b/src/main/java/org/dimdev/dimdoors/pockets/virtual/VirtualPocket.java index 557860bd..dc524e72 100644 --- a/src/main/java/org/dimdev/dimdoors/pockets/virtual/VirtualPocket.java +++ b/src/main/java/org/dimdev/dimdoors/pockets/virtual/VirtualPocket.java @@ -8,10 +8,12 @@ import org.dimdev.dimdoors.util.PocketGenerationParameters; import org.dimdev.dimdoors.util.Weighted; import org.dimdev.dimdoors.world.pocket.type.Pocket; +import net.fabricmc.fabric.api.util.NbtType; + public interface VirtualPocket extends Weighted { static VirtualPocket deserialize(Tag tag) { - if (tag.getType() == 9) { // ListTag + if (tag.getType() == NbtType.LIST) { return VirtualPocketList.deserialize((ListTag) tag); } return VirtualSingularPocket.deserialize((CompoundTag) tag); // should be CompoundTag From 3f9e9364fdcffb67ff234b610bb7f32c469b7c6f Mon Sep 17 00:00:00 2001 From: SD Date: Thu, 18 Feb 2021 22:28:26 +0530 Subject: [PATCH 3/3] Arrays --- .../dimdev/dimdoors/pockets/SchematicV2Handler.java | 1 + .../data/dimdoors/pockets/groups/example.json | 10 ++++++---- .../data/dimdoors/pockets/groups/private.json | 10 ++++++---- .../resources/data/dimdoors/pockets/groups/public.json | 10 ++++++---- 4 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/dimdev/dimdoors/pockets/SchematicV2Handler.java b/src/main/java/org/dimdev/dimdoors/pockets/SchematicV2Handler.java index 0d1ed843..701a3be8 100644 --- a/src/main/java/org/dimdev/dimdoors/pockets/SchematicV2Handler.java +++ b/src/main/java/org/dimdev/dimdoors/pockets/SchematicV2Handler.java @@ -28,6 +28,7 @@ import net.minecraft.util.profiler.Profiler; import org.apache.commons.lang3.ArrayUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.dimdev.dimdoors.DimensionalDoorsInitializer; import org.dimdev.dimdoors.pockets.generator.PocketGenerator; import org.dimdev.dimdoors.pockets.virtual.VirtualPocket; import org.dimdev.dimdoors.util.PocketGenerationParameters; diff --git a/src/main/resources/data/dimdoors/pockets/groups/example.json b/src/main/resources/data/dimdoors/pockets/groups/example.json index c7e13f79..59708855 100644 --- a/src/main/resources/data/dimdoors/pockets/groups/example.json +++ b/src/main/resources/data/dimdoors/pockets/groups/example.json @@ -1,4 +1,6 @@ -{ - "id": "example/purpur_hallway", - "type": "dimdoors:id" -} +[ + { + "id": "example/purpur_hallway", + "type": "dimdoors:id" + } +] diff --git a/src/main/resources/data/dimdoors/pockets/groups/private.json b/src/main/resources/data/dimdoors/pockets/groups/private.json index 0c138f73..a154af72 100644 --- a/src/main/resources/data/dimdoors/pockets/groups/private.json +++ b/src/main/resources/data/dimdoors/pockets/groups/private.json @@ -1,4 +1,6 @@ -{ - "id": "private/default", - "type": "dimdoors:id" -} +[ + { + "id": "private/default", + "type": "dimdoors:id" + } +] diff --git a/src/main/resources/data/dimdoors/pockets/groups/public.json b/src/main/resources/data/dimdoors/pockets/groups/public.json index bc1bd5a1..526cca57 100644 --- a/src/main/resources/data/dimdoors/pockets/groups/public.json +++ b/src/main/resources/data/dimdoors/pockets/groups/public.json @@ -1,4 +1,6 @@ -{ - "id": "public/default", - "type": "dimdoors:id" -} +[ + { + "id": "public/default", + "type": "dimdoors:id" + } +]