Gabriel Harris-Rouquette authored and LexManos committed 2018-09-26 11:08:30 -07:00
1 parent 8ace535995
commit c20a5e8805
6 files changed
+251 -122

No files matched your search

@@ -46,7 +46,23 @@
public int func_145782_y()
{
return this.field_145783_c;
@@ -1053,7 +1065,7 @@
@@ -344,6 +356,7 @@
this.field_70165_t = p_70107_1_;
this.field_70163_u = p_70107_3_;
this.field_70161_v = p_70107_5_;
+ if (this.isAddedToWorld) this.field_70170_p.func_72866_a(this, false); // Forge - Process chunk registration after moving.
float f = this.field_70130_N / 2.0F;
float f1 = this.field_70131_O;
this.func_174826_a(new AxisAlignedBB(p_70107_1_ - (double)f, p_70107_3_, p_70107_5_ - (double)f, p_70107_1_ + (double)f, p_70107_3_ + (double)f1, p_70107_5_ + (double)f));
@@ -995,6 +1008,7 @@
this.field_70165_t = (axisalignedbb.field_72340_a + axisalignedbb.field_72336_d) / 2.0D;
this.field_70163_u = axisalignedbb.field_72338_b;
this.field_70161_v = (axisalignedbb.field_72339_c + axisalignedbb.field_72334_f) / 2.0D;
+ if (this.isAddedToWorld) this.field_70170_p.func_72866_a(this, false); // Forge - Process chunk registration after moving.
}
protected SoundEvent func_184184_Z()
@@ -1053,7 +1067,7 @@
protected void func_180429_a(BlockPos p_180429_1_, Block p_180429_2_)
{
@@ -55,7 +71,7 @@
if (this.field_70170_p.func_180495_p(p_180429_1_.func_177984_a()).func_177230_c() == Blocks.field_150431_aC)
{
@@ -1259,6 +1271,7 @@
@@ -1259,6 +1273,7 @@
BlockPos blockpos = new BlockPos(i, j, k);
IBlockState iblockstate = this.field_70170_p.func_180495_p(blockpos);
@@ -63,7 +79,7 @@
if (iblockstate.func_185901_i() != EnumBlockRenderType.INVISIBLE)
{
this.field_70170_p.func_175688_a(EnumParticleTypes.BLOCK_CRACK, this.field_70165_t + ((double)this.field_70146_Z.nextFloat() - 0.5D) * (double)this.field_70130_N, this.func_174813_aQ().field_72338_b + 0.1D, this.field_70161_v + ((double)this.field_70146_Z.nextFloat() - 0.5D) * (double)this.field_70130_N, -this.field_70159_w * 4.0D, 1.5D, -this.field_70179_y * 4.0D, Block.func_176210_f(iblockstate));
@@ -1277,12 +1290,12 @@
@@ -1277,12 +1292,12 @@
BlockPos blockpos = new BlockPos(this.field_70165_t, d0, this.field_70161_v);
IBlockState iblockstate = this.field_70170_p.func_180495_p(blockpos);
@@ -80,7 +96,15 @@
}
else
{
@@ -1707,6 +1720,7 @@
@@ -1382,6 +1397,7 @@
this.field_70126_B -= 360.0F;
}
+ this.field_70170_p.func_72964_e((int) Math.floor(this.field_70165_t) >> 4, (int) Math.floor(this.field_70161_v) >> 4); // Forge - ensure target chunk is loaded.
this.func_70107_b(this.field_70165_t, this.field_70163_u, this.field_70161_v);
this.func_70101_b(p_70080_7_, p_70080_8_);
}
@@ -1707,6 +1723,7 @@
{
p_189511_1_.func_74757_a("Glowing", this.field_184238_ar);
}
@@ -88,7 +112,7 @@
if (!this.field_184236_aF.isEmpty())
{
@@ -1720,6 +1734,9 @@
@@ -1720,6 +1737,9 @@
p_189511_1_.func_74782_a("Tags", nbttaglist);
}
@@ -98,7 +122,7 @@
this.func_70014_b(p_189511_1_);
if (this.func_184207_aI())
@@ -1826,7 +1843,11 @@
@@ -1826,7 +1846,11 @@
this.func_174810_b(p_70020_1_.func_74767_n("Silent"));
this.func_189654_d(p_70020_1_.func_74767_n("NoGravity"));
this.func_184195_f(p_70020_1_.func_74767_n("Glowing"));
@@ -110,7 +134,7 @@
if (p_70020_1_.func_150297_b("Tags", 9))
{
this.field_184236_aF.clear();
@@ -1918,7 +1939,10 @@
@@ -1918,7 +1942,10 @@
{
EntityItem entityitem = new EntityItem(this.field_70170_p, this.field_70165_t, this.field_70163_u + (double)p_70099_2_, this.field_70161_v, p_70099_1_);
entityitem.func_174869_p();
@@ -122,7 +146,7 @@
return entityitem;
}
}
@@ -1985,6 +2009,7 @@
@@ -1985,6 +2012,7 @@
this.field_70159_w = 0.0D;
this.field_70181_x = 0.0D;
this.field_70179_y = 0.0D;
@@ -130,7 +154,7 @@
this.func_70071_h_();
if (this.func_184218_aH())
@@ -2032,6 +2057,7 @@
@@ -2032,6 +2060,7 @@
}
}
@@ -138,7 +162,7 @@
if (p_184205_2_ || this.func_184228_n(p_184205_1_) && p_184205_1_.func_184219_q(this))
{
if (this.func_184218_aH())
@@ -2067,6 +2093,7 @@
@@ -2067,6 +2096,7 @@
if (this.field_184239_as != null)
{
Entity entity = this.field_184239_as;
@@ -146,7 +170,7 @@
this.field_184239_as = null;
entity.func_184225_p(this);
}
@@ -2509,8 +2536,16 @@
@@ -2509,8 +2539,16 @@
@Nullable
public Entity func_184204_a(int p_184204_1_)
{
@@ -163,7 +187,7 @@
this.field_70170_p.field_72984_F.func_76320_a("changeDimension");
MinecraftServer minecraftserver = this.func_184102_h();
int i = this.field_71093_bK;
@@ -2518,7 +2553,7 @@
@@ -2518,7 +2556,7 @@
WorldServer worldserver1 = minecraftserver.func_71218_a(p_184204_1_);
this.field_71093_bK = p_184204_1_;
@@ -172,7 +196,7 @@
{
worldserver1 = minecraftserver.func_71218_a(0);
this.field_71093_bK = 0;
@@ -2529,22 +2564,23 @@
@@ -2529,22 +2567,23 @@
this.field_70170_p.field_72984_F.func_76320_a("reposition");
BlockPos blockpos;
@@ -201,7 +225,7 @@
{
d0 = MathHelper.func_151237_a(d0 * 8.0D, worldserver1.func_175723_af().func_177726_b() + 16.0D, worldserver1.func_175723_af().func_177728_d() - 16.0D);
d1 = MathHelper.func_151237_a(d1 * 8.0D, worldserver1.func_175723_af().func_177736_c() + 16.0D, worldserver1.func_175723_af().func_177733_e() - 16.0D);
@@ -2554,8 +2590,7 @@
@@ -2554,8 +2593,7 @@
d1 = (double)MathHelper.func_76125_a((int)d1, -29999872, 29999872);
float f = this.field_70177_z;
this.func_70012_b(d0, this.field_70163_u, d1, 90.0F, 0.0F);
@@ -211,7 +235,7 @@
blockpos = new BlockPos(this);
}
@@ -2567,7 +2602,7 @@
@@ -2567,7 +2605,7 @@
{
entity.func_180432_n(this);
@@ -220,7 +244,7 @@
{
BlockPos blockpos1 = worldserver1.func_175672_r(worldserver1.func_175694_M());
entity.func_174828_a(blockpos1, entity.field_70177_z, entity.field_70125_A);
@@ -2604,7 +2639,7 @@
@@ -2604,7 +2642,7 @@
public float func_180428_a(Explosion p_180428_1_, World p_180428_2_, BlockPos p_180428_3_, IBlockState p_180428_4_)
{
@@ -229,12 +253,47 @@
}
public boolean func_174816_a(Explosion p_174816_1_, World p_174816_2_, BlockPos p_174816_3_, IBlockState p_174816_4_, float p_174816_5_)
@@ -2901,6 +2936,183 @@
@@ -2901,6 +2939,218 @@
EnchantmentHelper.func_151385_b(p_174815_1_, p_174815_2_);
}
+ /* ================================== Forge Start =====================================*/
+ /**
+ * Internal use for keeping track of entities that are tracked by a world, to
+ * allow guarantees that entity position changes will force a chunk load, avoiding
+ * potential issues with entity desyncing and bad chunk data.
+ */
+ private boolean isAddedToWorld;
+
+ /**
+ * Gets whether this entity has been added to a world (for tracking). Specifically
+ * between the times when an entity is added to a world and the entity being removed
+ * from the world's tracked lists. See {@link World#onEntityAdded(Entity)} and
+ * {@link World#onEntityRemoved(Entity)}.
+ *
+ * @return True if this entity is being tracked by a world
+ */
+ public final boolean isAddedToWorld() { return this.isAddedToWorld; }
+
+ /**
+ * Called after the entity has been added to the world's
+ * ticking list. Can be overriden, but needs to call super
+ * to prevent MC-136995.
+ */
+ public void onAddedToWorld() {
+ this.isAddedToWorld = true;
+ }
+
+ /**
+ * Called after the entity has been removed to the world's
+ * ticking list. Can be overriden, but needs to call super
+ * to prevent MC-136995.
+ */
+ public void onRemovedFromWorld() {
+ this.isAddedToWorld = false;
+ }
+
+ /**
+ * Returns a NBTTagCompound that can be used to store custom data for this entity.
+ * It will be written, and read from disc, so it persists over world saves.
+ * @return A NBTTagCompound
@@ -0,0 +1,10 @@
--- ../src-base/minecraft/net/minecraft/entity/EntityLeashKnot.java
+++ ../src-work/minecraft/net/minecraft/entity/EntityLeashKnot.java
@@ -43,6 +43,7 @@
this.field_70165_t = (double)this.field_174861_a.func_177958_n() + 0.5D;
this.field_70163_u = (double)this.field_174861_a.func_177956_o() + 0.5D;
this.field_70161_v = (double)this.field_174861_a.func_177952_p() + 0.5D;
+ if (this.isAddedToWorld()) this.field_70170_p.func_72866_a(this, false); // Forge - Process chunk registration after moving.
}
public void func_174859_a(EnumFacing p_174859_1_)
@@ -1,6 +1,14 @@
--- ../src-base/minecraft/net/minecraft/entity/monster/EntityShulker.java
+++ ../src-work/minecraft/net/minecraft/entity/monster/EntityShulker.java
@@ -426,6 +426,13 @@
@@ -311,6 +311,7 @@
this.field_70165_t = (double)blockpos.func_177958_n() + 0.5D;
this.field_70163_u = (double)blockpos.func_177956_o();
this.field_70161_v = (double)blockpos.func_177952_p() + 0.5D;
+ if (this.isAddedToWorld()) this.field_70170_p.func_72866_a(this, false); // Forge - Process chunk registration after moving.
this.field_70169_q = this.field_70165_t;
this.field_70167_r = this.field_70163_u;
this.field_70166_s = this.field_70161_v;
@@ -426,6 +427,13 @@
if (flag)
{
@@ -1,6 +1,20 @@
--- ../src-base/minecraft/net/minecraft/network/NetHandlerPlayServer.java
+++ ../src-work/minecraft/net/minecraft/network/NetHandlerPlayServer.java
@@ -671,7 +671,10 @@
@@ -377,11 +377,13 @@
}
entity.func_70080_a(d3, d4, d5, f, f1);
+ this.field_147369_b.func_70080_a(d3, d4, d5, f, f1); // Forge - Resync player position on vehicle moving
boolean flag2 = worldserver.func_184144_a(entity, entity.func_174813_aQ().func_186664_h(0.0625D)).isEmpty();
if (flag && (flag1 || !flag2))
{
entity.func_70080_a(d0, d1, d2, f, f1);
+ this.field_147369_b.func_70080_a(d0, d1, d2, f, f1); // Forge - Resync player position on vehicle moving
this.field_147371_a.func_179290_a(new SPacketMoveVehicle(entity));
return;
}
@@ -671,7 +673,10 @@
double d2 = this.field_147369_b.field_70161_v - ((double)blockpos.func_177952_p() + 0.5D);
double d3 = d0 * d0 + d1 * d1 + d2 * d2;
@@ -12,7 +26,7 @@
{
return;
}
@@ -729,7 +732,9 @@
@@ -729,7 +734,9 @@
if (blockpos.func_177956_o() < this.field_147367_d.func_71207_Z() - 1 || enumfacing != EnumFacing.UP && blockpos.func_177956_o() < this.field_147367_d.func_71207_Z())
{
@@ -23,7 +37,7 @@
{
this.field_147369_b.field_71134_c.func_187251_a(this.field_147369_b, worldserver, itemstack, enumhand, blockpos, enumfacing, p_184337_1_.func_187026_d(), p_184337_1_.func_187025_e(), p_184337_1_.func_187020_f());
}
@@ -933,7 +938,9 @@
@@ -933,7 +940,9 @@
}
else
{
@@ -34,7 +48,7 @@
this.field_147367_d.func_184103_al().func_148544_a(itextcomponent, false);
}
@@ -1066,6 +1073,7 @@
@@ -1066,6 +1075,7 @@
else if (p_147340_1_.func_149565_c() == CPacketUseEntity.Action.INTERACT_AT)
{
EnumHand enumhand1 = p_147340_1_.func_186994_b();
@@ -42,7 +56,7 @@
entity.func_184199_a(this.field_147369_b, p_147340_1_.func_179712_b(), enumhand1);
}
else if (p_147340_1_.func_149565_c() == CPacketUseEntity.Action.ATTACK)
@@ -1106,7 +1114,7 @@
@@ -1106,7 +1116,7 @@
return;
}
@@ -51,7 +65,7 @@
if (this.field_147367_d.func_71199_h())
{
@@ -1149,7 +1157,7 @@
@@ -1149,7 +1159,7 @@
{
ItemStack itemstack2 = this.field_147369_b.field_71070_bA.func_184996_a(p_147351_1_.func_149544_d(), p_147351_1_.func_149543_e(), p_147351_1_.func_186993_f(), this.field_147369_b);
@@ -1,6 +1,14 @@
--- ../src-base/minecraft/net/minecraft/world/World.java
+++ ../src-work/minecraft/net/minecraft/world/World.java
@@ -63,8 +63,15 @@
@@ -11,6 +11,7 @@
import java.util.Random;
import java.util.UUID;
import java.util.function.Supplier;
+
import javax.annotation.Nullable;
import net.minecraft.advancements.AdvancementManager;
import net.minecraft.advancements.FunctionManager;
@@ -63,8 +64,15 @@
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@@ -17,7 +25,7 @@
private int field_181546_a = 63;
protected boolean field_72999_e;
public final List<Entity> field_72996_f = Lists.<Entity>newArrayList();
@@ -108,6 +115,12 @@
@@ -108,6 +116,12 @@
private final WorldBorder field_175728_M;
int[] field_72994_J;
@@ -30,7 +38,7 @@
protected World(ISaveHandler p_i45749_1_, WorldInfo p_i45749_2_, WorldProvider p_i45749_3_, Profiler p_i45749_4_, boolean p_i45749_5_)
{
this.field_73021_x = Lists.newArrayList(this.field_184152_t);
@@ -122,6 +135,7 @@
@@ -122,6 +136,7 @@
this.field_73011_w = p_i45749_3_;
this.field_72995_K = p_i45749_5_;
this.field_175728_M = p_i45749_3_.func_177501_r();
@@ -38,7 +46,7 @@
}
public World func_175643_b()
@@ -131,6 +145,11 @@
@@ -131,6 +146,11 @@
public Biome func_180494_b(final BlockPos p_180494_1_)
{
@@ -50,7 +58,7 @@
if (this.func_175667_e(p_180494_1_))
{
Chunk chunk = this.func_175726_f(p_180494_1_);
@@ -207,7 +226,7 @@
@@ -207,7 +227,7 @@
public boolean func_175623_d(BlockPos p_175623_1_)
{
@@ -59,7 +67,7 @@
}
public boolean func_175667_e(BlockPos p_175667_1_)
@@ -308,24 +327,51 @@
@@ -308,24 +328,51 @@
else
{
Chunk chunk = this.func_175726_f(p_180501_1_);
@@ -114,7 +122,7 @@
this.func_184138_a(p_180501_1_, iblockstate, p_180501_2_, p_180501_3_);
}
@@ -342,8 +388,6 @@
@@ -342,8 +389,6 @@
{
this.func_190522_c(p_180501_1_, block);
}
@@ -123,7 +131,7 @@
}
}
}
@@ -358,7 +402,7 @@
@@ -358,7 +403,7 @@
IBlockState iblockstate = this.func_180495_p(p_175655_1_);
Block block = iblockstate.func_177230_c();
@@ -132,7 +140,7 @@
{
return false;
}
@@ -441,6 +485,9 @@
@@ -441,6 +486,9 @@
public void func_175685_c(BlockPos p_175685_1_, Block p_175685_2_, boolean p_175685_3_)
{
@@ -142,7 +150,7 @@
this.func_190524_a(p_175685_1_.func_177976_e(), p_175685_2_, p_175685_1_);
this.func_190524_a(p_175685_1_.func_177974_f(), p_175685_2_, p_175685_1_);
this.func_190524_a(p_175685_1_.func_177977_b(), p_175685_2_, p_175685_1_);
@@ -456,6 +503,11 @@
@@ -456,6 +504,11 @@
public void func_175695_a(BlockPos p_175695_1_, Block p_175695_2_, EnumFacing p_175695_3_)
{
@@ -154,7 +162,7 @@
if (p_175695_3_ != EnumFacing.WEST)
{
this.func_190524_a(p_175695_1_.func_177976_e(), p_175695_2_, p_175695_1_);
@@ -507,7 +559,7 @@
@@ -507,7 +560,7 @@
{
try
{
@@ -163,7 +171,7 @@
}
catch (Throwable var2)
{
@@ -527,11 +579,11 @@
@@ -527,11 +580,11 @@
{
IBlockState iblockstate = this.func_180495_p(p_190529_1_);
@@ -177,7 +185,7 @@
}
catch (Throwable throwable)
{
@@ -543,7 +595,7 @@
@@ -543,7 +596,7 @@
{
try
{
@@ -186,7 +194,7 @@
}
catch (Throwable var2)
{
@@ -588,7 +640,7 @@
@@ -588,7 +641,7 @@
{
IBlockState iblockstate = this.func_180495_p(blockpos1);
@@ -195,7 +203,7 @@
{
return false;
}
@@ -862,7 +914,7 @@
@@ -862,7 +915,7 @@
public boolean func_72935_r()
{
@@ -204,7 +212,7 @@
}
@Nullable
@@ -1065,6 +1117,13 @@
@@ -1065,6 +1118,13 @@
public void func_184148_a(@Nullable EntityPlayer p_184148_1_, double p_184148_2_, double p_184148_4_, double p_184148_6_, SoundEvent p_184148_8_, SoundCategory p_184148_9_, float p_184148_10_, float p_184148_11_)
{
@@ -218,7 +226,7 @@
for (int i = 0; i < this.field_73021_x.size(); ++i)
{
((IWorldEventListener)this.field_73021_x.get(i)).func_184375_a(p_184148_1_, p_184148_8_, p_184148_9_, p_184148_2_, p_184148_4_, p_184148_6_, p_184148_10_, p_184148_11_);
@@ -1118,6 +1177,9 @@
@@ -1118,6 +1178,9 @@
public boolean func_72838_d(Entity p_72838_1_)
{
@@ -228,7 +236,7 @@
int i = MathHelper.func_76128_c(p_72838_1_.field_70165_t / 16.0D);
int j = MathHelper.func_76128_c(p_72838_1_.field_70161_v / 16.0D);
boolean flag = p_72838_1_.field_98038_p;
@@ -1140,6 +1202,8 @@
@@ -1140,6 +1203,8 @@
this.func_72854_c();
}
@@ -237,7 +245,23 @@
this.func_72964_e(i, j).func_76612_a(p_72838_1_);
this.field_72996_f.add(p_72838_1_);
this.func_72923_a(p_72838_1_);
@@ -1227,6 +1291,7 @@
@@ -1153,6 +1218,7 @@
{
((IWorldEventListener)this.field_73021_x.get(i)).func_72703_a(p_72923_1_);
}
+ p_72923_1_.onAddedToWorld();
}
public void func_72847_b(Entity p_72847_1_)
@@ -1161,6 +1227,7 @@
{
((IWorldEventListener)this.field_73021_x.get(i)).func_72709_b(p_72847_1_);
}
+ p_72847_1_.onRemovedFromWorld();
}
public void func_72900_e(Entity p_72900_1_)
@@ -1227,6 +1294,7 @@
IBlockState iblockstate = Blocks.field_150348_b.func_176223_P();
BlockPos.PooledMutableBlockPos blockpos$pooledmutableblockpos = BlockPos.PooledMutableBlockPos.func_185346_s();
@@ -245,7 +269,7 @@
try
{
for (int k1 = i; k1 < j; ++k1)
@@ -1269,7 +1334,7 @@
@@ -1269,7 +1337,7 @@
iblockstate1.func_185908_a(this, blockpos$pooledmutableblockpos, p_191504_2_, p_191504_4_, p_191504_1_, false);
@@ -254,7 +278,7 @@
{
boolean flag5 = true;
return flag5;
@@ -1319,11 +1384,10 @@
@@ -1319,11 +1387,10 @@
}
}
}
@@ -267,7 +291,7 @@
public void func_72848_b(IWorldEventListener p_72848_1_)
{
this.field_73021_x.remove(p_72848_1_);
@@ -1361,19 +1425,38 @@
@@ -1361,19 +1428,38 @@
public int func_72967_a(float p_72967_1_)
{
@@ -308,7 +332,7 @@
float f = this.func_72826_c(p_72971_1_);
float f1 = 1.0F - (MathHelper.func_76134_b(f * ((float)Math.PI * 2F)) * 2.0F + 0.2F);
f1 = MathHelper.func_76131_a(f1, 0.0F, 1.0F);
@@ -1386,6 +1469,12 @@
@@ -1386,6 +1472,12 @@
@SideOnly(Side.CLIENT)
public Vec3d func_72833_a(Entity p_72833_1_, float p_72833_2_)
{
@@ -321,7 +345,7 @@
float f = this.func_72826_c(p_72833_2_);
float f1 = MathHelper.func_76134_b(f * ((float)Math.PI * 2F)) * 2.0F + 0.5F;
f1 = MathHelper.func_76131_a(f1, 0.0F, 1.0F);
@@ -1393,9 +1482,7 @@
@@ -1393,9 +1485,7 @@
int j = MathHelper.func_76128_c(p_72833_1_.field_70163_u);
int k = MathHelper.func_76128_c(p_72833_1_.field_70161_v);
BlockPos blockpos = new BlockPos(i, j, k);
@@ -332,7 +356,7 @@
float f3 = (float)(l >> 16 & 255) / 255.0F;
float f4 = (float)(l >> 8 & 255) / 255.0F;
float f5 = (float)(l & 255) / 255.0F;
@@ -1444,20 +1531,25 @@
@@ -1444,20 +1534,25 @@
public float func_72826_c(float p_72826_1_)
{
@@ -361,7 +385,7 @@
public float func_72929_e(float p_72929_1_)
{
float f = this.func_72826_c(p_72929_1_);
@@ -1467,6 +1559,12 @@
@@ -1467,6 +1562,12 @@
@SideOnly(Side.CLIENT)
public Vec3d func_72824_f(float p_72824_1_)
{
@@ -374,7 +398,7 @@
float f = this.func_72826_c(p_72824_1_);
float f1 = MathHelper.func_76134_b(f * ((float)Math.PI * 2F)) * 2.0F + 0.5F;
f1 = MathHelper.func_76131_a(f1, 0.0F, 1.0F);
@@ -1522,9 +1620,9 @@
@@ -1522,9 +1623,9 @@
for (blockpos = new BlockPos(p_175672_1_.func_177958_n(), chunk.func_76625_h() + 16, p_175672_1_.func_177952_p()); blockpos.func_177956_o() >= 0; blockpos = blockpos1)
{
blockpos1 = blockpos.func_177977_b();
@@ -386,7 +410,7 @@
{
break;
}
@@ -1536,6 +1634,12 @@
@@ -1536,6 +1637,12 @@
@SideOnly(Side.CLIENT)
public float func_72880_h(float p_72880_1_)
{
@@ -399,7 +423,7 @@
float f = this.func_72826_c(p_72880_1_);
float f1 = 1.0F - (MathHelper.func_76134_b(f * ((float)Math.PI * 2F)) * 2.0F + 0.25F);
f1 = MathHelper.func_76131_a(f1, 0.0F, 1.0F);
@@ -1570,6 +1674,7 @@
@@ -1570,6 +1677,7 @@
try
{
@@ -407,7 +431,7 @@
++entity.field_70173_aa;
entity.func_70071_h_();
}
@@ -1587,6 +1692,12 @@
@@ -1587,6 +1695,12 @@
entity.func_85029_a(crashreportcategory);
}
@@ -420,7 +444,7 @@
throw new ReportedException(crashreport);
}
@@ -1641,13 +1752,21 @@
@@ -1641,13 +1755,21 @@
{
try
{
@@ -442,7 +466,7 @@
throw new ReportedException(crashreport1);
}
}
@@ -1674,14 +1793,23 @@
@@ -1674,14 +1796,23 @@
this.field_72984_F.func_76318_c("blockEntities");
@@ -469,7 +493,7 @@
Iterator<TileEntity> iterator = this.field_175730_i.iterator();
while (iterator.hasNext())
@@ -1692,7 +1820,7 @@
@@ -1692,7 +1823,7 @@
{
BlockPos blockpos = tileentity.func_174877_v();
@@ -478,7 +502,7 @@
{
try
{
@@ -1700,7 +1828,9 @@
@@ -1700,7 +1831,9 @@
{
return String.valueOf((Object)TileEntity.func_190559_a(tileentity.getClass()));
});
@@ -488,7 +512,7 @@
this.field_72984_F.func_76319_b();
}
catch (Throwable throwable)
@@ -1708,6 +1838,13 @@
@@ -1708,6 +1841,13 @@
CrashReport crashreport2 = CrashReport.func_85055_a(throwable, "Ticking block entity");
CrashReportCategory crashreportcategory2 = crashreport2.func_85058_a("Block entity being ticked");
tileentity.func_145828_a(crashreportcategory2);
@@ -502,7 +526,7 @@
throw new ReportedException(crashreport2);
}
}
@@ -1720,7 +1857,10 @@
@@ -1720,7 +1860,10 @@
if (this.func_175667_e(tileentity.func_174877_v()))
{
@@ -514,7 +538,7 @@
}
}
}
@@ -1764,12 +1904,18 @@
@@ -1764,12 +1907,18 @@
public boolean func_175700_a(TileEntity p_175700_1_)
{
@@ -533,7 +557,7 @@
if (this.field_72995_K)
{
@@ -1785,6 +1931,11 @@
@@ -1785,6 +1934,11 @@
{
if (this.field_147481_N)
{
@@ -545,7 +569,7 @@
this.field_147484_a.addAll(p_147448_1_);
}
else
@@ -1807,9 +1958,13 @@
@@ -1807,9 +1961,13 @@
{
int j2 = MathHelper.func_76128_c(p_72866_1_.field_70165_t);
int k2 = MathHelper.func_76128_c(p_72866_1_.field_70161_v);
@@ -561,7 +585,7 @@
{
return;
}
@@ -1831,6 +1986,7 @@
@@ -1831,6 +1989,7 @@
}
else
{
@@ -569,7 +593,7 @@
p_72866_1_.func_70071_h_();
}
}
@@ -1914,7 +2070,7 @@
@@ -1914,7 +2073,7 @@
{
Entity entity4 = list.get(j2);
@@ -578,7 +602,7 @@
{
return false;
}
@@ -1972,6 +2128,12 @@
@@ -1972,6 +2131,12 @@
{
IBlockState iblockstate1 = this.func_180495_p(blockpos$pooledmutableblockpos.func_181079_c(l3, i4, j4));
@@ -591,7 +615,7 @@
if (iblockstate1.func_185904_a().func_76224_d())
{
blockpos$pooledmutableblockpos.func_185344_t();
@@ -2011,6 +2173,11 @@
@@ -2011,6 +2176,11 @@
blockpos$pooledmutableblockpos.func_185344_t();
return true;
}
@@ -603,7 +627,7 @@
}
}
}
@@ -2050,6 +2217,16 @@
@@ -2050,6 +2220,16 @@
IBlockState iblockstate1 = this.func_180495_p(blockpos$pooledmutableblockpos);
Block block = iblockstate1.func_177230_c();
@@ -620,7 +644,7 @@
if (iblockstate1.func_185904_a() == p_72918_2_)
{
double d0 = (double)((float)(i4 + 1) - BlockLiquid.func_149801_b(((Integer)iblockstate1.func_177229_b(BlockLiquid.field_176367_b)).intValue()));
@@ -2095,7 +2272,14 @@
@@ -2095,7 +2275,14 @@
{
for (int j4 = j3; j4 < k3; ++j4)
{
@@ -636,7 +660,7 @@
{
blockpos$pooledmutableblockpos.func_185344_t();
return true;
@@ -2116,6 +2300,7 @@
@@ -2116,6 +2303,7 @@
public Explosion func_72885_a(@Nullable 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_);
@@ -644,7 +668,7 @@
explosion.func_77278_a();
explosion.func_77279_a(true);
return explosion;
@@ -2238,6 +2423,7 @@
@@ -2238,6 +2426,7 @@
public void func_175690_a(BlockPos p_175690_1_, @Nullable TileEntity p_175690_2_)
{
@@ -652,7 +676,7 @@
if (!this.func_189509_E(p_175690_1_))
{
if (p_175690_2_ != null && !p_175690_2_.func_145837_r())
@@ -2245,6 +2431,8 @@
@@ -2245,6 +2434,8 @@
if (this.field_147481_N)
{
p_175690_2_.func_174878_a(p_175690_1_);
@@ -661,7 +685,7 @@
Iterator<TileEntity> iterator1 = this.field_147484_a.iterator();
while (iterator1.hasNext())
@@ -2262,7 +2450,8 @@
@@ -2262,7 +2453,8 @@
}
else
{
@@ -671,7 +695,7 @@
this.func_175700_a(p_175690_2_);
}
}
@@ -2277,6 +2466,8 @@
@@ -2277,6 +2469,8 @@
{
tileentity2.func_145843_s();
this.field_147484_a.remove(tileentity2);
@@ -680,7 +704,7 @@
}
else
{
@@ -2289,6 +2480,7 @@
@@ -2289,6 +2483,7 @@
this.func_175726_f(p_175713_1_).func_177425_e(p_175713_1_);
}
@@ -688,7 +712,7 @@
}
public void func_147457_a(TileEntity p_147457_1_)
@@ -2315,7 +2507,7 @@
@@ -2315,7 +2510,7 @@
if (chunk1 != null && !chunk1.func_76621_g())
{
IBlockState iblockstate1 = this.func_180495_p(p_175677_1_);
@@ -697,7 +721,7 @@
}
else
{
@@ -2338,6 +2530,7 @@
@@ -2338,6 +2533,7 @@
{
this.field_72985_G = p_72891_1_;
this.field_72992_H = p_72891_2_;
@@ -705,7 +729,7 @@
}
public void func_72835_b()
@@ -2347,6 +2540,11 @@
@@ -2347,6 +2543,11 @@
protected void func_72947_a()
{
@@ -717,7 +741,7 @@
if (this.field_72986_A.func_76059_o())
{
this.field_73004_o = 1.0F;
@@ -2360,6 +2558,11 @@
@@ -2360,6 +2561,11 @@
protected void func_72979_l()
{
@@ -729,7 +753,7 @@
if (this.field_73011_w.func_191066_m())
{
if (!this.field_72995_K)
@@ -2484,6 +2687,11 @@
@@ -2484,6 +2690,11 @@
public boolean func_175670_e(BlockPos p_175670_1_, boolean p_175670_2_)
{
@@ -741,7 +765,7 @@
Biome biome = this.func_180494_b(p_175670_1_);
float f = biome.func_180626_a(p_175670_1_);
@@ -2525,6 +2733,11 @@
@@ -2525,6 +2736,11 @@
public boolean func_175708_f(BlockPos p_175708_1_, boolean p_175708_2_)
{
@@ -753,7 +777,7 @@
Biome biome = this.func_180494_b(p_175708_1_);
float f = biome.func_180626_a(p_175708_1_);
@@ -2542,7 +2755,7 @@
@@ -2542,7 +2758,7 @@
{
IBlockState iblockstate1 = this.func_180495_p(p_175708_1_);
@@ -762,7 +786,7 @@
{
return true;
}
@@ -2574,10 +2787,10 @@
@@ -2574,10 +2790,10 @@
else
{
IBlockState iblockstate1 = this.func_180495_p(p_175638_1_);
@@ -776,7 +800,7 @@
{
k2 = 1;
}
@@ -2589,7 +2802,7 @@
@@ -2589,7 +2805,7 @@
if (k2 >= 15)
{
@@ -785,7 +809,7 @@
}
else if (j2 >= 14)
{
@@ -2630,12 +2843,13 @@
@@ -2630,12 +2846,13 @@
public boolean func_180500_c(EnumSkyBlock p_180500_1_, BlockPos p_180500_2_)
{
@@ -800,7 +824,7 @@
int j2 = 0;
int k2 = 0;
this.field_72984_F.func_76320_a("getBrightness");
@@ -2673,7 +2887,7 @@
@@ -2673,7 +2890,7 @@
int l5 = MathHelper.func_76130_a(k4 - k3);
int i6 = MathHelper.func_76130_a(l4 - l3);
@@ -809,7 +833,7 @@
{
BlockPos.PooledMutableBlockPos blockpos$pooledmutableblockpos = BlockPos.PooledMutableBlockPos.func_185346_s();
@@ -2683,7 +2897,8 @@
@@ -2683,7 +2900,8 @@
int k6 = k4 + enumfacing.func_96559_d();
int l6 = l4 + enumfacing.func_82599_e();
blockpos$pooledmutableblockpos.func_181079_c(j6, k6, l6);
@@ -819,7 +843,7 @@
j5 = this.func_175642_b(p_180500_1_, blockpos$pooledmutableblockpos);
if (j5 == i5 - i7 && k2 < this.field_72994_J.length)
@@ -2725,7 +2940,7 @@
@@ -2725,7 +2943,7 @@
int j9 = Math.abs(i8 - l3);
boolean flag = k2 < this.field_72994_J.length - 6;
@@ -828,7 +852,7 @@
{
if (this.func_175642_b(p_180500_1_, blockpos2.func_177976_e()) < k8)
{
@@ -2791,10 +3006,10 @@
@@ -2791,10 +3009,10 @@
public List<Entity> func_175674_a(@Nullable Entity p_175674_1_, AxisAlignedBB p_175674_2_, @Nullable Predicate <? super Entity > p_175674_3_)
{
List<Entity> list = Lists.<Entity>newArrayList();
@@ -843,7 +867,7 @@
for (int j3 = j2; j3 <= k2; ++j3)
{
@@ -2847,10 +3062,10 @@
@@ -2847,10 +3065,10 @@
public <T extends Entity> List<T> func_175647_a(Class <? extends T > p_175647_1_, AxisAlignedBB p_175647_2_, @Nullable Predicate <? super T > p_175647_3_)
{
@@ -858,7 +882,7 @@
List<T> list = Lists.<T>newArrayList();
for (int j3 = j2; j3 < k2; ++j3)
@@ -2930,11 +3145,13 @@
@@ -2930,11 +3148,13 @@
public void func_175650_b(Collection<Entity> p_175650_1_)
{
@@ -875,7 +899,7 @@
}
}
@@ -2958,7 +3175,7 @@
@@ -2958,7 +3178,7 @@
}
else
{
@@ -884,7 +908,7 @@
}
}
@@ -3042,7 +3259,7 @@
@@ -3042,7 +3262,7 @@
public int func_175651_c(BlockPos p_175651_1_, EnumFacing p_175651_2_)
{
IBlockState iblockstate1 = this.func_180495_p(p_175651_1_);
@@ -893,7 +917,7 @@
}
public boolean func_175640_z(BlockPos p_175640_1_)
@@ -3208,6 +3425,8 @@
@@ -3208,6 +3428,8 @@
d2 *= ((Double)MoreObjects.firstNonNull(p_184150_11_.apply(entityplayer1), Double.valueOf(1.0D))).doubleValue();
}
@@ -902,7 +926,7 @@
if ((p_184150_9_ < 0.0D || Math.abs(entityplayer1.field_70163_u - p_184150_3_) < p_184150_9_ * p_184150_9_) && (p_184150_7_ < 0.0D || d1 < d2 * d2) && (d0 == -1.0D || d1 < d0))
{
d0 = d1;
@@ -3269,7 +3488,7 @@
@@ -3269,7 +3491,7 @@
public long func_72905_C()
{
@@ -911,7 +935,7 @@
}
public long func_82737_E()
@@ -3279,17 +3498,17 @@
@@ -3279,17 +3501,17 @@
public long func_72820_D()
{
@@ -932,7 +956,7 @@
if (!this.func_175723_af().func_177746_a(blockpos1))
{
@@ -3301,7 +3520,7 @@
@@ -3301,7 +3523,7 @@
public void func_175652_B(BlockPos p_175652_1_)
{
@@ -941,7 +965,7 @@
}
@SideOnly(Side.CLIENT)
@@ -3321,12 +3540,18 @@
@@ -3321,12 +3543,18 @@
if (!this.field_72996_f.contains(p_72897_1_))
{
@@ -960,7 +984,7 @@
return true;
}
@@ -3428,8 +3653,7 @@
@@ -3428,8 +3656,7 @@
public boolean func_180502_D(BlockPos p_180502_1_)
{
@@ -970,7 +994,7 @@
}
@Nullable
@@ -3490,12 +3714,12 @@
@@ -3490,12 +3717,12 @@
public int func_72800_K()
{
@@ -985,7 +1009,7 @@
}
public Random func_72843_D(int p_72843_1_, int p_72843_2_, int p_72843_3_)
@@ -3539,7 +3763,7 @@
@@ -3539,7 +3766,7 @@
@SideOnly(Side.CLIENT)
public double func_72919_O()
{
@@ -994,7 +1018,7 @@
}
public void func_175715_c(int p_175715_1_, BlockPos p_175715_2_, int p_175715_3_)
@@ -3573,7 +3797,7 @@
@@ -3573,7 +3800,7 @@
public void func_175666_e(BlockPos p_175666_1_, Block p_175666_2_)
{
@@ -1003,7 +1027,7 @@
{
BlockPos blockpos1 = p_175666_1_.func_177972_a(enumfacing);
@@ -3581,18 +3805,15 @@
@@ -3581,18 +3808,15 @@
{
IBlockState iblockstate1 = this.func_180495_p(blockpos1);
@@ -1026,7 +1050,7 @@
}
}
}
@@ -3658,6 +3879,124 @@
@@ -3658,6 +3882,124 @@
return j2 >= -128 && j2 <= 128 && k2 >= -128 && k2 <= 128;
}
@@ -115,7 +115,7 @@
this.field_76637_e.func_175690_a(p_177436_1_, tileentity1);
}
@@ -738,6 +736,7 @@
@@ -738,11 +736,13 @@
k = this.field_76645_j.length - 1;
}
@@ -123,7 +123,21 @@
p_76612_1_.field_70175_ag = true;
p_76612_1_.field_70176_ah = this.field_76635_g;
p_76612_1_.field_70162_ai = k;
@@ -778,7 +777,7 @@
p_76612_1_.field_70164_aj = this.field_76647_h;
this.field_76645_j[k].add(p_76612_1_);
+ this.func_76630_e(); // Forge - ensure chunks are marked to save after an entity add
}
public void func_76622_b(Entity p_76622_1_)
@@ -763,6 +763,7 @@
}
this.field_76645_j[p_76608_2_].remove(p_76608_1_);
+ this.func_76630_e(); // Forge - ensure chunks are marked to save after entity removals
}
public boolean func_177444_d(BlockPos p_177444_1_)
@@ -778,7 +779,7 @@
{
IBlockState iblockstate = this.func_177435_g(p_177422_1_);
Block block = iblockstate.func_177230_c();
@@ -132,7 +146,7 @@
}
@Nullable
@@ -786,6 +785,12 @@
@@ -786,6 +787,12 @@
{
TileEntity tileentity = this.field_150816_i.get(p_177424_1_);
@@ -145,7 +159,7 @@
if (tileentity == null)
{
if (p_177424_2_ == Chunk.EnumCreateEntityType.IMMEDIATE)
@@ -795,14 +800,9 @@
@@ -795,14 +802,9 @@
}
else if (p_177424_2_ == Chunk.EnumCreateEntityType.QUEUED)
{
@@ -161,7 +175,7 @@
return tileentity;
}
@@ -819,10 +819,11 @@
@@ -819,10 +821,11 @@
public void func_177426_a(BlockPos p_177426_1_, TileEntity p_177426_2_)
{
@@ -174,7 +188,7 @@
{
if (this.field_150816_i.containsKey(p_177426_1_))
{
@@ -854,12 +855,14 @@
@@ -854,12 +857,14 @@
for (ClassInheritanceMultiMap<Entity> classinheritancemultimap : this.field_76645_j)
{
@@ -190,7 +204,7 @@
this.field_76636_d = false;
for (TileEntity tileentity : this.field_150816_i.values())
@@ -871,6 +874,7 @@
@@ -871,6 +876,7 @@
{
this.field_76637_e.func_175681_c(classinheritancemultimap);
}
@@ -198,7 +212,7 @@
}
public void func_76630_e()
@@ -880,8 +884,8 @@
@@ -880,8 +886,8 @@
public void func_177414_a(@Nullable Entity p_177414_1_, AxisAlignedBB p_177414_2_, List<Entity> p_177414_3_, Predicate <? super Entity > p_177414_4_)
{
@@ -209,7 +223,7 @@
i = MathHelper.func_76125_a(i, 0, this.field_76645_j.length - 1);
j = MathHelper.func_76125_a(j, 0, this.field_76645_j.length - 1);
@@ -918,8 +922,8 @@
@@ -918,8 +924,8 @@
public <T extends Entity> void func_177430_a(Class <? extends T > p_177430_1_, AxisAlignedBB p_177430_2_, List<T> p_177430_3_, Predicate <? super T > p_177430_4_)
{
@@ -220,7 +234,7 @@
i = MathHelper.func_76125_a(i, 0, this.field_76645_j.length - 1);
j = MathHelper.func_76125_a(j, 0, this.field_76645_j.length - 1);
@@ -997,6 +1001,9 @@
@@ -997,6 +1003,9 @@
protected void func_186034_a(IChunkGenerator p_186034_1_)
{
@@ -230,7 +244,7 @@
if (this.func_177419_t())
{
if (p_186034_1_.func_185933_a(this, this.field_76635_g, this.field_76647_h))
@@ -1008,8 +1015,10 @@
@@ -1008,8 +1017,10 @@
{
this.func_150809_p();
p_186034_1_.func_185931_b(this.field_76635_g, this.field_76647_h);
@@ -241,7 +255,7 @@
}
public BlockPos func_177440_h(BlockPos p_177440_1_)
@@ -1064,7 +1073,7 @@
@@ -1064,7 +1075,7 @@
{
BlockPos blockpos = this.field_177447_w.poll();
@@ -250,7 +264,7 @@
{
TileEntity tileentity = this.func_177422_i(blockpos);
this.field_76637_e.func_175690_a(blockpos, tileentity);
@@ -1128,6 +1137,13 @@
@@ -1128,6 +1139,13 @@
@SideOnly(Side.CLIENT)
public void func_186033_a(PacketBuffer p_186033_1_, int p_186033_2_, boolean p_186033_3_)
{
@@ -264,7 +278,7 @@
boolean flag = this.field_76637_e.field_73011_w.func_191066_m();
for (int i = 0; i < this.field_76652_q.length; ++i)
@@ -1176,10 +1192,16 @@
@@ -1176,10 +1194,16 @@
this.field_76646_k = true;
this.func_76590_a();
@@ -281,7 +295,7 @@
}
public Biome func_177411_a(BlockPos p_177411_1_, BiomeProvider p_177411_2_)
@@ -1244,13 +1266,13 @@
@@ -1244,13 +1268,13 @@
BlockPos blockpos1 = blockpos.func_177982_a(k, (j << 4) + i1, l);
boolean flag = i1 == 0 || i1 == 15 || k == 0 || k == 15 || l == 0 || l == 15;
@@ -297,7 +311,7 @@
{
this.field_76637_e.func_175664_x(blockpos2);
}
@@ -1381,7 +1403,7 @@
@@ -1381,7 +1405,7 @@
{
blockpos$mutableblockpos.func_181079_c(blockpos$mutableblockpos.func_177958_n(), l, blockpos$mutableblockpos.func_177952_p());
@@ -306,7 +320,7 @@
{
this.field_76637_e.func_175664_x(blockpos$mutableblockpos);
}
@@ -1420,6 +1442,7 @@
@@ -1420,6 +1444,7 @@
else
{
System.arraycopy(p_177420_1_, 0, this.field_76634_f, 0, this.field_76634_f.length);
@@ -314,7 +328,7 @@
}
}
@@ -1489,4 +1512,55 @@
@@ -1489,4 +1514,55 @@
QUEUED,
CHECK;
}