From 3ce380ad5e108460d241f23890c574a66995554d Mon Sep 17 00:00:00 2001 From: SenseiKiwi Date: Thu, 5 Sep 2013 18:13:05 -0400 Subject: [PATCH] Fixed Unstable Doors Added code so that the links for Unstable Doors are handled properly by DDTeleporter. Hurray! Also cleaned up some unused imports in the BiomeGen classes and removed the RANDOM_DUNGEON link type - it was meant for the dd-rift command but there is no need for it anymore. --- .../mod_pocketDim/core/DDTeleporter.java | 53 ++++++++++++++++++- .../mod_pocketDim/core/LinkTypes.java | 3 +- .../mod_pocketDim/world/BiomeGenLimbo.java | 3 -- .../mod_pocketDim/world/BiomeGenPocket.java | 2 - 4 files changed, 52 insertions(+), 9 deletions(-) diff --git a/StevenDimDoors/mod_pocketDim/core/DDTeleporter.java b/StevenDimDoors/mod_pocketDim/core/DDTeleporter.java index f973e385..4ff768bf 100644 --- a/StevenDimDoors/mod_pocketDim/core/DDTeleporter.java +++ b/StevenDimDoors/mod_pocketDim/core/DDTeleporter.java @@ -1,5 +1,6 @@ package StevenDimDoors.mod_pocketDim.core; +import java.util.ArrayList; import java.util.Random; import net.minecraft.entity.Entity; @@ -344,8 +345,20 @@ public class DDTeleporter return; } - entity = teleportEntity(entity, link.destination()); - entity.worldObj.playSoundEffect(entity.posX, entity.posY, entity.posZ, "mob.endermen.portal", 1.0F, 1.0F); + if (link.linkType() == LinkTypes.RANDOM) + { + Point4D randomDestination = getRandomDestination(); + if (randomDestination != null) + { + entity = teleportEntity(entity, randomDestination); + entity.worldObj.playSoundEffect(entity.posX, entity.posY, entity.posZ, "mob.endermen.portal", 1.0F, 1.0F); + } + } + else + { + entity = teleportEntity(entity, link.destination()); + entity.worldObj.playSoundEffect(entity.posX, entity.posY, entity.posZ, "mob.endermen.portal", 1.0F, 1.0F); + } } private static boolean initializeDestination(DimLink link, DDProperties properties) @@ -366,9 +379,45 @@ public class DDTeleporter case LinkTypes.POCKET: return PocketBuilder.generateNewPocket(link, properties); case LinkTypes.NORMAL: + case LinkTypes.RANDOM: return true; default: throw new IllegalArgumentException("link has an unrecognized link type."); } } + + private static Point4D getRandomDestination() + { + // Our aim is to return a point near a random link's source + // so that a link of type RANDOM can teleport a player there. + + // Restrictions: + // 1. Ignore links with their source inside a pocket dimension. + // 2. Ignore links with link type RANDOM. + + ArrayList matches = new ArrayList(); + for (NewDimData dimension : PocketManager.getDimensions()) + { + if (!dimension.isPocketDimension()) + { + for (DimLink link : dimension.getAllLinks()) + { + if (link.linkType() != LinkTypes.RANDOM) + { + matches.add(link.source()); + } + } + } + } + + // Pick a random point, if any is available + if (!matches.isEmpty()) + { + return matches.get( random.nextInt(matches.size()) ); + } + else + { + return null; + } + } } diff --git a/StevenDimDoors/mod_pocketDim/core/LinkTypes.java b/StevenDimDoors/mod_pocketDim/core/LinkTypes.java index cce9f9c9..9cebd373 100644 --- a/StevenDimDoors/mod_pocketDim/core/LinkTypes.java +++ b/StevenDimDoors/mod_pocketDim/core/LinkTypes.java @@ -5,7 +5,7 @@ public class LinkTypes private LinkTypes() { } public static final int ENUM_MIN = 0; - public static final int ENUM_MAX = 7; + public static final int ENUM_MAX = 6; public static final int CLIENT_SIDE = -1337; @@ -17,5 +17,4 @@ public class LinkTypes public static final int DUNGEON_EXIT = 4; public static final int SAFE_EXIT = 5; public static final int UNSAFE_EXIT = 6; - public static final int RANDOM_DUNGEON = 7; } diff --git a/StevenDimDoors/mod_pocketDim/world/BiomeGenLimbo.java b/StevenDimDoors/mod_pocketDim/world/BiomeGenLimbo.java index 4b8fd1d4..b60eabef 100644 --- a/StevenDimDoors/mod_pocketDim/world/BiomeGenLimbo.java +++ b/StevenDimDoors/mod_pocketDim/world/BiomeGenLimbo.java @@ -1,9 +1,6 @@ package StevenDimDoors.mod_pocketDim.world; -import StevenDimDoors.mod_pocketDim.ticking.MobMonolith; -import net.minecraft.entity.monster.EntitySpider; import net.minecraft.world.biome.BiomeGenBase; -import net.minecraft.world.biome.SpawnListEntry; public class BiomeGenLimbo extends BiomeGenBase { diff --git a/StevenDimDoors/mod_pocketDim/world/BiomeGenPocket.java b/StevenDimDoors/mod_pocketDim/world/BiomeGenPocket.java index 3fe0c57a..e9dbdb76 100644 --- a/StevenDimDoors/mod_pocketDim/world/BiomeGenPocket.java +++ b/StevenDimDoors/mod_pocketDim/world/BiomeGenPocket.java @@ -1,8 +1,6 @@ package StevenDimDoors.mod_pocketDim.world; -import StevenDimDoors.mod_pocketDim.ticking.MobMonolith; import net.minecraft.world.biome.BiomeGenBase; -import net.minecraft.world.biome.SpawnListEntry; public class BiomeGenPocket extends BiomeGenBase {