From f2f0abc8d93c22fbf42973263c9ca2d39fc8d6b1 Mon Sep 17 00:00:00 2001 From: SenseiKiwi Date: Mon, 15 Jul 2013 21:38:52 -0400 Subject: [PATCH 01/10] Minor Change Removed a comment from SchematicLoader.transformPoint() that is no longer relevant. It refers to counterclockwise rotations even though our rotations are commented as clockwise now. --- StevenDimDoors/mod_pocketDim/SchematicLoader.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/StevenDimDoors/mod_pocketDim/SchematicLoader.java b/StevenDimDoors/mod_pocketDim/SchematicLoader.java index f7f40381..96223348 100644 --- a/StevenDimDoors/mod_pocketDim/SchematicLoader.java +++ b/StevenDimDoors/mod_pocketDim/SchematicLoader.java @@ -1156,10 +1156,6 @@ public class SchematicLoader } angle = angle % 4; - //Rotations are considered in counterclockwise form because coordinate systems are - //often assumed to be right-handed and convenient formulas are available for - //common counterclockwise rotations. - //Reference: http://en.wikipedia.org/wiki/Rotation_matrix#Common_rotations int rx; int rz; switch (angle) From f97b40f2c5ec06be650bd78a35dad0cd4a121e4f Mon Sep 17 00:00:00 2001 From: SenseiKiwi Date: Tue, 16 Jul 2013 16:54:48 -0400 Subject: [PATCH 02/10] Minor Style Changes and Fixes Made some minor changes such as removing unused imports and fixing up code to remove warnings. Stop calling static methods as if they were instance methods!!! @_@ --- .../mod_pocketDim/items/ItemBlockDimWall.java | 14 ++------ .../mod_pocketDim/items/ItemChaosDoor.java | 27 ++++---------- .../mod_pocketDim/items/itemDimDoor.java | 35 +++++++------------ 3 files changed, 21 insertions(+), 55 deletions(-) diff --git a/StevenDimDoors/mod_pocketDim/items/ItemBlockDimWall.java b/StevenDimDoors/mod_pocketDim/items/ItemBlockDimWall.java index 03f55712..fe0f25dd 100644 --- a/StevenDimDoors/mod_pocketDim/items/ItemBlockDimWall.java +++ b/StevenDimDoors/mod_pocketDim/items/ItemBlockDimWall.java @@ -1,19 +1,9 @@ package StevenDimDoors.mod_pocketDim.items; -import java.util.List; - -import StevenDimDoors.mod_pocketDim.mod_pocketDim; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemDoor; import net.minecraft.item.ItemStack; -import net.minecraft.util.MathHelper; -import net.minecraft.world.World; +import StevenDimDoors.mod_pocketDim.mod_pocketDim; public class ItemBlockDimWall extends ItemBlock { @@ -38,6 +28,6 @@ public class ItemBlockDimWall extends ItemBlock public String getUnlocalizedName(ItemStack par1ItemStack) { - return this.subNames[getItemDamageFromStack(par1ItemStack)]; + return subNames[getItemDamageFromStack(par1ItemStack)]; } } \ No newline at end of file diff --git a/StevenDimDoors/mod_pocketDim/items/ItemChaosDoor.java b/StevenDimDoors/mod_pocketDim/items/ItemChaosDoor.java index 317cf4ba..c218cd24 100644 --- a/StevenDimDoors/mod_pocketDim/items/ItemChaosDoor.java +++ b/StevenDimDoors/mod_pocketDim/items/ItemChaosDoor.java @@ -2,46 +2,31 @@ package StevenDimDoors.mod_pocketDim.items; import java.util.List; -import StevenDimDoors.mod_pocketDim.mod_pocketDim; - -import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IconRegister; -import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemDoor; import net.minecraft.item.ItemStack; -import net.minecraft.util.MathHelper; -import net.minecraft.world.World; +import StevenDimDoors.mod_pocketDim.mod_pocketDim; public class ItemChaosDoor extends itemDimDoor { - private Material doorMaterial; - public ItemChaosDoor(int par1, Material par2Material) { super(par1, par2Material); - this.doorMaterial = par2Material; this.setCreativeTab(mod_pocketDim.dimDoorsCreativeTab); } + public void registerIcons(IconRegister par1IconRegister) { this.itemIcon = par1IconRegister.registerIcon(mod_pocketDim.modid + ":" + this.getUnlocalizedName()); } - @Override + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) { - - - par3List.add("Caution- leads to random destination"); - - - - - - - + par3List.add("Caution: Leads to random destination"); } } \ No newline at end of file diff --git a/StevenDimDoors/mod_pocketDim/items/itemDimDoor.java b/StevenDimDoors/mod_pocketDim/items/itemDimDoor.java index 13eb0b08..c8f3c6c7 100644 --- a/StevenDimDoors/mod_pocketDim/items/itemDimDoor.java +++ b/StevenDimDoors/mod_pocketDim/items/itemDimDoor.java @@ -1,27 +1,22 @@ package StevenDimDoors.mod_pocketDim.items; import java.util.List; -import java.util.Random; - -import StevenDimDoors.mod_pocketDim.DDProperties; -import StevenDimDoors.mod_pocketDim.LinkData; -import StevenDimDoors.mod_pocketDim.mod_pocketDim; -import StevenDimDoors.mod_pocketDim.helpers.dimHelper; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.EntityLiving; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemDoor; import net.minecraft.item.ItemStack; -import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.MathHelper; import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; import net.minecraft.world.World; +import StevenDimDoors.mod_pocketDim.DDProperties; +import StevenDimDoors.mod_pocketDim.LinkData; +import StevenDimDoors.mod_pocketDim.mod_pocketDim; +import StevenDimDoors.mod_pocketDim.helpers.dimHelper; public class itemDimDoor extends ItemDoor { @@ -41,13 +36,14 @@ public class itemDimDoor extends ItemDoor this.itemIcon = par1IconRegister.registerIcon(mod_pocketDim.modid + ":" + this.getUnlocalizedName().replace("item.", "")); } - @Override + @SuppressWarnings({ "rawtypes", "unchecked" }) + @Override public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) { par3List.add("Place on the block under a rift"); - par3List.add ("to activate that rift,"); - par3List.add("or place anywhere else"); - par3List.add("to create a pocket dim"); + par3List.add("to activate that rift or place"); + par3List.add("anywhere else to create a"); + par3List.add("pocket dimension."); } @Override @@ -81,7 +77,7 @@ public class itemDimDoor extends ItemDoor { int var12 = MathHelper.floor_double((double)((par2EntityPlayer.rotationYaw + 180.0F) * 4.0F / 360.0F) - 0.5D) & 3; - if (!this.canPlace(par3World, par4, par5, par6, var12)||!this.canPlace(par3World, par4, par5+1, par6, var12)) + if (!canPlace(par3World, par4, par5, par6, var12) || !canPlace(par3World, par4, par5+1, par6, var12)) { return false; } @@ -137,7 +133,6 @@ public class itemDimDoor extends ItemDoor public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) { - boolean didFindThing = false; MovingObjectPosition hit = this.getMovingObjectPositionFromPlayer(par3EntityPlayer.worldObj, par3EntityPlayer, false ); if(hit!=null&&!par2World.isRemote) { @@ -173,19 +168,15 @@ public class itemDimDoor extends ItemDoor { int var12 = MathHelper.floor_double((double)((par3EntityPlayer.rotationYaw + 180.0F) * 4.0F / 360.0F) - 0.5D) & 3; - if (!this.canPlace(par2World, par4, par5, par6, var12)||!this.canPlace(par2World, par4, par5-1, par6, var12)||dimHelper.instance.getLinkDataFromCoords(par4, par5, par6, par2World)==null) + if (!canPlace(par2World, par4, par5, par6, var12) || !canPlace(par2World, par4, par5-1, par6, var12) || + dimHelper.instance.getLinkDataFromCoords(par4, par5, par6, par2World) == null) { return par1ItemStack; } else { - - - placeDoorBlock(par2World, par4, par5-1, par6, var12, var11); - - - + --par1ItemStack.stackSize; } From ab05db40fe845311103e8eca54ffaf2d1e6bbb99 Mon Sep 17 00:00:00 2001 From: SenseiKiwi Date: Tue, 16 Jul 2013 17:00:25 -0400 Subject: [PATCH 03/10] Additional Fixes Removed unused import from DDProperties. Changed argument lists of CommandDeleteRifts, CommandDeleteAllLinks, and CommandDeleteDimensionData to read "???" since we want to get this update out and those commands are used infrequently. We'll fix them to have proper information for the next update. --- StevenDimDoors/mod_pocketDim/DDProperties.java | 2 -- .../mod_pocketDim/commands/CommandDeleteAllLinks.java | 2 +- .../mod_pocketDim/commands/CommandDeleteDimensionData.java | 2 +- StevenDimDoors/mod_pocketDim/commands/CommandDeleteRifts.java | 2 +- 4 files changed, 3 insertions(+), 5 deletions(-) diff --git a/StevenDimDoors/mod_pocketDim/DDProperties.java b/StevenDimDoors/mod_pocketDim/DDProperties.java index 2c95909f..a4b0ca42 100644 --- a/StevenDimDoors/mod_pocketDim/DDProperties.java +++ b/StevenDimDoors/mod_pocketDim/DDProperties.java @@ -2,8 +2,6 @@ package StevenDimDoors.mod_pocketDim; import java.io.File; -import StevenDimDoors.mod_pocketDim.world.LimboGenerator; - import net.minecraftforge.common.Configuration; public class DDProperties diff --git a/StevenDimDoors/mod_pocketDim/commands/CommandDeleteAllLinks.java b/StevenDimDoors/mod_pocketDim/commands/CommandDeleteAllLinks.java index 29b8028f..3010eab7 100644 --- a/StevenDimDoors/mod_pocketDim/commands/CommandDeleteAllLinks.java +++ b/StevenDimDoors/mod_pocketDim/commands/CommandDeleteAllLinks.java @@ -14,7 +14,7 @@ public class CommandDeleteAllLinks extends DDCommandBase private CommandDeleteAllLinks() { - super("dd-deletelinks", "FIXME"); + super("dd-deletelinks", "???"); } public static CommandDeleteAllLinks instance() diff --git a/StevenDimDoors/mod_pocketDim/commands/CommandDeleteDimensionData.java b/StevenDimDoors/mod_pocketDim/commands/CommandDeleteDimensionData.java index f25e8d9d..7eb578f9 100644 --- a/StevenDimDoors/mod_pocketDim/commands/CommandDeleteDimensionData.java +++ b/StevenDimDoors/mod_pocketDim/commands/CommandDeleteDimensionData.java @@ -14,7 +14,7 @@ public class CommandDeleteDimensionData extends DDCommandBase private CommandDeleteDimensionData() { - super("dd-deletedimension", "FIXME"); + super("dd-deletedimension", "???"); } public static CommandDeleteDimensionData instance() diff --git a/StevenDimDoors/mod_pocketDim/commands/CommandDeleteRifts.java b/StevenDimDoors/mod_pocketDim/commands/CommandDeleteRifts.java index 0f61224d..4f3bc302 100644 --- a/StevenDimDoors/mod_pocketDim/commands/CommandDeleteRifts.java +++ b/StevenDimDoors/mod_pocketDim/commands/CommandDeleteRifts.java @@ -15,7 +15,7 @@ public class CommandDeleteRifts extends DDCommandBase private CommandDeleteRifts() { - super("dd-???", "FIXME"); + super("dd-???", "???"); } public static CommandDeleteRifts instance() From f132153cf42c2ae66c645c67b6cfc0710110d97c Mon Sep 17 00:00:00 2001 From: SenseiKiwi Date: Tue, 16 Jul 2013 17:52:26 -0400 Subject: [PATCH 04/10] Renamed Blocks and Minor Changes Renamed block 1973:1 to Ancient Fabric. Renamed block 220 to Eternal Fabric. I assigned new names so that we didn't need to use the long ones we had before (e.g. "Fabric of Reality Permanent/Pushable"). Also removed unused imports from various classes along the way. --- .../mod_pocketDim/blocks/BlockDimWallPerm.java | 17 +++++++---------- .../mod_pocketDim/blocks/BlockLimbo.java | 15 +++++---------- .../mod_pocketDim/blocks/BlockRift.java | 1 - .../mod_pocketDim/items/ItemBlockDimWall.java | 2 +- StevenDimDoors/mod_pocketDim/mod_pocketDim.java | 4 ++-- 5 files changed, 15 insertions(+), 24 deletions(-) diff --git a/StevenDimDoors/mod_pocketDim/blocks/BlockDimWallPerm.java b/StevenDimDoors/mod_pocketDim/blocks/BlockDimWallPerm.java index 0735e51a..13daca40 100644 --- a/StevenDimDoors/mod_pocketDim/blocks/BlockDimWallPerm.java +++ b/StevenDimDoors/mod_pocketDim/blocks/BlockDimWallPerm.java @@ -2,24 +2,21 @@ package StevenDimDoors.mod_pocketDim.blocks; import java.util.Random; -import cpw.mods.fml.common.FMLCommonHandler; - -import StevenDimDoors.mod_pocketDim.BlankTeleporter; -import StevenDimDoors.mod_pocketDim.DDProperties; -import StevenDimDoors.mod_pocketDim.LinkData; -import StevenDimDoors.mod_pocketDim.mod_pocketDim; -import StevenDimDoors.mod_pocketDim.helpers.dimHelper; -import StevenDimDoors.mod_pocketDim.helpers.yCoordHelper; - import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.server.management.ServerConfigurationManager; import net.minecraft.world.World; import net.minecraft.world.WorldServer; +import StevenDimDoors.mod_pocketDim.BlankTeleporter; +import StevenDimDoors.mod_pocketDim.DDProperties; +import StevenDimDoors.mod_pocketDim.LinkData; +import StevenDimDoors.mod_pocketDim.mod_pocketDim; +import StevenDimDoors.mod_pocketDim.helpers.dimHelper; +import StevenDimDoors.mod_pocketDim.helpers.yCoordHelper; +import cpw.mods.fml.common.FMLCommonHandler; public class BlockDimWallPerm extends Block { diff --git a/StevenDimDoors/mod_pocketDim/blocks/BlockLimbo.java b/StevenDimDoors/mod_pocketDim/blocks/BlockLimbo.java index 579df2f2..65c79f0d 100644 --- a/StevenDimDoors/mod_pocketDim/blocks/BlockLimbo.java +++ b/StevenDimDoors/mod_pocketDim/blocks/BlockLimbo.java @@ -2,23 +2,18 @@ package StevenDimDoors.mod_pocketDim.blocks; import java.util.Random; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -import StevenDimDoors.mod_pocketDim.Point3D; -import StevenDimDoors.mod_pocketDim.mod_pocketDim; -import StevenDimDoors.mod_pocketDim.helpers.dimHelper; - import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLiving; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.Icon; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; +import StevenDimDoors.mod_pocketDim.Point3D; +import StevenDimDoors.mod_pocketDim.mod_pocketDim; +import StevenDimDoors.mod_pocketDim.helpers.dimHelper; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; public class BlockLimbo extends Block { diff --git a/StevenDimDoors/mod_pocketDim/blocks/BlockRift.java b/StevenDimDoors/mod_pocketDim/blocks/BlockRift.java index adef8c1c..8b1b8776 100644 --- a/StevenDimDoors/mod_pocketDim/blocks/BlockRift.java +++ b/StevenDimDoors/mod_pocketDim/blocks/BlockRift.java @@ -5,7 +5,6 @@ import java.util.Random; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IconRegister; -import net.minecraft.item.Item; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.MathHelper; diff --git a/StevenDimDoors/mod_pocketDim/items/ItemBlockDimWall.java b/StevenDimDoors/mod_pocketDim/items/ItemBlockDimWall.java index fe0f25dd..572f506b 100644 --- a/StevenDimDoors/mod_pocketDim/items/ItemBlockDimWall.java +++ b/StevenDimDoors/mod_pocketDim/items/ItemBlockDimWall.java @@ -7,7 +7,7 @@ import StevenDimDoors.mod_pocketDim.mod_pocketDim; public class ItemBlockDimWall extends ItemBlock { - private final static String[] subNames = {"Fabric of Reality", "Fabric of Reality Permanent"}; + private final static String[] subNames = {"Fabric of Reality", "Ancient Fabric"}; public ItemBlockDimWall(int par1) { diff --git a/StevenDimDoors/mod_pocketDim/mod_pocketDim.java b/StevenDimDoors/mod_pocketDim/mod_pocketDim.java index 65f1b565..73941145 100644 --- a/StevenDimDoors/mod_pocketDim/mod_pocketDim.java +++ b/StevenDimDoors/mod_pocketDim/mod_pocketDim.java @@ -225,7 +225,7 @@ public class mod_pocketDim LanguageRegistry.addName(ExitDoor , "Warp Door"); LanguageRegistry.addName(chaosDoor , "Unstable Door"); LanguageRegistry.addName(blockDimWall , "Fabric of Reality"); - LanguageRegistry.addName(blockDimWallPerm , "Fabric of Reality Permanent/Unpushable"); + LanguageRegistry.addName(blockDimWallPerm , "Eternal Fabric"); LanguageRegistry.addName(dimDoor, "Dimensional Door"); LanguageRegistry.addName(dimHatch, "Transdimensional Trapdoor"); @@ -242,7 +242,7 @@ public class mod_pocketDim * Add names for multiblock inventory item */ LanguageRegistry.addName(new ItemStack(blockDimWall, 1, 0), "Fabric of Reality"); - LanguageRegistry.addName(new ItemStack(blockDimWall, 1, 1), "Fabric of Reality Permanent/Pushable"); + LanguageRegistry.addName(new ItemStack(blockDimWall, 1, 1), "Ancient Fabric"); LanguageRegistry.instance().addStringLocalization("itemGroup.dimDoorsCustomTab", "en_US", "Dimensional Doors Items"); From c4f0a16af84d037b0eb1bf938bfae5f5c81c3258 Mon Sep 17 00:00:00 2001 From: SenseiKiwi Date: Tue, 16 Jul 2013 17:54:38 -0400 Subject: [PATCH 05/10] Minor Change to SchematicLoader Changed transformMetadata() from a public instance function to a private static function. I was curious as to whether it was being used by code outside SchematicLoader. The code compiles so it must be local-only. In the future, when we switch from using this function to the rotation class, the compiler will warn us that this function is no longer being used. Then we'll remember to remove it. --- StevenDimDoors/mod_pocketDim/SchematicLoader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/StevenDimDoors/mod_pocketDim/SchematicLoader.java b/StevenDimDoors/mod_pocketDim/SchematicLoader.java index 96223348..40a895ce 100644 --- a/StevenDimDoors/mod_pocketDim/SchematicLoader.java +++ b/StevenDimDoors/mod_pocketDim/SchematicLoader.java @@ -43,7 +43,7 @@ public class SchematicLoader public SchematicLoader() { } - public int transformMetadata(int metadata, int orientation, int blockID) + private static int transformMetadata(int metadata, int orientation, int blockID) { if (DungeonHelper.instance().metadataFlipList.contains(blockID)) { From d805d63c0a0045469aafc993a562b15b4d6fac05 Mon Sep 17 00:00:00 2001 From: SenseiKiwi Date: Tue, 16 Jul 2013 18:06:27 -0400 Subject: [PATCH 06/10] Fixed Metadata Issue in SchematicLoader I modified the way SchematicLoader handles blocks with metadata. Previously, we would always copy metadata over without additional checks. If we converted a mod block into Fabric of Reality, metadata would have no effect because FoR did not have subtypes. Now that FoR has subtypes, loading metadata blindly could cause unexpected effects, such as generating Ancient Fabric instead of FoR. I changed the code so that we only count a block as "changed" if we change its block ID and we don't want to preserve the original metadata. In that case, the metadata is set to 0. --- .../mod_pocketDim/SchematicLoader.java | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/StevenDimDoors/mod_pocketDim/SchematicLoader.java b/StevenDimDoors/mod_pocketDim/SchematicLoader.java index 40a895ce..b678dbbd 100644 --- a/StevenDimDoors/mod_pocketDim/SchematicLoader.java +++ b/StevenDimDoors/mod_pocketDim/SchematicLoader.java @@ -900,12 +900,10 @@ public class SchematicLoader else if (currentBlock == DungeonHelper.FABRIC_OF_REALITY_EXPORT_ID) { currentBlock = mod_pocketDim.blockDimWall.blockID; - blockChanged = true; } else if (currentBlock == DungeonHelper.PERMAFABRIC_EXPORT_ID) { currentBlock = mod_pocketDim.blockDimWallPerm.blockID; - blockChanged = true; } else if ((Block.blocksList[currentBlock] == null && currentBlock != 0) || currentBlock > MAX_VANILLA_BLOCK_ID) { @@ -916,23 +914,32 @@ public class SchematicLoader //Place blocks and set metadata if (currentBlock > 0) { - //Calculate new metadata for blocks that have orientations (e.g. doors, pistons) - //We're using a workaround to get the desired rotation relative to the schematic's entrance - int fixedMetadata = transformMetadata(blockMetadata, (orientation + NORTH_DOOR_METADATA - entryDirection + 16) % 4, currentBlock); + int fixedMetadata; + + if (!blockChanged) + { + //Calculate new metadata for blocks that have orientations (e.g. doors, pistons) + //We're using a workaround to get the desired rotation relative to the schematic's entrance + fixedMetadata = transformMetadata(blockMetadata, (orientation + NORTH_DOOR_METADATA - entryDirection + 16) % 4, currentBlock); + } + else + { + //Don't include metadata for changed blocks. It's possible that the metadata belonged to a mod block. + //If we include it now, it could cause our Fabric of Reality to change into permafabric. + fixedMetadata = 0; + } //Convert vanilla doors to dim doors or place blocks if (currentBlock == Block.doorIron.blockID) { setBlockDirectly(world, realX, realY, realZ, properties.DimensionalDoorID, fixedMetadata); - blockChanged = true; } else if (currentBlock == Block.doorWood.blockID) { setBlockDirectly(world, realX, realY, realZ, properties.WarpDoorID, fixedMetadata); - blockChanged = true; } else - { + { setBlockDirectly(world, realX, realY, realZ, currentBlock, fixedMetadata); } From 71adfa235811387b691559c2796be4c5bfb70c67 Mon Sep 17 00:00:00 2001 From: SenseiKiwi Date: Tue, 16 Jul 2013 18:39:11 -0400 Subject: [PATCH 07/10] Fixed Fabric of Reality Replacement Bug Fixed the bug in BlockDimWall that would cause Fabric of Reality to replace itself when you right-clicked to place FoR against an FoR surface. This happened because we considered FoR valid for replacing FoR since it's a cube solid. Now we have an extra check to prevent that. It was a waste of blocks to have them sort of eat each other up! Also cleaned up some of the code in BlockDimWall. --- .../mod_pocketDim/blocks/BlockDimWall.java | 61 +++++++------------ 1 file changed, 22 insertions(+), 39 deletions(-) diff --git a/StevenDimDoors/mod_pocketDim/blocks/BlockDimWall.java b/StevenDimDoors/mod_pocketDim/blocks/BlockDimWall.java index 37910d86..1953b8c7 100644 --- a/StevenDimDoors/mod_pocketDim/blocks/BlockDimWall.java +++ b/StevenDimDoors/mod_pocketDim/blocks/BlockDimWall.java @@ -22,37 +22,39 @@ import net.minecraft.world.World; public class BlockDimWall extends Block { - private Icon[] blockIcon= new Icon[2]; - public BlockDimWall(int i, int j, Material par2Material) + private static final float SUPER_HIGH_HARDNESS = 10000000000000F; + private Icon[] blockIcon = new Icon[2]; + + public BlockDimWall(int blockID, int j, Material par2Material) { - super(i, Material.ground); + super(blockID, Material.ground); setTickRandomly(true); this.setCreativeTab(mod_pocketDim.dimDoorsCreativeTab); } public float getBlockHardness(World par1World, int par2, int par3, int par4) { - if(par1World.getBlockMetadata(par2, par3, par4)==0) + if (par1World.getBlockMetadata(par2, par3, par4) == 0) { return this.blockHardness; } else { - return 10000000000000F; + return SUPER_HIGH_HARDNESS; } } public void registerIcons(IconRegister par1IconRegister) { this.blockIcon[0] = par1IconRegister.registerIcon(mod_pocketDim.modid + ":" + this.getUnlocalizedName2()); - this.blockIcon[1] = par1IconRegister.registerIcon(mod_pocketDim.modid + ":" + this.getUnlocalizedName2()+"perm"); + this.blockIcon[1] = par1IconRegister.registerIcon(mod_pocketDim.modid + ":" + this.getUnlocalizedName2() + "perm"); } @SideOnly(Side.CLIENT) @Override public Icon getIcon(int par1, int par2) { - if(par2==1) + if (par2 == 1) { return blockIcon[par2]; } @@ -68,6 +70,7 @@ public class BlockDimWall extends Block return metadata; } + @SuppressWarnings({ "rawtypes", "unchecked" }) @SideOnly(Side.CLIENT) public void getSubBlocks(int unknown, CreativeTabs tab, List subItems) { @@ -91,50 +94,30 @@ public class BlockDimWall extends Block /** * replaces the block clicked with the held block, instead of placing the block on top of it. Shift click to disable. */ - public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer entityPlayer, int par6, float par7, float par8, float par9) + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer entityPlayer, int par6, float par7, float par8, float par9) { - if(entityPlayer.getCurrentEquippedItem()!=null) + if (entityPlayer.getCurrentEquippedItem() != null) { Item playerEquip = entityPlayer.getCurrentEquippedItem().getItem(); - if(!(playerEquip instanceof ItemBlock)) + if (playerEquip instanceof ItemBlock) { - return false; - } - else - { - Block block= Block.blocksList[playerEquip.itemID]; - if(!Block.isNormalCube(playerEquip.itemID)) + Block block = Block.blocksList[playerEquip.itemID]; + if (!Block.isNormalCube(playerEquip.itemID) || block instanceof BlockContainer || block.blockID == this.blockID) { return false; } - if(block instanceof BlockContainer) + if (!world.isRemote) { - return false; + if (!entityPlayer.capabilities.isCreativeMode) + { + entityPlayer.getCurrentEquippedItem().stackSize--; + } + world.setBlock(x, y, z, entityPlayer.getCurrentEquippedItem().itemID, entityPlayer.getCurrentEquippedItem().getItemDamage(), 0); } - } - - - if(entityPlayer.getCurrentEquippedItem().getItem() instanceof ItemBlock) - { - if(par1World.isRemote) - { - return true; - } - - if(!entityPlayer.capabilities.isCreativeMode) - { - entityPlayer.getCurrentEquippedItem().stackSize--; - } - par1World.setBlock(par2, par3, par4, entityPlayer.getCurrentEquippedItem().itemID, entityPlayer.getCurrentEquippedItem().getItemDamage(),0); return true; } - } - else - { - return false; - } - return false; + return false; } } From a887dfc8193078381386b0c9cddf851d40e47f6f Mon Sep 17 00:00:00 2001 From: SenseiKiwi Date: Tue, 16 Jul 2013 23:37:00 -0400 Subject: [PATCH 08/10] Fixed Ancient Fabric Replacement Bug Fixed a bug in BlockDimWall that would allow players to replace Ancient Fabric by right clicking on it with a block in-hand, in the same way as Fabric of Reality can be replaced. That would've defeated their purpose. --- StevenDimDoors/mod_pocketDim/blocks/BlockDimWall.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/StevenDimDoors/mod_pocketDim/blocks/BlockDimWall.java b/StevenDimDoors/mod_pocketDim/blocks/BlockDimWall.java index 1953b8c7..0af6cdbf 100644 --- a/StevenDimDoors/mod_pocketDim/blocks/BlockDimWall.java +++ b/StevenDimDoors/mod_pocketDim/blocks/BlockDimWall.java @@ -65,9 +65,10 @@ public class BlockDimWall extends Block } @Override - public int damageDropped (int metadata) + public int damageDropped(int metadata) { - return metadata; + //Return 0 to avoid dropping Ancient Fabric even if the player somehow manages to break it + return 0; } @SuppressWarnings({ "rawtypes", "unchecked" }) @@ -96,7 +97,8 @@ public class BlockDimWall extends Block */ public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer entityPlayer, int par6, float par7, float par8, float par9) { - if (entityPlayer.getCurrentEquippedItem() != null) + //Check if the metadata value is 0 -- we don't want the user to replace Ancient Fabric + if (entityPlayer.getCurrentEquippedItem() != null && world.getBlockMetadata(x, y, z) == 0) { Item playerEquip = entityPlayer.getCurrentEquippedItem().getItem(); From bd8a62b52258e0f95e26b8fcc3596b35dbc69c5a Mon Sep 17 00:00:00 2001 From: SenseiKiwi Date: Tue, 16 Jul 2013 23:57:45 -0400 Subject: [PATCH 09/10] Removed setTickRandomly(true) Removed setTickRandomly(true) from BlockDimWall and BlockDimWallPerm. It was invoked in their constructors but no longer necessary. --- StevenDimDoors/mod_pocketDim/blocks/BlockDimWall.java | 1 - StevenDimDoors/mod_pocketDim/blocks/BlockDimWallPerm.java | 1 - 2 files changed, 2 deletions(-) diff --git a/StevenDimDoors/mod_pocketDim/blocks/BlockDimWall.java b/StevenDimDoors/mod_pocketDim/blocks/BlockDimWall.java index 0af6cdbf..4dc353df 100644 --- a/StevenDimDoors/mod_pocketDim/blocks/BlockDimWall.java +++ b/StevenDimDoors/mod_pocketDim/blocks/BlockDimWall.java @@ -28,7 +28,6 @@ public class BlockDimWall extends Block public BlockDimWall(int blockID, int j, Material par2Material) { super(blockID, Material.ground); - setTickRandomly(true); this.setCreativeTab(mod_pocketDim.dimDoorsCreativeTab); } diff --git a/StevenDimDoors/mod_pocketDim/blocks/BlockDimWallPerm.java b/StevenDimDoors/mod_pocketDim/blocks/BlockDimWallPerm.java index 13daca40..188724be 100644 --- a/StevenDimDoors/mod_pocketDim/blocks/BlockDimWallPerm.java +++ b/StevenDimDoors/mod_pocketDim/blocks/BlockDimWallPerm.java @@ -25,7 +25,6 @@ public class BlockDimWallPerm extends Block public BlockDimWallPerm(int i, int j, Material par2Material) { super(i, Material.ground); - setTickRandomly(true); this.setCreativeTab(mod_pocketDim.dimDoorsCreativeTab); if (properties == null) properties = DDProperties.instance(); From 71b9ce263a912c21bf683d064bbac57c428a96fd Mon Sep 17 00:00:00 2001 From: SenseiKiwi Date: Wed, 17 Jul 2013 01:45:41 -0400 Subject: [PATCH 10/10] Added New Dungeons Added 12 new dungeons to the mod. Integrated them to registerBaseDungeons() so that they should generate like all the other base dungeons. --- .../mod_pocketDim/helpers/DungeonHelper.java | 14 +++++++++++++- ...omplexHall_SK-HiddenStairs_Open_100.schematic | Bin 0 -> 2383 bytes .../ComplexHall_SK-LostGarden_Open_10.schematic | Bin 0 -> 4955 bytes ...eadEnd_SK-FarAwayInTheDark_Open_100.schematic | Bin 0 -> 1327 bytes .../DeadEnd_SK-UnstableDesert_Open_50.schematic | Bin 0 -> 2130 bytes .../Hub_SK-Claustrophobia_Open_10.schematic | Bin 0 -> 2497 bytes .../Hub_SK-HeartOfDisorder_Open_50.schematic | Bin 0 -> 8947 bytes ...impleHall_SK-LeftDownStairs_Open_50.schematic | Bin 0 -> 753 bytes .../SimpleHall_SK-LeftUpPath_Open_50.schematic | Bin 0 -> 892 bytes ...mpleHall_SK-RightDownStairs_Open_50.schematic | Bin 0 -> 730 bytes .../SimpleHall_SK-RightUpPath_Open_50.schematic | Bin 0 -> 884 bytes ...impleHall_SK-SpiralHallway_Open_100.schematic | Bin 0 -> 438 bytes .../Trap_SK-RestlessCorridor_Open_10.schematic | Bin 0 -> 2879 bytes 13 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 schematics/ComplexHall_SK-HiddenStairs_Open_100.schematic create mode 100644 schematics/ComplexHall_SK-LostGarden_Open_10.schematic create mode 100644 schematics/DeadEnd_SK-FarAwayInTheDark_Open_100.schematic create mode 100644 schematics/DeadEnd_SK-UnstableDesert_Open_50.schematic create mode 100644 schematics/Hub_SK-Claustrophobia_Open_10.schematic create mode 100644 schematics/Hub_SK-HeartOfDisorder_Open_50.schematic create mode 100644 schematics/SimpleHall_SK-LeftDownStairs_Open_50.schematic create mode 100644 schematics/SimpleHall_SK-LeftUpPath_Open_50.schematic create mode 100644 schematics/SimpleHall_SK-RightDownStairs_Open_50.schematic create mode 100644 schematics/SimpleHall_SK-RightUpPath_Open_50.schematic create mode 100644 schematics/SimpleHall_SK-SpiralHallway_Open_100.schematic create mode 100644 schematics/Trap_SK-RestlessCorridor_Open_10.schematic diff --git a/StevenDimDoors/mod_pocketDim/helpers/DungeonHelper.java b/StevenDimDoors/mod_pocketDim/helpers/DungeonHelper.java index bea7fabe..ab388b81 100644 --- a/StevenDimDoors/mod_pocketDim/helpers/DungeonHelper.java +++ b/StevenDimDoors/mod_pocketDim/helpers/DungeonHelper.java @@ -319,6 +319,8 @@ public class DungeonHelper hubs.add(new DungeonGenerator(DEFAULT_DUNGEON_WEIGHT, "/schematics/longDoorHallway.schematic", false)); hubs.add(new DungeonGenerator(DEFAULT_DUNGEON_WEIGHT, "/schematics/smallRotundaWithExit.schematic", false)); hubs.add(new DungeonGenerator(DEFAULT_DUNGEON_WEIGHT, "/schematics/fortRuins.schematic", true)); + hubs.add(new DungeonGenerator(10, "/schematics/Hub_SK-Claustrophobia_Open_10.schematic", true)); + hubs.add(new DungeonGenerator(50, "/schematics/Hub_SK-HeartOfDisorder_Open_50.schematic", true)); simpleHalls.add(new DungeonGenerator(DEFAULT_DUNGEON_WEIGHT, "/schematics/collapsedSingleTunnel1.schematic", false)); simpleHalls.add(new DungeonGenerator(DEFAULT_DUNGEON_WEIGHT, "/schematics/singleStraightHall1.schematic", false)); @@ -328,7 +330,12 @@ public class DungeonHelper simpleHalls.add(new DungeonGenerator(DEFAULT_DUNGEON_WEIGHT, "/schematics/simpleStairsUp.schematic", false)); simpleHalls.add(new DungeonGenerator(DEFAULT_DUNGEON_WEIGHT, "/schematics/simpleStairsDown.schematic", false)); simpleHalls.add(new DungeonGenerator(DEFAULT_DUNGEON_WEIGHT, "/schematics/simpleSmallT1.schematic", false)); - + simpleHalls.add(new DungeonGenerator(50, "/schematics/SimpleHall_SK-LeftDownStairs_Open_50.schematic", true)); + simpleHalls.add(new DungeonGenerator(50, "/schematics/SimpleHall_SK-LeftUpPath_Open_50.schematic", true)); + simpleHalls.add(new DungeonGenerator(50, "/schematics/SimpleHall_SK-RightDownStairs_Open_50.schematic", true)); + simpleHalls.add(new DungeonGenerator(50, "/schematics/SimpleHall_SK-RightUpPath_Open_50.schematic", true)); + simpleHalls.add(new DungeonGenerator(DEFAULT_DUNGEON_WEIGHT, "/schematics/SimpleHall_SK-SpiralHallway_Open_100.schematic", true)); + complexHalls.add(new DungeonGenerator(DEFAULT_DUNGEON_WEIGHT, "/schematics/tntPuzzleTrap.schematic", false)); complexHalls.add(new DungeonGenerator(DEFAULT_DUNGEON_WEIGHT, "/schematics/brokenPillarsO.schematic", true)); complexHalls.add(new DungeonGenerator(DEFAULT_DUNGEON_WEIGHT, "/schematics/buggyTopEntry1.schematic", true)); @@ -337,6 +344,8 @@ public class DungeonHelper complexHalls.add(new DungeonGenerator(DEFAULT_DUNGEON_WEIGHT, "/schematics/mediumPillarStairs.schematic", true)); complexHalls.add(new DungeonGenerator(DEFAULT_DUNGEON_WEIGHT, "/schematics/ruinsO.schematic", true)); complexHalls.add(new DungeonGenerator(DEFAULT_DUNGEON_WEIGHT, "/schematics/pitStairs.schematic", true)); + complexHalls.add(new DungeonGenerator(DEFAULT_DUNGEON_WEIGHT, "/schematics/ComplexHall_SK-HiddenStairs_Open_100.schematic", true)); + complexHalls.add(new DungeonGenerator(10, "/schematics/ComplexHall_SK-LostGarden_Open_10.schematic", true)); deadEnds.add(new DungeonGenerator(DEFAULT_DUNGEON_WEIGHT, "/schematics/azersDungeonO.schematic", false)); deadEnds.add(new DungeonGenerator(DEFAULT_DUNGEON_WEIGHT, "/schematics/diamondTowerTemple1.schematic", true)); @@ -349,6 +358,8 @@ public class DungeonHelper deadEnds.add(new DungeonGenerator(DEFAULT_DUNGEON_WEIGHT, "/schematics/tntTrapO.schematic", true)); deadEnds.add(new DungeonGenerator(DEFAULT_DUNGEON_WEIGHT, "/schematics/smallDesert.schematic", true)); deadEnds.add(new DungeonGenerator(DEFAULT_DUNGEON_WEIGHT, "/schematics/smallPond.schematic", true)); + deadEnds.add(new DungeonGenerator(DEFAULT_DUNGEON_WEIGHT, "/schematics/DeadEnd_SK-FarAwayInTheDark_Open_100.schematic", true)); + deadEnds.add(new DungeonGenerator(50, "/schematics/DeadEnd_SK-UnstableDesert_Open_50.schematic", true)); pistonTraps.add(new DungeonGenerator(2 * DEFAULT_DUNGEON_WEIGHT, "/schematics/hallwayPitFallTrap.schematic", false)); pistonTraps.add(new DungeonGenerator(2 * DEFAULT_DUNGEON_WEIGHT, "/schematics/pistonFloorHall.schematic", false)); @@ -359,6 +370,7 @@ public class DungeonHelper pistonTraps.add(new DungeonGenerator(DEFAULT_DUNGEON_WEIGHT, "/schematics/simpleDropHall.schematic", false)); pistonTraps.add(new DungeonGenerator(DEFAULT_DUNGEON_WEIGHT, "/schematics/fallingTNThall.schematic", false)); pistonTraps.add(new DungeonGenerator(DEFAULT_DUNGEON_WEIGHT, "/schematics/lavaPyramid.schematic", true)); + pistonTraps.add(new DungeonGenerator(10, "/schematics/Trap_SK-RestlessCorridor_Open_10.schematic", true)); mazes.add(new DungeonGenerator(DEFAULT_DUNGEON_WEIGHT, "/schematics/smallMaze1.schematic", false)); mazes.add(new DungeonGenerator(DEFAULT_DUNGEON_WEIGHT, "/schematics/smallMultilevelMaze.schematic", false)); diff --git a/schematics/ComplexHall_SK-HiddenStairs_Open_100.schematic b/schematics/ComplexHall_SK-HiddenStairs_Open_100.schematic new file mode 100644 index 0000000000000000000000000000000000000000..44589d51604b43e6edf818f784b7c32f89022aad GIT binary patch literal 2383 zcmY*adtB1j8~$46rBuOqZtRrj*7kOKqSzyQn}&;?xp>!pxS^? ziHT`t$TqnQ85k=wmllMV&+uBhv=M?=z6!z**6*L4f6nJU=Y8Mjobx`VG7@mEVDqIg;K^Pej!p{z+ldpq zfG42fz(#>~;7hn zP$bmW-EU%PGl=^2*qI^3-KtK#uNXb4soSSGN5w zcH$DmJt_OGfb|aL_ooj&eLo%7BBnMZ5BqZ>eiMh+Y3+tfJCxr6fPGt$W2Z({{Yk5CF~{ zep?pu-=dkVCztNr;ZqkEK1_X>dYi4=q2Z^^m+Kmesk?@#i>Ji;$wNz1lr*tHIoeR{ z%GzEY9;(;N<%k*Kn@+J#^A^G|EEr%6`hw1w6myoh85i>iiCOwIeS@>Q78~@&3>cX_scVx&{Qbg>W%6kp?GH25g zeJ4n6PQuJxnL(+*#(rj)@pW+y@ zyjYUGyE)3a3XO;uk046eF-mu~>v#kPSDzG1Y3vy!@=RegQq8yzwTW}5s+{GID8B?woNtBc>0>- zUL;YH2qBj9@*L8XllUM6_VJri^ zrR>&TD=PKg=o(5U%3DHsO+aXp$0LrQOXok@h;xewEDXc)>a{K0gI28+9+%f9qp8>9 z^X?UI|2E;wx8RyDVP{g@BujK%JzU3Ekp?_=KcqAsi61$I4ItlEo{dSEPJtIat3 z;k2t4qcpY@Z>R+EjTzp7KEk|bBA#(43yb-#QFLORO&Am^*#xrR_;SZ)+RD|oVNg^( zRFcT)E~Fl)HCs()i&L1gwYA70ndLTMqo^_^K_2u3FPHtOal#*^q>yJY-nH{@;@!cF z3=_A}C{L_%sF-{9naq@4u|AN-&iG)}iXrg*P_5b_S#6j37+&>u1(6|#G?g{Ij`>3+ zvo$=qu8;2hs%x!&CgU4ofLj+t@zNanOCh_P_{-`?-gVrc#I{G@2I18!kWge*Wfltq zmE`F=E^yLz&v1esaCMx)kU>a$(t{1s&Y#l?-%D*M2l|CouF^7gZgd4)@zt%aS8zP* zQQ6?2zysDjpKqL&DVoDV`8m!X1IeixXHvN+A|S-?>j&}Uvd4e9?L^7@7HO<_A*cP4 zpG+7RSi>UtXLg;JxioHf(Vwa0-#tcHmlC8lTVq4|q-*dw zXFeXi9>SgLs=DS)?|mhL>A4qF4unP(@Q$q9Zl72EV{? z|8C!QCewcwppR%1;}n_WHk6!|EG$B5(YjN^-LS~6773!dK6EBBz zo|?H~Pap9^{Y*$zHTenr!NkOVZR;71QmJ~`D3&$x{d@Bnr59w5xF0SExcyI?>n&lb zB-H4cn|}^`XD<7yS)_FG_YDJ~;+D8t#k{!Xds4M5K?K3XuXAIen)aN@>>-lY7Qi`& z%>+0vF5-qzt@^DKS1E!zL1sQ#Bo=FNC6Yyvwv%NaB@_w+{usz45LTOL9+O}qrsD*9 zH@fGm2U|%gbD2ztb!%Saq}=3f9UhEoyf~iL33=({7mAD4$fP!g;6hlkG8rr6rWr2} zFjcdLK;}=`=qzPxd*r|SV}%g=FG-^<0K|Z0a-h!2H|B<>BXX$q1)q!2bZs Cv%;4E literal 0 HcmV?d00001 diff --git a/schematics/ComplexHall_SK-LostGarden_Open_10.schematic b/schematics/ComplexHall_SK-LostGarden_Open_10.schematic new file mode 100644 index 0000000000000000000000000000000000000000..a70f1acc0d0470b02714cdcb84af24885a5b17e3 GIT binary patch literal 4955 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 literal 0 HcmV?d00001 diff --git a/schematics/DeadEnd_SK-UnstableDesert_Open_50.schematic b/schematics/DeadEnd_SK-UnstableDesert_Open_50.schematic new file mode 100644 index 0000000000000000000000000000000000000000..3cd5404ea77531dd633e25323737085210d85065 GIT binary patch literal 2130 zcmeHISx}P)5RS?ekfIc6s1Yhy5KsfHCRo6L804}MD4Li*0#*)xLlU_W42M$ANGavg zKOyxZKqOT|!qFI{2NuF1q&Xx|pnw7jgp$goB&DM-?ewuPo#{U8H{b5;emmdGZf6+4 zUdK#jH*LV%%-f0gF@FR6!$7kU&cWoAtU9I^hU|5`44+hek$s}31R=~6q&a=yRFW2Y zb9~OnCRcj0Qtj=`5c=k(M)M}K&qx7c7C-dl9`!_TePMdU~Gh4aM)ia|6Ovq ztCsa@DZPHEj*uL*@G_sJO}$546}L1smy9X*H!97mO?53T#4;5_2CyW*Jz~m5^Q@aM z$}BQ6#NQ6=u~~7#B$T`BnE6v0k10*XsO#A6(aUGrwpRD-Yq9S+AIkboXwjhw!>fmB z-#mHp>Cv#TkhEltlIfxLnsr}h6EXvvS5H|lT(1I1&YjzMm>qzXs_Dq~JWj-Pv{59k z&+Jc@v(we!)dt1Gkd=cd+wd@weRKgwN&C4Xk_c|6*{-^zAu)j1X^%!d9a)Q9jXRs{ zo0=rTmJc}JPCtP!7Ey0eH*Q%1bFUpoz8p!fN84hd`$w1&L%r+vPPgJ25<=R~5yw5Pp%FA8%|tVrWivNTtULFpYP=0yGS@ju-!+wZk+wJ^Nd&ib#8^*Acv@K zl1w4#sJnCNYCB%oE-mPADr+Ak-$N9VUy#~4cL31>gkLm?Jl$`{^VFby=T8Tn4D}A5 z8oOT%Z-$$Ti_I@b11qTw(x_H?Enogf-SQF0${_47uB=EJ$$<0v-mp3}S^!2R6u zd$f8H!c#K$&S`iSYK6qho`II~H&)c3jz}#i(Xojx`OD#_ADFdZp`Gw?Bq#t3F>^4Y_ouEP0W9FvakW{1d+0oh|m%Yb(tUl7JElc1DNe<-xH zC`5U~o+cJvjV-x_0nHkDKkB8tRH@qL7aiB@49WWNrNbm9&J^t-=?^Ly|1@5ma5jiC zb9Z)xjF$|(=PG>I12lzys55w~;4dAIICo1jB#p0%jM$M8Q`5qweRfA7@b-&CWpf5I z!Qg29txKM?tCjwv@qvBd4!&4`k#9uCy}fJJv&wmrh77*->x|UvdK)#mNYV5)XJOaS zcX!)N3!_3*Y{OWxqHcy*H=XH{IxOX%i?8|E!kiW?avGcoKgqTnZWLVV{JrxA_Q<_1 zS~pku4muSVORY3n!V28oqW9vM;+_$HQbIL{;n@cYGxCGUqp}`LXp)OL=tc+|nA~Fe z(+2LlK5pt`&mfmQmTUp)EKz$?*wAin}T( z!M{NWg=*)fIi(`$QG~)5H1obgO4954lWPkLD!+_+Q#?9G^L?$=S(Zde_M5iZmABIdzdlDf& z0-+isqaB?@+MK-B#cLQ4mrO@JC*pXCn_lK+&A!s()+A}$l{q;JUP44g8)3`(;VgJu zZmADlUu#m>>VthQW0@?yFZj}J+<~m;jsU8ke!jLRd(avL!TP>8Jw0P%sx$Ov_S*I9 z-QMwsMlSRonl(Y81pVMqgEbr4EidKdIB)AVyr}jxYR2~V_D0=wv7W<#*2xBIS5i=R sdM*0M@lBpsEVJ;xF5-?@3sv}^j;-NE@b9?xkkR8A5nUKVir0GBA4}l@d;kCd literal 0 HcmV?d00001 diff --git a/schematics/Hub_SK-Claustrophobia_Open_10.schematic b/schematics/Hub_SK-Claustrophobia_Open_10.schematic new file mode 100644 index 0000000000000000000000000000000000000000..5f70eed760b2256c5acd37f6b654cc1a3ebc511b GIT binary patch literal 2497 zcmV;y2|o58iwFP!000000PUU2ZsW)mhReD%eeWPafB*w8W;Q{9th8t$yUZjLCzwt) z36PZ=u)2-0k?x6*7T_fBg2EQ z@9#d{t{&beYV!Nr)vZ!LE)@U(008VQFYqA%007Vz_z(a90O$*R2mk;8yf9?9e8_mbnL!A``>pYq0sz3?F!(&)?s|yyRg@z^t?^h=trO7{#EbnZEdW4Y^z>C_ zlXS}F>xI~utfyeOFH>Q^z6dY0v}24n0KlGdc6yR0{gHZ=9G{$aR6CzuZkI2oXC2ip z)cN`O#pUbEi}QI&rhaZ%XXeN zk?e7#PEOCxyY4qt{C@#1Q2;;y13l4*I$KWNAqT@G-oubKl307kkXi@;#K(SJg9U&A z5w*hyfEQpuy*|dzH}r+&Jbk3imA0(E!lx}XV!aju006`0Sex6|Hbpwa>{0=j#Rg(j zBc`x<90ves$D}leyWf63eEs3WHy{7`{vV%} zTKw;Y8V&#qhUH^{SlD{z2usqrJ1of`q||)NCb>fZ_80HI@I2pLm~V0rE?c4!k1*fl z@c5Xxg8<@#_b=7yuL;Vh&jvPpGt-b_&yoIgI=XFUVfy5ObH= zuN;y%?~w7TbP3b&4cqJod)T&8j$}e|fZpkx zL;6n+vN=S95wQD)VH*DLx%VB9uJ#1+T zd#rmTqnZV7G{DgCIjs;6lO);v)Sg!QsGf|r=L>#W4*&oF_MWBf^uCBl67MhoI2e}B z^ZPu)GYkL@h0Pz(+DSaa`mPNCh(U4y0001pg^_yo$GeB`?^o&D=6YWNTUh=ACg18N7Uri8}&_?<(p)?H|=h7ajq4FID4yEfDgRjn9h#MG3` zSTCzqND4a#Sv7n}|7rjLhf2)3S9;7+5s&pTt2up0fcNw`rv0h81A9~R0JXzY0~iGO z5Z7kr3iYp+Buy#LLrvS%rsnn`^}A;_HMeu+k233TKNIpH&1!9&!;aKiIfrg) z)$gurR`WnuEy>k<+MA!6?i@O(8JvT;pSA?&0I)-%@F9)Pp`8yAb`IBa&LJHs)S{e@ z1Jtw;aPucX+IC)QwM}hm9zMjNmTqNK^KcF(wKGvQbJ={HgF&tKl0R8{xL$Z2Qy(?m zIW)C5KQ)7MF!lv6HJk%L3`BXYuXIH-M6Jm=v{Y+y4&k3ubvg%|TDWtlM9_cy|B4fuT|0LLqyb?%3i){uzA6t zwyxu5UfUVlSITQ0YWd6Cci)DTue_Jn+SSUa(%pq@dahb|ZS#I>MsE<+3WcfZFOK*o#C@v0}jHAHkdtPmS5x%yG$@&{{p~3 znB~1bAcwRZI2#gq#A=da;(U4abXEFSaxHmEMXtV-R&%iUL&#X~RQqj^a}a#zxLdCS z#(DtQC6gQ5G*7eE+!|4uQnefFRNVWv$CRSgWNw@ClxmGAPb#^wlB?N6>d}IvWBrrF zSpT$f4uWb9vX9vW;MlL3bMQY3vMofq^@{c^0DyRyS*Idf+G9%5E|Rc|$M$#2#|8hg z1&-w|&Kx)c%CYtTK-&pvHCO2uK{a&{c(+2dh3vHT3im9pAOL`!Ae)f_bFZjc3wK~6 zV7T-cPi4n?SvA?3iXz)WcB=*e0J|qFlM4@8vg7G+)I^bOApigXWrPPUh=9J^6y*FL L_FXSSweJA{jDpGo literal 0 HcmV?d00001 diff --git a/schematics/Hub_SK-HeartOfDisorder_Open_50.schematic b/schematics/Hub_SK-HeartOfDisorder_Open_50.schematic new file mode 100644 index 0000000000000000000000000000000000000000..8532511c5b9d54f6ae77385afad847c5ecdbe46a GIT binary patch literal 8947 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 literal 0 HcmV?d00001 diff --git a/schematics/SimpleHall_SK-LeftDownStairs_Open_50.schematic b/schematics/SimpleHall_SK-LeftDownStairs_Open_50.schematic new file mode 100644 index 0000000000000000000000000000000000000000..c6e14dcecec6dac1241e06f16383f2301b9e4be1 GIT binary patch literal 753 zcmb2|=3sz;x3ezhT?&wBsJ|F!u&?2wxBL;wvoVXpXI1zvl44OFgjdxzQh^d1^OTcpRT-Q*E#1rZnB032HQmx=>n` ztIwctX2Dxl1`C_qYQ_&c6f6u5PTnTYAkgHnaPbF689%;7Y&-b(OlExip*j*tYex4% z9=jOv%!z8BZ|`5loARSFM8*E{#T>o#=bLM+q)v6Of2nh`D$4)Y{7J7@Cuyx$lAPzS z_CC%2*!|~9`E~ho_uUbAI=j8N(~P}iYQc9elcML5ZtoBG0hz5X{NgINwkQM&nd*6b z*&^I)mh@M4pJ?S4Ri*tCVl1y-oc3CHn^5UC75%GwCj|-qI#LJ}xa+Y+Xrl4NYITn* z(_h?;3+;6K-K-qgukmz(%hceBFZxa>f6VoKusoyo;)9~^o!^A7ZgcV9^6#D5jyro7 z{dF-~9_E^B%xT!A zAQJ_QqZJnx->XS^)l`rXJK=@0z{hAI)xgV5E}mC*JZPQgBIqsx_LWFt%mj@?I}`$2 efI-Ib_>rQJt3sawgH_ibMr(s(-{p5QFaQ7)zEQXU literal 0 HcmV?d00001 diff --git a/schematics/SimpleHall_SK-LeftUpPath_Open_50.schematic b/schematics/SimpleHall_SK-LeftUpPath_Open_50.schematic new file mode 100644 index 0000000000000000000000000000000000000000..f6dabbb651aacc917d3bdcefaa2905c0242cb81b GIT binary patch literal 892 zcmV-?1B3h@iwFP!000000PUJhZqq;*K!-r<25|udOAbO22r9t}B-U{nH5N%3QA<9V zZ_*_<;1Z-0JDwyni5>raZr|I0`)X%?o?WZ(QjNb)=d-T)w$?<08kSiGRJr%x9U(KP#7qqz6a1YJQ|-K zy+%!Na5B6}fM_25`vMFde&GWE0000000000002*xvAXzl8%J?8yEFgpe4)nQCh_b~ zG+ErKv&)5^PsZxik7zO5`nHie|2n(9iRbD~pvITi*B=(Yr@!u$diQVZ@<~CUi!W;x z6bFd4u-8iY(AIYeorfG@uay@PEiXv4X+feSDqN5#i3%425)CY&{URvD!&o;WX-?Fe z$65$TbbArCXAw&-dt>6{2}(%RS4r24xDojvhni?$iNrNQ^Jfb}Tf#gDa*@Y1%tW;< z5_@%9Pc&HXX12OI$%PJ1pP+z5w}hQ&VhLSu5sORd^+a7~6rYg~Y?z5|iQ)l}?Oi6c zHFK@qYqhiNwy-XhB**t7AK0TxRA+m)UR@OwH)o=4QT0AwUHAAIPb|@TPth`o)|tmJ z5>={1SLH;hMC;6hL`jrHNpuf>=~O`oOLX{xM4J{QN}|F=^+fG65C?^SMWF#k>io+r zx|zr7?MR*djIQIkdL5|q{69lo-T(EHx>*V5ML7bJ=hE=Uw1T#%?aZd9ahv0_NVH$m04AW?ICKzMi1D?+yj!$FD7U;5rC5;e!l z|19zDpjRw?!uR1Fi12;gME6#bM7tDe>f5MPWN_8Rexlhuxtr+b2mkJ+!gOaXNwh<; z+NY&kY_>&KaMi{B!!iqUSA=1z?1^v0l0fU^+3uka&p{ literal 0 HcmV?d00001 diff --git a/schematics/SimpleHall_SK-RightDownStairs_Open_50.schematic b/schematics/SimpleHall_SK-RightDownStairs_Open_50.schematic new file mode 100644 index 0000000000000000000000000000000000000000..3bf45be2e92d75e04adb4c7de810157799bb1039 GIT binary patch literal 730 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