From b7095dcec4cae55ea64d78456556897c608d570e Mon Sep 17 00:00:00 2001 From: Runemoro Date: Thu, 18 Jan 2018 03:15:36 -0500 Subject: [PATCH] More dungeon features - Set dungeon weights - Implement warp door - Enable monoliths in dungeons - Set correct author on schematics (from file name) - Make grass in pockets less dark - Fix lighting bug --- .../org/dimdev/ddutils/schem/Schematic.java | 21 +- .../java/org/dimdev/dimdoors/DimDoors.java | 9 +- .../shared/blocks/BlockDimensionalDoor.java | 5 +- .../blocks/BlockDimensionalDoorTransient.java | 10 +- .../blocks/BlockDimensionalDoorWood.java | 18 +- .../shared/commands/CommandPocket.java | 6 +- .../shared/pockets/PocketGenerator.java | 5 +- .../shared/pockets/PocketTemplate.java | 23 +- .../shared/pockets/SchematicHandler.java | 86 +-- .../dimdoors/shared/rifts/TileEntityRift.java | 5 +- .../PocketEntranceDestination.java | 2 +- .../destinations/PocketExitDestination.java | 2 +- .../destinations/PublicPocketDestination.java | 2 +- ...ination.java => RestoringDestination.java} | 2 +- .../shared/tools/SchematicConverter.java | 38 +- .../world/gateways/BaseSchematicGateway.java | 2 +- .../world/pocketdimension/BiomeBlank.java | 6 +- .../pocketdimension/WorldProviderPocket.java | 2 +- .../pockets/json/default_dungeon_nether.json | 167 ++-- .../pockets/json/default_dungeon_normal.json | 713 ++++++++---------- .../pockets/json/default_private.json | 59 +- .../dimdoors/pockets/json/default_public.json | 59 +- 22 files changed, 586 insertions(+), 656 deletions(-) rename src/main/java/org/dimdev/dimdoors/shared/rifts/destinations/{LinkingDestination.java => RestoringDestination.java} (96%) diff --git a/src/main/java/org/dimdev/ddutils/schem/Schematic.java b/src/main/java/org/dimdev/ddutils/schem/Schematic.java index 9a9ab50c..98d01101 100644 --- a/src/main/java/org/dimdev/ddutils/schem/Schematic.java +++ b/src/main/java/org/dimdev/ddutils/schem/Schematic.java @@ -30,7 +30,7 @@ public class Schematic { public int version = 1; public String author = null; - public String name = "Unknown"; + public String name = null; public long creationDate; public String[] requiredMods = {}; public short width; @@ -43,7 +43,7 @@ public class Schematic { public List tileEntities = new ArrayList<>(); public List entities = new ArrayList<>(); // Not in the specification, but we need this - public static Schematic loadFromNBT(NBTTagCompound nbt, String name) { + public static Schematic loadFromNBT(NBTTagCompound nbt) { Schematic schematic = new Schematic(); schematic.version = nbt.getInteger("Version"); //Version is required @@ -54,7 +54,7 @@ public class Schematic { schematic.author = metadataCompound.getString("Author"); } //Name is not required (may be null) - schematic.name = (name == null || name.equals("")) && nbt.hasKey("Name") ? metadataCompound.getString("Name") : name; + schematic.name = metadataCompound.getString("Name"); if (nbt.hasKey("Date")) { //Date is not required schematic.creationDate = metadataCompound.getLong("Date"); @@ -131,8 +131,8 @@ public class Schematic { if (nbt.hasKey("Entities")) { //Entities is not required NBTTagList entitiesTagList = (NBTTagList) nbt.getTag("Entities"); for (int i = 0; i < entitiesTagList.tagCount(); i++) { - NBTTagCompound tileEntityTagCompound = entitiesTagList.getCompoundTagAt(i); - schematic.tileEntities.add(tileEntityTagCompound); + NBTTagCompound entityTagCompound = entitiesTagList.getCompoundTagAt(i); + schematic.entities.add(entityTagCompound); } } @@ -279,6 +279,7 @@ public class Schematic { // Relight changed chunks for (Chunk chunk : changedChunks) { chunk.setLightPopulated(false); + chunk.setTerrainPopulated(true); chunk.resetRelightChecks(); chunk.checkLight(); } @@ -310,17 +311,19 @@ public class Schematic { } } - // Set Entity data + // Spawn entities for (NBTTagCompound entityNBT : schematic.entities) { + // Correct the position and UUID NBTTagList posNBT = (NBTTagList) entityNBT.getTag("Pos"); NBTTagList newPosNBT = new NBTTagList(); newPosNBT.appendTag(new NBTTagDouble(posNBT.getDoubleAt(0) + xBase)); newPosNBT.appendTag(new NBTTagDouble(posNBT.getDoubleAt(1) + yBase)); newPosNBT.appendTag(new NBTTagDouble(posNBT.getDoubleAt(2) + zBase)); - entityNBT.setTag("Pos", newPosNBT); - entityNBT.setUniqueId("UUID", UUID.randomUUID()); + NBTTagCompound adjustedEntityNBT = entityNBT.copy(); + adjustedEntityNBT.setTag("Pos", newPosNBT); + adjustedEntityNBT.setUniqueId("UUID", UUID.randomUUID()); - Entity entity = EntityList.createEntityFromNBT(entityNBT, world); + Entity entity = EntityList.createEntityFromNBT(adjustedEntityNBT, world); world.spawnEntity(entity); } } diff --git a/src/main/java/org/dimdev/dimdoors/DimDoors.java b/src/main/java/org/dimdev/dimdoors/DimDoors.java index ef538fc3..06decaf4 100644 --- a/src/main/java/org/dimdev/dimdoors/DimDoors.java +++ b/src/main/java/org/dimdev/dimdoors/DimDoors.java @@ -74,7 +74,12 @@ public class DimDoors { if (/* TODO: config option && */ entity instanceof EntityPlayerMP) { EntityPlayerMP player = (EntityPlayerMP) entity; player.sendStatusMessage(new TextComponentString(text), true); - } else - entity.sendMessage(new TextComponentString("[DimDoors] " + text)); + } else { + chat(entity, text); + } + } + + public static void chat(Entity entity, String text) { + entity.sendMessage(new TextComponentString("[DimDoors] " + text)); } } diff --git a/src/main/java/org/dimdev/dimdoors/shared/blocks/BlockDimensionalDoor.java b/src/main/java/org/dimdev/dimdoors/shared/blocks/BlockDimensionalDoor.java index 8143d97c..f846c0bd 100644 --- a/src/main/java/org/dimdev/dimdoors/shared/blocks/BlockDimensionalDoor.java +++ b/src/main/java/org/dimdev/dimdoors/shared/blocks/BlockDimensionalDoor.java @@ -35,7 +35,7 @@ public abstract class BlockDimensionalDoor extends BlockDoor implements IRiftPro IBlockState doorState = world.getBlockState(state.getValue(HALF) == EnumDoorHalf.UPPER ? pos.down() : pos); // .down() because only the bottom block has open=true // Check that it's a door and that the entity portal timer is 0 - if (doorState.getValue(BlockDoor.OPEN) && entity.timeUntilPortal == 0) { + if (doorState.getBlock().equals(this) && doorState.getValue(BlockDoor.OPEN) && entity.timeUntilPortal == 0) { entity.timeUntilPortal = 50; // Disable another teleport for that entity for 2.5s TileEntityEntranceRift rift = getRift(world, pos, state); boolean successful = rift.teleport(entity); @@ -99,7 +99,7 @@ public abstract class BlockDimensionalDoor extends BlockDoor implements IRiftPro return (state.isSideSolid(world, pos, EnumFacing.UP) || state.getBlockFaceShape(world, pos.down(), EnumFacing.UP) == BlockFaceShape.SOLID) && (world.getBlockState(pos).getBlock().isReplaceable(world, pos) || world.getBlockState(pos).getBlock().equals(ModBlocks.RIFT)) - && world.getBlockState(pos).getBlock().isReplaceable(world, pos.up()); + && world.getBlockState(pos.up()).getBlock().isReplaceable(world, pos.up()); } } else { return super.canPlaceBlockAt(world, pos); @@ -135,7 +135,6 @@ public abstract class BlockDimensionalDoor extends BlockDoor implements IRiftPro TileEntityFloatingRift newRift = (TileEntityFloatingRift) world.getTileEntity(pos); newRift.copyFrom(rift); newRift.updateType(); - //world.notifyBlockUpdate(rift.getPos(), state, world.getBlockState(pos), 0); // TODO: does this work? } else { rift.unregister(); } diff --git a/src/main/java/org/dimdev/dimdoors/shared/blocks/BlockDimensionalDoorTransient.java b/src/main/java/org/dimdev/dimdoors/shared/blocks/BlockDimensionalDoorTransient.java index f10df792..3bd57a77 100644 --- a/src/main/java/org/dimdev/dimdoors/shared/blocks/BlockDimensionalDoorTransient.java +++ b/src/main/java/org/dimdev/dimdoors/shared/blocks/BlockDimensionalDoorTransient.java @@ -9,7 +9,6 @@ import org.dimdev.dimdoors.shared.tileentities.TileEntityEntranceRift; import net.minecraft.block.material.Material; import net.minecraft.item.Item; import net.minecraft.util.ResourceLocation; -import org.dimdev.dimdoors.shared.rifts.destinations.PocketEntranceDestination; public class BlockDimensionalDoorTransient extends BlockDimensionalDoor { // TODO: convert to a more general entrances block (like nether portals) @@ -35,15 +34,12 @@ public class BlockDimensionalDoorTransient extends BlockDimensionalDoor { // TOD @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) { - return new AxisAlignedBB(0,0,0,0,0,0); //patches entities trying to pathfind through this block, however makes them spin like crazy if they end up in this block. - //NULL_AABB, the same as BlockAir, or straight up null seem to crash the server. + // Patches entities trying to pathfind through this block, however makes them spin like crazy if they end up in this block. + return new AxisAlignedBB(0, 0, 0, 0, 0, 0); } @Override - public void setupRift(TileEntityEntranceRift rift) { - // TODO - PocketEntranceDestination destination = PocketEntranceDestination.builder().build(); - } + public void setupRift(TileEntityEntranceRift rift) {} @Override public boolean canBePlacedOnRift() { diff --git a/src/main/java/org/dimdev/dimdoors/shared/blocks/BlockDimensionalDoorWood.java b/src/main/java/org/dimdev/dimdoors/shared/blocks/BlockDimensionalDoorWood.java index 20ef22b6..3ea14313 100644 --- a/src/main/java/org/dimdev/dimdoors/shared/blocks/BlockDimensionalDoorWood.java +++ b/src/main/java/org/dimdev/dimdoors/shared/blocks/BlockDimensionalDoorWood.java @@ -1,14 +1,16 @@ package org.dimdev.dimdoors.shared.blocks; +import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.init.Blocks; -import org.dimdev.dimdoors.DimDoors; -import org.dimdev.dimdoors.shared.items.ModItems; -import org.dimdev.dimdoors.shared.tileentities.TileEntityEntranceRift; -import net.minecraft.block.material.Material; import net.minecraft.item.Item; import net.minecraft.util.ResourceLocation; +import org.dimdev.dimdoors.DimDoors; +import org.dimdev.dimdoors.shared.items.ModItems; +import org.dimdev.dimdoors.shared.rifts.destinations.AvailableLinkDestination; +import org.dimdev.dimdoors.shared.tileentities.TileEntityEntranceRift; +import java.util.Collections; import java.util.Random; public class BlockDimensionalDoorWood extends BlockDimensionalDoor { @@ -34,7 +36,13 @@ public class BlockDimensionalDoorWood extends BlockDimensionalDoor { @Override public void setupRift(TileEntityEntranceRift rift) { - // TODO + rift.setDestination(AvailableLinkDestination.builder() + .acceptedGroups(Collections.singleton(0)) + .coordFactor(1) + .negativeDepthFactor(80) + .positiveDepthFactor(Double.MAX_VALUE) + .weightMaximum(100) + .noLink(false).newRiftWeight(1).build()); } @Override diff --git a/src/main/java/org/dimdev/dimdoors/shared/commands/CommandPocket.java b/src/main/java/org/dimdev/dimdoors/shared/commands/CommandPocket.java index 37480a05..6aa847c0 100644 --- a/src/main/java/org/dimdev/dimdoors/shared/commands/CommandPocket.java +++ b/src/main/java/org/dimdev/dimdoors/shared/commands/CommandPocket.java @@ -73,16 +73,16 @@ public class CommandPocket extends CommandBase { EntityPlayerMP player = getCommandSenderAsPlayer(sender); // Make sure the player is in a pocket world if (!ModDimensions.isDimDoorsPocketDimension(player.world)) { - DimDoors.sendMessage(player, "You must be in a pocket dimension to use this command!"); + DimDoors.chat(player, "You must be in a pocket dimension to use this command!"); return; } // Check if the schematic exists if (!SchematicHandler.INSTANCE.getTemplateGroups().contains(group)) { - DimDoors.sendMessage(player, "Group " + group + " not found"); + DimDoors.chat(player, "Group " + group + " not found"); return; } else if (!SchematicHandler.INSTANCE.getTemplateNames(group).contains(name)) { - DimDoors.sendMessage(player, "Schematic " + name + " not found in group " + group); + DimDoors.chat(player, "Schematic " + name + " not found in group " + group); return; } diff --git a/src/main/java/org/dimdev/dimdoors/shared/pockets/PocketGenerator.java b/src/main/java/org/dimdev/dimdoors/shared/pockets/PocketGenerator.java index 2364a869..f1d4df1d 100644 --- a/src/main/java/org/dimdev/dimdoors/shared/pockets/PocketGenerator.java +++ b/src/main/java/org/dimdev/dimdoors/shared/pockets/PocketGenerator.java @@ -9,7 +9,7 @@ import java.util.Random; public final class PocketGenerator { public static Pocket generatePocketFromTemplate(int dim, PocketTemplate pocketTemplate, VirtualLocation virtualLocation) { - DimDoors.log.info("Generating pocket from template " + pocketTemplate.getName() + " at virtual location " + virtualLocation); + DimDoors.log.info("Generating pocket from template " + pocketTemplate.getId() + " at virtual location " + virtualLocation); PocketRegistry registry = PocketRegistry.instance(dim); Pocket pocket = registry.newPocket(); @@ -23,6 +23,7 @@ public final class PocketGenerator { return generatePocketFromTemplate(ModDimensions.getPrivateDim(), pocketTemplate, virtualLocation); } + // TODO: size of public pocket should increase with depth public static Pocket generatePublicPocket(VirtualLocation virtualLocation) { PocketTemplate pocketTemplate = SchematicHandler.INSTANCE.getPublicPocketTemplate(); return generatePocketFromTemplate(ModDimensions.getPublicDim(), pocketTemplate, virtualLocation); @@ -36,7 +37,7 @@ public final class PocketGenerator { */ public static Pocket generateDungeonPocket(VirtualLocation virtualLocation) { int depth = virtualLocation.getDepth(); - float netherProbability = virtualLocation.getDim() == -1 ? 1 : (float) depth / 50; // TODO: improve nether probability + float netherProbability = virtualLocation.getDim() == -1 ? 1 : (float) depth / 200; // TODO: improve nether probability Random random = new Random(); String group = random.nextFloat() < netherProbability ? "nether" : "ruins"; PocketTemplate pocketTemplate = SchematicHandler.INSTANCE.getRandomTemplate(group, depth, Config.getMaxPocketSize(), false); diff --git a/src/main/java/org/dimdev/dimdoors/shared/pockets/PocketTemplate.java b/src/main/java/org/dimdev/dimdoors/shared/pockets/PocketTemplate.java index dd48a5ec..23c17210 100644 --- a/src/main/java/org/dimdev/dimdoors/shared/pockets/PocketTemplate.java +++ b/src/main/java/org/dimdev/dimdoors/shared/pockets/PocketTemplate.java @@ -19,26 +19,25 @@ import net.minecraft.world.WorldServer; /** * @author Robijnvogel */ -@AllArgsConstructor @RequiredArgsConstructor// TODO: use @Builder? +@AllArgsConstructor @RequiredArgsConstructor public class PocketTemplate { - @Getter private final String groupName; + @Getter private final String group; + @Getter private final String id; + @Getter private final String type; @Getter private final String name; + @Getter private final String author; @Getter @Setter private Schematic schematic; @Getter private final int size; // size in chunks (n*n chunks) - @Getter private final int minDepth; - @Getter private final int maxDepth; @Getter private final int baseWeight; - //private final float[] weights; // weight per-level public float getWeight(int depth) { - /*if (depth < 0) return 100; // TODO: get rid of this line later - if (maxDepth - minDepth + 1 != weights.length) throw new IllegalStateException("This PocketTemplate wasn't set up correctly!"); - if (depth < minDepth) return 0; - if (depth > maxDepth) return weights[weights.length - 1]; - return weights[depth - minDepth];*/ - return baseWeight; - // TODO: make this actually dependend on the depth + //noinspection IfStatementWithIdenticalBranches + if (depth == -1) { + return baseWeight; + } else { + return baseWeight; // TODO: make this actually dependend on the depth + } } public void place(Pocket pocket) { diff --git a/src/main/java/org/dimdev/dimdoors/shared/pockets/SchematicHandler.java b/src/main/java/org/dimdev/dimdoors/shared/pockets/SchematicHandler.java index 095ae826..31d263cf 100644 --- a/src/main/java/org/dimdev/dimdoors/shared/pockets/SchematicHandler.java +++ b/src/main/java/org/dimdev/dimdoors/shared/pockets/SchematicHandler.java @@ -31,14 +31,13 @@ import org.dimdev.dimdoors.shared.world.ModDimensions; /** * @author Robijnvogel */ -public class SchematicHandler { // TODO: make this more general (not dimdoors-related) +public class SchematicHandler { public static final SchematicHandler INSTANCE = new SchematicHandler(); // TODO: make static private List templates; private Map> nameMap; // group -> name -> index in templates - // LOADING CODE STARTS HERE public void loadSchematics() { templates = new ArrayList<>(); @@ -91,7 +90,7 @@ public class SchematicHandler { // TODO: make this more general (not dimdoors-re String subDirectory = jsonTemplate.get("group").getAsString(); //get the subfolder in which the schematics are stored for (PocketTemplate template : validTemplates) { //it's okay to "tap" this for-loop, even if validTemplates is empty. - String extendedTemplatelocation = subDirectory.equals("") ? template.getName() : subDirectory + "/" + template.getName(); //transform the filename accordingly + String extendedTemplatelocation = subDirectory.equals("") ? template.getId() : subDirectory + "/" + template.getId(); //transform the filename accordingly //Initialising the possible locations/formats for the schematic file InputStream schematicStream = DimDoors.class.getResourceAsStream(schematicJarDirectory + extendedTemplatelocation + ".schem"); @@ -113,17 +112,17 @@ public class SchematicHandler { // TODO: make this more general (not dimdoors-re schematicDataStream = new DataInputStream(new FileInputStream(schematicFile)); streamOpened = true; } catch (FileNotFoundException ex) { - DimDoors.log.error("Schematic file " + template.getName() + ".schem did not load correctly from config folder.", ex); + DimDoors.log.error("Schematic file " + template.getId() + ".schem did not load correctly from config folder.", ex); } } else if (oldVersionSchematicFile.exists()) { try { schematicDataStream = new DataInputStream(new FileInputStream(oldVersionSchematicFile)); streamOpened = true; } catch (FileNotFoundException ex) { - DimDoors.log.error("Schematic file " + template.getName() + ".schematic did not load correctly from config folder.", ex); + DimDoors.log.error("Schematic file " + template.getId() + ".schematic did not load correctly from config folder.", ex); } } else { - DimDoors.log.warn("Schematic '" + template.getName() + "' was not found in the jar or config directory, neither with the .schem extension, nor with the .schematic extension."); + DimDoors.log.warn("Schematic '" + template.getId() + "' was not found in the jar or config directory, neither with the .schem extension, nor with the .schematic extension."); } NBTTagCompound schematicNBT; @@ -132,13 +131,13 @@ public class SchematicHandler { // TODO: make this more general (not dimdoors-re try { schematicNBT = CompressedStreamTools.readCompressed(schematicDataStream); if (!schematicNBT.hasKey("Version")) { - schematic = SchematicConverter.convertSchematic(schematicNBT, template.getName()); + schematic = SchematicConverter.convertSchematic(schematicNBT, template.getName(), template.getAuthor()); } else { - schematic = Schematic.loadFromNBT(schematicNBT, template.getName()); + schematic = Schematic.loadFromNBT(schematicNBT); } schematicDataStream.close(); } catch (IOException ex) { - Logger.getLogger(SchematicHandler.class.getName()).log(Level.SEVERE, "Schematic file for " + template.getName() + " could not be read as a valid schematic NBT file.", ex); // TODO: consistently use one type of logger for this. + Logger.getLogger(SchematicHandler.class.getName()).log(Level.SEVERE, "Schematic file for " + template.getId() + " could not be read as a valid schematic NBT file.", ex); // TODO: consistently use one type of logger for this. } finally { try { schematicDataStream.close(); @@ -151,10 +150,9 @@ public class SchematicHandler { // TODO: make this more general (not dimdoors-re if (schematic != null && (schematic.width > (template.getSize() + 1) * 16 || schematic.length > (template.getSize() + 1) * 16)) { schematic = null; - DimDoors.log.warn("Schematic " + template.getName() + " was bigger than specified in its json file and therefore wasn't loaded"); + DimDoors.log.warn("Schematic " + template.getId() + " was bigger than specified in its json file and therefore wasn't loaded"); } template.setSchematic(schematic); - // TODO: delete from validTemplates if schematic is null } return validTemplates; } @@ -162,37 +160,21 @@ public class SchematicHandler { // TODO: make this more general (not dimdoors-re private static List getAllValidVariations(JsonObject jsonTemplate) { List pocketTemplates = new ArrayList<>(); - final String directory = jsonTemplate.get("group").getAsString(); - int maxSize = -1; - if (!Config.isLoadAllSchematics()) { - switch (directory) { - case "public": - maxSize = Config.getPublicPocketSize(); // TODO: hardcode?¿ - break; - case "private": - maxSize = Config.getPrivatePocketSize(); - break; - default: - maxSize = Config.getMaxPocketSize(); - break; - } - } + final String group = jsonTemplate.get("group").getAsString(); - final JsonArray variations = jsonTemplate.getAsJsonArray("variations"); + final JsonArray pockets = jsonTemplate.getAsJsonArray("pockets"); //convert the variations arraylist to a list of pocket templates - for (JsonElement variationElement : variations) { - JsonObject variation = variationElement.getAsJsonObject(); - String variantName = variation.get("variantName").getAsString(); - int variationSize = variation.get("size").getAsInt(); - if (maxSize >= 0 && variationSize > maxSize) { - continue; - } - int minDepth = variation.get("minDepth").getAsInt(); - int maxDepth = variation.get("maxDepth").getAsInt(); - int baseWeight = variation.get("baseWeight").getAsInt(); - PocketTemplate pocketTemplate = new PocketTemplate(directory, variantName, variationSize, minDepth, maxDepth, baseWeight); - pocketTemplates.add(pocketTemplate); + for (JsonElement pocketElement : pockets) { + JsonObject pocket = pocketElement.getAsJsonObject(); + String id = pocket.get("id").getAsString(); + String type = pocket.has("type") ? pocket.get("type").getAsString() : null; + String name = pocket.has("name") ? pocket.get("name").getAsString() : null; + String author = pocket.has("author") ? pocket.get("author").getAsString() : null; + int size = pocket.get("size").getAsInt(); + if (Config.isLoadAllSchematics() && size > Config.getMaxPocketSize()) continue; + int baseWeight = pocket.has("baseWeight") ? pocket.get("baseWeight").getAsInt() : 100; + pocketTemplates.add(new PocketTemplate(group, id, type, name, author, size, baseWeight)); } return pocketTemplates; @@ -205,24 +187,23 @@ public class SchematicHandler { // TODO: make this more general (not dimdoors-re Map bufferedMap = null; for (PocketTemplate template : templates) { - String dirName = template.getGroupName(); + String dirName = template.getGroup(); if (dirName != null && dirName.equals(bufferedDirectory)) { //null check not needed - bufferedMap.put(template.getName(), templates.indexOf(template)); + bufferedMap.put(template.getId(), templates.indexOf(template)); } else { bufferedDirectory = dirName; if (nameMap.containsKey(dirName)) { //this will only happen if you have two json files referring to the same directory being loaded non-consecutively bufferedMap = nameMap.get(dirName); - bufferedMap.put(template.getName(), templates.indexOf(template)); + bufferedMap.put(template.getId(), templates.indexOf(template)); } else { bufferedMap = new HashMap<>(); - bufferedMap.put(template.getName(), templates.indexOf(template)); + bufferedMap.put(template.getId(), templates.indexOf(template)); nameMap.put(dirName, bufferedMap); } } } } - // LOADING CODE ENDS HERE public Set getTemplateGroups() { return nameMap.keySet(); } @@ -257,29 +238,18 @@ public class SchematicHandler { // TODO: make this more general (not dimdoors-re /** * Gets a random template matching certain criteria. * - * @return A random template matching those criteria, or null if none were found - */ - public PocketTemplate getRandomTemplate(Map groupWeights, int depth, int maxSize, boolean getLargest) { // TODO: useful? - String group = MathUtils.weightedRandom(groupWeights); - return getRandomTemplate(group, depth, maxSize, getLargest); - } - - /** - * Gets a random template matching certain criteria. - * + * @param group The template group to choose from. * @param maxSize Maximum size the template can be. * @param getLargest Setting this to true will always get the largest template size in that group, * but still randomly out of the templates with that size (ex. for private and public pockets) * @return A random template matching those criteria, or null if none were found */ - public PocketTemplate getRandomTemplate(String group, int depth, int maxSize, boolean getLargest) { + public PocketTemplate getRandomTemplate(String group, int depth, int maxSize, boolean getLargest) { // TODO: multiple groups // TODO: cache this for faster calls: Map weightedTemplates = new HashMap<>(); int largestSize = 0; for (PocketTemplate template : templates) { - if (template.getGroupName().equals(group) - && (depth == -1 || depth >= template.getMinDepth() && (depth <= template.getMaxDepth() || template.getMaxDepth() == -1)) - && (maxSize == -1 || template.getSize() <= maxSize)) { + if (template.getGroup().equals(group) && (maxSize == -1 || template.getSize() <= maxSize)) { if (getLargest && template.getSize() > largestSize) { weightedTemplates = new HashMap<>(); largestSize = template.getSize(); diff --git a/src/main/java/org/dimdev/dimdoors/shared/rifts/TileEntityRift.java b/src/main/java/org/dimdev/dimdoors/shared/rifts/TileEntityRift.java index 430f46da..bd477036 100644 --- a/src/main/java/org/dimdev/dimdoors/shared/rifts/TileEntityRift.java +++ b/src/main/java/org/dimdev/dimdoors/shared/rifts/TileEntityRift.java @@ -3,7 +3,6 @@ package org.dimdev.dimdoors.shared.rifts; import lombok.Getter; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.NetworkManager; import net.minecraft.network.play.server.SPacketUpdateTileEntity; @@ -25,7 +24,6 @@ import org.dimdev.dimdoors.shared.blocks.BlockFloatingRift; import org.dimdev.dimdoors.shared.rifts.registry.LinkProperties; import org.dimdev.dimdoors.shared.rifts.registry.Rift; import org.dimdev.dimdoors.shared.rifts.registry.RiftRegistry; -import org.dimdev.dimdoors.shared.world.ModDimensions; import javax.annotation.Nonnull; @@ -53,6 +51,7 @@ import javax.annotation.Nonnull; yaw = oldRift.yaw; pitch = oldRift.pitch; properties = oldRift.properties; + destination = oldRift.destination; if (oldRift.isFloating() != isFloating()) updateType(); markDirty(); @@ -212,7 +211,7 @@ import javax.annotation.Nonnull; return true; } } catch (Exception e) { - DimDoors.sendMessage(entity, "There was an exception while teleporting!"); + DimDoors.chat(entity, "There was an exception while teleporting, please report this bug."); DimDoors.log.error("Teleporting failed with the following exception: ", e); } return false; diff --git a/src/main/java/org/dimdev/dimdoors/shared/rifts/destinations/PocketEntranceDestination.java b/src/main/java/org/dimdev/dimdoors/shared/rifts/destinations/PocketEntranceDestination.java index 7c07a00c..4bb1a4ca 100644 --- a/src/main/java/org/dimdev/dimdoors/shared/rifts/destinations/PocketEntranceDestination.java +++ b/src/main/java/org/dimdev/dimdoors/shared/rifts/destinations/PocketEntranceDestination.java @@ -37,7 +37,7 @@ import org.dimdev.dimdoors.shared.rifts.RiftDestination; @Override public boolean teleport(RotatedLocation loc, Entity entity) { - if (entity instanceof EntityPlayer) DimDoors.sendMessage(entity, "The entrances of this dungeon has not been linked. Either this is a bug or you are in dungeon-building mode."); + if (entity instanceof EntityPlayer) DimDoors.chat(entity, "The entrances of this dungeon has not been linked. Either this is a bug or you are in dungeon-building mode."); return false; } } diff --git a/src/main/java/org/dimdev/dimdoors/shared/rifts/destinations/PocketExitDestination.java b/src/main/java/org/dimdev/dimdoors/shared/rifts/destinations/PocketExitDestination.java index 905d3c0a..ed78973e 100644 --- a/src/main/java/org/dimdev/dimdoors/shared/rifts/destinations/PocketExitDestination.java +++ b/src/main/java/org/dimdev/dimdoors/shared/rifts/destinations/PocketExitDestination.java @@ -28,7 +28,7 @@ public class PocketExitDestination extends RiftDestination { // TODO: not exactl @Override public boolean teleport(RotatedLocation loc, Entity entity) { - if (entity instanceof EntityPlayer) DimDoors.sendMessage(entity, "The exit of this dungeon has not been linked. Either this is a bug or you are in dungeon-building mode."); + if (entity instanceof EntityPlayer) DimDoors.chat(entity, "The exit of this dungeon has not been linked. Either this is a bug or you are in dungeon-building mode."); return false; } } diff --git a/src/main/java/org/dimdev/dimdoors/shared/rifts/destinations/PublicPocketDestination.java b/src/main/java/org/dimdev/dimdoors/shared/rifts/destinations/PublicPocketDestination.java index 5eac818d..10acf1ef 100644 --- a/src/main/java/org/dimdev/dimdoors/shared/rifts/destinations/PublicPocketDestination.java +++ b/src/main/java/org/dimdev/dimdoors/shared/rifts/destinations/PublicPocketDestination.java @@ -10,7 +10,7 @@ import org.dimdev.dimdoors.shared.pockets.Pocket; import org.dimdev.dimdoors.shared.pockets.PocketGenerator; @Getter @AllArgsConstructor @Builder(toBuilder = true) @ToString -public class PublicPocketDestination extends LinkingDestination { +public class PublicPocketDestination extends RestoringDestination { // public PublicPocketDestination() {} @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); } diff --git a/src/main/java/org/dimdev/dimdoors/shared/rifts/destinations/LinkingDestination.java b/src/main/java/org/dimdev/dimdoors/shared/rifts/destinations/RestoringDestination.java similarity index 96% rename from src/main/java/org/dimdev/dimdoors/shared/rifts/destinations/LinkingDestination.java rename to src/main/java/org/dimdev/dimdoors/shared/rifts/destinations/RestoringDestination.java index 5ba4b0d6..729a4b5f 100644 --- a/src/main/java/org/dimdev/dimdoors/shared/rifts/destinations/LinkingDestination.java +++ b/src/main/java/org/dimdev/dimdoors/shared/rifts/destinations/RestoringDestination.java @@ -7,7 +7,7 @@ import org.dimdev.ddutils.RGBA; import org.dimdev.ddutils.RotatedLocation; import org.dimdev.dimdoors.shared.rifts.RiftDestination; -public abstract class LinkingDestination extends RiftDestination { +public abstract class RestoringDestination extends RiftDestination { private RiftDestination wrappedDestination; diff --git a/src/main/java/org/dimdev/dimdoors/shared/tools/SchematicConverter.java b/src/main/java/org/dimdev/dimdoors/shared/tools/SchematicConverter.java index 59a5fce4..d0fdeb6b 100644 --- a/src/main/java/org/dimdev/dimdoors/shared/tools/SchematicConverter.java +++ b/src/main/java/org/dimdev/dimdoors/shared/tools/SchematicConverter.java @@ -2,11 +2,13 @@ package org.dimdev.dimdoors.shared.tools; import net.minecraft.block.Block; import net.minecraft.block.BlockDoor; +import net.minecraft.block.BlockEndPortalFrame; import net.minecraft.block.state.IBlockState; import net.minecraft.init.Blocks; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.*; +import net.minecraft.util.EnumFacing; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.ITextComponent; @@ -16,6 +18,7 @@ import org.dimdev.ddutils.schem.Schematic; import org.dimdev.dimdoors.DimDoors; import org.dimdev.dimdoors.shared.blocks.BlockFabric; import org.dimdev.dimdoors.shared.blocks.ModBlocks; +import org.dimdev.dimdoors.shared.entities.EntityMonolith; import org.dimdev.dimdoors.shared.rifts.destinations.AvailableLinkDestination; import org.dimdev.dimdoors.shared.rifts.destinations.PocketEntranceDestination; import org.dimdev.dimdoors.shared.rifts.destinations.PocketExitDestination; @@ -41,12 +44,12 @@ public final class SchematicConverter { stateMap.put("minecraft:wooden_door", ModBlocks.WARP_DIMENSIONAL_DOOR.getDefaultState()); } - public static Schematic convertSchematic(NBTTagCompound nbt, String name) { + public static Schematic convertSchematic(NBTTagCompound nbt, String name, String author) { Schematic schematic = new Schematic(); schematic.version = 1; //already the default value - schematic.author = "DimDoors"; // Old schematics didn't have an author - schematic.name = name.equals("") ? "Unknown" : name; + schematic.author = author; + schematic.name = name; schematic.creationDate = System.currentTimeMillis(); schematic.requiredMods = new String[]{DimDoors.MODID}; @@ -55,6 +58,13 @@ public final class SchematicConverter { schematic.length = nbt.getShort("Length"); schematic.offset = new int[]{0, 0, 0}; + // Schematic info + int ironDoors = 0; + int woodDoors = 0; + int sandstoneDoors = 0; + int monoliths = 0; + int chests = 0; + byte[] blockIntArray = nbt.getByteArray("Blocks"); if (nbt.hasKey("Palette")) { NBTTagList paletteNBT = (NBTTagList) nbt.getTag("Palette"); @@ -149,6 +159,8 @@ public final class SchematicConverter { blockInt = schematic.pallette.size() - 1; } + if (baseState.getBlock().equals(Blocks.CHEST)) chests++; + if (baseState.getBlock().equals(ModBlocks.DIMENSIONAL_DOOR) || baseState.getBlock().equals(ModBlocks.WARP_DIMENSIONAL_DOOR)) { //DimDoors.log.info("Door found: " + baseState.getBlock().getUnlocalizedName()); if (blockState.getProperties().get(BlockDoor.HALF).equals(BlockDoor.EnumDoorHalf.LOWER)) { @@ -160,6 +172,7 @@ public final class SchematicConverter { .linksRemaining(1).build()); if (baseState.equals(ModBlocks.DIMENSIONAL_DOOR)) { + ironDoors++; rift.setDestination(AvailableLinkDestination.builder() .acceptedGroups(Collections.singleton(0)) .coordFactor(1) @@ -171,10 +184,12 @@ public final class SchematicConverter { } else { //if (baseState.equals(ModBlocks.WARP_DIMENSIONAL_DOOR)) IBlockState stateBelow = schematic.pallette.get(schematic.blockData[x][y - 1][z]); if (stateBelow.getBlock().equals(Blocks.SANDSTONE)) { + sandstoneDoors++; + rift.setProperties(null); // TODO: this should be removed once the linking equations are made symmetric rift.setDestination(AvailableLinkDestination.builder() .acceptedGroups(Collections.singleton(0)) .coordFactor(1) - .negativeDepthFactor(0.00000000001) + .negativeDepthFactor(0.00000000001) // The division result is cast to an int, so Double.MIN_VALUE would cause an overflow .positiveDepthFactor(Double.POSITIVE_INFINITY) .weightMaximum(100) .noLink(false) @@ -186,6 +201,7 @@ public final class SchematicConverter { DimDoors.log.error("Someone placed a door on a sandstone block at the bottom of a schematic. This causes problems and should be remedied. Schematic name: " + schematic.name); } } else { + woodDoors++; rift.setDestination(PocketEntranceDestination.builder() .weight(1) .ifDestination(PocketExitDestination.builder().build()) @@ -201,6 +217,17 @@ public final class SchematicConverter { schematic.tileEntities.add(rift.serializeNBT()); } + + } + + if (blockState.getBlock().equals(Blocks.END_PORTAL_FRAME)) { + monoliths++; + // I think it's safe to assume that air is present + blockInt = schematic.pallette.indexOf(Blocks.AIR.getDefaultState()); + EntityMonolith monolith = new EntityMonolith(null); + EnumFacing facing = blockState.getValue(BlockEndPortalFrame.FACING); + monolith.setLocationAndAngles(x + 0.5d, y, z + 0.5d, facing.getHorizontalAngle(), 0); + schematic.entities.add(monolith.serializeNBT()); } } else { // if this is ancient fabric blockInt = schematic.pallette.indexOf(baseState); @@ -210,9 +237,10 @@ public final class SchematicConverter { } } } + if (!nbt.getTag("Entities").hasNoTags()) throw new RuntimeException("Schematic contains entities, but those aren't implemented in the conversion code"); schematic.paletteMax = schematic.pallette.size() - 1; - // TODO: entities (and replace end portal frame with monoliths) + DimDoors.log.info(schematic.name + "," + ironDoors + "," + woodDoors + "," + sandstoneDoors + "," + monoliths + "," + chests); return schematic; } diff --git a/src/main/java/org/dimdev/dimdoors/shared/world/gateways/BaseSchematicGateway.java b/src/main/java/org/dimdev/dimdoors/shared/world/gateways/BaseSchematicGateway.java index f8e18450..06c5282c 100644 --- a/src/main/java/org/dimdev/dimdoors/shared/world/gateways/BaseSchematicGateway.java +++ b/src/main/java/org/dimdev/dimdoors/shared/world/gateways/BaseSchematicGateway.java @@ -35,7 +35,7 @@ public abstract class BaseSchematicGateway extends BaseGateway { if (streamOpened) { try { schematicNBT = CompressedStreamTools.readCompressed(schematicDataStream); - schematic = SchematicConverter.convertSchematic(schematicNBT, name); + schematic = SchematicConverter.convertSchematic(schematicNBT, name, null); schematicDataStream.close(); } catch (IOException ex) { DimDoors.log.error("Schematic file for " + name + " could not be read as a valid schematic NBT file.", ex); diff --git a/src/main/java/org/dimdev/dimdoors/shared/world/pocketdimension/BiomeBlank.java b/src/main/java/org/dimdev/dimdoors/shared/world/pocketdimension/BiomeBlank.java index c4b16714..8d471afa 100644 --- a/src/main/java/org/dimdev/dimdoors/shared/world/pocketdimension/BiomeBlank.java +++ b/src/main/java/org/dimdev/dimdoors/shared/world/pocketdimension/BiomeBlank.java @@ -20,7 +20,7 @@ public class BiomeBlank extends Biome { .setHeightVariation(0F) .setRainDisabled() .setRainfall(0) - .setWaterColor(white ? 0xFFFFFF : 0x111111)); + .setWaterColor(white ? 0xFFFFFF : 0x000055)); this.white = white; topBlock = Blocks.AIR.getDefaultState(); @@ -60,12 +60,12 @@ public class BiomeBlank extends Biome { @Override @SideOnly(Side.CLIENT) public int getGrassColorAtPos(BlockPos pos) { - return getModdedBiomeGrassColor(white ? 0xFFFFFF : 0x111111); + return getModdedBiomeGrassColor(white ? 0xFFFFFF : 0x003300); } @Override @SideOnly(Side.CLIENT) public int getFoliageColorAtPos(BlockPos pos) { - return getModdedBiomeFoliageColor(white ? 0xFFFFFF : 0x111111); + return getModdedBiomeFoliageColor(white ? 0xFFFFFF : 0x003300); } } diff --git a/src/main/java/org/dimdev/dimdoors/shared/world/pocketdimension/WorldProviderPocket.java b/src/main/java/org/dimdev/dimdoors/shared/world/pocketdimension/WorldProviderPocket.java index e1066f41..16102597 100644 --- a/src/main/java/org/dimdev/dimdoors/shared/world/pocketdimension/WorldProviderPocket.java +++ b/src/main/java/org/dimdev/dimdoors/shared/world/pocketdimension/WorldProviderPocket.java @@ -16,7 +16,7 @@ public abstract class WorldProviderPocket extends WorldProvider { @Override public void init() { // TODO: save pocket registry nbt here? (see WorldProviderEnd) - //hasSkyLight = false; // TODO: this is only a temporary fix + hasSkyLight = true; // TODO: this is only a temporary fix generateLightBrightnessTable(); DimDoors.proxy.setCloudRenderer(this, new CloudRenderBlank()); } diff --git a/src/main/resources/assets/dimdoors/pockets/json/default_dungeon_nether.json b/src/main/resources/assets/dimdoors/pockets/json/default_dungeon_nether.json index 0d6461ac..0a7a251b 100644 --- a/src/main/resources/assets/dimdoors/pockets/json/default_dungeon_nether.json +++ b/src/main/resources/assets/dimdoors/pockets/json/default_dungeon_nether.json @@ -1,125 +1,152 @@ { "group": "nether", - "pocketType" : 2, - "variations": [ + "pockets": [ { - "variantName": "ComplexHall_SK-CourtyardAmbush_Open_100", + "id": "ComplexHall_SK-CourtyardAmbush_Open_100", + "type": "complex_hall", + "name": "Courtyard Ambush", + "author": "SK", + "open": true, "size": 4, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "ComplexHall_SK-Intersection_Open_100", + "id": "ComplexHall_SK-Intersection_Open_100", + "type": "complex_hall", + "name": "Intersection", + "author": "SK", + "open": true, "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "ComplexHall_SK-SoulWastes_Open_100", + "id": "ComplexHall_SK-SoulWastes_Open_100", + "type": "complex_hall", + "name": "Soul Wastes", + "author": "SK", + "open": true, "size": 5, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "ComplexHall_SK-Starfall_Open_100", + "id": "ComplexHall_SK-Starfall_Open_100", + "type": "complex_hall", + "name": "Starfall", + "author": "SK", + "open": true, "size": 3, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "ComplexHall_SK-TheCauldron_Open_100", + "id": "ComplexHall_SK-TheCauldron_Open_100", + "type": "complex_hall", + "name": "The Cauldron", + "author": "SK", + "open": true, "size": 4, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "Maze_SK-BrimstoneMines_Open_80", + "id": "Maze_SK-BrimstoneMines_Open_80", + "type": "maze", + "name": "Brimstone Mines", + "author": "SK", + "open": true, "size": 6, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 80 }, { - "variantName": "Maze_SK-QuartzfoldCave_Open_40", + "id": "Maze_SK-QuartzfoldCave_Open_40", + "type": "maze", + "name": "Quartzfold Cave", + "author": "SK", + "open": true, "size": 5, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 40 }, { - "variantName": "Maze_SK-SwirlsUponSwirls_Open_40", + "id": "Maze_SK-SwirlsUponSwirls_Open_40", + "type": "maze", + "name": "Swirls Upon Swirls", + "author": "SK", + "open": true, "size": 5, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 40 }, { - "variantName": "Maze_SK-Tangle_Open_80", + "id": "Maze_SK-Tangle_Open_80", + "type": "maze", + "name": "Tangle", + "author": "SK", + "open": true, "size": 3, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 80 }, { - "variantName": "SimpleHall_SK-AnvilValley_Open_100", + "id": "SimpleHall_SK-AnvilValley_Open_100", + "type": "simple_hall", + "name": "Anvil Valley", + "author": "SK", + "open": true, "size": 5, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "SimpleHall_SK-Arena_Open_100", + "id": "SimpleHall_SK-Arena_Open_100", + "type": "simple_hall", + "name": "Arena", + "author": "SK", + "open": true, "size": 3, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "SimpleHall_SK-DarkPathLeft_Open_50", + "id": "SimpleHall_SK-DarkPathLeft_Open_50", + "type": "simple_hall", + "author": "SK", + "open": true, "size": 1, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 50 }, { - "variantName": "SimpleHall_SK-DarkPathRight_Open_50", + "id": "SimpleHall_SK-DarkPathRight_Open_50", + "type": "simple_hall", + "author": "SK", + "open": true, "size": 1, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 50 }, { - "variantName": "SimpleHall_SK-DiamondRoom_Open_100", + "id": "SimpleHall_SK-DiamondRoom_Open_100", + "type": "simple_hall", + "author": "SK", + "open": true, "size": 1, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "SimpleHall_SK-LongBridge_Open_100", + "id": "SimpleHall_SK-LongBridge_Open_100", + "type": "simple_hall", + "author": "SK", + "open": true, "size": 4, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "SimpleHall_SK-SpiralStairsDown_Open_100", + "id": "SimpleHall_SK-SpiralStairsDown_Open_100", + "type": "simple_hall", + "author": "SK", + "open": true, "size": 0, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "SimpleHall_SK-TheFurnace_Open_100", + "id": "SimpleHall_SK-TheFurnace_Open_100", + "type": "simple_hall", + "author": "SK", + "open": true, "size": 3, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 } ] } diff --git a/src/main/resources/assets/dimdoors/pockets/json/default_dungeon_normal.json b/src/main/resources/assets/dimdoors/pockets/json/default_dungeon_normal.json index fe8367d3..989814d8 100644 --- a/src/main/resources/assets/dimdoors/pockets/json/default_dungeon_normal.json +++ b/src/main/resources/assets/dimdoors/pockets/json/default_dungeon_normal.json @@ -1,671 +1,616 @@ { "group": "ruins", - "pocketType" : 2, - "variations": [ + "pockets": [ { - "variantName": "ComplexHall_Balgor0-CrumbledHall_Closed_75", + "id": "ComplexHall_Balgor0-CrumbledHall_Closed_75", + "type": "complex_hall", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 75 }, { - "variantName": "ComplexHall_Cere-JumpPass_Open_75", + "id": "ComplexHall_Cere-JumpPass_Open_75", + "type": "complex_hall", "size": 1, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 75 }, { - "variantName": "complexHall_buggyTopEntry1_open_100", + "id": "complexHall_buggyTopEntry1_open_100", + "type": "complex_hall", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "ComplexHall_Cere-PuzzleWall_Open_75", + "id": "ComplexHall_Cere-PuzzleWall_Open_75", + "type": "complex_hall", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 75 }, { - "variantName": "ComplexHall_Cere-TransferTunnel_Closed_100", + "id": "ComplexHall_Cere-TransferTunnel_Closed_100", + "type": "complex_hall", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "complexHall_exitRuinsWithHiddenDoor_open_100", + "id": "complexHall_exitRuinsWithHiddenDoor_open_100", + "type": "complex_hall", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "complexHall_hallwayHiddenTreasure_closed_100", + "id": "complexHall_hallwayHiddenTreasure_closed_100", + "type": "complex_hall", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "complexHall_largeBrokenHall_closed_100", + "id": "complexHall_largeBrokenHall_closed_100", + "type": "complex_hall", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "complexHall_mediumPillarStairs_open_100", + "id": "complexHall_mediumPillarStairs_open_100", + "type": "complex_hall", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "complexHall_pitStairs_open_100", + "id": "complexHall_pitStairs_open_100", + "type": "complex_hall", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "complexHall_ruinsO_open_100", + "id": "complexHall_ruinsO_open_100", + "type": "complex_hall", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "ComplexHall_SK-AnchoredDescent_Open_50", + "id": "ComplexHall_SK-AnchoredDescent_Open_50", + "type": "complex_hall", + "author": "SK", "size": 1, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 50 }, { - "variantName": "ComplexHall_SK-HallwayHiddenTreasure-B_Closed_50", + "id": "ComplexHall_SK-HallwayHiddenTreasure-B_Closed_50", + "type": "complex_hall", + "author": "SK", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 50 }, { - "variantName": "ComplexHall_SK-HiddenStairs_Open_100", + "id": "ComplexHall_SK-HiddenStairs_Open_100", + "type": "complex_hall", + "author": "SK", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "ComplexHall_SK-LostGarden_Open_40", + "id": "ComplexHall_SK-LostGarden_Open_40", + "type": "complex_hall", + "author": "SK", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 40 }, { - "variantName": "ComplexHall_SK-RuinsOhNo_Open_50", + "id": "ComplexHall_SK-RuinsOhNo_Open_50", + "type": "complex_hall", + "author": "SK", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 50 }, { - "variantName": "complexHall_smallBranchWithExit_closed_100", + "id": "complexHall_smallBranchWithExit_closed_100", + "type": "complex_hall", + "author": "SK", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "complexHall_smallRotundaWithExit_closed_100", + "id": "complexHall_smallRotundaWithExit_closed_100", + "type": "complex_hall", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "complexHall_tntPuzzleTrap_closed_50", + "id": "complexHall_tntPuzzleTrap_closed_50", + "type": "complex_hall", + "author": "SK", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 50 }, { - "variantName": "deadEnd_azersDungeonO_closed_100", + "id": "deadEnd_azersDungeonO_closed_100", + "type": "dead_end", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "DeadEnd_Balgor0-ArrowHall_Closed_75", + "id": "DeadEnd_Balgor0-ArrowHall_Closed_75", + "type": "dead_end", + "author": "Balgor0", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 75 }, { - "variantName": "deadEnd_brokenPillarsO_open_100", + "id": "deadEnd_brokenPillarsO_open_100", + "type": "dead_end", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "DeadEnd_Cere-FloatingAltar_Open_75", + "id": "DeadEnd_Cere-FloatingAltar_Open_75", + "type": "dead_end", + "author": "Cere", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 75 }, { - "variantName": "deadEnd_diamondTowerTemple1_open_100", + "id": "deadEnd_diamondTowerTemple1_open_100", + "type": "dead_end", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "deadEnd_fallingTrapO_open_100", + "id": "deadEnd_fallingTrapO_open_100", + "type": "dead_end", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "deadEnd_hiddenStaircaseO_open_100", + "id": "deadEnd_hiddenStaircaseO_open_100", + "type": "dead_end", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "deadEnd_lavaTrapO_open_100", + "id": "deadEnd_lavaTrapO_open_100", + "type": "dead_end", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "deadEnd_randomTree_open_75", + "id": "deadEnd_randomTree_open_75", + "type": "dead_end", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 75 }, { - "variantName": "DeadEnd_SK-EyesOfTricksters_Open_50", + "id": "DeadEnd_SK-EyesOfTricksters_Open_50", + "type": "dead_end", + "author": "SK", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 50 }, { - "variantName": "DeadEnd_SK-FarAwayInTheDark_Open_100", + "id": "DeadEnd_SK-FarAwayInTheDark_Open_100", + "type": "dead_end", + "author": "SK", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "DeadEnd_SK-UnstableDesert_Open_50", + "id": "DeadEnd_SK-UnstableDesert_Open_50", + "type": "dead_end", + "author": "SK", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 50 }, { - "variantName": "deadEnd_smallDesert_open_75", + "id": "deadEnd_smallDesert_open_75", + "type": "dead_end", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 75 }, { - "variantName": "deadEnd_smallHiddenTowerO_open_100", + "id": "deadEnd_smallHiddenTowerO_open_100", + "type": "dead_end", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "deadEnd_smallPond_open_75", + "id": "deadEnd_smallPond_open_75", + "type": "dead_end", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 75 }, { - "variantName": "deadEnd_smallSilverfishRoom_closed_100", + "id": "deadEnd_smallSilverfishRoom_closed_100", + "type": "dead_end", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "deadEnd_tntTrapO_open_100", + "id": "deadEnd_tntTrapO_open_100", + "type": "dead_end", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "exit_exitCube_open_100", + "id": "exit_exitCube_open_100", + "type": "exit", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "exit_lockingExitHall_closed_100", + "id": "exit_lockingExitHall_closed_100", + "type": "exit", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "Exit_SK-HotSuspense_Open_75", + "id": "Exit_SK-HotSuspense_Open_75", + "type": "exit", + "author": "SK", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 75 }, { - "variantName": "Exit_SK-LockingExitTrap_Closed_50", + "id": "Exit_SK-LockingExitTrap_Closed_50", + "type": "exit", + "author": "SK", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 50 }, { - "variantName": "exit_smallExitPrison_open_100", + "id": "exit_smallExitPrison_open_100", + "type": "exit", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "Exit_XombyCraft-RopeBridge_Open_100", + "id": "Exit_XombyCraft-RopeBridge_Open_100", + "type": "exit", + "author": "XombyCraft", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "hub_4WayBasicHall_closed_200", + "id": "hub_4WayBasicHall_closed_200", + "type": "hub", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 200 }, { - "variantName": "hub_4WayHallExit_closed_200", + "id": "hub_4WayHallExit_closed_200", + "type": "hub", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 200 }, { - "variantName": "Hub_Balgor0-OmniMaze_Open_50", + "id": "Hub_Balgor0-OmniMaze_Open_50", + "type": "hub", + "author": "Balgor0", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 50 }, { - "variantName": "Hub_Cere-GreatHall_Open_40", + "id": "Hub_Cere-GreatHall_Open_40", + "type": "hub", + "author": "Cere", "size": 3, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 40 }, { - "variantName": "hub_doorTotemRuins_open_100", + "id": "hub_doorTotemRuins_open_100", + "type": "hub", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "hub_fortRuins_open_100", + "id": "hub_fortRuins_open_100", + "type": "hub", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "hub_hallwayTrapRooms1_closed_100", + "id": "hub_hallwayTrapRooms1_closed_100", + "type": "hub", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "hub_longDoorHallway_closed_100", + "id": "hub_longDoorHallway_closed_100", + "type": "hub", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "Hub_SK-Claustrophobia_Open_40", + "id": "Hub_SK-Claustrophobia_Open_40", + "type": "hub", + "author": "SK", "size": 4, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 40 }, { - "variantName": "Hub_SK-FractalCage_Open_40", + "id": "Hub_SK-FractalCage_Open_40", + "type": "hub", + "author": "SK", "size": 3, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 40 }, { - "variantName": "Hub_SK-HeartOfDisorder_Open_50", + "id": "Hub_SK-HeartOfDisorder_Open_50", + "type": "hub", + "author": "SK", "size": 4, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 50 }, { - "variantName": "Hub_SK-RandomSnow_Open_75", + "id": "Hub_SK-RandomSnow_Open_75", + "type": "hub", + "author": "SK", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 75 }, { - "variantName": "Hub_SK-RandomSwamp_Open_75", + "id": "Hub_SK-RandomSwamp_Open_75", + "type": "hub", + "author": "SK", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 75 }, { - "variantName": "Hub_SK-TheNexus_Open_40", + "id": "Hub_SK-TheNexus_Open_40", + "type": "hub", + "author": "SK", "size": 3, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 40 }, { - "variantName": "hub_smallMultilevelMaze_closed_100", + "id": "hub_smallMultilevelMaze_closed_100", + "type": "hub", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "maze_smallMaze1_closed_100", + "id": "maze_smallMaze1_closed_100", + "type": "maze", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "simpleHall_collapsedSingleTunnel1_closed_100", + "id": "simpleHall_collapsedSingleTunnel1_closed_100", + "type": "simple_hall", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "simpleHall_simpleDropHall_closed_100", + "id": "simpleHall_simpleDropHall_closed_100", + "type": "simple_hall", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "simpleHall_simpleSmallT1_closed_100", + "id": "simpleHall_simpleSmallT1_closed_100", + "type": "simple_hall", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "simpleHall_simpleStairsDown_closed_100", + "id": "simpleHall_simpleStairsDown_closed_100", + "type": "simple_hall", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "simpleHall_simpleStairsUp_closed_100", + "id": "simpleHall_simpleStairsUp_closed_100", + "type": "simple_hall", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "simpleHall_singleStraightHall1_closed_100", + "id": "simpleHall_singleStraightHall1_closed_100", + "type": "simple_hall", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "SimpleHall_SK-LeftDownStairs_Open_50", + "id": "SimpleHall_SK-LeftDownStairs_Open_50", + "type": "simple_hall", + "author": "SK", "size": 1, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 50 }, { - "variantName": "SimpleHall_SK-LeftUpPath_Open_50", + "id": "SimpleHall_SK-LeftUpPath_Open_50", + "type": "simple_hall", + "author": "SK", "size": 1, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 50 }, { - "variantName": "SimpleHall_SK-RightDownStairs_Open_50", + "id": "SimpleHall_SK-RightDownStairs_Open_50", + "type": "simple_hall", + "author": "SK", "size": 1, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 50 }, { - "variantName": "SimpleHall_SK-RightUpPath_Open_50", + "id": "SimpleHall_SK-RightUpPath_Open_50", + "type": "simple_hall", + "author": "SK", "size": 1, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 50 }, { - "variantName": "SimpleHall_SK-SpiralHallway_Open_100", + "id": "SimpleHall_SK-SpiralHallway_Open_100", + "type": "simple_hall", + "author": "SK", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "SimpleHall_SK-UTurnLeft_Open_50", + "id": "SimpleHall_SK-UTurnLeft_Open_50", + "type": "simple_hall", + "author": "SK", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 50 }, { - "variantName": "SimpleHall_SK-UTurnRight_Open_50", + "id": "SimpleHall_SK-UTurnRight_Open_50", + "type": "simple_hall", + "author": "SK", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 50 }, { - "variantName": "SimpleHall_SK-WatchedForkLeft_Closed_80", + "id": "SimpleHall_SK-WatchedForkLeft_Closed_80", + "type": "simple_hall", + "author": "SK", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 80 }, { - "variantName": "SimpleHall_SK-WatchedForkRight_Closed_80", + "id": "SimpleHall_SK-WatchedForkRight_Closed_80", + "type": "simple_hall", + "author": "SK", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 80 }, { - "variantName": "simpleHall_smallSimpleLeft_closed_100", + "id": "simpleHall_smallSimpleLeft_closed_100", + "type": "simple_hall", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "simpleHall_smallSimpleRight_closed_100", + "id": "simpleHall_smallSimpleRight_closed_100", + "type": "simple_hall", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "trap_fakeTNTTrap_closed_100", + "id": "trap_fakeTNTTrap_closed_100", + "type": "trap", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "trap_hallwayPitFallTrap_closed_200", + "id": "trap_hallwayPitFallTrap_closed_200", + "type": "trap", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 200 }, { - "variantName": "trap_lavaPyramid_open_100", + "id": "trap_lavaPyramid_open_100", + "type": "trap", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "trap_pistonFallRuins_open_75", + "id": "trap_pistonFallRuins_open_75", + "type": "trap", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 75 }, { - "variantName": "trap_pistonFloorHall_closed_150", + "id": "trap_pistonFloorHall_closed_150", + "type": "trap", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 150 }, { - "variantName": "trap_pistonFloorPlatform_closed_100", + "id": "trap_pistonFloorPlatform_closed_100", + "type": "trap", "size": 4, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "trap_pistonFloorPlatform2_closed_100", + "id": "trap_pistonFloorPlatform2_closed_100", + "type": "trap", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "trap_pistonHallway_closed_100", + "id": "trap_pistonHallway_closed_100", + "type": "trap", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "trap_pistonSmasherHall_closed_100", + "id": "trap_pistonSmasherHall_closed_100", + "type": "trap", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 100 }, { - "variantName": "trap_raceTheTNTHall_closed_1", + "id": "trap_raceTheTNTHall_closed_1", + "type": "trap", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 1 }, { - "variantName": "Trap_SK-FakeTNTTrap-B_Closed_50", + "id": "Trap_SK-FakeTNTTrap-B_Closed_50", + "type": "trap", + "author": "SK", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 50 }, { - "variantName": "Trap_SK-NicolesTower_Open_50", + "id": "Trap_SK-NicolesTower_Open_50", + "type": "trap", + "author": "SK", "size": 0, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 50 }, { - "variantName": "Trap_SK-RaceTheLight_Closed_50", + "id": "Trap_SK-RaceTheLight_Closed_50", + "type": "trap", + "author": "SK", "size": 1, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 50 }, { - "variantName": "Trap_SK-RestlessCorridor_Open_40", + "id": "Trap_SK-RestlessCorridor_Open_40", + "type": "trap", + "author": "SK", "size": 4, - "minDepth": 1, - "maxDepth": 1000, + "baseWeight": 40 + }, + { + "id": "Trap_SK-SimpleLeftTrap_Closed_50", + "type": "trap", + "author": "SK", + "size": 2, "baseWeight": 10 }, { - "variantName": "Trap_SK-SimpleLeftTrap_Closed_50", + "id": "Trap_SK-SimpleRightTrap_Closed_50", + "type": "trap", + "author": "SK", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 50 }, { - "variantName": "Trap_SK-SimpleRightTrap_Closed_50", + "id": "Trap_SK-TrappedStairsDown_Closed_50", + "type": "trap", + "author": "SK", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 50 }, { - "variantName": "Trap_SK-TrappedStairsDown_Closed_50", + "id": "Trap_SK-TrappedStairsUp_Closed_50", + "type": "trap", + "author": "SK", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 50 }, { - "variantName": "Trap_SK-TrappedStairsUp_Closed_50", + "id": "Trap_SK-UTrapRight_Open_50", + "type": "trap", + "author": "SK", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 50 }, { - "variantName": "Trap_SK-UTrapRight_Open_50", + "id": "trap_wallFallcomboPistonHall_closed_200", + "type": "trap", "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 - }, - { - "variantName": "trap_wallFallcomboPistonHall_closed_200", - "size": 2, - "minDepth": 1, - "maxDepth": 1000, - "baseWeight": 10 + "baseWeight": 200 } ] } diff --git a/src/main/resources/assets/dimdoors/pockets/json/default_private.json b/src/main/resources/assets/dimdoors/pockets/json/default_private.json index 6591705c..4e726b69 100644 --- a/src/main/resources/assets/dimdoors/pockets/json/default_private.json +++ b/src/main/resources/assets/dimdoors/pockets/json/default_private.json @@ -1,62 +1,37 @@ { "group": "private", - "pocketType" : 0, - "variations": [ + "pockets": [ { - "variantName": "private_pocket_0", - "size": 0, - "minDepth": 0, - "maxDepth": 0, - "baseWeight": 1 + "id": "private_pocket_0", + "size": 0 }, { - "variantName": "private_pocket_1", - "size": 1, - "minDepth": 0, - "maxDepth": 0, - "baseWeight": 1 + "id": "private_pocket_1", + "size": 1 }, { - "variantName": "private_pocket_2", - "size": 2, - "minDepth": 0, - "maxDepth": 0, - "baseWeight": 1 + "id": "private_pocket_2", + "size": 2 }, { - "variantName": "private_pocket_3", - "size": 3, - "minDepth": 0, - "maxDepth": 0, - "baseWeight": 1 + "id": "private_pocket_3", + "size": 3 }, { - "variantName": "private_pocket_4", - "size": 4, - "minDepth": 0, - "maxDepth": 0, - "baseWeight": 1 + "id": "private_pocket_4", + "size": 4 }, { - "variantName": "private_pocket_5", - "size": 5, - "minDepth": 0, - "maxDepth": 0, - "baseWeight": 1 + "id": "private_pocket_5", + "size": 5 }, { - "variantName": "private_pocket_6", - "size": 6, - "minDepth": 0, - "maxDepth": 0, - "baseWeight": 1 + "id": "private_pocket_6", + "size": 6 }, { - "variantName": "private_pocket_7", - "size": 7, - "minDepth": 0, - "maxDepth": 0, - "baseWeight": 1 + "id": "private_pocket_7", + "size": 7 } ] } diff --git a/src/main/resources/assets/dimdoors/pockets/json/default_public.json b/src/main/resources/assets/dimdoors/pockets/json/default_public.json index 85a40286..52a7aa1d 100644 --- a/src/main/resources/assets/dimdoors/pockets/json/default_public.json +++ b/src/main/resources/assets/dimdoors/pockets/json/default_public.json @@ -1,62 +1,37 @@ { "group": "public", - "pocketType" : 1, - "variations": [ + "pockets": [ { - "variantName": "public_pocket_0", - "size": 0, - "minDepth": 0, - "maxDepth": 0, - "baseWeight": 1 + "id": "public_pocket_0", + "size": 0 }, { - "variantName": "public_pocket_1", - "size": 1, - "minDepth": 0, - "maxDepth": 0, - "baseWeight": 1 + "id": "public_pocket_1", + "size": 1 }, { - "variantName": "public_pocket_2", - "size": 2, - "minDepth": 0, - "maxDepth": 0, - "baseWeight": 1 + "id": "public_pocket_2", + "size": 2 }, { - "variantName": "public_pocket_3", - "size": 3, - "minDepth": 0, - "maxDepth": 0, - "baseWeight": 1 + "id": "public_pocket_3", + "size": 3 }, { - "variantName": "public_pocket_4", - "size": 4, - "minDepth": 0, - "maxDepth": 0, - "baseWeight": 1 + "id": "public_pocket_4", + "size": 4 }, { - "variantName": "public_pocket_5", - "size": 5, - "minDepth": 0, - "maxDepth": 0, - "baseWeight": 1 + "id": "public_pocket_5", + "size": 5 }, { - "variantName": "public_pocket_6", - "size": 6, - "minDepth": 0, - "maxDepth": 0, - "baseWeight": 1 + "id": "public_pocket_6", + "size": 6 }, { - "variantName": "public_pocket_7", - "size": 7, - "minDepth": 0, - "maxDepth": 0, - "baseWeight": 1 + "id": "public_pocket_7", + "size": 7 } ] }