diff --git a/src/main/java/net/minecraft/block/BlockEndPortal.java b/src/main/java/net/minecraft/block/BlockEndPortal.java index 01efbc2..78c6c40 100644 --- a/src/main/java/net/minecraft/block/BlockEndPortal.java +++ b/src/main/java/net/minecraft/block/BlockEndPortal.java @@ -2,8 +2,10 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; + import java.util.List; import java.util.Random; + import net.minecraft.block.material.MapColor; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; @@ -14,6 +16,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; +import net.minecraft.world.WorldServer; public class BlockEndPortal extends BlockContainer { @@ -64,7 +67,9 @@ { if (p_149670_5_.ridingEntity == null && p_149670_5_.riddenByEntity == null && !p_149670_1_.isRemote) { - p_149670_5_.travelToDimension(1); + int dim = ((WorldServer)p_149670_1_).getConfig().portals.enderLink; + if(dim != Integer.MIN_VALUE) + p_149670_5_.travelToDimension(((WorldServer)p_149670_1_).getConfig().portals.enderLink); } } diff --git a/src/main/java/net/minecraft/entity/Entity.java b/src/main/java/net/minecraft/entity/Entity.java index 10f2ed8..765fdbc 100644 --- a/src/main/java/net/minecraft/entity/Entity.java +++ b/src/main/java/net/minecraft/entity/Entity.java @@ -349,18 +349,10 @@ { this.portalCounter = i; this.timeUntilPortal = this.getPortalCooldown(); - byte b0; + int dim = ((WorldServer)worldObj).getConfig().portals.netherLink; - if (this.worldObj.provider.dimensionId == -1) - { - b0 = 0; - } - else - { - b0 = -1; - } - - this.travelToDimension(b0); + if(dim != Integer.MIN_VALUE) + this.travelToDimension(dim); } this.inPortal = false; @@ -2037,16 +2029,19 @@ if (!this.worldObj.isRemote && !this.isDead) { this.worldObj.theProfiler.startSection("changeDimension"); + int enderLink = ((WorldServer)worldObj).getConfig().portals.enderLink; MinecraftServer minecraftserver = MinecraftServer.getServer(); int j = this.dimension; WorldServer worldserver = minecraftserver.worldServerForDimension(j); WorldServer worldserver1 = minecraftserver.worldServerForDimension(p_71027_1_); this.dimension = p_71027_1_; - if (j == 1 && p_71027_1_ == 1) + if (j == enderLink && p_71027_1_ == enderLink) { - worldserver1 = minecraftserver.worldServerForDimension(0); - this.dimension = 0; +// worldserver1 = minecraftserver.worldServerForDimension(0); +// this.dimension = 0; + setDead(); + return; } this.worldObj.removeEntity(this); @@ -2060,7 +2055,7 @@ { entity.copyDataFrom(this, true); - if (j == 1 && p_71027_1_ == 1) + if (j == enderLink && p_71027_1_ == enderLink) { ChunkCoordinates chunkcoordinates = worldserver1.getSpawnPoint(); chunkcoordinates.posY = this.worldObj.getTopSolidOrLiquidBlock(chunkcoordinates.posX, chunkcoordinates.posZ); diff --git a/src/main/java/net/minecraft/entity/item/EntityMinecart.java b/src/main/java/net/minecraft/entity/item/EntityMinecart.java index 71b2af2..27369ad 100644 --- a/src/main/java/net/minecraft/entity/item/EntityMinecart.java +++ b/src/main/java/net/minecraft/entity/item/EntityMinecart.java @@ -2,7 +2,9 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; + import java.util.List; + import net.minecraft.block.Block; import net.minecraft.block.BlockRailBase; import net.minecraft.block.material.Material; @@ -251,18 +253,10 @@ { this.portalCounter = i; this.timeUntilPortal = this.getPortalCooldown(); - byte b0; + int dim = ((WorldServer)worldObj).getConfig().portals.netherLink; - if (this.worldObj.provider.dimensionId == -1) - { - b0 = 0; - } - else - { - b0 = -1; - } - - this.travelToDimension(b0); + if(dim != Integer.MIN_VALUE) + this.travelToDimension(dim); } this.inPortal = false; diff --git a/src/main/java/net/minecraft/entity/player/EntityPlayerMP.java b/src/main/java/net/minecraft/entity/player/EntityPlayerMP.java index e979ff0..1c9b025 100644 --- a/src/main/java/net/minecraft/entity/player/EntityPlayerMP.java +++ b/src/main/java/net/minecraft/entity/player/EntityPlayerMP.java @@ -451,7 +451,8 @@ public void travelToDimension(int p_71027_1_) { - if (this.dimension == 1 && p_71027_1_ == 1) + int enderLink = ((WorldServer)worldObj).getConfig().portals.enderLink; + if (this.dimension == enderLink && p_71027_1_ == enderLink) { this.triggerAchievement(AchievementList.theEnd2); this.worldObj.removeEntity(this); @@ -460,7 +461,7 @@ } else { - if (this.dimension == 0 && p_71027_1_ == 1) + if (p_71027_1_ == enderLink) { this.triggerAchievement(AchievementList.theEnd); ChunkCoordinates chunkcoordinates = this.mcServer.worldServerForDimension(p_71027_1_).getEntrancePortalLocation(); @@ -469,8 +470,6 @@ { this.playerNetServerHandler.setPlayerLocation((double)chunkcoordinates.posX, (double)chunkcoordinates.posY, (double)chunkcoordinates.posZ, 0.0F, 0.0F); } - - p_71027_1_ = 1; } else { diff --git a/src/main/java/org/ultramine/server/MultiWorld.java b/src/main/java/org/ultramine/server/MultiWorld.java index 0dc2ea1..26cf2db 100644 --- a/src/main/java/org/ultramine/server/MultiWorld.java +++ b/src/main/java/org/ultramine/server/MultiWorld.java @@ -178,12 +178,9 @@ @SideOnly(Side.CLIENT) public void handleClientWorldsInit() { - WorldConfig conf = new WorldConfig(); - conf.mobSpawn = new WorldConfig.MobSpawn(); - conf.settings = new WorldConfig.Settings(); - conf.chunkLoading = new WorldConfig.ChunkLoading(); for(WorldServer world : server.worldServers) { + WorldConfig conf = getDefaultClientConfig(world); world.setConfig(conf); String name = resolveNameForDim(world.provider.dimensionId); dimToWorldMap.put(world.provider.dimensionId, world); @@ -234,11 +231,7 @@ @SideOnly(Side.CLIENT) public void onClientInitDimension(WorldServer world) { - WorldConfig conf = new WorldConfig(); - conf.mobSpawn = new WorldConfig.MobSpawn(); - conf.settings = new WorldConfig.Settings(); - conf.chunkLoading = new WorldConfig.ChunkLoading(); - + WorldConfig conf = getDefaultClientConfig(world); world.setConfig(conf); String name = resolveNameForDim(world.provider.dimensionId); dimToWorldMap.put(world.provider.dimensionId, world); @@ -258,6 +251,21 @@ return name; } + @SideOnly(Side.CLIENT) + private WorldConfig getDefaultClientConfig(WorldServer world) + { + WorldConfig conf = new WorldConfig(); + conf.mobSpawn = new WorldConfig.MobSpawn(); + conf.settings = new WorldConfig.Settings(); + conf.chunkLoading = new WorldConfig.ChunkLoading(); + conf.portals = new WorldConfig.Portals(); + + conf.portals.netherLink = world.provider.dimensionId == -1 ? 0 : -1; + conf.portals.enderLink = world.provider.dimensionId == 1 ? 0 : 1; + + return conf; + } + @SideOnly(Side.SERVER) private WorldSettings makeSettings(WorldInfo wi, WorldConfig conf) { diff --git a/src/main/java/org/ultramine/server/WorldsConfig.java b/src/main/java/org/ultramine/server/WorldsConfig.java index e54d60a..4557ca5 100644 --- a/src/main/java/org/ultramine/server/WorldsConfig.java +++ b/src/main/java/org/ultramine/server/WorldsConfig.java @@ -17,6 +17,7 @@ public Border[] borders; public ChunkLoading chunkLoading; public LoadBalancer loadBalancer; + public Portals portals; public static class Generation { @@ -123,5 +124,11 @@ } } } + + public static class Portals + { + public int netherLink = Integer.MIN_VALUE; + public int enderLink = Integer.MIN_VALUE; + } } } diff --git a/src/main/resources/org/ultramine/defaults/defaultworlds.yml b/src/main/resources/org/ultramine/defaults/defaultworlds.yml index cc4a1ab..8da0fa6 100644 --- a/src/main/resources/org/ultramine/defaults/defaultworlds.yml +++ b/src/main/resources/org/ultramine/defaults/defaultworlds.yml @@ -90,15 +90,22 @@ chunkLoading: <<: *global_cl chunkCacheSize: 4096 + portals: + netherLink: -1 + enderLink: 1 world_nether: <<: *global dimension: -1 generation: <<: *global_gen providerID: -1 + portals: + netherLink: 1 world_the_end: <<: *global dimension: 1 generation: <<: *global_gen providerID: 1 + portals: + enderLink: 1 #Vanilla logic, ender link is the same as current ender dimension