This commit is contained in:
RainWarrior 2016-03-08 22:43:05 +03:00
parent 776eb00ed3
commit 4b4146bbed
9 changed files with 369 additions and 395 deletions

View File

@ -196,7 +196,7 @@
public ItemStack func_185473_a(World p_185473_1_, BlockPos p_185473_2_, IBlockState p_185473_3_) public ItemStack func_185473_a(World p_185473_1_, BlockPos p_185473_2_, IBlockState p_185473_3_)
{ {
return new ItemStack(Item.getItemFromBlock(this), 1, this.damageDropped(p_185473_3_)); return new ItemStack(Item.getItemFromBlock(this), 1, this.damageDropped(p_185473_3_));
@@ -844,6 +865,1167 @@ @@ -844,6 +865,1166 @@
return "Block{" + blockRegistry.getNameForObject(this) + "}"; return "Block{" + blockRegistry.getNameForObject(this) + "}";
} }
@ -1248,7 +1248,6 @@
+ * Called when the entity is inside this block, may be used to determined if the entity can breathing, + * Called when the entity is inside this block, may be used to determined if the entity can breathing,
+ * display material overlays, or if the entity can swim inside a block. + * display material overlays, or if the entity can swim inside a block.
+ * + *
+ * @param state The current block state
+ * @param world that is being tested. + * @param world that is being tested.
+ * @param blockpos position thats being tested. + * @param blockpos position thats being tested.
+ * @param iblockstate state at world/blockpos + * @param iblockstate state at world/blockpos
@ -1258,7 +1257,7 @@
+ * @param testingHead when true, its testing the entities head for vision, breathing ect... otherwise its testing the body, for swimming and movement adjustment. + * @param testingHead when true, its testing the entities head for vision, breathing ect... otherwise its testing the body, for swimming and movement adjustment.
+ * @return null for default behavior, true if the entity is within the material, false if it was not. + * @return null for default behavior, true if the entity is within the material, false if it was not.
+ */ + */
+ public Boolean isEntityInsideMaterial(IBlockState state, IBlockAccess world, BlockPos blockpos, IBlockState iblockstate, Entity entity, double yToTest, Material materialIn, boolean testingHead) + public Boolean isEntityInsideMaterial(IBlockAccess world, BlockPos blockpos, IBlockState iblockstate, Entity entity, double yToTest, Material materialIn, boolean testingHead)
+ { + {
+ return null; + return null;
+ } + }

View File

