2013-08-31 22:43:18 +02:00
|
|
|
package StevenDimDoors.mod_pocketDim.blocks;
|
2013-02-18 03:46:16 +01:00
|
|
|
|
|
|
|
import net.minecraft.block.material.Material;
|
2013-09-08 21:22:03 +02:00
|
|
|
import net.minecraft.client.particle.EntityFX;
|
2013-02-18 03:46:16 +01:00
|
|
|
import net.minecraft.entity.Entity;
|
2013-09-08 21:22:03 +02:00
|
|
|
import net.minecraft.entity.EntityLiving;
|
2013-02-18 03:46:16 +01:00
|
|
|
import net.minecraft.util.AxisAlignedBB;
|
|
|
|
import net.minecraft.world.World;
|
2013-09-07 02:57:00 +02:00
|
|
|
import StevenDimDoors.mod_pocketDim.DDProperties;
|
2013-09-05 22:31:32 +02:00
|
|
|
import StevenDimDoors.mod_pocketDim.core.DDTeleporter;
|
2013-09-02 17:47:12 +02:00
|
|
|
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
2013-09-06 08:07:47 +02:00
|
|
|
import StevenDimDoors.mod_pocketDim.core.LinkTypes;
|
|
|
|
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
2013-08-29 08:14:24 +02:00
|
|
|
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
2013-02-18 03:46:16 +01:00
|
|
|
|
2013-09-07 02:57:00 +02:00
|
|
|
public class TransientDoor extends BaseDimDoor
|
2013-02-18 03:46:16 +01:00
|
|
|
{
|
2013-09-07 02:57:00 +02:00
|
|
|
public TransientDoor(int blockID, Material material, DDProperties properties)
|
2013-02-18 03:46:16 +01:00
|
|
|
{
|
2013-09-07 02:57:00 +02:00
|
|
|
super(blockID, material, properties);
|
2013-02-18 03:46:16 +01:00
|
|
|
}
|
2013-09-08 21:22:03 +02:00
|
|
|
|
2013-02-18 03:46:16 +01:00
|
|
|
@Override
|
2013-09-06 08:07:47 +02:00
|
|
|
public void enterDimDoor(World world, int x, int y, int z, Entity entity)
|
2013-08-29 08:14:24 +02:00
|
|
|
{
|
2013-09-08 21:22:03 +02:00
|
|
|
// We need to ignore particle entities
|
|
|
|
if (world.isRemote || entity instanceof EntityFX)
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
2013-08-29 08:14:24 +02:00
|
|
|
|
2013-09-08 21:22:03 +02:00
|
|
|
// Check that this is the top block of the door
|
|
|
|
if (world.getBlockId(x, y - 1, z) == this.blockID)
|
2013-08-29 08:14:24 +02:00
|
|
|
{
|
2013-09-08 21:22:03 +02:00
|
|
|
boolean canUse = true;
|
|
|
|
int metadata = world.getBlockMetadata(x, y - 1, z);
|
|
|
|
if (canUse && entity instanceof EntityLiving)
|
|
|
|
{
|
|
|
|
// Don't check for non-living entities since it might not work right
|
|
|
|
canUse = BaseDimDoor.isEntityFacingDoor(metadata, (EntityLiving) entity);
|
|
|
|
}
|
|
|
|
if (canUse)
|
2013-02-18 03:46:16 +01:00
|
|
|
{
|
2013-09-08 21:22:03 +02:00
|
|
|
// Teleport the entity through the link, if it exists
|
|
|
|
DimLink link = PocketManager.getLink(x, y, z, world.provider.dimensionId);
|
|
|
|
if (link != null)
|
|
|
|
{
|
|
|
|
DDTeleporter.traverseDimDoor(world, link, entity);
|
|
|
|
// Turn the door into a rift AFTER teleporting the player.
|
|
|
|
// The door's orientation may be necessary for the teleport.
|
|
|
|
world.setBlock(x, y, z, properties.RiftBlockID);
|
|
|
|
world.setBlockToAir(x, y - 1, z);
|
|
|
|
}
|
2013-08-29 08:14:24 +02:00
|
|
|
}
|
|
|
|
}
|
2013-09-08 21:22:03 +02:00
|
|
|
else if (world.getBlockId(x, y + 1, z) == this.blockID)
|
|
|
|
{
|
|
|
|
enterDimDoor(world, x, y + 1, z, entity);
|
|
|
|
}
|
2013-09-06 08:07:47 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2013-09-09 03:05:06 +02:00
|
|
|
public void placeLink(World world, int x, int y, int z)
|
2013-09-06 08:07:47 +02:00
|
|
|
{
|
|
|
|
if (!world.isRemote && world.getBlockId(x, y - 1, z) == this.blockID)
|
|
|
|
{
|
|
|
|
NewDimData dimension = PocketManager.getDimensionData(world);
|
|
|
|
DimLink link = dimension.getLink(x, y, z);
|
2013-09-07 02:57:00 +02:00
|
|
|
if (link == null && dimension.isPocketDimension())
|
2013-09-06 08:07:47 +02:00
|
|
|
{
|
|
|
|
dimension.createLink(x, y, z, LinkTypes.SAFE_EXIT);
|
|
|
|
}
|
|
|
|
}
|
2013-08-29 08:14:24 +02:00
|
|
|
}
|
2013-09-08 21:22:03 +02:00
|
|
|
|
2013-09-06 08:07:47 +02:00
|
|
|
@Override
|
|
|
|
public int getDrops()
|
2013-08-29 08:14:24 +02:00
|
|
|
{
|
|
|
|
return 0;
|
|
|
|
}
|
2013-09-07 02:57:00 +02:00
|
|
|
|
|
|
|
@Override
|
2013-09-06 08:07:47 +02:00
|
|
|
public boolean isCollidable()
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
2013-02-18 03:46:16 +01:00
|
|
|
|
2013-09-07 02:57:00 +02:00
|
|
|
@Override
|
2013-09-06 08:07:47 +02:00
|
|
|
public AxisAlignedBB getCollisionBoundingBoxFromPool(World par1World, int par2, int par3, int par4)
|
2013-08-29 08:14:24 +02:00
|
|
|
{
|
2013-09-06 08:07:47 +02:00
|
|
|
return null;
|
2013-08-29 08:14:24 +02:00
|
|
|
}
|
2013-02-18 03:46:16 +01:00
|
|
|
|
2013-09-07 02:57:00 +02:00
|
|
|
@Override
|
2013-08-29 08:14:24 +02:00
|
|
|
public int getRenderType()
|
|
|
|
{
|
|
|
|
return 8;
|
|
|
|
}
|
2013-02-18 03:46:16 +01:00
|
|
|
}
|