Merge remote-tracking branch 'origin/1.17' into 1.17

# Conflicts:
#	src/main/java/org/dimdev/dimdoors/DimensionalDoorsInitializer.java
This commit is contained in:
CreepyCre 2021-02-19 21:45:49 +01:00
commit 5633ac5e70
7 changed files with 108 additions and 37 deletions

View file

@ -9,6 +9,8 @@ import net.fabricmc.fabric.api.event.player.UseItemCallback;
import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents;
import me.sargunvohra.mcmods.autoconfig1u.serializer.JanksonConfigSerializer;
import net.minecraft.resource.ResourceType;
import org.dimdev.dimdoors.block.ModBlocks;
import org.dimdev.dimdoors.block.entity.ModBlockEntityTypes;
import org.dimdev.dimdoors.command.ModCommands;
@ -44,6 +46,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");
@ -93,7 +96,8 @@ public class DimensionalDoorsInitializer implements ModInitializer {
AbstractPocket.AbstractPocketType.register();
PocketAddon.PocketAddonType.register();
SchematicV2Handler.getInstance().load();
ResourceManagerHelper.get(ResourceType.SERVER_DATA).registerReloadListener(SchematicV2Handler.getInstance());
// SchematicV2Handler.getInstance().load();
SchematicHandler.INSTANCE.loadSchematics();
registerListeners();

View file

@ -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,55 +17,101 @@ 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.DimensionalDoorsInitializer;
import org.dimdev.dimdoors.pockets.generator.PocketGenerator;
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<String, PocketGenerator> pocketGeneratorMap = Maps.newHashMap();
private final Map<String, VirtualPocket> pocketGroups = Maps.newHashMap();
private final Map<Identifier, PocketTemplateV2> 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<Identifier> groupIds = manager.findResources("pockets/groups", str -> str.endsWith(".json"));
for (Identifier groupId : groupIds) {
JsonObject[] groupData = new JsonObject[0];
List<Resource> 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<Identifier> 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 +219,9 @@ public class SchematicV2Handler {
public PocketGenerator getGenerator(String id) {
return pocketGeneratorMap.get(id);
}
@Override
public Identifier getFabricId() {
return new Identifier("dimdoors", "schematics_v2");
}
}

View file

@ -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<PocketGenerationParameters> {
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

View file

@ -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());
}

View file

@ -1,4 +1,6 @@
{
"id": "example/purpur_hallway",
"type": "dimdoors:id"
}
[
{
"id": "example/purpur_hallway",
"type": "dimdoors:id"
}
]

View file

@ -1,4 +1,6 @@
{
"id": "private/default",
"type": "dimdoors:id"
}
[
{
"id": "private/default",
"type": "dimdoors:id"
}
]

View file

@ -1,4 +1,6 @@
{
"id": "public/default",
"type": "dimdoors:id"
}
[
{
"id": "public/default",
"type": "dimdoors:id"
}
]