From cf3bc6a9d9b7152eea444822e5f3e055458fd84f Mon Sep 17 00:00:00 2001 From: LexManos Date: Tue, 18 Sep 2012 21:31:17 -0700 Subject: [PATCH] Redirect a lot of functions through WorldProvider for Mystcraft, allowing them to be overriden by the provider. --- .../common/net/minecraft/src/World.java.patch | 270 ++++++++++++++++-- .../minecraft/src/WorldProvider.java.patch | 133 ++++++++- .../net/minecraft/src/WorldServer.java.patch | 48 +++- .../net/minecraft/src/WorldClient.java.patch | 15 + 4 files changed, 435 insertions(+), 31 deletions(-) create mode 100644 patches/minecraft/net/minecraft/src/WorldClient.java.patch diff --git a/patches/common/net/minecraft/src/World.java.patch b/patches/common/net/minecraft/src/World.java.patch index 11135561f..a2f80ae6a 100644 --- a/patches/common/net/minecraft/src/World.java.patch +++ b/patches/common/net/minecraft/src/World.java.patch @@ -23,7 +23,19 @@ /** * boolean; if true updates scheduled by scheduleBlockUpdate happen immediately */ -@@ -167,6 +181,7 @@ +@@ -132,6 +146,11 @@ + * Gets the biome for a given set of x/z coordinates + */ + public BiomeGenBase getBiomeGenForCoords(int par1, int par2) ++ { ++ return provider.getBiomeGenForCoords(par1, par2); ++ } ++ ++ public BiomeGenBase getBiomeGenForCoordsBody(int par1, int par2) + { + if (this.blockExists(par1, 0, par2)) + { +@@ -167,6 +186,7 @@ this.chunkProvider = this.createChunkProvider(); this.calculateInitialSkylight(); this.calculateInitialWeather(); @@ -31,7 +43,7 @@ } public World(ISaveHandler par1ISaveHandler, String par2Str, WorldSettings par3WorldSettings, WorldProvider par4WorldProvider, Profiler par5Profiler) -@@ -213,6 +228,7 @@ +@@ -213,6 +233,7 @@ this.calculateInitialSkylight(); this.calculateInitialWeather(); @@ -39,7 +51,7 @@ } /** -@@ -269,7 +285,8 @@ +@@ -269,7 +290,8 @@ */ public boolean isAirBlock(int par1, int par2, int par3) { @@ -49,7 +61,7 @@ } /** -@@ -278,7 +295,8 @@ +@@ -278,7 +300,8 @@ public boolean blockHasTileEntity(int par1, int par2, int par3) { int var4 = this.getBlockId(par1, par2, par3); @@ -59,7 +71,16 @@ } /** -@@ -1012,7 +1030,7 @@ +@@ -980,7 +1003,7 @@ + */ + public boolean isDaytime() + { +- return this.skylightSubtracted < 4; ++ return provider.isDaytime(); + } + + /** +@@ -1012,7 +1035,7 @@ int var12 = this.getBlockMetadata(var8, var9, var10); Block var13 = Block.blocksList[var11]; @@ -68,7 +89,7 @@ { MovingObjectPosition var14 = var13.collisionRayTrace(this, var8, var9, var10, par1Vec3, par2Vec3); -@@ -1212,6 +1230,12 @@ +@@ -1212,6 +1235,12 @@ */ public void playSoundAtEntity(Entity par1Entity, String par2Str, float par3, float par4) { @@ -81,7 +102,7 @@ if (par1Entity != null && par2Str != null) { Iterator var5 = this.worldAccesses.iterator(); -@@ -1312,6 +1336,11 @@ +@@ -1312,6 +1341,11 @@ EntityPlayer var5 = (EntityPlayer)par1Entity; this.playerEntities.add(var5); this.updateAllPlayersSleepingFlag(); @@ -93,7 +114,33 @@ } this.getChunkFromChunkCoords(var2, var3).addEntity(par1Entity); -@@ -1736,7 +1765,7 @@ +@@ -1563,6 +1597,12 @@ + * Calculates the color for the skybox + */ + public Vec3 getSkyColor(Entity par1Entity, float par2) ++ { ++ return provider.getSkyColor(par1Entity, par2); ++ } ++ ++ @SideOnly(Side.CLIENT) ++ public Vec3 getSkyColorBody(Entity par1Entity, float par2) + { + float var3 = this.getCelestialAngle(par2); + float var4 = MathHelper.cos(var3 * (float)Math.PI * 2.0F) * 2.0F + 0.5F; +@@ -1658,6 +1698,12 @@ + @SideOnly(Side.CLIENT) + public Vec3 drawClouds(float par1) + { ++ return provider.drawClouds(par1); ++ } ++ ++ @SideOnly(Side.CLIENT) ++ public Vec3 drawCloudsBody(float par1) ++ { + float var2 = this.getCelestialAngle(par1); + float var3 = MathHelper.cos(var2 * (float)Math.PI * 2.0F) * 2.0F + 0.5F; + +@@ -1736,7 +1782,7 @@ { int var5 = var3.getBlockID(par1, var4, par2); @@ -102,7 +149,20 @@ { return var4 + 1; } -@@ -1893,7 +1922,7 @@ +@@ -1751,6 +1797,12 @@ + * How bright are stars in the sky + */ + public float getStarBrightness(float par1) ++ { ++ return provider.getStarBrightness(par1); ++ } ++ ++ @SideOnly(Side.CLIENT) ++ public float getStarBrightnessBody(float par1) + { + float var2 = this.getCelestialAngle(par1); + float var3 = 1.0F - (MathHelper.cos(var2 * (float)Math.PI * 2.0F) * 2.0F + 0.25F); +@@ -1893,7 +1945,7 @@ if (var8 != null) { @@ -111,7 +171,7 @@ } } } -@@ -1903,6 +1932,10 @@ +@@ -1903,6 +1955,10 @@ if (!this.entityRemoval.isEmpty()) { @@ -122,7 +182,7 @@ this.loadedTileEntityList.removeAll(this.entityRemoval); this.entityRemoval.clear(); } -@@ -1923,7 +1956,9 @@ +@@ -1923,7 +1979,9 @@ { this.loadedTileEntityList.add(var9); } @@ -133,7 +193,7 @@ if (this.chunkExists(var9.xCoord >> 4, var9.zCoord >> 4)) { Chunk var10 = this.getChunkFromChunkCoords(var9.xCoord >> 4, var9.zCoord >> 4); -@@ -1933,8 +1968,6 @@ +@@ -1933,8 +1991,6 @@ var10.setChunkBlockTileEntity(var9.xCoord & 15, var9.yCoord, var9.zCoord & 15, var9); } } @@ -142,7 +202,7 @@ } } -@@ -1947,13 +1980,13 @@ +@@ -1947,13 +2003,13 @@ public void addTileEntity(Collection par1Collection) { @@ -163,7 +223,7 @@ } } -@@ -1974,8 +2007,14 @@ +@@ -1974,8 +2030,14 @@ int var3 = MathHelper.floor_double(par1Entity.posX); int var4 = MathHelper.floor_double(par1Entity.posZ); byte var5 = 32; @@ -180,7 +240,7 @@ { par1Entity.lastTickPosX = par1Entity.posX; par1Entity.lastTickPosY = par1Entity.posY; -@@ -2210,6 +2249,14 @@ +@@ -2210,6 +2272,14 @@ { return true; } @@ -195,7 +255,7 @@ } } } -@@ -2516,25 +2563,21 @@ +@@ -2516,25 +2586,21 @@ */ public void setBlockTileEntity(int par1, int par2, int par3, TileEntity par4TileEntity) { @@ -236,7 +296,7 @@ } } -@@ -2543,27 +2586,10 @@ +@@ -2543,27 +2609,10 @@ */ public void removeBlockTileEntity(int par1, int par2, int par3) { @@ -268,7 +328,7 @@ } } -@@ -2589,7 +2615,8 @@ +@@ -2589,7 +2638,8 @@ */ public boolean isBlockNormalCube(int par1, int par2, int par3) { @@ -278,7 +338,7 @@ } /** -@@ -2597,8 +2624,7 @@ +@@ -2597,8 +2647,7 @@ */ public boolean doesBlockHaveSolidTopSurface(int par1, int par2, int par3) { @@ -288,7 +348,7 @@ } /** -@@ -2614,7 +2640,7 @@ +@@ -2614,7 +2663,7 @@ if (var5 != null && !var5.isEmpty()) { Block var6 = Block.blocksList[this.getBlockId(par1, par2, par3)]; @@ -297,7 +357,74 @@ } else { -@@ -3041,7 +3067,7 @@ +@@ -2645,8 +2694,7 @@ + */ + public void setAllowedSpawnTypes(boolean par1, boolean par2) + { +- this.spawnHostileMobs = par1; +- this.spawnPeacefulMobs = par2; ++ provider.setAllowedSpawnTypes(par1, par2); + } + + /** +@@ -2662,6 +2710,11 @@ + */ + private void calculateInitialWeather() + { ++ provider.calculateInitialWeather(); ++ } ++ ++ public void calculateInitialWeatherBody() ++ { + if (this.worldInfo.isRaining()) + { + this.rainingStrength = 1.0F; +@@ -2677,6 +2730,11 @@ + * Updates all weather states. + */ + protected void updateWeather() ++ { ++ provider.updateWeather(); ++ } ++ ++ public void updateWeatherBody() + { + if (!this.provider.hasNoSky) + { +@@ -2779,7 +2837,7 @@ + + public void toggleRain() + { +- this.worldInfo.setRainTime(1); ++ provider.toggleRain(); + } + + protected void setActivePlayerChunksAndCheckLight() +@@ -2891,6 +2949,11 @@ + */ + public boolean canBlockFreeze(int par1, int par2, int par3, boolean par4) + { ++ return provider.canBlockFreeze(par1, par2, par3, par4); ++ } ++ ++ public boolean canBlockFreezeBody(int par1, int par2, int par3, boolean par4) ++ { + BiomeGenBase var5 = this.getBiomeGenForCoords(par1, par3); + float var6 = var5.getFloatTemperature(); + +@@ -2948,6 +3011,11 @@ + * Tests whether or not snow can be placed at a given location + */ + public boolean canSnowAt(int par1, int par2, int par3) ++ { ++ return provider.canSnowAt(par1, par2, par3); ++ } ++ ++ public boolean canSnowAtBody(int par1, int par2, int par3) + { + BiomeGenBase var4 = this.getBiomeGenForCoords(par1, par3); + float var5 = var4.getFloatTemperature(); +@@ -3041,7 +3109,7 @@ private int computeBlockLightValue(int par1, int par2, int par3, int par4, int par5, int par6) { @@ -306,7 +433,7 @@ int var8 = this.getSavedLightValue(EnumSkyBlock.Block, par2 - 1, par3, par4) - par6; int var9 = this.getSavedLightValue(EnumSkyBlock.Block, par2 + 1, par3, par4) - par6; int var10 = this.getSavedLightValue(EnumSkyBlock.Block, par2, par3 - 1, par4) - par6; -@@ -3309,10 +3335,10 @@ +@@ -3309,10 +3377,10 @@ public List getEntitiesWithinAABBExcludingEntity(Entity par1Entity, AxisAlignedBB par2AxisAlignedBB) { this.entitiesWithinAABBExcludingEntity.clear(); @@ -321,7 +448,7 @@ for (int var7 = var3; var7 <= var4; ++var7) { -@@ -3333,10 +3359,10 @@ +@@ -3333,10 +3401,10 @@ */ public List getEntitiesWithinAABB(Class par1Class, AxisAlignedBB par2AxisAlignedBB) { @@ -336,7 +463,7 @@ ArrayList var7 = new ArrayList(); for (int var8 = var3; var8 <= var4; ++var8) -@@ -3425,11 +3451,14 @@ +@@ -3425,11 +3493,14 @@ */ public void addLoadedEntities(List par1List) { @@ -354,7 +481,7 @@ } } -@@ -3466,7 +3495,10 @@ +@@ -3466,7 +3537,10 @@ { var9 = null; } @@ -366,7 +493,47 @@ return par1 > 0 && var9 == null && var10.canPlaceBlockOnSide(this, par2, par3, par4, par6); } } -@@ -3707,7 +3739,10 @@ +@@ -3656,7 +3730,7 @@ + */ + public void setWorldTime(long par1) + { +- this.worldInfo.setWorldTime(par1); ++ provider.setWorldTime(par1); + } + + /** +@@ -3664,12 +3738,12 @@ + */ + public long getSeed() + { +- return this.worldInfo.getSeed(); ++ return provider.getSeed(); + } + + public long getWorldTime() + { +- return this.worldInfo.getWorldTime(); ++ return provider.getWorldTime(); + } + + /** +@@ -3677,13 +3751,13 @@ + */ + public ChunkCoordinates getSpawnPoint() + { +- return new ChunkCoordinates(this.worldInfo.getSpawnX(), this.worldInfo.getSpawnY(), this.worldInfo.getSpawnZ()); ++ return provider.getSpawnPoint(); + } + + @SideOnly(Side.CLIENT) + public void setSpawnLocation(int par1, int par2, int par3) + { +- this.worldInfo.setSpawnPosition(par1, par2, par3); ++ provider.setSpawnPoint(par1, par2, par3); + } + + @SideOnly(Side.CLIENT) +@@ -3707,7 +3781,10 @@ if (!this.loadedEntityList.contains(par1Entity)) { @@ -378,7 +545,56 @@ } } -@@ -3964,4 +3999,65 @@ +@@ -3715,6 +3792,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) ++ { ++ return provider.canMineBlock(par1EntityPlayer, par2, par3, par4); ++ } ++ ++ public boolean canMineBlockBody(EntityPlayer par1EntityPlayer, int par2, int par3, int par4) + { + return true; + } +@@ -3827,8 +3909,7 @@ + */ + public boolean isBlockHighHumidity(int par1, int par2, int par3) + { +- BiomeGenBase var4 = this.getBiomeGenForCoords(par1, par3); +- return var4.isHighHumidity(); ++ return provider.isBlockHighHumidity(par1, par2, par3); + } + + /** +@@ -3882,7 +3963,7 @@ + */ + public int getHeight() + { +- return 256; ++ return provider.getHeight(); + } + + /** +@@ -3890,7 +3971,7 @@ + */ + public int getActualHeight() + { +- return this.provider.hasNoSky ? 128 : 256; ++ return provider.getActualHeight(); + } + + /** +@@ -3936,7 +4017,7 @@ + */ + public double getHorizon() + { +- return this.worldInfo.getTerrainType().getHorizon(this); ++ return provider.getHorizon(); + } + + /** +@@ -3964,4 +4045,65 @@ var7.destroyBlockPartially(par1, par2, par3, par4, par5); } } diff --git a/patches/common/net/minecraft/src/WorldProvider.java.patch b/patches/common/net/minecraft/src/WorldProvider.java.patch index 9ff06b612..ed55f52d3 100644 --- a/patches/common/net/minecraft/src/WorldProvider.java.patch +++ b/patches/common/net/minecraft/src/WorldProvider.java.patch @@ -26,7 +26,7 @@ } @SideOnly(Side.CLIENT) -@@ -254,4 +258,110 @@ +@@ -254,4 +258,241 @@ * Returns the dimension's name, e.g. "The End", "Nether", or "Overworld". */ public abstract String getDimensionName(); @@ -135,5 +135,136 @@ + } + + return var5; ++ } ++ ++ ++ /*======================================= Start Moved From World =========================================*/ ++ ++ public BiomeGenBase getBiomeGenForCoords(int x, int z) ++ { ++ return worldObj.getBiomeGenForCoordsBody(x, z); ++ } ++ ++ public boolean isDaytime() ++ { ++ return worldObj.skylightSubtracted < 4; ++ } ++ ++ @SideOnly(Side.CLIENT) ++ public Vec3 getSkyColor(Entity cameraEntity, float partialTicks) ++ { ++ return worldObj.getSkyColorBody(cameraEntity, partialTicks); ++ } ++ ++ @SideOnly(Side.CLIENT) ++ public Vec3 drawClouds(float partialTicks) ++ { ++ return worldObj.drawCloudsBody(partialTicks); ++ } ++ ++ @SideOnly(Side.CLIENT) ++ public float getStarBrightness(float par1) ++ { ++ return worldObj.getStarBrightnessBody(par1); ++ } ++ ++ public void setAllowedSpawnTypes(boolean allowHostile, boolean allowPeaceful) ++ { ++ worldObj.spawnHostileMobs = allowHostile; ++ worldObj.spawnPeacefulMobs = allowPeaceful; ++ } ++ ++ public void calculateInitialWeather() ++ { ++ worldObj.calculateInitialWeatherBody(); ++ } ++ ++ public void updateWeather() ++ { ++ worldObj.updateWeatherBody(); ++ } ++ ++ public void toggleRain() ++ { ++ worldObj.worldInfo.setRainTime(1); ++ } ++ ++ public boolean canBlockFreeze(int x, int y, int z, boolean byWater) ++ { ++ return worldObj.canBlockFreezeBody(x, y, z, byWater); ++ } ++ ++ public boolean canSnowAt(int x, int y, int z) ++ { ++ return worldObj.canSnowAtBody(x, y, z); ++ } ++ ++ public void setWorldTime(long time) ++ { ++ worldObj.worldInfo.setWorldTime(time); ++ } ++ ++ public long getSeed() ++ { ++ return worldObj.worldInfo.getSeed(); ++ } ++ ++ public long getWorldTime() ++ { ++ return worldObj.worldInfo.getWorldTime(); ++ } ++ ++ public ChunkCoordinates getSpawnPoint() ++ { ++ WorldInfo info = worldObj.worldInfo; ++ return new ChunkCoordinates(info.getSpawnX(), info.getSpawnY(), info.getSpawnZ()); ++ } ++ ++ public void setSpawnPoint(int x, int y, int z) ++ { ++ worldObj.worldInfo.setSpawnPosition(x, y, z); ++ } ++ ++ public boolean canMineBlock(EntityPlayer player, int x, int y, int z) ++ { ++ return worldObj.canMineBlockBody(player, x, y, z); ++ } ++ ++ public boolean isBlockHighHumidity(int x, int y, int z) ++ { ++ return worldObj.getBiomeGenForCoords(x, z).isHighHumidity(); ++ } ++ ++ public int getHeight() ++ { ++ return 256; ++ } ++ ++ public int getActualHeight() ++ { ++ return hasNoSky ? 128 : 256; ++ } ++ ++ public double getHorizon() ++ { ++ return worldObj.worldInfo.getTerrainType().getHorizon(worldObj); ++ } ++ ++ public void resetRainAndThunder() ++ { ++ worldObj.worldInfo.setRainTime(0); ++ worldObj.worldInfo.setRaining(false); ++ worldObj.worldInfo.setThunderTime(0); ++ worldObj.worldInfo.setThundering(false); ++ } ++ ++ public boolean canDoLightning(Chunk chunk) ++ { ++ return true; ++ } ++ ++ public boolean canDoRainSnowIce(Chunk chunk) ++ { ++ return true; + } } diff --git a/patches/common/net/minecraft/src/WorldServer.java.patch b/patches/common/net/minecraft/src/WorldServer.java.patch index e20b3a26f..717d08e45 100644 --- a/patches/common/net/minecraft/src/WorldServer.java.patch +++ b/patches/common/net/minecraft/src/WorldServer.java.patch @@ -18,7 +18,37 @@ } /** -@@ -559,15 +563,27 @@ +@@ -179,10 +183,7 @@ + + private void resetRainAndThunder() + { +- this.worldInfo.setRainTime(0); +- this.worldInfo.setRaining(false); +- this.worldInfo.setThunderTime(0); +- this.worldInfo.setThundering(false); ++ provider.resetRainAndThunder(); + } + + public boolean areAllPlayersAsleep() +@@ -270,7 +271,7 @@ + int var10; + int var11; + +- if (this.rand.nextInt(100000) == 0 && this.isRaining() && this.isThundering()) ++ if (provider.canDoLightning(var7) && this.rand.nextInt(100000) == 0 && this.isRaining() && this.isThundering()) + { + this.updateLCG = this.updateLCG * 3 + 1013904223; + var8 = this.updateLCG >> 2; +@@ -288,7 +289,7 @@ + this.theProfiler.endStartSection("iceandsnow"); + int var13; + +- if (this.rand.nextInt(16) == 0) ++ if (provider.canDoRainSnowIce(var7) && this.rand.nextInt(16) == 0) + { + this.updateLCG = this.updateLCG * 3 + 1013904223; + var8 = this.updateLCG >> 2; +@@ -559,15 +560,27 @@ public List getAllTileEntityInBox(int par1, int par2, int par3, int par4, int par5, int par6) { ArrayList var7 = new ArrayList(); @@ -55,7 +85,19 @@ } } -@@ -587,7 +603,7 @@ +@@ -578,6 +591,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) ++ { ++ return super.canMineBlock(par1EntityPlayer, par2, par3, par4); ++ } ++ ++ public boolean canMineBlockBody(EntityPlayer par1EntityPlayer, int par2, int par3, int par4) + { + int var5 = MathHelper.abs_int(par2 - this.worldInfo.getSpawnX()); + int var6 = MathHelper.abs_int(par4 - this.worldInfo.getSpawnZ()); +@@ -587,7 +605,7 @@ var6 = var5; } @@ -64,7 +106,7 @@ } protected void initialize(WorldSettings par1WorldSettings) -@@ -713,6 +729,7 @@ +@@ -713,6 +731,7 @@ } this.chunkProvider.saveChunks(par1, par2IProgressUpdate); diff --git a/patches/minecraft/net/minecraft/src/WorldClient.java.patch b/patches/minecraft/net/minecraft/src/WorldClient.java.patch new file mode 100644 index 000000000..2481c224c --- /dev/null +++ b/patches/minecraft/net/minecraft/src/WorldClient.java.patch @@ -0,0 +1,15 @@ +--- ../src_base/minecraft/net/minecraft/src/WorldClient.java ++++ ../src_work/minecraft/net/minecraft/src/WorldClient.java +@@ -265,6 +265,12 @@ + */ + protected void updateWeather() + { ++ super.updateWeather(); ++ } ++ ++ @Override ++ public void updateWeatherBody() ++ { + if (!this.provider.hasNoSky) + { + if (this.lastLightningBolt > 0)