Fixed Balloons screwing up (again)

This commit is contained in:
Aidan Brady 2014-01-05 15:06:54 -05:00
parent 4b1adf76bc
commit 30055fc3ed
2 changed files with 51 additions and 5 deletions

View file

@ -276,6 +276,16 @@ public class Coord4D
return world.getChunkFromBlockCoords(xCoord >> 4, zCoord >> 4); return world.getChunkFromBlockCoords(xCoord >> 4, zCoord >> 4);
} }
/**
* Whether or not the block this Coord4D represents is an air block.
* @param world - world this Coord4D is in
* @return if this Coord4D is an air block
*/
public boolean isAirBlock(IBlockAccess world)
{
return world.isAirBlock(xCoord, yCoord, zCoord);
}
@Override @Override
public Coord4D clone() public Coord4D clone()
{ {

View file

@ -19,6 +19,7 @@ import cpw.mods.fml.common.registry.IEntityAdditionalSpawnData;
public class EntityBalloon extends Entity implements IEntityAdditionalSpawnData public class EntityBalloon extends Entity implements IEntityAdditionalSpawnData
{ {
public EnumColor color = EnumColor.DARK_BLUE; public EnumColor color = EnumColor.DARK_BLUE;
public Coord4D latched; public Coord4D latched;
public EntityBalloon(World world) public EntityBalloon(World world)
@ -31,6 +32,11 @@ public class EntityBalloon extends Entity implements IEntityAdditionalSpawnData
yOffset = height / 2.0F; yOffset = height / 2.0F;
setSize(0.25F, 0.25F); setSize(0.25F, 0.25F);
motionY = 0.04; motionY = 0.04;
dataWatcher.addObject(2, new Byte((byte)0));
dataWatcher.addObject(3, new Integer(0)); /* Latched X */
dataWatcher.addObject(4, new Integer(0)); /* Latched Y */
dataWatcher.addObject(5, new Integer(0)); /* Latched Z */
} }
public EntityBalloon(World world, double x, double y, double z, EnumColor c) public EntityBalloon(World world, double x, double y, double z, EnumColor c)
@ -58,6 +64,11 @@ public class EntityBalloon extends Entity implements IEntityAdditionalSpawnData
prevPosZ = posZ; prevPosZ = posZ;
color = c; color = c;
dataWatcher.updateObject(2, new Byte(latched != null ? (byte)1 : (byte)0)); /* Is latched */
dataWatcher.updateObject(3, new Integer(latched != null ? latched.xCoord : 0)); /* Latched X */
dataWatcher.updateObject(4, new Integer(latched != null ? latched.yCoord : 0)); /* Latched Y */
dataWatcher.updateObject(5, new Integer(latched != null ? latched.zCoord : 0)); /* Latched Z */
} }
@Override @Override
@ -73,9 +84,34 @@ public class EntityBalloon extends Entity implements IEntityAdditionalSpawnData
return; return;
} }
if(latched != null && (latched.exists(worldObj) && latched.getBlockId(worldObj) == 0)) if(worldObj.isRemote)
{
if(dataWatcher.getWatchableObjectByte(2) == 1)
{
latched = new Coord4D(dataWatcher.getWatchableObjectInt(3), dataWatcher.getWatchableObjectInt(4), dataWatcher.getWatchableObjectInt(5), worldObj.provider.dimensionId);
}
else {
latched = null;
}
}
else {
if(ticksExisted == 1)
{
dataWatcher.updateObject(2, new Byte(latched != null ? (byte)1 : (byte)0)); /* Is latched */
dataWatcher.updateObject(3, new Integer(latched != null ? latched.xCoord : 0)); /* Latched X */
dataWatcher.updateObject(4, new Integer(latched != null ? latched.yCoord : 0)); /* Latched Y */
dataWatcher.updateObject(5, new Integer(latched != null ? latched.zCoord : 0)); /* Latched Z */
}
}
if(!worldObj.isRemote)
{
if(latched != null && (latched.exists(worldObj) && latched.isAirBlock(worldObj)))
{ {
latched = null; latched = null;
dataWatcher.updateObject(2, (byte)0); /* Is latched */
}
} }
if(latched == null) if(latched == null)
@ -155,7 +191,7 @@ public class EntityBalloon extends Entity implements IEntityAdditionalSpawnData
if(nbtTags.hasKey("latched")) if(nbtTags.hasKey("latched"))
{ {
latched = Coord4D.read(nbtTags); latched = Coord4D.read(nbtTags.getCompoundTag("latched"));
} }
} }
@ -173,7 +209,7 @@ public class EntityBalloon extends Entity implements IEntityAdditionalSpawnData
if(latched != null) if(latched != null)
{ {
latched.write(nbtTags); nbtTags.setCompoundTag("latched", latched.write(new NBTTagCompound()));
} }
} }