Fix NPE when player tries to sleep without bed (#4487)

This commit is contained in:
Bartek Bok 2017-11-09 23:30:36 +01:00 committed by LexManos
parent 4cdb6b6d60
commit d060747fad
1 changed files with 25 additions and 15 deletions

View File

@ -322,28 +322,38 @@
this.func_184602_cy();
this.field_70170_p.func_72960_a(this, (byte)30);
}
@@ -1442,6 +1529,8 @@
@@ -1442,7 +1529,11 @@
public EntityPlayer.SleepResult func_180469_a(BlockPos p_180469_1_)
{
- EnumFacing enumfacing = (EnumFacing)this.field_70170_p.func_180495_p(p_180469_1_).func_177229_b(BlockHorizontal.field_185512_D);
+ EntityPlayer.SleepResult ret = net.minecraftforge.event.ForgeEventFactory.onPlayerSleepInBed(this, p_180469_1_);
+ if (ret != null) return ret;
EnumFacing enumfacing = (EnumFacing)this.field_70170_p.func_180495_p(p_180469_1_).func_177229_b(BlockHorizontal.field_185512_D);
+ final IBlockState state = this.field_70170_p.func_175667_e(p_180469_1_) ? this.field_70170_p.func_180495_p(p_180469_1_) : null;
+ final boolean isBed = state != null && state.func_177230_c().isBed(state, this.field_70170_p, p_180469_1_, this);
+ final EnumFacing enumfacing = isBed && state.func_177230_c() instanceof BlockHorizontal ? (EnumFacing)state.func_177229_b(BlockHorizontal.field_185512_D) : null;
if (!this.field_70170_p.field_72995_K)
@@ -1484,8 +1573,9 @@
{
@@ -1484,8 +1575,7 @@
this.func_192030_dh();
this.func_70105_a(0.2F, 0.2F);
- if (this.field_70170_p.func_175667_e(p_180469_1_))
- {
+ IBlockState state = null;
+ if (this.field_70170_p.func_175667_e(p_180469_1_)) state = this.field_70170_p.func_180495_p(p_180469_1_);
+ if (state != null && state.func_177230_c().isBed(state, this.field_70170_p, p_180469_1_, this)) {
+ if (enumfacing != null) {
float f1 = 0.5F + (float)enumfacing.func_82601_c() * 0.4F;
float f = 0.5F + (float)enumfacing.func_82599_e() * 0.4F;
this.func_175139_a(enumfacing);
@@ -1532,13 +1622,14 @@
@@ -1517,6 +1607,7 @@
{
return true;
}
+ else if (p_190774_2_ == null) return false;
else
{
BlockPos blockpos = p_190774_1_.func_177972_a(p_190774_2_.func_176734_d());
@@ -1532,13 +1623,14 @@
public void func_70999_a(boolean p_70999_1_, boolean p_70999_2_, boolean p_70999_3_)
{
@ -361,7 +371,7 @@
if (blockpos == null)
{
@@ -1547,6 +1638,10 @@
@@ -1547,6 +1639,10 @@
this.func_70107_b((double)((float)blockpos.func_177958_n() + 0.5F), (double)((float)blockpos.func_177956_o() + 0.1F), (double)((float)blockpos.func_177952_p() + 0.5F));
}
@ -372,7 +382,7 @@
this.field_71083_bS = false;
@@ -1565,15 +1660,16 @@
@@ -1565,15 +1661,16 @@
private boolean func_175143_p()
{
@ -392,7 +402,7 @@
{
if (!p_180467_2_)
{
@@ -1588,16 +1684,17 @@
@@ -1588,16 +1685,17 @@
}
else
{
@ -413,7 +423,7 @@
switch (enumfacing)
{
@@ -1637,16 +1734,24 @@
@@ -1637,16 +1735,24 @@
public BlockPos func_180470_cg()
{
@ -440,7 +450,7 @@
if (p_180473_1_ != null)
{
this.field_71077_c = p_180473_1_;
@@ -1839,6 +1944,10 @@
@@ -1839,6 +1945,10 @@
super.func_180430_e(p_180430_1_, p_180430_2_);
}
@ -451,7 +461,7 @@
}
protected void func_71061_d_()
@@ -2176,7 +2285,10 @@
@@ -2176,7 +2286,10 @@
public ITextComponent func_145748_c_()
{
@ -463,7 +473,7 @@
itextcomponent.func_150256_b().func_150241_a(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/msg " + this.func_70005_c_() + " "));
itextcomponent.func_150256_b().func_150209_a(this.func_174823_aP());
itextcomponent.func_150256_b().func_179989_a(this.func_70005_c_());
@@ -2185,7 +2297,7 @@
@@ -2185,7 +2298,7 @@
public float func_70047_e()
{
@ -472,7 +482,7 @@
if (this.func_70608_bn())
{
@@ -2421,6 +2533,168 @@
@@ -2421,6 +2534,168 @@
return this.field_71075_bZ.field_75098_d && this.func_70003_b(2, "");
}