Add chunk loading protection to WorldSever.getTileEntitiesIn, may prevent orphanced chunks and a CME in EntityPlayerMP. Note: The 'max' parameters are NON-inclusive.
This commit is contained in:
parent
97ef6a5d1f
commit
02e9b9d99c
2 changed files with 20 additions and 29 deletions
|
@ -27,17 +27,7 @@
|
||||||
{
|
{
|
||||||
this.func_71053_j();
|
this.func_71053_j();
|
||||||
this.field_71070_bA = this.field_71069_bz;
|
this.field_71070_bA = this.field_71069_bz;
|
||||||
@@ -264,7 +265,8 @@
|
@@ -294,6 +295,7 @@
|
||||||
if (chunk.func_150802_k())
|
|
||||||
{
|
|
||||||
list.add(chunk);
|
|
||||||
- list1.addAll(((WorldServer)this.field_70170_p).func_147486_a(chunkcoordintpair.field_77276_a * 16, 0, chunkcoordintpair.field_77275_b * 16, chunkcoordintpair.field_77276_a * 16 + 16, 256, chunkcoordintpair.field_77275_b * 16 + 16));
|
|
||||||
+ list1.addAll(((WorldServer)this.field_70170_p).func_147486_a(chunkcoordintpair.field_77276_a * 16, 0, chunkcoordintpair.field_77275_b * 16, chunkcoordintpair.field_77276_a * 16 + 16, 256, chunkcoordintpair.field_77275_b * 16 + 15));
|
|
||||||
+ //BugFix: 16 makes it load an extra chunk, which isn't associated with a player, which makes it not unload unless a player walks near it.
|
|
||||||
iterator1.remove();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -294,6 +296,7 @@
|
|
||||||
for (Chunk chunk1 : list)
|
for (Chunk chunk1 : list)
|
||||||
{
|
{
|
||||||
this.func_71121_q().func_73039_n().func_85172_a(this, chunk1);
|
this.func_71121_q().func_73039_n().func_85172_a(this, chunk1);
|
||||||
|
@ -45,7 +35,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -424,6 +427,7 @@
|
@@ -424,6 +426,7 @@
|
||||||
|
|
||||||
public void func_70645_a(DamageSource p_70645_1_)
|
public void func_70645_a(DamageSource p_70645_1_)
|
||||||
{
|
{
|
||||||
|
@ -53,7 +43,7 @@
|
||||||
if (this.field_70170_p.func_82736_K().func_82766_b("showDeathMessages"))
|
if (this.field_70170_p.func_82736_K().func_82766_b("showDeathMessages"))
|
||||||
{
|
{
|
||||||
Team team = this.func_96124_cp();
|
Team team = this.func_96124_cp();
|
||||||
@@ -447,7 +451,20 @@
|
@@ -447,7 +450,20 @@
|
||||||
|
|
||||||
if (!this.field_70170_p.func_82736_K().func_82766_b("keepInventory"))
|
if (!this.field_70170_p.func_82736_K().func_82766_b("keepInventory"))
|
||||||
{
|
{
|
||||||
|
@ -74,7 +64,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
for (ScoreObjective scoreobjective : this.field_70170_p.func_96441_U().func_96520_a(IScoreObjectiveCriteria.field_96642_c))
|
for (ScoreObjective scoreobjective : this.field_70170_p.func_96441_U().func_96520_a(IScoreObjectiveCriteria.field_96642_c))
|
||||||
@@ -461,6 +478,7 @@
|
@@ -461,6 +477,7 @@
|
||||||
if (entitylivingbase != null)
|
if (entitylivingbase != null)
|
||||||
{
|
{
|
||||||
EntityList.EntityEggInfo entitylist$entityegginfo = (EntityList.EntityEggInfo)EntityList.field_75627_a.get(Integer.valueOf(EntityList.func_75619_a(entitylivingbase)));
|
EntityList.EntityEggInfo entitylist$entityegginfo = (EntityList.EntityEggInfo)EntityList.field_75627_a.get(Integer.valueOf(EntityList.func_75619_a(entitylivingbase)));
|
||||||
|
@ -82,7 +72,7 @@
|
||||||
|
|
||||||
if (entitylist$entityegginfo != null)
|
if (entitylist$entityegginfo != null)
|
||||||
{
|
{
|
||||||
@@ -831,6 +849,7 @@
|
@@ -831,6 +848,7 @@
|
||||||
{
|
{
|
||||||
if (p_71064_1_ != null)
|
if (p_71064_1_ != null)
|
||||||
{
|
{
|
||||||
|
|
|
@ -127,23 +127,24 @@
|
||||||
int k = 0;
|
int k = 0;
|
||||||
|
|
||||||
if (this.func_175707_a(nextticklistentry1.field_180282_a.func_177982_a(-k, -k, -k), nextticklistentry1.field_180282_a.func_177982_a(k, k, k)))
|
if (this.func_175707_a(nextticklistentry1.field_180282_a.func_177982_a(-k, -k, -k), nextticklistentry1.field_180282_a.func_177982_a(k, k, k)))
|
||||||
@@ -696,22 +720,39 @@
|
@@ -696,22 +720,40 @@
|
||||||
{
|
{
|
||||||
List<TileEntity> list = Lists.<TileEntity>newArrayList();
|
List<TileEntity> list = Lists.<TileEntity>newArrayList();
|
||||||
|
|
||||||
- for (int i = 0; i < this.field_147482_g.size(); ++i)
|
- for (int i = 0; i < this.field_147482_g.size(); ++i)
|
||||||
+ //Forge: Optomize this loop to only grab from the chunks it needs
|
+ //Forge: Optimize this loop to only grab from the chunks it needs
|
||||||
+ for (int x = (p_147486_1_ >> 4); x <= (p_147486_4_ >> 4); x++)
|
+ for (int x = p_147486_1_; x < p_147486_4_; x += 16)
|
||||||
{
|
{
|
||||||
- TileEntity tileentity = (TileEntity)this.field_147482_g.get(i);
|
- TileEntity tileentity = (TileEntity)this.field_147482_g.get(i);
|
||||||
- BlockPos blockpos = tileentity.func_174877_v();
|
- BlockPos blockpos = tileentity.func_174877_v();
|
||||||
-
|
-
|
||||||
- if (blockpos.func_177958_n() >= p_147486_1_ && blockpos.func_177956_o() >= p_147486_2_ && blockpos.func_177952_p() >= p_147486_3_ && blockpos.func_177958_n() < p_147486_4_ && blockpos.func_177956_o() < p_147486_5_ && blockpos.func_177952_p() < p_147486_6_)
|
- if (blockpos.func_177958_n() >= p_147486_1_ && blockpos.func_177956_o() >= p_147486_2_ && blockpos.func_177952_p() >= p_147486_3_ && blockpos.func_177958_n() < p_147486_4_ && blockpos.func_177956_o() < p_147486_5_ && blockpos.func_177952_p() < p_147486_6_)
|
||||||
+ for (int z = (p_147486_3_ >> 4); z <= (p_147486_6_ >> 4); z++)
|
+ for (int z = p_147486_3_; z < p_147486_6_; z += 16)
|
||||||
{
|
{
|
||||||
- list.add(tileentity);
|
- list.add(tileentity);
|
||||||
+ Chunk chunk = this.func_72964_e(x, z);
|
+ if (!this.func_175680_a(x >> 4, z >> 4, true)) continue; //Prevent loading extra chunks to just read data. This causes orphaned chunks that never unload.
|
||||||
+ if (chunk != null)
|
+ Chunk chunk = this.func_72964_e(x >> 4, z >> 4);
|
||||||
|
+ if (chunk != null && !chunk.func_76621_g())
|
||||||
+ {
|
+ {
|
||||||
+ for (TileEntity entity : chunk.func_177434_r().values())
|
+ for (TileEntity entity : chunk.func_177434_r().values())
|
||||||
+ {
|
+ {
|
||||||
|
@ -151,7 +152,7 @@
|
||||||
+ {
|
+ {
|
||||||
+ BlockPos pos = entity.func_174877_v();
|
+ BlockPos pos = entity.func_174877_v();
|
||||||
+ if (pos.func_177958_n() >= p_147486_1_ && pos.func_177956_o() >= p_147486_2_ && pos.func_177952_p() >= p_147486_3_ &&
|
+ if (pos.func_177958_n() >= p_147486_1_ && pos.func_177956_o() >= p_147486_2_ && pos.func_177952_p() >= p_147486_3_ &&
|
||||||
+ pos.func_177958_n() <= p_147486_4_ && pos.func_177956_o() <= p_147486_5_ && pos.func_177952_p() <= p_147486_6_)
|
+ pos.func_177958_n() < p_147486_4_ && pos.func_177956_o() < p_147486_5_ && pos.func_177952_p() < p_147486_6_)
|
||||||
+ {
|
+ {
|
||||||
+ list.add(entity);
|
+ list.add(entity);
|
||||||
+ }
|
+ }
|
||||||
|
@ -174,7 +175,7 @@
|
||||||
return !this.field_73061_a.func_175579_a(this, p_175660_2_, p_175660_1_) && this.func_175723_af().func_177746_a(p_175660_2_);
|
return !this.field_73061_a.func_175579_a(this, p_175660_2_, p_175660_1_) && this.func_175723_af().func_177746_a(p_175660_2_);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -777,6 +818,7 @@
|
@@ -777,6 +819,7 @@
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -182,7 +183,7 @@
|
||||||
this.field_72987_B = true;
|
this.field_72987_B = true;
|
||||||
WorldChunkManager worldchunkmanager = this.field_73011_w.func_177499_m();
|
WorldChunkManager worldchunkmanager = this.field_73011_w.func_177499_m();
|
||||||
List<BiomeGenBase> list = worldchunkmanager.func_76932_a();
|
List<BiomeGenBase> list = worldchunkmanager.func_76932_a();
|
||||||
@@ -822,7 +864,7 @@
|
@@ -822,7 +865,7 @@
|
||||||
|
|
||||||
protected void func_73047_i()
|
protected void func_73047_i()
|
||||||
{
|
{
|
||||||
|
@ -191,7 +192,7 @@
|
||||||
|
|
||||||
for (int i = 0; i < 10; ++i)
|
for (int i = 0; i < 10; ++i)
|
||||||
{
|
{
|
||||||
@@ -859,6 +901,7 @@
|
@@ -859,6 +902,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
this.field_73020_y.func_73151_a(p_73044_1_, p_73044_2_);
|
this.field_73020_y.func_73151_a(p_73044_1_, p_73044_2_);
|
||||||
|
@ -199,7 +200,7 @@
|
||||||
|
|
||||||
for (Chunk chunk : Lists.newArrayList(this.field_73059_b.func_152380_a()))
|
for (Chunk chunk : Lists.newArrayList(this.field_73059_b.func_152380_a()))
|
||||||
{
|
{
|
||||||
@@ -892,6 +935,7 @@
|
@@ -892,6 +936,7 @@
|
||||||
this.field_72986_A.func_176135_e(this.func_175723_af().func_177732_i());
|
this.field_72986_A.func_176135_e(this.func_175723_af().func_177732_i());
|
||||||
this.field_73019_z.func_75755_a(this.field_72986_A, this.field_73061_a.func_71203_ab().func_72378_q());
|
this.field_73019_z.func_75755_a(this.field_72986_A, this.field_73061_a.func_71203_ab().func_72378_q());
|
||||||
this.field_72988_C.func_75744_a();
|
this.field_72988_C.func_75744_a();
|
||||||
|
@ -207,7 +208,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
public void func_72923_a(Entity p_72923_1_)
|
public void func_72923_a(Entity p_72923_1_)
|
||||||
@@ -947,6 +991,7 @@
|
@@ -947,6 +992,7 @@
|
||||||
public Explosion func_72885_a(Entity p_72885_1_, double p_72885_2_, double p_72885_4_, double p_72885_6_, float p_72885_8_, boolean p_72885_9_, boolean p_72885_10_)
|
public Explosion func_72885_a(Entity p_72885_1_, double p_72885_2_, double p_72885_4_, double p_72885_6_, float p_72885_8_, boolean p_72885_9_, boolean p_72885_10_)
|
||||||
{
|
{
|
||||||
Explosion explosion = new Explosion(this, p_72885_1_, p_72885_2_, p_72885_4_, p_72885_6_, p_72885_8_, p_72885_9_, p_72885_10_);
|
Explosion explosion = new Explosion(this, p_72885_1_, p_72885_2_, p_72885_4_, p_72885_6_, p_72885_8_, p_72885_9_, p_72885_10_);
|
||||||
|
@ -215,7 +216,7 @@
|
||||||
explosion.func_77278_a();
|
explosion.func_77278_a();
|
||||||
explosion.func_77279_a(false);
|
explosion.func_77279_a(false);
|
||||||
|
|
||||||
@@ -1026,19 +1071,23 @@
|
@@ -1026,19 +1072,23 @@
|
||||||
this.field_73061_a.func_71203_ab().func_148537_a(new S2BPacketChangeGameState(8, this.field_73017_q), this.field_73011_w.func_177502_q());
|
this.field_73061_a.func_71203_ab().func_148537_a(new S2BPacketChangeGameState(8, this.field_73017_q), this.field_73011_w.func_177502_q());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -243,7 +244,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1104,6 +1153,11 @@
|
@@ -1104,6 +1154,11 @@
|
||||||
return this.field_73061_a.func_152345_ab();
|
return this.field_73061_a.func_152345_ab();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue