Readded patch to allow for use of custom teleporter for transfering dimensions.

This commit is contained in:
LexManos 2012-08-14 15:03:40 -07:00
parent 111c5021de
commit 3b18bfae40
2 changed files with 86 additions and 0 deletions

View File

@ -64,6 +64,11 @@ public class DimensionManager
return dimensions.get(dim);
}
public static WorldProvider getProvider(int dim)
{
return getWorld(dim).provider;
}
public static Integer[] getIDs()
{
return dimensions.keySet().toArray(new Integer[0]);

View File

@ -0,0 +1,81 @@
--- ../src_base/common/net/minecraft/src/ServerConfigurationManager.java
+++ ../src_work/common/net/minecraft/src/ServerConfigurationManager.java
@@ -15,6 +15,7 @@
import cpw.mods.fml.common.network.FMLNetworkHandler;
import cpw.mods.fml.common.network.NetworkRegistry;
import net.minecraft.server.MinecraftServer;
+import net.minecraftforge.common.DimensionManager;
public abstract class ServerConfigurationManager
{
@@ -317,6 +318,7 @@
EntityPlayerMP var6 = new EntityPlayerMP(this.mcServer, this.mcServer.worldServerForDimension(par1EntityPlayerMP.dimension), par1EntityPlayerMP.username, (ItemInWorldManager)var5);
var6.clonePlayer(par1EntityPlayerMP, par3);
+ var6.dimension = par2;
var6.entityId = par1EntityPlayerMP.entityId;
var6.serverForThisPlayer = par1EntityPlayerMP.serverForThisPlayer;
WorldServer var7 = this.mcServer.worldServerForDimension(par1EntityPlayerMP.dimension);
@@ -359,6 +361,11 @@
public void transferPlayerToDimension(EntityPlayerMP par1EntityPlayerMP, int par2)
{
+ transferPlayerToDimension(par1EntityPlayerMP, par2, new Teleporter());
+ }
+
+ public void transferPlayerToDimension(EntityPlayerMP par1EntityPlayerMP, int par2, Teleporter teleporter)
+ {
int var3 = par1EntityPlayerMP.dimension;
WorldServer var4 = this.mcServer.worldServerForDimension(par1EntityPlayerMP.dimension);
par1EntityPlayerMP.dimension = par2;
@@ -366,33 +373,14 @@
par1EntityPlayerMP.serverForThisPlayer.sendPacketToPlayer(new Packet9Respawn(par1EntityPlayerMP.dimension, (byte)par1EntityPlayerMP.worldObj.difficultySetting, var5.getWorldInfo().getTerrainType(), var5.getHeight(), par1EntityPlayerMP.theItemInWorldManager.getGameType()));
var4.removeEntity(par1EntityPlayerMP);
par1EntityPlayerMP.isDead = false;
- double var6 = par1EntityPlayerMP.posX;
- double var8 = par1EntityPlayerMP.posZ;
- double var10 = 8.0D;
-
- if (par1EntityPlayerMP.dimension == -1)
- {
- var6 /= var10;
- var8 /= var10;
- par1EntityPlayerMP.setLocationAndAngles(var6, par1EntityPlayerMP.posY, var8, par1EntityPlayerMP.rotationYaw, par1EntityPlayerMP.rotationPitch);
-
- if (par1EntityPlayerMP.isEntityAlive())
- {
- var4.updateEntityWithOptionalForce(par1EntityPlayerMP, false);
- }
- }
- else if (par1EntityPlayerMP.dimension == 0)
- {
- var6 *= var10;
- var8 *= var10;
- par1EntityPlayerMP.setLocationAndAngles(var6, par1EntityPlayerMP.posY, var8, par1EntityPlayerMP.rotationYaw, par1EntityPlayerMP.rotationPitch);
-
- if (par1EntityPlayerMP.isEntityAlive())
- {
- var4.updateEntityWithOptionalForce(par1EntityPlayerMP, false);
- }
- }
- else
+
+ WorldProvider pOld = DimensionManager.getProvider(var3);
+ WorldProvider pNew = DimensionManager.getProvider(par2);
+ double moveFactor = pOld.getMovementFactor() / pNew.getMovementFactor();
+ double var6 = par1EntityPlayerMP.posX * moveFactor;
+ double var8 = par1EntityPlayerMP.posZ * moveFactor;
+
+ if (par1EntityPlayerMP.dimension == 1)
{
ChunkCoordinates var12 = var5.getEntrancePortalLocation();
var6 = (double)var12.posX;
@@ -416,7 +404,7 @@
var5.spawnEntityInWorld(par1EntityPlayerMP);
par1EntityPlayerMP.setLocationAndAngles(var6, par1EntityPlayerMP.posY, var8, par1EntityPlayerMP.rotationYaw, par1EntityPlayerMP.rotationPitch);
var5.updateEntityWithOptionalForce(par1EntityPlayerMP, false);
- (new Teleporter()).placeInPortal(var5, par1EntityPlayerMP);
+ teleporter.placeInPortal(var5, par1EntityPlayerMP);
}
}