@ -56,16 +56,18 @@
{ {
d2 = 1.0D - d1; d2 = 1.0D - d1;
i = 5; i = 5;
@@ -515,6 +528,12 @@ @@ -515,7 +528,13 @@
public void func_184185_a(SoundEvent p_184185_1_, float p_184185_2_, float p_184185_3_) public void func_184185_a(SoundEvent p_184185_1_, float p_184185_2_, float p_184185_3_)
{ {
+ net.minecraftforge.event.entity.PlaySoundAtEntityEvent event = net.minecraftforge.event.ForgeEventFactory.onPlaySoundAtEntity(this, p_184185_1_, p_184185_2_, p_184185_3_); - this.worldObj.func_184134_a(this.posX, this.posY, this.posZ, p_184185_1_, this.func_184176_by(), p_184185_2_, p_184185_3_, false);
+ net.minecraftforge.event.entity.PlaySoundAtEntityEvent event = net.minecraftforge.event.ForgeEventFactory.onPlaySoundAtEntity(this, p_184185_1_, this.func_184176_by(), p_184185_2_, p_184185_3_);
+ if (event.isCanceled() || event.getSound() == null) return; + if (event.isCanceled() || event.getSound() == null) return;
+ p_184185_1_ = event.getSound(); + p_184185_1_ = event.getSound();
+ p_184185_2_ = event.getVolume(); + p_184185_2_ = event.getVolume();
+ p_184185_3_ = event.getPitch(); + p_184185_3_ = event.getPitch();
+ +
this.worldObj.func_184134_a(this.posX, this.posY, this.posZ, p_184185_1_, this.func_184176_by(), p_184185_2_, p_184185_3_, false); + this.worldObj.func_184134_a(this.posX, this.posY, this.posZ, p_184185_1_, event.getCategory(), p_184185_2_, p_184185_3_, false);
} }
public boolean isServerWorld()

View File

@ -30,7 +30,7 @@
BlockPos blockpos = new BlockPos(this.posX, d0, this.posZ); BlockPos blockpos = new BlockPos(this.posX, d0, this.posZ);
IBlockState iblockstate = this.worldObj.getBlockState(blockpos); IBlockState iblockstate = this.worldObj.getBlockState(blockpos);
+ Boolean result = iblockstate.getBlock().isEntityInsideMaterial(iblockstate, this.worldObj, blockpos, iblockstate, this, d0, materialIn, true); + Boolean result = iblockstate.getBlock().isEntityInsideMaterial(this.worldObj, blockpos, iblockstate, this, d0, materialIn, true);
+ if (result != null) return result; + if (result != null) return result;
+ +
if (iblockstate.func_185904_a() == materialIn) if (iblockstate.func_185904_a() == materialIn)

View File

@ -45,7 +45,90 @@
if (this.isBlockLoaded(pos)) if (this.isBlockLoaded(pos))
{ {
Chunk chunk = this.getChunkFromBlockCoords(pos); Chunk chunk = this.getChunkFromBlockCoords(pos);
@@ -409,6 +426,9 @@ @@ -194,7 +211,7 @@
public boolean isAirBlock(BlockPos pos)
{
- return this.getBlockState(pos).func_185904_a() == Material.air;
+ return this.getBlockState(pos).getBlock().isAir(this.getBlockState(pos), this, pos);
}
public boolean isBlockLoaded(BlockPos pos)
@@ -291,23 +308,49 @@
{
Chunk chunk = this.getChunkFromBlockCoords(pos);
Block block = newState.getBlock();
+
+ net.minecraftforge.common.util.BlockSnapshot blockSnapshot = null;
+ if (this.captureBlockSnapshots && !this.isRemote)
+ {
+ blockSnapshot = net.minecraftforge.common.util.BlockSnapshot.getBlockSnapshot(this, pos, flags);
+ this.capturedBlockSnapshots.add(blockSnapshot);
+ }
+ IBlockState oldState = getBlockState(pos);
+ int oldLight = oldState.getLightValue(this, pos);
+ int oldOpacity = oldState.getLightOpacity(this, pos);
+
IBlockState iblockstate = chunk.setBlockState(pos, newState);
if (iblockstate == null)
{
+ if (blockSnapshot != null) this.capturedBlockSnapshots.remove(blockSnapshot);
return false;
}
else
{
- if (newState.func_185891_c() != iblockstate.func_185891_c() || newState.func_185906_d() != iblockstate.func_185906_d())
+ if (newState.getLightOpacity(this, pos) != oldOpacity || newState.getLightValue(this, pos) != oldLight)
{
this.theProfiler.startSection("checkLight");
this.checkLight(pos);
this.theProfiler.endSection();
}
- if ((flags & 2) != 0 && (!this.isRemote || (flags & 4) == 0) && chunk.isPopulated())
+ if (blockSnapshot == null) // Don't notify clients or update physics while capturing blockstates
{
+ this.markAndNotifyBlock(pos, chunk, iblockstate, newState, flags);
+ }
+ return true;
+ }
+ }
+ }
+
+ // Split off from original setBlockState(BlockPos, IBlockState, int) method in order to directly send client and physic updates
+ public void markAndNotifyBlock(BlockPos pos, Chunk chunk, IBlockState iblockstate, IBlockState newState, int flags)
+ {
+ {
+ {
+ if ((flags & 2) != 0 && (!this.isRemote || (flags & 4) == 0) && (chunk == null || chunk.isPopulated()))
+ {
this.func_184138_a(pos, iblockstate, newState, flags);
}
@@ -317,11 +360,9 @@
if (newState.func_185912_n())
{
- this.updateComparatorOutputLevel(pos, block);
+ this.updateComparatorOutputLevel(pos, newState.getBlock());
}
}
-
- return true;
}
}
}
@@ -336,7 +377,7 @@
IBlockState iblockstate = this.getBlockState(pos);
Block block = iblockstate.getBlock();
- if (iblockstate.func_185904_a() == Material.air)
+ if (block.isAir(iblockstate, this, pos))
{
return false;
}
@@ -409,6 +450,9 @@
public void notifyNeighborsOfStateChange(BlockPos pos, Block blockType) public void notifyNeighborsOfStateChange(BlockPos pos, Block blockType)
{ {
@ -55,7 +138,7 @@
this.notifyBlockOfStateChange(pos.west(), blockType); this.notifyBlockOfStateChange(pos.west(), blockType);
this.notifyBlockOfStateChange(pos.east(), blockType); this.notifyBlockOfStateChange(pos.east(), blockType);
this.notifyBlockOfStateChange(pos.down(), blockType); this.notifyBlockOfStateChange(pos.down(), blockType);
@@ -419,6 +439,11 @@ @@ -419,6 +463,11 @@
public void notifyNeighborsOfStateExcept(BlockPos pos, Block blockType, EnumFacing skipSide) public void notifyNeighborsOfStateExcept(BlockPos pos, Block blockType, EnumFacing skipSide)
{ {
@ -67,7 +150,16 @@
if (skipSide != EnumFacing.WEST) if (skipSide != EnumFacing.WEST)
{ {
this.notifyBlockOfStateChange(pos.west(), blockType); this.notifyBlockOfStateChange(pos.west(), blockType);
@@ -782,7 +807,7 @@ @@ -514,7 +563,7 @@
{
IBlockState iblockstate = this.getBlockState(blockpos);
- if (iblockstate.func_185891_c() > 0 && !iblockstate.func_185904_a().isLiquid())
+ if (iblockstate.getBlock().getLightOpacity(iblockstate, this, blockpos) > 0 && !iblockstate.func_185904_a().isLiquid())
{
return false;
}
@@ -782,7 +831,7 @@
public boolean isDaytime() public boolean isDaytime()
{ {
@ -76,33 +168,21 @@
} }
public RayTraceResult rayTraceBlocks(Vec3d p_72933_1_, Vec3d p_72933_2_) public RayTraceResult rayTraceBlocks(Vec3d p_72933_1_, Vec3d p_72933_2_)
@@ -994,6 +1019,12 @@ @@ -982,6 +1031,13 @@
public void func_184149_a(BlockPos p_184149_1_, SoundEvent p_184149_2_) public void func_184148_a(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_)
{ {
+ net.minecraftforge.event.entity.PlaySoundAtEntityEvent event = net.minecraftforge.event.ForgeEventFactory.onPlaySoundAtEntity(entityIn, name, volume, pitch); + net.minecraftforge.event.entity.PlaySoundAtEntityEvent event = net.minecraftforge.event.ForgeEventFactory.onPlaySoundAtEntity(p_184148_1_, p_184148_8_, p_184148_9_, p_184148_10_, p_184148_11_);
+ if (event.isCanceled() || event.name == null) return; + if (event.isCanceled() || event.getSound() == null) return;
+ name = event.name; + p_184148_8_ = event.getSound();
+ volume = event.newVolume; + p_184148_9_ = event.getCategory();
+ pitch = event.newPitch; + p_184148_10_ = event.getVolume();
+ p_184148_11_ = event.getPitch();
+ +
for (int i = 0; i < this.worldAccesses.size(); ++i) for (int i = 0; i < this.worldAccesses.size(); ++i)
{ {
((IWorldEventListener)this.worldAccesses.get(i)).func_184377_a(p_184149_2_, p_184149_1_); ((IWorldEventListener)this.worldAccesses.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_);
@@ -1013,6 +1044,12 @@ @@ -1027,6 +1083,9 @@
private void spawnParticle(int particleID, boolean p_175720_2_, double xCood, double yCoord, double zCoord, double xOffset, double yOffset, double zOffset, int... p_175720_15_)
{
+ net.minecraftforge.event.entity.PlaySoundAtEntityEvent event = net.minecraftforge.event.ForgeEventFactory.onPlaySoundAtEntity(player, name, volume, pitch);
+ if (event.isCanceled() || event.name == null) return;
+ name = event.name;
+ volume = event.newVolume;
+ pitch = event.newPitch;
+
for (int i = 0; i < this.worldAccesses.size(); ++i)
{
((IWorldEventListener)this.worldAccesses.get(i)).spawnParticle(particleID, p_175720_2_, xCood, yCoord, zCoord, xOffset, yOffset, zOffset, p_175720_15_);
@@ -1027,6 +1064,9 @@
public boolean spawnEntityInWorld(Entity entityIn) public boolean spawnEntityInWorld(Entity entityIn)
{ {
@ -112,7 +192,7 @@
int i = MathHelper.floor_double(entityIn.posX / 16.0D); int i = MathHelper.floor_double(entityIn.posX / 16.0D);
int j = MathHelper.floor_double(entityIn.posZ / 16.0D); int j = MathHelper.floor_double(entityIn.posZ / 16.0D);
boolean flag = entityIn.forceSpawn; boolean flag = entityIn.forceSpawn;
@@ -1049,6 +1089,8 @@ @@ -1049,6 +1108,8 @@
this.updateAllPlayersSleepingFlag(); this.updateAllPlayersSleepingFlag();
} }
@ -121,7 +201,43 @@
this.getChunkFromChunkCoords(i, j).addEntity(entityIn); this.getChunkFromChunkCoords(i, j).addEntity(entityIn);
this.loadedEntityList.add(entityIn); this.loadedEntityList.add(entityIn);
this.onEntityAdded(entityIn); this.onEntityAdded(entityIn);
@@ -1361,6 +1403,12 @@ @@ -1285,7 +1346,6 @@
return list;
}
- @SideOnly(Side.CLIENT)
public void removeWorldAccess(IWorldEventListener worldAccess)
{
this.worldAccesses.remove(worldAccess);
@@ -1348,19 +1408,38 @@
public int calculateSkylightSubtracted(float p_72967_1_)
{
+ float f = provider.getSunBrightnessFactor(p_72967_1_);
+ f = 1 - f;
+ return (int)(f * 11);
+ }
+
+ /**
+ * The current sun brightness factor for this dimension.
+ * 0.0f means no light at all, and 1.0f means maximum sunlight.
+ * Highly recommended for sunlight detection like solar panel.
+ *
+ * @return The current brightness factor
+ * */
+ public float getSunBrightnessFactor(float p_72967_1_)
+ {
float f = this.getCelestialAngle(p_72967_1_);
float f1 = 1.0F - (MathHelper.cos(f * ((float)Math.PI * 2F)) * 2.0F + 0.5F);
f1 = MathHelper.clamp_float(f1, 0.0F, 1.0F);
f1 = 1.0F - f1;
f1 = (float)((double)f1 * (1.0D - (double)(this.getRainStrength(p_72967_1_) * 5.0F) / 16.0D));
f1 = (float)((double)f1 * (1.0D - (double)(this.getThunderStrength(p_72967_1_) * 5.0F) / 16.0D));
- f1 = 1.0F - f1;
- return (int)(f1 * 11.0F);
+ return f1;
}
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public float getSunBrightness(float p_72971_1_) public float getSunBrightness(float p_72971_1_)
{ {
@ -134,7 +250,7 @@
float f = this.getCelestialAngle(p_72971_1_); float f = this.getCelestialAngle(p_72971_1_);
float f1 = 1.0F - (MathHelper.cos(f * ((float)Math.PI * 2F)) * 2.0F + 0.2F); float f1 = 1.0F - (MathHelper.cos(f * ((float)Math.PI * 2F)) * 2.0F + 0.2F);
f1 = MathHelper.clamp_float(f1, 0.0F, 1.0F); f1 = MathHelper.clamp_float(f1, 0.0F, 1.0F);
@@ -1373,6 +1421,12 @@ @@ -1373,6 +1452,12 @@
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public Vec3d getSkyColor(Entity entityIn, float partialTicks) public Vec3d getSkyColor(Entity entityIn, float partialTicks)
{ {
@ -142,12 +258,12 @@
+ } + }
+ +
+ @SideOnly(Side.CLIENT) + @SideOnly(Side.CLIENT)
+ public Vec3 getSkyColorBody(Entity entityIn, float partialTicks) + public Vec3d getSkyColorBody(Entity entityIn, float partialTicks)
+ { + {
float f = this.getCelestialAngle(partialTicks); float f = this.getCelestialAngle(partialTicks);
float f1 = MathHelper.cos(f * ((float)Math.PI * 2F)) * 2.0F + 0.5F; float f1 = MathHelper.cos(f * ((float)Math.PI * 2F)) * 2.0F + 0.5F;
f1 = MathHelper.clamp_float(f1, 0.0F, 1.0F); f1 = MathHelper.clamp_float(f1, 0.0F, 1.0F);
@@ -1380,9 +1434,7 @@ @@ -1380,9 +1465,7 @@
int j = MathHelper.floor_double(entityIn.posY); int j = MathHelper.floor_double(entityIn.posY);
int k = MathHelper.floor_double(entityIn.posZ); int k = MathHelper.floor_double(entityIn.posZ);
BlockPos blockpos = new BlockPos(i, j, k); BlockPos blockpos = new BlockPos(i, j, k);
@ -158,7 +274,7 @@
float f3 = (float)(l >> 16 & 255) / 255.0F; float f3 = (float)(l >> 16 & 255) / 255.0F;
float f4 = (float)(l >> 8 & 255) / 255.0F; float f4 = (float)(l >> 8 & 255) / 255.0F;
float f5 = (float)(l & 255) / 255.0F; float f5 = (float)(l & 255) / 255.0F;
@@ -1442,11 +1494,22 @@ @@ -1442,6 +1525,11 @@
public float getCurrentMoonPhaseFactor() public float getCurrentMoonPhaseFactor()
{ {
@ -170,20 +286,34 @@
return WorldProvider.moonPhaseFactors[this.provider.getMoonPhase(this.worldInfo.getWorldTime())]; return WorldProvider.moonPhaseFactors[this.provider.getMoonPhase(this.worldInfo.getWorldTime())];
} }
public float getCelestialAngleRadians(float partialTicks) @@ -1454,6 +1542,12 @@
@SideOnly(Side.CLIENT)
public Vec3d getCloudColour(float partialTicks)
{ {
+ return this.provider.drawClouds(partialTicks); + return this.provider.getCloudColor(partialTicks);
+ } + }
+ +
+ @SideOnly(Side.CLIENT) + @SideOnly(Side.CLIENT)
+ public Vec3 drawCloudsBody(float partialTicks) + public Vec3d getCloudColorBody(float partialTicks)
+ { + {
float f = this.getCelestialAngle(partialTicks); float f = this.getCelestialAngle(partialTicks);
return f * ((float)Math.PI * 2F); float f1 = MathHelper.cos(f * ((float)Math.PI * 2F)) * 2.0F + 0.5F;
} f1 = MathHelper.clamp_float(f1, 0.0F, 1.0F);
@@ -1454,6 +1517,12 @@ @@ -1509,9 +1603,9 @@
for (blockpos = new BlockPos(pos.getX(), chunk.getTopFilledSegment() + 16, pos.getZ()); blockpos.getY() >= 0; blockpos = blockpos1)
{
blockpos1 = blockpos.down();
- Material material = chunk.getBlockState(blockpos1).func_185904_a();
+ IBlockState state = chunk.getBlockState(blockpos1);
- if (material.blocksMovement() && material != Material.leaves)
+ if (state.func_185904_a().blocksMovement() && !state.getBlock().isLeaves(state, this, blockpos1) && !state.getBlock().isFoliage(this, blockpos1))
{
break;
}
@@ -1523,6 +1617,12 @@
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public Vec3d getCloudColour(float partialTicks) public float getStarBrightness(float partialTicks)
{ {
+ return this.provider.getStarBrightness(partialTicks); + return this.provider.getStarBrightness(partialTicks);
+ } + }
@ -192,26 +322,49 @@
+ public float getStarBrightnessBody(float partialTicks) + public float getStarBrightnessBody(float partialTicks)
+ { + {
float f = this.getCelestialAngle(partialTicks); float f = this.getCelestialAngle(partialTicks);
float f1 = MathHelper.cos(f * ((float)Math.PI * 2F)) * 2.0F + 0.5F; float f1 = 1.0F - (MathHelper.cos(f * ((float)Math.PI * 2F)) * 2.0F + 0.25F);
f1 = MathHelper.clamp_float(f1, 0.0F, 1.0F); f1 = MathHelper.clamp_float(f1, 0.0F, 1.0F);
@@ -1574,7 +1643,15 @@ @@ -1574,6 +1674,12 @@
entity.addEntityCrashInfo(crashreportcategory); entity.addEntityCrashInfo(crashreportcategory);
} }
- throw new ReportedException(crashreport);
+ if (net.minecraftforge.common.ForgeModContainer.removeErroringEntities) + if (net.minecraftforge.common.ForgeModContainer.removeErroringEntities)
+ { + {
+ net.minecraftforge.fml.common.FMLLog.severe(crashreport.getCompleteReport()); + net.minecraftforge.fml.common.FMLLog.severe(crashreport.getCompleteReport());
+ removeEntity(entity); + removeEntity(entity);
+ } + }
+ else + else
+ { throw new ReportedException(crashreport);
+ throw new ReportedException(crashreport);
+ }
} }
if (entity.isDead) @@ -1635,6 +1741,12 @@
@@ -1701,15 +1778,20 @@ CrashReport crashreport1 = CrashReport.makeCrashReport(throwable1, "Ticking entity");
CrashReportCategory crashreportcategory1 = crashreport1.makeCategory("Entity being ticked");
entity2.addEntityCrashInfo(crashreportcategory1);
+ if (net.minecraftforge.common.ForgeModContainer.removeErroringEntities)
+ {
+ net.minecraftforge.fml.common.FMLLog.severe(crashreport1.getCompleteReport());
+ removeEntity(entity2);
+ }
+ else
throw new ReportedException(crashreport1);
}
}
@@ -1684,6 +1796,13 @@
CrashReport crashreport2 = CrashReport.makeCrashReport(throwable, "Ticking block entity");
CrashReportCategory crashreportcategory2 = crashreport2.makeCategory("Block entity being ticked");
tileentity.addInfoToCrashReport(crashreportcategory2);
+ if (net.minecraftforge.common.ForgeModContainer.removeErroringTileEntities)
+ {
+ net.minecraftforge.fml.common.FMLLog.severe(crashreport2.getCompleteReport());
+ tileentity.invalidate();
+ this.removeTileEntity(tileentity.getPos());
+ }
+ else
throw new ReportedException(crashreport2);
}
}
@@ -1701,15 +1820,20 @@
} }
} }
@ -234,7 +387,7 @@
this.theProfiler.endStartSection("pendingBlockEntities"); this.theProfiler.endStartSection("pendingBlockEntities");
if (!this.addedTileEntityList.isEmpty()) if (!this.addedTileEntityList.isEmpty())
@@ -1748,7 +1830,8 @@ @@ -1748,7 +1872,8 @@
public boolean addTileEntity(TileEntity tile) public boolean addTileEntity(TileEntity tile)
{ {
@ -244,7 +397,7 @@
if (flag && tile instanceof ITickable) if (flag && tile instanceof ITickable)
{ {
@@ -1782,9 +1865,13 @@ @@ -1782,9 +1907,13 @@
{ {
int i = MathHelper.floor_double(entityIn.posX); int i = MathHelper.floor_double(entityIn.posX);
int j = MathHelper.floor_double(entityIn.posZ); int j = MathHelper.floor_double(entityIn.posZ);
@ -260,7 +413,16 @@
{ {
entityIn.lastTickPosX = entityIn.posX; entityIn.lastTickPosX = entityIn.posX;
entityIn.lastTickPosY = entityIn.posY; entityIn.lastTickPosY = entityIn.posY;
@@ -1983,6 +2070,10 @@ @@ -1913,7 +2042,7 @@
{
IBlockState iblockstate = this.getBlockState(blockpos$pooledmutableblockpos.func_185343_d(k1, l1, i2));
- if (iblockstate.func_185904_a() != Material.air)
+ if (iblockstate.getBlock().isAir(iblockstate, this, new BlockPos(k1, l1, i2)))
{
blockpos$pooledmutableblockpos.func_185344_t();
return true;
@@ -1983,6 +2112,10 @@
blockpos$pooledmutableblockpos.func_185344_t(); blockpos$pooledmutableblockpos.func_185344_t();
return true; return true;
} }
@ -271,16 +433,16 @@
} }
} }
} }
@@ -2022,6 +2113,16 @@ @@ -2022,6 +2155,16 @@
IBlockState iblockstate = this.getBlockState(blockpos$pooledmutableblockpos); IBlockState iblockstate = this.getBlockState(blockpos$pooledmutableblockpos);
Block block = iblockstate.getBlock(); Block block = iblockstate.getBlock();
+ Boolean result = block.isEntityInsideMaterial(this, blockpos$mutableblockpos, iblockstate, entityIn, (double)l, materialIn, false); + Boolean result = block.isEntityInsideMaterial(this, blockpos$pooledmutableblockpos, iblockstate, entityIn, (double)l, materialIn, false);
+ if (result != null && result == true) + if (result != null && result == true)
+ { + {
+ // Forge: When requested call blocks modifyAcceleration method, and more importantly cause this method to return true, which results in an entity being "inWater" + // Forge: When requested call blocks modifyAcceleration method, and more importantly cause this method to return true, which results in an entity being "inWater"
+ flag = true; + flag = true;
+ vec3 = block.modifyAcceleration(this, blockpos$mutableblockpos, entityIn, vec3); + vec3d = block.modifyAcceleration(this, blockpos$pooledmutableblockpos, entityIn, vec3d);
+ continue; + continue;
+ } + }
+ else if (result != null && result == false) continue; + else if (result != null && result == false) continue;
@ -288,7 +450,17 @@
if (iblockstate.func_185904_a() == materialIn) if (iblockstate.func_185904_a() == materialIn)
{ {
double d0 = (double)((float)(l1 + 1) - BlockLiquid.getLiquidHeightPercent(((Integer)iblockstate.getValue(BlockLiquid.LEVEL)).intValue())); double d0 = (double)((float)(l1 + 1) - BlockLiquid.getLiquidHeightPercent(((Integer)iblockstate.getValue(BlockLiquid.LEVEL)).intValue()));
@@ -2130,6 +2231,7 @@ @@ -2098,6 +2241,9 @@
{
IBlockState iblockstate = this.getBlockState(blockpos$pooledmutableblockpos.func_185343_d(k1, l1, i2));
+ Boolean result = iblockstate.getBlock().isAABBInsideMaterial(this, blockpos$pooledmutableblockpos, bb, materialIn);
+ if (result != null) return result;
+
if (iblockstate.func_185904_a() == materialIn)
{
int j2 = ((Integer)iblockstate.getValue(BlockLiquid.LEVEL)).intValue();
@@ -2130,6 +2276,7 @@
public Explosion newExplosion(Entity entityIn, double x, double y, double z, float strength, boolean isFlaming, boolean isSmoking) public Explosion newExplosion(Entity entityIn, double x, double y, double z, float strength, boolean isFlaming, boolean isSmoking)
{ {
Explosion explosion = new Explosion(this, entityIn, x, y, z, strength, isFlaming, isSmoking); Explosion explosion = new Explosion(this, entityIn, x, y, z, strength, isFlaming, isSmoking);
@ -296,7 +468,7 @@
explosion.doExplosionA(); explosion.doExplosionA();
explosion.doExplosionB(true); explosion.doExplosionB(true);
return explosion; return explosion;
@@ -2276,19 +2378,27 @@ @@ -2276,19 +2423,27 @@
else else
{ {
this.addTileEntity(tileEntityIn); this.addTileEntity(tileEntityIn);
@ -325,7 +497,7 @@
} }
else else
{ {
@@ -2301,6 +2411,7 @@ @@ -2301,6 +2456,7 @@
this.getChunkFromBlockCoords(pos).removeTileEntity(pos); this.getChunkFromBlockCoords(pos).removeTileEntity(pos);
} }
@ -333,7 +505,16 @@
} }
public void markTileEntityForRemoval(TileEntity tileEntityIn) public void markTileEntityForRemoval(TileEntity tileEntityIn)
@@ -2350,6 +2461,7 @@ @@ -2327,7 +2483,7 @@
if (chunk != null && !chunk.isEmpty())
{
IBlockState iblockstate = this.getBlockState(pos);
- return iblockstate.func_185904_a().isOpaque() && iblockstate.func_185917_h();
+ return iblockstate.getBlock().isNormalCube(iblockstate, this, pos);
}
else
{
@@ -2350,6 +2506,7 @@
{ {
this.spawnHostileMobs = hostile; this.spawnHostileMobs = hostile;
this.spawnPeacefulMobs = peaceful; this.spawnPeacefulMobs = peaceful;
@ -341,7 +522,7 @@
} }
public void tick() public void tick()
@@ -2359,6 +2471,11 @@ @@ -2359,6 +2516,11 @@
protected void calculateInitialWeather() protected void calculateInitialWeather()
{ {
@ -353,7 +534,7 @@
if (this.worldInfo.isRaining()) if (this.worldInfo.isRaining())
{ {
this.rainingStrength = 1.0F; this.rainingStrength = 1.0F;
@@ -2372,6 +2489,11 @@ @@ -2372,6 +2534,11 @@
protected void updateWeather() protected void updateWeather()
{ {
@ -365,7 +546,7 @@
if (!this.provider.getHasNoSky()) if (!this.provider.getHasNoSky())
{ {
if (!this.isRemote) if (!this.isRemote)
@@ -2491,6 +2613,11 @@ @@ -2491,6 +2658,11 @@
public boolean canBlockFreeze(BlockPos pos, boolean noWaterAdj) public boolean canBlockFreeze(BlockPos pos, boolean noWaterAdj)
{ {
@ -377,7 +558,7 @@
BiomeGenBase biomegenbase = this.getBiomeGenForCoords(pos); BiomeGenBase biomegenbase = this.getBiomeGenForCoords(pos);
float f = biomegenbase.getFloatTemperature(pos); float f = biomegenbase.getFloatTemperature(pos);
@@ -2532,6 +2659,11 @@ @@ -2532,6 +2704,11 @@
public boolean canSnowAt(BlockPos pos, boolean checkLight) public boolean canSnowAt(BlockPos pos, boolean checkLight)
{ {
@ -389,7 +570,40 @@
BiomeGenBase biomegenbase = this.getBiomeGenForCoords(pos); BiomeGenBase biomegenbase = this.getBiomeGenForCoords(pos);
float f = biomegenbase.getFloatTemperature(pos); float f = biomegenbase.getFloatTemperature(pos);
@@ -2789,10 +2921,10 @@ @@ -2549,7 +2726,7 @@
{
IBlockState iblockstate = this.getBlockState(pos);
- if (iblockstate.func_185904_a() == Material.air && Blocks.snow_layer.canPlaceBlockAt(this, pos))
+ if (iblockstate.getBlock().isAir(iblockstate, this, pos) && Blocks.snow_layer.canPlaceBlockAt(this, pos))
{
return true;
}
@@ -2581,10 +2758,11 @@
else
{
IBlockState iblockstate = this.getBlockState(pos);
- int i = lightType == EnumSkyBlock.SKY ? 0 : iblockstate.func_185906_d();
- int j = iblockstate.func_185891_c();
+ int blockLight = iblockstate.getBlock().getLightValue(iblockstate, this, pos);
+ int i = lightType == EnumSkyBlock.SKY ? 0 : blockLight;
+ int j = iblockstate.getBlock().getLightOpacity(iblockstate, this, pos);
- if (j >= 15 && iblockstate.func_185906_d() > 0)
+ if (j >= 15 && blockLight > 0)
{
j = 1;
}
@@ -2683,7 +2861,7 @@
int j4 = j2 + enumfacing.getFrontOffsetY();
int k4 = k2 + enumfacing.getFrontOffsetZ();
blockpos$pooledmutableblockpos.func_185343_d(i4, j4, k4);
- int l4 = Math.max(1, this.getBlockState(blockpos$pooledmutableblockpos).func_185891_c());
+ int l4 = Math.max(1, this.getBlockState(blockpos$pooledmutableblockpos).getBlock().getLightOpacity(this.getBlockState(blockpos$pooledmutableblockpos), this, blockpos$pooledmutableblockpos));
i3 = this.getLightFor(lightType, blockpos$pooledmutableblockpos);
if (i3 == l2 - l4 && j < this.lightUpdateBlockList.length)
@@ -2789,10 +2967,10 @@
public List<Entity> getEntitiesInAABBexcluding(Entity entityIn, AxisAlignedBB boundingBox, Predicate <? super Entity > predicate) public List<Entity> getEntitiesInAABBexcluding(Entity entityIn, AxisAlignedBB boundingBox, Predicate <? super Entity > predicate)
{ {
List<Entity> list = Lists.<Entity>newArrayList(); List<Entity> list = Lists.<Entity>newArrayList();
@ -404,7 +618,22 @@
for (int i1 = i; i1 <= j; ++i1) for (int i1 = i; i1 <= j; ++i1)
{ {
@@ -2926,11 +3058,13 @@ @@ -2845,10 +3023,10 @@
public <T extends Entity> List<T> getEntitiesWithinAABB(Class <? extends T > clazz, AxisAlignedBB aabb, Predicate <? super T > filter)
{
- int i = MathHelper.floor_double((aabb.minX - 2.0D) / 16.0D);
- int j = MathHelper.ceiling_double_int((aabb.maxX + 2.0D) / 16.0D);
- int k = MathHelper.floor_double((aabb.minZ - 2.0D) / 16.0D);
- int l = MathHelper.ceiling_double_int((aabb.maxZ + 2.0D) / 16.0D);
+ int i = MathHelper.floor_double((aabb.minX - MAX_ENTITY_RADIUS) / 16.0D);
+ int j = MathHelper.ceiling_double_int((aabb.maxX + MAX_ENTITY_RADIUS) / 16.0D);
+ int k = MathHelper.floor_double((aabb.minZ - MAX_ENTITY_RADIUS) / 16.0D);
+ int l = MathHelper.ceiling_double_int((aabb.maxZ + MAX_ENTITY_RADIUS) / 16.0D);
List<T> list = Lists.<T>newArrayList();
for (int i1 = i; i1 < j; ++i1)
@@ -2926,11 +3104,13 @@
public void loadEntities(Collection<Entity> entityCollection) public void loadEntities(Collection<Entity> entityCollection)
{ {
@ -421,7 +650,25 @@
} }
} }
@@ -3215,7 +3349,7 @@ @@ -2943,7 +3123,7 @@
{
IBlockState iblockstate = this.getBlockState(pos);
AxisAlignedBB axisalignedbb = p_175716_3_ ? null : blockIn.getDefaultState().func_185890_d(this, pos);
- return axisalignedbb != Block.field_185506_k && !this.checkNoEntityCollision(axisalignedbb.func_186670_a(pos), entityIn) ? false : (iblockstate.func_185904_a() == Material.circuits && blockIn == Blocks.anvil ? true : iblockstate.func_185904_a().isReplaceable() && blockIn.canReplace(this, pos, side, itemStackIn));
+ return axisalignedbb != Block.field_185506_k && !this.checkNoEntityCollision(axisalignedbb.func_186670_a(pos), entityIn) ? false : (iblockstate.func_185904_a() == Material.circuits && blockIn == Blocks.anvil ? true : iblockstate.getBlock().isReplaceable(this, pos) && blockIn.canReplace(this, pos, side, itemStackIn));
}
public int getSeaLevel()
@@ -3026,7 +3206,7 @@
public int getRedstonePower(BlockPos pos, EnumFacing facing)
{
IBlockState iblockstate = this.getBlockState(pos);
- return iblockstate.func_185915_l() ? this.getStrongPower(pos) : iblockstate.func_185911_a(this, pos, facing);
+ return iblockstate.getBlock().shouldCheckWeakPower(iblockstate, this, pos, facing) ? this.getStrongPower(pos) : iblockstate.func_185911_a(this, pos, facing);
}
public boolean isBlockPowered(BlockPos pos)
@@ -3215,7 +3395,7 @@
public long getSeed() public long getSeed()
{ {
@ -430,7 +677,7 @@
} }
public long getTotalWorldTime() public long getTotalWorldTime()
@@ -3225,17 +3359,17 @@ @@ -3225,17 +3405,17 @@
public long getWorldTime() public long getWorldTime()
{ {
@ -451,7 +698,7 @@
if (!this.getWorldBorder().contains(blockpos)) if (!this.getWorldBorder().contains(blockpos))
{ {
@@ -3247,7 +3381,7 @@ @@ -3247,7 +3427,7 @@
public void setSpawnPoint(BlockPos pos) public void setSpawnPoint(BlockPos pos)
{ {
@ -460,7 +707,7 @@
} }
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
@@ -3267,12 +3401,18 @@ @@ -3267,12 +3447,18 @@
if (!this.loadedEntityList.contains(entityIn)) if (!this.loadedEntityList.contains(entityIn))
{ {
@ -479,7 +726,7 @@
return true; return true;
} }
@@ -3366,8 +3506,7 @@ @@ -3366,8 +3552,7 @@
public boolean isBlockinHighHumidity(BlockPos pos) public boolean isBlockinHighHumidity(BlockPos pos)
{ {
@ -489,7 +736,7 @@
} }
public MapStorage getMapStorage() public MapStorage getMapStorage()
@@ -3426,12 +3565,12 @@ @@ -3426,12 +3611,12 @@
public int getHeight() public int getHeight()
{ {
@ -504,7 +751,7 @@
} }
public Random setRandomSeed(int p_72843_1_, int p_72843_2_, int p_72843_3_) public Random setRandomSeed(int p_72843_1_, int p_72843_2_, int p_72843_3_)
@@ -3481,7 +3620,7 @@ @@ -3481,7 +3666,7 @@
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public double getHorizon() public double getHorizon()
{ {
@ -513,7 +760,7 @@
} }
public void sendBlockBreakProgress(int breakerId, BlockPos pos, int progress) public void sendBlockBreakProgress(int breakerId, BlockPos pos, int progress)
@@ -3515,7 +3654,7 @@ @@ -3515,7 +3700,7 @@
public void updateComparatorOutputLevel(BlockPos pos, Block blockIn) public void updateComparatorOutputLevel(BlockPos pos, Block blockIn)
{ {
@ -522,7 +769,30 @@
{ {
BlockPos blockpos = pos.offset(enumfacing); BlockPos blockpos = pos.offset(enumfacing);
@@ -3600,6 +3739,83 @@ @@ -3523,18 +3708,14 @@
{
IBlockState iblockstate = this.getBlockState(blockpos);
- if (Blocks.unpowered_comparator.func_185547_C(iblockstate))
+ iblockstate.getBlock().onNeighborChange(this, blockpos, pos);
+ if (iblockstate.getBlock().isNormalCube(iblockstate, this, blockpos))
{
- iblockstate.getBlock().onNeighborBlockChange(this, blockpos, iblockstate, blockIn);
- }
- else if (iblockstate.func_185915_l())
- {
blockpos = blockpos.offset(enumfacing);
iblockstate = this.getBlockState(blockpos);
-
- if (Blocks.unpowered_comparator.func_185547_C(iblockstate))
+ if (iblockstate.getBlock().getWeakChanges(this, blockpos))
{
- iblockstate.getBlock().onNeighborBlockChange(this, blockpos, iblockstate, blockIn);
+ iblockstate.getBlock().onNeighborChange(this, blockpos, pos);
}
}
}
@@ -3600,6 +3781,83 @@
return i >= -k && i <= k && j >= -k && j <= k; return i >= -k && i <= k && j >= -k && j <= k;
} }

View File

@ -262,9 +262,9 @@
+ } + }
+ +
+ @SideOnly(Side.CLIENT) + @SideOnly(Side.CLIENT)
+ public Vec3d drawClouds(float partialTicks) + public Vec3d getCloudColor(float partialTicks)
+ { + {
+ return worldObj.drawCloudsBody(partialTicks); + return worldObj.getCloudColorBody(partialTicks);
+ } + }
+ +
+ /** + /**

View File

@ -246,7 +246,14 @@
} }
public BiomeGenBase getBiome(BlockPos pos, BiomeProvider chunkManager) public BiomeGenBase getBiome(BlockPos pos, BiomeProvider chunkManager)
@@ -1239,7 +1253,7 @@ @@ -1233,13 +1247,13 @@
BlockPos blockpos1 = blockpos.add(k, (j << 4) + i1, l);
boolean flag = i1 == 0 || i1 == 15 || k == 0 || k == 15 || l == 0 || l == 15;
- if (this.storageArrays[j] == field_186036_a && flag || this.storageArrays[j] != field_186036_a && this.storageArrays[j].get(k, i1, l).func_185904_a() == Material.air)
+ if (this.storageArrays[j] == field_186036_a && flag || this.storageArrays[j] != field_186036_a && this.storageArrays[j].get(k, i1, l).getBlock().isAir(this.storageArrays[j].get(k, i1, l), this.worldObj, blockpos1))
{
for (EnumFacing enumfacing : EnumFacing.values())
{ {
BlockPos blockpos2 = blockpos1.offset(enumfacing); BlockPos blockpos2 = blockpos1.offset(enumfacing);

View File

@ -1,211 +1,3 @@
++++ REJECTED PATCH 5
public boolean isAirBlock(BlockPos pos)
{
- return this.getBlockState(pos).getBlock().getMaterial() == Material.air;
+ return this.getBlockState(pos).getBlock().isAir(this, pos);
}
public boolean isBlockLoaded(BlockPos pos)
++++ END PATCH
++++ REJECTED PATCH 6
{
Chunk chunk = this.getChunkFromBlockCoords(pos);
Block block = newState.getBlock();
+
+ net.minecraftforge.common.util.BlockSnapshot blockSnapshot = null;
+ if (this.captureBlockSnapshots && !this.isRemote)
+ {
+ blockSnapshot = net.minecraftforge.common.util.BlockSnapshot.getBlockSnapshot(this, pos, flags);
+ this.capturedBlockSnapshots.add(blockSnapshot);
+ }
+ Block oldBlock = getBlockState(pos).getBlock();
+ int oldLight = oldBlock.getLightValue(this, pos);
+ int oldOpacity = oldBlock.getLightOpacity(this, pos);
+
IBlockState iblockstate = chunk.setBlockState(pos, newState);
if (iblockstate == null)
{
+ if (blockSnapshot != null) this.capturedBlockSnapshots.remove(blockSnapshot);
return false;
}
else
{
Block block1 = iblockstate.getBlock();
- if (block.getLightOpacity() != block1.getLightOpacity() || block.getLightValue() != block1.getLightValue())
+ if (block.getLightOpacity(this, pos) != oldOpacity || block.getLightValue(this, pos) != oldLight)
{
this.theProfiler.startSection("checkLight");
this.checkLight(pos);
this.theProfiler.endSection();
}
- if ((flags & 2) != 0 && (!this.isRemote || (flags & 4) == 0) && chunk.isPopulated())
+ if (blockSnapshot == null) // Don't notify clients or update physics while capturing blockstates
{
- this.markBlockForUpdate(pos);
+ this.markAndNotifyBlock(pos, chunk, iblockstate, newState, flags); // Modularize client and physic updates
}
+ return true;
+ }
+ }
+ }
+
+ // Split off from original setBlockState(BlockPos, IBlockState Block p_147465_4_, int) method in order to directly send client and physic updates
+ public void markAndNotifyBlock(BlockPos pos, Chunk chunk, IBlockState old, IBlockState new_, int flags)
+ {
+ if ((flags & 2) != 0 && (!this.isRemote || (flags & 4) == 0) && (chunk == null || chunk.isPopulated()))
+ {
+ this.markBlockForUpdate(pos);
+ }
+ {
+ {
if (!this.isRemote && (flags & 1) != 0)
{
- this.notifyNeighborsRespectDebug(pos, iblockstate.getBlock());
+ this.notifyNeighborsRespectDebug(pos, new_.getBlock());
- if (block.hasComparatorInputOverride())
+ if (new_.getBlock().hasComparatorInputOverride())
{
- this.updateComparatorOutputLevel(pos, block);
+ this.updateComparatorOutputLevel(pos, new_.getBlock());
}
}
-
- return true;
}
}
}
++++ END PATCH
++++ REJECTED PATCH 14
public int calculateSkylightSubtracted(float p_72967_1_)
{
+ float f = provider.getSunBrightnessFactor(p_72967_1_);
+ f = 1 - f;
+ return (int)(f * 11);
+ }
+
+ /**
+ * The current sun brightness factor for this dimension.
+ * 0.0f means no light at all, and 1.0f means maximum sunlight.
+ * Highly recommended for sunlight detection like solar panel.
+ *
+ * @return The current brightness factor
+ * */
+ public float getSunBrightnessFactor(float p_72967_1_)
+ {
float f = this.getCelestialAngle(p_72967_1_);
float f1 = 1.0F - (MathHelper.cos(f * (float)Math.PI * 2.0F) * 2.0F + 0.5F);
f1 = MathHelper.clamp_float(f1, 0.0F, 1.0F);
f1 = 1.0F - f1;
f1 = (float)((double)f1 * (1.0D - (double)(this.getRainStrength(p_72967_1_) * 5.0F) / 16.0D));
f1 = (float)((double)f1 * (1.0D - (double)(this.getThunderStrength(p_72967_1_) * 5.0F) / 16.0D));
- f1 = 1.0F - f1;
- return (int)(f1 * 11.0F);
+ return f1;
}
- @SideOnly(Side.CLIENT)
public void removeWorldAccess(IWorldAccess worldAccess)
{
this.worldAccesses.remove(worldAccess);
++++ END PATCH
++++ REJECTED PATCH 20
for (blockpos = new BlockPos(pos.getX(), chunk.getTopFilledSegment() + 16, pos.getZ()); blockpos.getY() >= 0; blockpos = blockpos1)
{
blockpos1 = blockpos.down();
- Material material = chunk.getBlock(blockpos1).getMaterial();
+ Block block = chunk.getBlock(blockpos1);
- if (material.blocksMovement() && material != Material.leaves)
+ if (block.getMaterial().blocksMovement() && !block.isLeaves(this, blockpos1) && !block.isFoliage(this, blockpos1))
{
break;
}
++++ END PATCH
++++ REJECTED PATCH 23
CrashReport crashreport1 = CrashReport.makeCrashReport(throwable1, "Ticking entity");
CrashReportCategory crashreportcategory2 = crashreport1.makeCategory("Entity being ticked");
entity2.addEntityCrashInfo(crashreportcategory2);
- throw new ReportedException(crashreport1);
+ if (net.minecraftforge.common.ForgeModContainer.removeErroringEntities)
+ {
+ net.minecraftforge.fml.common.FMLLog.severe(crashreport1.getCompleteReport());
+ removeEntity(entity2);
+ }
+ else
+ {
+ throw new ReportedException(crashreport1);
+ }
}
}
++++ END PATCH
++++ REJECTED PATCH 24
CrashReport crashreport2 = CrashReport.makeCrashReport(throwable, "Ticking block entity");
CrashReportCategory crashreportcategory1 = crashreport2.makeCategory("Block entity being ticked");
tileentity.addInfoToCrashReport(crashreportcategory1);
- throw new ReportedException(crashreport2);
+ if (net.minecraftforge.common.ForgeModContainer.removeErroringTileEntities)
+ {
+ net.minecraftforge.fml.common.FMLLog.severe(crashreport2.getCompleteReport());
+ tileentity.invalidate();
+ this.removeTileEntity(tileentity.getPos());
+ }
+ else
+ {
+ throw new ReportedException(crashreport2);
+ }
}
}
}
++++ END PATCH
++++ REJECTED PATCH 28
{
Block block = this.getBlockState(blockpos$mutableblockpos.set(k1, l1, i2)).getBlock();
- if (block.getMaterial() != Material.air)
+ if (!block.isAir(this, new BlockPos(k1, l1, i2)))
{
return true;
}
++++ END PATCH
++++ REJECTED PATCH 31
IBlockState iblockstate = this.getBlockState(blockpos$mutableblockpos.set(k1, l1, i2));
Block block = iblockstate.getBlock();
+ Boolean result = block.isAABBInsideMaterial(this, blockpos$mutableblockpos, bb, materialIn);
+ if (result != null) return result;
+
if (block.getMaterial() == materialIn)
{
int j2 = ((Integer)iblockstate.getValue(BlockLiquid.LEVEL)).intValue();
++++ END PATCH
++++ REJECTED PATCH 35
{
IBlockState iblockstate = blockAccess.getBlockState(pos);
Block block = iblockstate.getBlock();
- return block.getMaterial().isOpaque() && block.isFullCube() ? true : (block instanceof BlockStairs ? iblockstate.getValue(BlockStairs.HALF) == BlockStairs.EnumHalf.TOP : (block instanceof BlockSlab ? iblockstate.getValue(BlockSlab.HALF) == BlockSlab.EnumBlockHalf.TOP : (block instanceof BlockHopper ? true : (block instanceof BlockSnow ? ((Integer)iblockstate.getValue(BlockSnow.LAYERS)).intValue() == 7 : false))));
+ return block.isSideSolid(blockAccess, pos, EnumFacing.UP);
}
public boolean isBlockNormalCube(BlockPos pos, boolean _default)
++++ END PATCH
++++ REJECTED PATCH 36
else
{
Block block = this.getBlockState(pos).getBlock();
- return block.getMaterial().isOpaque() && block.isFullCube();
+ return block.isNormalCube(this, pos);
}
}
}
++++ END PATCH
++++ REJECTED PATCH 40 ++++ REJECTED PATCH 40
{ {
this.activeChunkSet.clear(); this.activeChunkSet.clear();
@ -215,105 +7,3 @@
for (int i = 0; i < this.playerEntities.size(); ++i) for (int i = 0; i < this.playerEntities.size(); ++i)
{ {
++++ END PATCH ++++ END PATCH
++++ REJECTED PATCH 41
Block block = chunkIn.getBlock(blockpos);
j = j + p_147467_1_;
k = k + p_147467_2_;
+ BlockPos worldpos = blockpos.add(p_147467_1_, 0, p_147467_2_);
- if (block.getMaterial() == Material.air && this.getLight(blockpos) <= this.rand.nextInt(8) && this.getLightFor(EnumSkyBlock.SKY, blockpos) <= 0)
+ if (block.isAir(this, worldpos) && this.getLight(worldpos) <= this.rand.nextInt(8) && this.getLightFor(EnumSkyBlock.SKY, worldpos) <= 0) //Forge: isAir, and fix arguments to world positions instead of chunk position
{
EntityPlayer entityplayer = this.getClosestPlayer((double)j + 0.5D, (double)l + 0.5D, (double)k + 0.5D, 8.0D);
++++ END PATCH
++++ REJECTED PATCH 44
{
Block block = this.getBlockState(pos).getBlock();
- if (block.getMaterial() == Material.air && Blocks.snow_layer.canPlaceBlockAt(this, pos))
+ if (block.isAir(this, pos) && Blocks.snow_layer.canPlaceBlockAt(this, pos))
{
return true;
}
++++ END PATCH
++++ REJECTED PATCH 45
else
{
Block block = this.getBlockState(pos).getBlock();
- int i = lightType == EnumSkyBlock.SKY ? 0 : block.getLightValue();
- int j = block.getLightOpacity();
+ int blockLight = block.getLightValue(this, pos);
+ int i = lightType == EnumSkyBlock.SKY ? 0 : blockLight;
+ int j = block.getLightOpacity(this, pos);
- if (j >= 15 && block.getLightValue() > 0)
+ if (j >= 15 && blockLight > 0)
{
j = 1;
}
++++ END PATCH
++++ REJECTED PATCH 47
public <T extends Entity> List<T> getEntitiesWithinAABB(Class <? extends T > clazz, AxisAlignedBB aabb, Predicate <? super T > filter)
{
- int i = MathHelper.floor_double((aabb.minX - 2.0D) / 16.0D);
- int j = MathHelper.floor_double((aabb.maxX + 2.0D) / 16.0D);
- int k = MathHelper.floor_double((aabb.minZ - 2.0D) / 16.0D);
- int l = MathHelper.floor_double((aabb.maxZ + 2.0D) / 16.0D);
+ int i = MathHelper.floor_double((aabb.minX - MAX_ENTITY_RADIUS) / 16.0D);
+ int j = MathHelper.floor_double((aabb.maxX + MAX_ENTITY_RADIUS) / 16.0D);
+ int k = MathHelper.floor_double((aabb.minZ - MAX_ENTITY_RADIUS) / 16.0D);
+ int l = MathHelper.floor_double((aabb.maxZ + MAX_ENTITY_RADIUS) / 16.0D);
List<T> list = Lists.<T>newArrayList();
for (int i1 = i; i1 <= j; ++i1)
++++ END PATCH
++++ REJECTED PATCH 49
{
Block block = this.getBlockState(pos).getBlock();
AxisAlignedBB axisalignedbb = p_175716_3_ ? null : blockIn.getCollisionBoundingBox(this, pos, blockIn.getDefaultState());
- return axisalignedbb != null && !this.checkNoEntityCollision(axisalignedbb, entityIn) ? false : (block.getMaterial() == Material.circuits && blockIn == Blocks.anvil ? true : block.getMaterial().isReplaceable() && blockIn.canReplace(this, pos, side, itemStackIn));
+ if (axisalignedbb != null && !this.checkNoEntityCollision(axisalignedbb, entityIn)) return false;
+ if (block.getMaterial() == Material.circuits && blockIn == Blocks.anvil) return true;
+ return block.isReplaceable(this, pos) && blockIn.canReplace(this, pos, side, itemStackIn);
}
public int getSeaLevel()
++++ END PATCH
++++ REJECTED PATCH 50
{
IBlockState iblockstate = this.getBlockState(pos);
Block block = iblockstate.getBlock();
- return block.isNormalCube() ? this.getStrongPower(pos) : block.getWeakPower(this, pos, iblockstate, facing);
+ return block.shouldCheckWeakPower(this, pos, facing) ? this.getStrongPower(pos) : block.getWeakPower(this, pos, iblockstate, facing);
}
public boolean isBlockPowered(BlockPos pos)
++++ END PATCH
++++ REJECTED PATCH 59
{
IBlockState iblockstate = this.getBlockState(blockpos);
- if (Blocks.unpowered_comparator.isAssociated(iblockstate.getBlock()))
+ iblockstate.getBlock().onNeighborChange(this, blockpos, pos);
+ if (iblockstate.getBlock().isNormalCube(this, blockpos))
{
- iblockstate.getBlock().onNeighborBlockChange(this, blockpos, iblockstate, blockIn);
- }
- else if (iblockstate.getBlock().isNormalCube())
- {
- blockpos = blockpos.offset(enumfacing);
- iblockstate = this.getBlockState(blockpos);
-
- if (Blocks.unpowered_comparator.isAssociated(iblockstate.getBlock()))
+ BlockPos posOther = blockpos.offset(enumfacing);
+ Block other = getBlockState(posOther).getBlock();
+ if (other.getWeakChanges(this, posOther))
{
- iblockstate.getBlock().onNeighborBlockChange(this, blockpos, iblockstate, blockIn);
+ other.onNeighborChange(this, posOther, pos);
}
}
}
++++ END PATCH

View File

@ -25,6 +25,7 @@ import net.minecraft.util.DamageSource;
import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumActionResult;
import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand; import net.minecraft.util.EnumHand;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.SoundEvent; import net.minecraft.util.SoundEvent;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.RayTraceResult;
@ -336,9 +337,9 @@ public class ForgeEventFactory
return event.canUpdate; return event.canUpdate;
} }
public static PlaySoundAtEntityEvent onPlaySoundAtEntity(Entity entity, SoundEvent name, float volume, float pitch) public static PlaySoundAtEntityEvent onPlaySoundAtEntity(Entity entity, SoundEvent name, SoundCategory category, float volume, float pitch)
{ {
PlaySoundAtEntityEvent event = new PlaySoundAtEntityEvent(entity, name, volume, pitch); PlaySoundAtEntityEvent event = new PlaySoundAtEntityEvent(entity, name, category, volume, pitch);
MinecraftForge.EVENT_BUS.post(event); MinecraftForge.EVENT_BUS.post(event);
return event; return event;
} }

View File

@ -2,6 +2,7 @@ package net.minecraftforge.event.entity;
import net.minecraftforge.fml.common.eventhandler.Cancelable; import net.minecraftforge.fml.common.eventhandler.Cancelable;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.SoundEvent; import net.minecraft.util.SoundEvent;
/** /**
@ -28,27 +29,31 @@ import net.minecraft.util.SoundEvent;
public class PlaySoundAtEntityEvent extends EntityEvent public class PlaySoundAtEntityEvent extends EntityEvent
{ {
private SoundEvent name; private SoundEvent name;
private SoundCategory category;
private final float volume; private final float volume;
private final float pitch; private final float pitch;
private float newVolume; private float newVolume;
private float newPitch; private float newPitch;
public PlaySoundAtEntityEvent(Entity entity, SoundEvent name, float volume, float pitch) public PlaySoundAtEntityEvent(Entity entity, SoundEvent name, SoundCategory category, float volume, float pitch)
{ {
super(entity); super(entity);
this.name = name; this.name = name;
this.category = category;
this.volume = volume; this.volume = volume;
this.pitch = pitch; this.pitch = pitch;
this.newVolume = volume; this.newVolume = volume;
this.newPitch = pitch; this.newPitch = pitch;
} }
public SoundEvent getSound(){ return this.name; } public SoundEvent getSound() { return this.name; }
public SoundCategory getCategory() { return this.category; }
public float getDefaultVolume() { return this.volume; } public float getDefaultVolume() { return this.volume; }
public float getDefaultPitch() { return this.pitch; } public float getDefaultPitch() { return this.pitch; }
public float getVolume() { return this.newVolume; } public float getVolume() { return this.newVolume; }
public float getPitch() { return this.newPitch; } public float getPitch() { return this.newPitch; }
public void setSound(SoundEvent value) { this.name = value; } public void setSound(SoundEvent value) { this.name = value; }
public void setCategory(SoundCategory category) { this.category = category; }
public void setVolume(float value) { this.newVolume = value; } public void setVolume(float value) { this.newVolume = value; }
public void setPitch(float value) { this.newPitch = value; } public void setPitch(float value) { this.newPitch = value; }
} }