Readdaed teleporter sensitive versions of the teleport function

Added per-world list of custom teleporters, Modders, use World.Load to populate this list.
Changed the definition of our version schemes.
This commit is contained in:
LexManos 2012-11-02 22:16:32 -07:00
parent 0f3b030a1d
commit 2f0dcebbf9
3 changed files with 61 additions and 21 deletions

View File

@ -7,10 +7,10 @@ package net.minecraftforge.common;
public class ForgeVersion
{
//This number is incremented every Minecraft version, and never reset
//This number is incremented every time we remove deprecated code/major API changes, never reset
public static final int majorVersion = 6;
//This number is incremented every official release, and reset every Minecraft version
public static final int minorVersion = 0;
//This number is incremented every minecraft release, never reset
public static final int minorVersion = 2;
//This number is incremented every time a interface changes or new major feature is added, and reset every Minecraft version
public static final int revisionVersion = 1;
//This number is incremented every time Jenkins builds Forge, and never reset. Should always be 0 in the repo code.

View File

@ -29,7 +29,16 @@
var7.entityId = par1EntityPlayerMP.entityId;
WorldServer var8 = this.mcServer.worldServerForDimension(par1EntityPlayerMP.dimension);
this.func_72381_a(var7, par1EntityPlayerMP, var8);
@@ -367,6 +375,7 @@
@@ -363,14 +371,20 @@
public void transferPlayerToDimension(EntityPlayerMP par1EntityPlayerMP, int par2)
{
+ transferPlayerToDimension(par1EntityPlayerMP, par2, mcServer.worldServerForDimension(par2).func_85176_s());
+ }
+
+ public void transferPlayerToDimension(EntityPlayerMP par1EntityPlayerMP, int par2, Teleporter teleporter)
+ {
int var3 = par1EntityPlayerMP.dimension;
WorldServer var4 = this.mcServer.worldServerForDimension(par1EntityPlayerMP.dimension);
par1EntityPlayerMP.dimension = par2;
WorldServer var5 = this.mcServer.worldServerForDimension(par1EntityPlayerMP.dimension);
@ -37,13 +46,23 @@
par1EntityPlayerMP.playerNetServerHandler.sendPacketToPlayer(new Packet9Respawn(par1EntityPlayerMP.dimension, (byte)par1EntityPlayerMP.worldObj.difficultySetting, var5.getWorldInfo().getTerrainType(), var5.getHeight(), par1EntityPlayerMP.theItemInWorldManager.getGameType()));
var4.removeEntity(par1EntityPlayerMP);
par1EntityPlayerMP.isDead = false;
@@ -391,38 +400,18 @@
- this.transferEntityToWorld(par1EntityPlayerMP, var3, var4, var5);
+ this.transferEntityToWorld(par1EntityPlayerMP, var3, var4, var5, teleporter);
this.func_72375_a(par1EntityPlayerMP, var4);
par1EntityPlayerMP.playerNetServerHandler.setPlayerLocation(par1EntityPlayerMP.posX, par1EntityPlayerMP.posY, par1EntityPlayerMP.posZ, par1EntityPlayerMP.rotationYaw, par1EntityPlayerMP.rotationPitch);
par1EntityPlayerMP.theItemInWorldManager.setWorld(var5);
@@ -391,38 +405,23 @@
*/
public void transferEntityToWorld(Entity par1Entity, int par2, WorldServer par3WorldServer, WorldServer par4WorldServer)
{
- double var5 = par1Entity.posX;
- double var7 = par1Entity.posZ;
- double var9 = 8.0D;
+ transferEntityToWorld(par1Entity, par2, par3WorldServer, par4WorldServer, par4WorldServer.func_85176_s());
+ }
+
+ public void transferEntityToWorld(Entity par1Entity, int par2, WorldServer par3WorldServer, WorldServer par4WorldServer, Teleporter teleporter)
+ {
+ WorldProvider pOld = par3WorldServer.provider;
+ WorldProvider pNew = par4WorldServer.provider;
+ double moveFactor = pOld.getMovementFactor() / pNew.getMovementFactor();
@ -82,3 +101,12 @@
{
ChunkCoordinates var18;
@@ -459,7 +458,7 @@
par4WorldServer.spawnEntityInWorld(par1Entity);
par1Entity.setLocationAndAngles(var5, par1Entity.posY, var7, par1Entity.rotationYaw, par1Entity.rotationPitch);
par4WorldServer.updateEntityWithOptionalForce(par1Entity, false);
- par4WorldServer.func_85176_s().placeInPortal(par1Entity, var11, var13, var15, var17);
+ teleporter.placeInPortal(par1Entity, var11, var13, var15, var17);
}
par3WorldServer.theProfiler.endSection();

View File

@ -21,17 +21,18 @@
public class WorldServer extends World
{
@@ -45,6 +52,9 @@
@@ -45,6 +52,10 @@
/** An IntHashMap of entity IDs (integers) to their Entity objects. */
private IntHashMap entityIdMap;
+ /** Stores the recently processed (lighting) chunks */
+ protected Set<ChunkCoordIntPair> doneChunks = new HashSet<ChunkCoordIntPair>();
+ public List<Teleporter> customTeleporters = new ArrayList<Teleporter>();
+
public WorldServer(MinecraftServer par1MinecraftServer, ISaveHandler par2ISaveHandler, String par3Str, int par4, WorldSettings par5WorldSettings, Profiler par6Profiler)
{
super(par2ISaveHandler, par3Str, par5WorldSettings, WorldProvider.getProviderForDimension(par4), par6Profiler);
@@ -68,6 +78,7 @@
@@ -68,6 +79,7 @@
}
this.field_85177_Q = new Teleporter(this);
@ -39,7 +40,18 @@
}
/**
@@ -184,10 +195,7 @@
@@ -131,6 +143,10 @@
this.villageSiegeObj.tick();
this.theProfiler.endStartSection("portalForcer");
this.field_85177_Q.func_85189_a(this.getTotalWorldTime());
+ for (Teleporter tele : customTeleporters)
+ {
+ tele.func_85189_a(getTotalWorldTime());
+ }
this.theProfiler.endSection();
this.sendAndApplyBlockEvents();
}
@@ -184,10 +200,7 @@
private void resetRainAndThunder()
{
@ -51,7 +63,7 @@
}
public boolean areAllPlayersAsleep()
@@ -258,6 +266,14 @@
@@ -258,6 +271,14 @@
int var1 = 0;
int var2 = 0;
Iterator var3 = this.activeChunkSet.iterator();
@ -66,7 +78,7 @@
while (var3.hasNext())
{
@@ -268,14 +284,16 @@
@@ -268,14 +289,16 @@
Chunk var7 = this.getChunkFromChunkCoords(var4.chunkXPos, var4.chunkZPos);
this.moodSoundAndLightCheck(var5, var6, var7);
this.theProfiler.endStartSection("tickChunk");
@ -85,7 +97,7 @@
{
this.updateLCG = this.updateLCG * 3 + 1013904223;
var8 = this.updateLCG >> 2;
@@ -293,7 +311,7 @@
@@ -293,7 +316,7 @@
this.theProfiler.endStartSection("iceandsnow");
int var13;
@ -94,7 +106,7 @@
{
this.updateLCG = this.updateLCG * 3 + 1013904223;
var8 = this.updateLCG >> 2;
@@ -372,7 +390,8 @@
@@ -372,7 +395,8 @@
public void func_82740_a(int par1, int par2, int par3, int par4, int par5, int par6)
{
NextTickListEntry var7 = new NextTickListEntry(par1, par2, par3, par4);
@ -104,7 +116,7 @@
if (this.scheduledUpdatesAreImmediate && par4 > 0)
{
@@ -434,7 +453,7 @@
@@ -434,7 +458,7 @@
*/
public void updateEntities()
{
@ -113,7 +125,7 @@
{
if (this.updateEntityTick++ >= 1200)
{
@@ -483,7 +502,8 @@
@@ -483,7 +507,8 @@
this.pendingTickListEntries.remove(var4);
this.field_73064_N.remove(var4);
@ -123,7 +135,7 @@
if (this.checkChunksExist(var4.xCoord - var5, var4.yCoord - var5, var4.zCoord - var5, var4.xCoord + var5, var4.yCoord + var5, var4.zCoord + var5))
{
@@ -601,15 +621,27 @@
@@ -601,15 +626,27 @@
public List getAllTileEntityInBox(int par1, int par2, int par3, int par4, int par5, int par6)
{
ArrayList var7 = new ArrayList();
@ -160,7 +172,7 @@
}
}
@@ -620,6 +652,11 @@
@@ -620,6 +657,11 @@
* Called when checking if a certain block can be mined or not. The 'spawn safe zone' check is located here.
*/
public boolean canMineBlock(EntityPlayer par1EntityPlayer, int par2, int par3, int par4)
@ -172,7 +184,7 @@
{
int var5 = MathHelper.abs_int(par2 - this.worldInfo.getSpawnX());
int var6 = MathHelper.abs_int(par4 - this.worldInfo.getSpawnZ());
@@ -629,7 +666,7 @@
@@ -629,7 +671,7 @@
var6 = var5;
}
@ -181,7 +193,7 @@
}
protected void initialize(WorldSettings par1WorldSettings)
@@ -712,7 +749,7 @@
@@ -712,7 +754,7 @@
*/
protected void createBonusChest()
{
@ -190,7 +202,7 @@
for (int var2 = 0; var2 < 10; ++var2)
{
@@ -755,6 +792,7 @@
@@ -755,6 +797,7 @@
}
this.chunkProvider.saveChunks(par1, par2IProgressUpdate);
@ -198,7 +210,7 @@
}
}
@@ -766,6 +804,7 @@
@@ -766,6 +809,7 @@
this.checkSessionLock();
this.saveHandler.saveWorldInfoWithPlayer(this.worldInfo, this.mcServer.getConfigurationManager().getTagsFromLastWrite());
this.mapStorage.saveAllData();
@ -206,7 +218,7 @@
}
/**
@@ -996,4 +1035,9 @@
@@ -996,4 +1040,9 @@
{
return this.field_85177_Q;
}