Updates to TileEntityRift

1. Fixed the bug where the setting that controls whether Endermen can
spawn from rifts was being ignored. It was never checked at all.
2. Cleaned up some formatting and annotations.
3. Removed call to World.removeBlockTileEntity() following a call to
World.setBlockToAir(). The latter function already handles removing the
tile entity.
This commit is contained in:
SenseiKiwi 2014-06-26 05:40:35 -04:00
parent 96238d6b53
commit 364ba11f81

View file

@ -1,17 +1,10 @@
package StevenDimDoors.mod_pocketDim.tileentities; package StevenDimDoors.mod_pocketDim.tileentities;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.network.PacketDispatcher;
import net.minecraft.block.Block;
import net.minecraft.entity.DataWatcher;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.monster.EntityEnderman; import net.minecraft.entity.monster.EntityEnderman;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
@ -19,12 +12,8 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.INetworkManager; import net.minecraft.network.INetworkManager;
import net.minecraft.network.packet.Packet; import net.minecraft.network.packet.Packet;
import net.minecraft.network.packet.Packet132TileEntityData; import net.minecraft.network.packet.Packet132TileEntityData;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.MathHelper; import net.minecraft.util.MathHelper;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
import StevenDimDoors.mod_pocketDim.ServerPacketHandler; import StevenDimDoors.mod_pocketDim.ServerPacketHandler;
import StevenDimDoors.mod_pocketDim.mod_pocketDim; import StevenDimDoors.mod_pocketDim.mod_pocketDim;
import StevenDimDoors.mod_pocketDim.config.DDProperties; import StevenDimDoors.mod_pocketDim.config.DDProperties;
@ -65,18 +54,17 @@ public class TileEntityRift extends DDTileEntityBase
@Override @Override
public void updateEntity() public void updateEntity()
{ {
//Determines if rift should render white closing particles and spread closing effect to other rifts nearby // Determines if rift should render white closing particles and spread closing effect to other rifts nearby
if (this.shouldClose) if (this.shouldClose)
{ {
closeRift(); closeRift();
} }
else if( PocketManager.getLink(xCoord, yCoord, zCoord, worldObj.provider.dimensionId) == null) else if (PocketManager.getLink(xCoord, yCoord, zCoord, worldObj.provider.dimensionId) == null)
{ {
this.invalidate(); this.invalidate();
if (worldObj.getBlockId(xCoord, yCoord, zCoord) == mod_pocketDim.blockRift.blockID) if (worldObj.getBlockId(xCoord, yCoord, zCoord) == mod_pocketDim.blockRift.blockID)
{ {
worldObj.setBlockToAir(xCoord, yCoord, zCoord); worldObj.setBlockToAir(xCoord, yCoord, zCoord);
worldObj.removeBlockTileEntity(xCoord, yCoord, zCoord);
this.invalidate(); this.invalidate();
return; return;
} }
@ -101,21 +89,19 @@ public class TileEntityRift extends DDTileEntityBase
**/ **/
//This code should execute once every 10 seconds //This code should execute once every 10 seconds
if (updateTimer > 200) if (updateTimer >= 200)
{ {
this.spawnEndermen(); this.spawnEndermen(mod_pocketDim.properties);
this.grow(mod_pocketDim.properties); this.grow(mod_pocketDim.properties);
updateTimer = 0; updateTimer = 0;
} }
else if(updateTimer==0) else if (updateTimer == 0)
{ {
this.calculateOldParticleOffset(); //this also calculates the distance for the particle stuff. this.calculateOldParticleOffset(); //this also calculates the distance for the particle stuff.
} }
updateTimer++; updateTimer++;
} }
private void clearBlocksOnRift() private void clearBlocksOnRift()
{ {
//clears blocks for the new rending effect //clears blocks for the new rending effect
@ -138,25 +124,23 @@ public class TileEntityRift extends DDTileEntityBase
} }
} }
private void spawnEndermen() private void spawnEndermen(DDProperties properties)
{ {
if (worldObj.isRemote) if (worldObj.isRemote || !properties.RiftsSpawnEndermenEnabled)
{ {
return; return;
} }
NewDimData dimension = PocketManager.getDimensionData(worldObj); // Ensure that this rift is only spawning one Enderman at a time, to prevent hordes of Endermen
//Ensure that this rift is only spawning one enderman at a time, to prevent hordes of endermen
Entity entity = worldObj.getEntityByID(this.spawnedEndermenID); Entity entity = worldObj.getEntityByID(this.spawnedEndermenID);
if (entity != null && entity instanceof EntityEnderman) if (entity != null && entity instanceof EntityEnderman)
{ {
return; return;
} }
//enderman will only spawn in groups of rifts
if (random.nextInt(MAX_ENDERMAN_SPAWNING_CHANCE) < ENDERMAN_SPAWNING_CHANCE) if (random.nextInt(MAX_ENDERMAN_SPAWNING_CHANCE) < ENDERMAN_SPAWNING_CHANCE)
{ {
// Endermen will only spawn from groups of rifts
if (updateNearestRift()) if (updateNearestRift())
{ {
List<Entity> list = worldObj.getEntitiesWithinAABB(EntityEnderman.class, List<Entity> list = worldObj.getEntitiesWithinAABB(EntityEnderman.class,
@ -210,10 +194,10 @@ public class TileEntityRift extends DDTileEntityBase
if (riftCloseTimer > 40) if (riftCloseTimer > 40)
{ {
this.invalidate(); this.invalidate();
if(!this.worldObj.isRemote) if (!this.worldObj.isRemote)
{ {
DimLink link = PocketManager.getLink(this.xCoord, this.yCoord, this.zCoord, worldObj); DimLink link = PocketManager.getLink(this.xCoord, this.yCoord, this.zCoord, worldObj);
if(link!=null) if (link != null)
{ {
dimension.deleteLink(link); dimension.deleteLink(link);
} }
@ -228,8 +212,7 @@ public class TileEntityRift extends DDTileEntityBase
private void calculateOldParticleOffset() private void calculateOldParticleOffset()
{ {
updateNearestRift(); if (updateNearestRift())
if (nearestRiftData != null)
{ {
Point4D location = nearestRiftData.source(); Point4D location = nearestRiftData.source();
this.xOffset = this.xCoord - location.getX(); this.xOffset = this.xCoord - location.getX();
@ -371,6 +354,7 @@ public class TileEntityRift extends DDTileEntityBase
nbt.setInteger("spawnedEndermenID", this.spawnedEndermenID); nbt.setInteger("spawnedEndermenID", this.spawnedEndermenID);
} }
@Override
public Packet getDescriptionPacket() public Packet getDescriptionPacket()
{ {
if (PocketManager.getLink(xCoord, yCoord, zCoord, worldObj) != null) if (PocketManager.getLink(xCoord, yCoord, zCoord, worldObj) != null)