diff --git a/forge/patches/minecraft/net/minecraft/client/Minecraft.java.patch b/forge/patches/minecraft/net/minecraft/client/Minecraft.java.patch new file mode 100644 index 000000000..74de46a99 --- /dev/null +++ b/forge/patches/minecraft/net/minecraft/client/Minecraft.java.patch @@ -0,0 +1,97 @@ +--- ../src_base/minecraft/net/minecraft/client/Minecraft.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src_work/minecraft/net/minecraft/client/Minecraft.java 0000-00-00 00:00:00.000000000 -0000 +@@ -1615,70 +1615,47 @@ + + public void usePortal(int i) + { ++ usePortal(i, new Teleporter()); ++ } ++ public void usePortal(int i, Teleporter teleporter) ++ { + int j = thePlayer.dimension; + thePlayer.dimension = i; + theWorld.setEntityDead(thePlayer); + thePlayer.isDead = false; ++ WorldProvider pNew = WorldProvider.getProviderForDimension(i); ++ WorldProvider pOld = WorldProvider.getProviderForDimension(j); + double d = thePlayer.posX; + double d1 = thePlayer.posZ; +- double d2 = 1.0D; +- if (j > -1 && thePlayer.dimension == -1) +- { +- d2 = 0.125D; +- } +- else if (j == -1 && thePlayer.dimension > -1) +- { +- d2 = 8D; +- } ++ double d2 = pOld.getMovementFactor() / pNew.getMovementFactor(); + d *= d2; + d1 *= d2; +- if (thePlayer.dimension == -1) ++ ++ World world = new World(theWorld, pNew); ++ if (thePlayer.isEntityAlive()) + { +- thePlayer.setLocationAndAngles(d, thePlayer.posY, d1, thePlayer.rotationYaw, thePlayer.rotationPitch); +- if (thePlayer.isEntityAlive()) +- { +- theWorld.updateEntityWithOptionalForce(thePlayer, false); +- } +- World world = null; +- world = new World(theWorld, WorldProvider.getProviderForDimension(thePlayer.dimension)); +- changeWorld(world, "Entering the Nether", thePlayer); +- } +- else if (thePlayer.dimension == 0) +- { +- if (thePlayer.isEntityAlive()) +- { +- thePlayer.setLocationAndAngles(d, thePlayer.posY, d1, thePlayer.rotationYaw, thePlayer.rotationPitch); +- theWorld.updateEntityWithOptionalForce(thePlayer, false); +- } +- World world1 = null; +- world1 = new World(theWorld, WorldProvider.getProviderForDimension(thePlayer.dimension)); +- if (j == -1) +- { +- changeWorld(world1, "Leaving the Nether", thePlayer); +- } +- else +- { +- changeWorld(world1, "Leaving the End", thePlayer); +- } ++ theWorld.updateEntityWithOptionalForce(thePlayer, false); + } +- else ++ ++ if (thePlayer.dimension == 1) + { +- World world2 = null; +- world2 = new World(theWorld, WorldProvider.getProviderForDimension(thePlayer.dimension)); +- ChunkCoordinates chunkcoordinates = world2.getEntrancePortalLocation(); ++ ChunkCoordinates chunkcoordinates = world.getEntrancePortalLocation(); + d = chunkcoordinates.posX; + thePlayer.posY = chunkcoordinates.posY; + d1 = chunkcoordinates.posZ; +- thePlayer.setLocationAndAngles(d, thePlayer.posY, d1, 90F, 0.0F); +- if (thePlayer.isEntityAlive()) +- { +- world2.updateEntityWithOptionalForce(thePlayer, false); +- } +- changeWorld(world2, "Entering the End", thePlayer); ++ } ++ ++ if (thePlayer.dimension == 0) ++ { ++ changeWorld(world, pOld.getDepartMessage(), thePlayer); ++ } ++ else ++ { ++ changeWorld(world, pNew.getWelcomeMessage(), thePlayer); + } + thePlayer.worldObj = theWorld; + System.out.println((new StringBuilder()).append("Teleported to ").append(theWorld.worldProvider.worldType).toString()); +- if (thePlayer.isEntityAlive() && j < 1) ++ if (thePlayer.isEntityAlive()) + { + thePlayer.setLocationAndAngles(d, thePlayer.posY, d1, thePlayer.rotationYaw, thePlayer.rotationPitch); + theWorld.updateEntityWithOptionalForce(thePlayer, false); diff --git a/forge/patches/minecraft/net/minecraft/src/SaveOldDir.java.patch b/forge/patches/minecraft/net/minecraft/src/SaveOldDir.java.patch new file mode 100644 index 000000000..ab665a02f --- /dev/null +++ b/forge/patches/minecraft/net/minecraft/src/SaveOldDir.java.patch @@ -0,0 +1,23 @@ +--- ../src_base/minecraft/net/minecraft/src/SaveOldDir.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src_work/minecraft/net/minecraft/src/SaveOldDir.java 0000-00-00 00:00:00.000000000 -0000 +@@ -13,18 +13,12 @@ + public IChunkLoader getChunkLoader(WorldProvider worldprovider) + { + File file = getSaveDirectory(); +- if (worldprovider instanceof WorldProviderHell) ++ if (worldprovider.getSaveFolder() != null) + { +- File file1 = new File(file, "DIM-1"); ++ File file1 = new File(file, worldprovider.getSaveFolder()); + file1.mkdirs(); + return new ThreadedChunkLoader(file1); + } +- if (worldprovider instanceof WorldProviderEnd) +- { +- File file2 = new File(file, "DIM1"); +- file2.mkdirs(); +- return new ThreadedChunkLoader(file2); +- } + else + { + return new ThreadedChunkLoader(file); diff --git a/forge/patches/minecraft/net/minecraft/src/WorldProvider.java.patch b/forge/patches/minecraft/net/minecraft/src/WorldProvider.java.patch new file mode 100644 index 000000000..eaf6b5a92 --- /dev/null +++ b/forge/patches/minecraft/net/minecraft/src/WorldProvider.java.patch @@ -0,0 +1,71 @@ +--- ../src_base/minecraft/net/minecraft/src/WorldProvider.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src_work/minecraft/net/minecraft/src/WorldProvider.java 0000-00-00 00:00:00.000000000 -0000 +@@ -1,5 +1,7 @@ + package net.minecraft.src; + ++import net.minecraft.src.forge.DimensionManager; ++ + public abstract class WorldProvider + { + public World worldObj; +@@ -142,22 +144,7 @@ + + public static WorldProvider getProviderForDimension(int i) + { +- if (i == -1) +- { +- return new WorldProviderHell(); +- } +- if (i == 0) +- { +- return new WorldProviderSurface(); +- } +- if (i == 1) +- { +- return new WorldProviderEnd(); +- } +- else +- { +- return null; +- } ++ return DimensionManager.getProvider(i); + } + + public float getCloudHeight() +@@ -196,4 +183,36 @@ + { + return terrainType != EnumWorldType.FLAT ? 0.03125D : 1.0D; + } ++ ++ /** ++ * Returns the sub-folder of the world folder that this WorldProvider saves to. ++ * EXA: DIM1, DIM-1 ++ * @return The sub-folder name to save this world's chunks to. ++ */ ++ public abstract String getSaveFolder(); ++ ++ /** ++ * A message to display to the user when they transfer to this dimension. ++ * ++ * @return The message to be displayed ++ */ ++ public abstract String getWelcomeMessage(); ++ ++ /** ++ * A Message to display to the user when they transfer out of this dismension. ++ * ++ * @return The message to be displayed ++ */ ++ public abstract String getDepartMessage(); ++ ++ /** ++ * The dimensions movement factor. Relative to normal overworld. ++ * It is applied to the players position when they transfer dimensions. ++ * Exa: Nether movement is 8.0 ++ * @return The movement factor ++ */ ++ public double getMovementFactor() ++ { ++ return 1.0; ++ } + } diff --git a/forge/patches/minecraft/net/minecraft/src/WorldProviderEnd.java.patch b/forge/patches/minecraft/net/minecraft/src/WorldProviderEnd.java.patch new file mode 100644 index 000000000..9db1bb0dd --- /dev/null +++ b/forge/patches/minecraft/net/minecraft/src/WorldProviderEnd.java.patch @@ -0,0 +1,25 @@ +--- ../src_base/minecraft/net/minecraft/src/WorldProviderEnd.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src_work/minecraft/net/minecraft/src/WorldProviderEnd.java 0000-00-00 00:00:00.000000000 -0000 +@@ -87,4 +87,22 @@ + { + return 50; + } ++ ++ @Override ++ public String getSaveFolder() ++ { ++ return "DIM1"; ++ } ++ ++ @Override ++ public String getWelcomeMessage() ++ { ++ return "Entering the End"; ++ } ++ ++ @Override ++ public String getDepartMessage() ++ { ++ return "Leaving the End"; ++ } + } diff --git a/forge/patches/minecraft/net/minecraft/src/WorldProviderHell.java.patch b/forge/patches/minecraft/net/minecraft/src/WorldProviderHell.java.patch new file mode 100644 index 000000000..49905f5df --- /dev/null +++ b/forge/patches/minecraft/net/minecraft/src/WorldProviderHell.java.patch @@ -0,0 +1,31 @@ +--- ../src_base/minecraft/net/minecraft/src/WorldProviderHell.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src_work/minecraft/net/minecraft/src/WorldProviderHell.java 0000-00-00 00:00:00.000000000 -0000 +@@ -49,4 +49,28 @@ + { + return false; + } ++ ++ @Override ++ public String getSaveFolder() ++ { ++ return "DIM-1"; ++ } ++ ++ @Override ++ public String getWelcomeMessage() ++ { ++ return "Entering the Nether"; ++ } ++ ++ @Override ++ public String getDepartMessage() ++ { ++ return "Leaving the Nether"; ++ } ++ ++ @Override ++ public double getMovementFactor() ++ { ++ return 8.0; ++ } + } diff --git a/forge/patches/minecraft/net/minecraft/src/WorldProviderSurface.java.patch b/forge/patches/minecraft/net/minecraft/src/WorldProviderSurface.java.patch new file mode 100644 index 000000000..f9269e6fe --- /dev/null +++ b/forge/patches/minecraft/net/minecraft/src/WorldProviderSurface.java.patch @@ -0,0 +1,25 @@ +--- ../src_base/minecraft/net/minecraft/src/WorldProviderSurface.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src_work/minecraft/net/minecraft/src/WorldProviderSurface.java 0000-00-00 00:00:00.000000000 -0000 +@@ -5,4 +5,22 @@ + public WorldProviderSurface() + { + } ++ ++ @Override ++ public String getSaveFolder() ++ { ++ return null; ++ } ++ ++ @Override ++ public String getWelcomeMessage() ++ { ++ return null; ++ } ++ ++ @Override ++ public String getDepartMessage() ++ { ++ return null; ++ } + }