Hbm-s-Nuclear-Tech-GIT/com/hbm/tileentity/machine/TileEntityVaultDoor.java
2018-09-18 19:20:51 +02:00

298 lines
10 KiB
Java

package com.hbm.tileentity.machine;
import com.hbm.blocks.ModBlocks;
import com.hbm.blocks.machine.DummyBlockVault;
import com.hbm.packet.AuxGaugePacket;
import com.hbm.packet.PacketDispatcher;
import com.hbm.packet.TEVaultPacket;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.init.Blocks;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
public class TileEntityVaultDoor extends TileEntityLockableBase {
public boolean isOpening = false;
//0: closed, 1: opening/closing, 2:open
public int state = 0;
public long sysTime;
private int timer = 0;
public int type;
public static final int maxTypes = 6;
@Override
public AxisAlignedBB getRenderBoundingBox() {
return TileEntity.INFINITE_EXTENT_AABB;
}
@Override
@SideOnly(Side.CLIENT)
public double getMaxRenderDistanceSquared()
{
return 65536.0D;
}
@Override
public void updateEntity() {
if(!worldObj.isRemote) {
if(isOpening && state == 1) {
if(timer == 0)
this.worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, "hbm:block.vaultScrapeNew", 1.0F, 1.0F);
if(timer == 45)
this.worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, "hbm:block.vaultThudNew", 1.0F, 1.0F);
if(timer == 55)
this.worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, "hbm:block.vaultThudNew", 1.0F, 1.0F);
if(timer == 65)
this.worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, "hbm:block.vaultThudNew", 1.0F, 1.0F);
if(timer == 75)
this.worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, "hbm:block.vaultThudNew", 1.0F, 1.0F);
if(timer == 85)
this.worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, "hbm:block.vaultThudNew", 1.0F, 1.0F);
if(timer == 95)
this.worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, "hbm:block.vaultThudNew", 1.0F, 1.0F);
if(timer == 105)
this.worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, "hbm:block.vaultThudNew", 1.0F, 1.0F);
if(timer == 115)
this.worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, "hbm:block.vaultThudNew", 1.0F, 1.0F);
}
if(!isOpening && state == 1) {
if(timer == 0)
this.worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, "hbm:block.vaultThudNew", 1.0F, 1.0F);
if(timer == 10)
this.worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, "hbm:block.vaultThudNew", 1.0F, 1.0F);
if(timer == 20)
this.worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, "hbm:block.vaultThudNew", 1.0F, 1.0F);
if(timer == 30)
this.worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, "hbm:block.vaultThudNew", 1.0F, 1.0F);
if(timer == 40)
this.worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, "hbm:block.vaultThudNew", 1.0F, 1.0F);
if(timer == 50)
this.worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, "hbm:block.vaultThudNew", 1.0F, 1.0F);
if(timer == 60)
this.worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, "hbm:block.vaultThudNew", 1.0F, 1.0F);
if(timer == 70)
this.worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, "hbm:block.vaultThudNew", 1.0F, 1.0F);
if(timer == 80)
this.worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, "hbm:block.vaultScrapeNew", 1.0F, 1.0F);
}
if(state != 1) {
timer = 0;
} else {
timer++;
if(timer >= 120) {
if(isOpening)
finishOpen();
else
finishClose();
}
}
PacketDispatcher.wrapper.sendToAll(new TEVaultPacket(xCoord, yCoord, zCoord, isOpening, state, 0, type));
}
}
public void open() {
if(state == 0) {
PacketDispatcher.wrapper.sendToAll(new TEVaultPacket(xCoord, yCoord, zCoord, isOpening, state, 1, type));
isOpening = true;
state = 1;
openHatch();
}
}
public void finishOpen() {
state = 2;
}
public void close() {
if(state == 2) {
PacketDispatcher.wrapper.sendToAll(new TEVaultPacket(xCoord, yCoord, zCoord, isOpening, state, 1, type));
isOpening = false;
state = 1;
closeHatch();
}
}
public void finishClose() {
state = 0;
}
public boolean canOpen() {
return state == 0;
}
public boolean canClose() {
return state == 2 && isHatchFree();
}
public void tryToggle() {
if(canOpen())
open();
else if(canClose())
close();
}
public boolean placeDummy(int x, int y, int z) {
if(!worldObj.getBlock(x, y, z).isReplaceable(worldObj, x, y, z))
return false;
worldObj.setBlock(x, y, z, ModBlocks.dummy_block_vault);
TileEntity te = worldObj.getTileEntity(x, y, z);
if(te instanceof TileEntityDummy) {
TileEntityDummy dummy = (TileEntityDummy)te;
dummy.targetX = xCoord;
dummy.targetY = yCoord;
dummy.targetZ = zCoord;
}
return true;
}
public void removeDummy(int x, int y, int z) {
if(worldObj.getBlock(x, y, z) == ModBlocks.dummy_block_vault) {
DummyBlockVault.safeBreak = true;
worldObj.setBlock(x, y, z, Blocks.air);
DummyBlockVault.safeBreak = false;
}
}
private boolean isHatchFree() {
if(this.getBlockMetadata() == 2 || this.getBlockMetadata() == 3)
return checkNS();
else if(this.getBlockMetadata() == 4 || this.getBlockMetadata() == 5)
return checkEW();
else
return true;
}
private void closeHatch() {
if(this.getBlockMetadata() == 2 || this.getBlockMetadata() == 3)
fillNS();
else if(this.getBlockMetadata() == 4 || this.getBlockMetadata() == 5)
fillEW();
}
private void openHatch() {
if(this.getBlockMetadata() == 2 || this.getBlockMetadata() == 3)
removeNS();
else if(this.getBlockMetadata() == 4 || this.getBlockMetadata() == 5)
removeEW();
}
private boolean checkNS() {
return worldObj.getBlock(xCoord - 1, yCoord + 1, zCoord).isReplaceable(worldObj, xCoord - 1, yCoord + 1, zCoord) &&
worldObj.getBlock(xCoord, yCoord + 1, zCoord).isReplaceable(worldObj, xCoord, yCoord + 1, zCoord) &&
worldObj.getBlock(xCoord + 1, yCoord + 1, zCoord).isReplaceable(worldObj, xCoord + 1, yCoord + 1, zCoord) &&
worldObj.getBlock(xCoord - 1, yCoord + 2, zCoord).isReplaceable(worldObj, xCoord - 1, yCoord + 2, zCoord) &&
worldObj.getBlock(xCoord, yCoord + 2, zCoord).isReplaceable(worldObj, xCoord, yCoord + 2, zCoord) &&
worldObj.getBlock(xCoord + 1, yCoord + 2, zCoord).isReplaceable(worldObj, xCoord + 1, yCoord + 2, zCoord) &&
worldObj.getBlock(xCoord - 1, yCoord + 3, zCoord).isReplaceable(worldObj, xCoord - 1, yCoord + 3, zCoord) &&
worldObj.getBlock(xCoord, yCoord + 3, zCoord).isReplaceable(worldObj, xCoord, yCoord + 3, zCoord) &&
worldObj.getBlock(xCoord + 1, yCoord + 3, zCoord).isReplaceable(worldObj, xCoord + 1, yCoord + 3, zCoord);
}
private boolean checkEW() {
return worldObj.getBlock(xCoord, yCoord + 1, zCoord - 1).isReplaceable(worldObj, xCoord, yCoord + 1, zCoord -1) &&
worldObj.getBlock(xCoord, yCoord + 1, zCoord).isReplaceable(worldObj, xCoord, yCoord, zCoord) &&
worldObj.getBlock(xCoord, yCoord + 1, zCoord + 1).isReplaceable(worldObj, xCoord, yCoord + 1, zCoord + 1) &&
worldObj.getBlock(xCoord, yCoord + 2, zCoord - 1).isReplaceable(worldObj, xCoord, yCoord + 2, zCoord - 1) &&
worldObj.getBlock(xCoord, yCoord + 2, zCoord).isReplaceable(worldObj, xCoord, yCoord + 2, zCoord) &&
worldObj.getBlock(xCoord, yCoord + 2, zCoord + 1).isReplaceable(worldObj, xCoord, yCoord + 2, zCoord + 1) &&
worldObj.getBlock(xCoord, yCoord + 3, zCoord - 1).isReplaceable(worldObj, xCoord, yCoord + 3, zCoord - 1) &&
worldObj.getBlock(xCoord, yCoord + 3, zCoord).isReplaceable(worldObj, xCoord, yCoord + 3, zCoord) &&
worldObj.getBlock(xCoord, yCoord + 3, zCoord + 1).isReplaceable(worldObj, xCoord, yCoord + 3, zCoord + 1);
}
private void fillNS() {
placeDummy(xCoord - 1, yCoord + 1, zCoord);
placeDummy(xCoord - 1, yCoord + 2, zCoord);
placeDummy(xCoord - 1, yCoord + 3, zCoord);
placeDummy(xCoord, yCoord + 1, zCoord);
placeDummy(xCoord, yCoord + 2, zCoord);
placeDummy(xCoord, yCoord + 3, zCoord);
placeDummy(xCoord + 1, yCoord + 1, zCoord);
placeDummy(xCoord + 1, yCoord + 2, zCoord);
placeDummy(xCoord + 1, yCoord + 3, zCoord);
}
private void fillEW() {
placeDummy(xCoord, yCoord + 1, zCoord - 1);
placeDummy(xCoord, yCoord + 2, zCoord - 1);
placeDummy(xCoord, yCoord + 3, zCoord - 1);
placeDummy(xCoord, yCoord + 1, zCoord);
placeDummy(xCoord, yCoord + 2, zCoord);
placeDummy(xCoord, yCoord + 3, zCoord);
placeDummy(xCoord, yCoord + 1, zCoord + 1);
placeDummy(xCoord, yCoord + 2, zCoord + 1);
placeDummy(xCoord, yCoord + 3, zCoord + 1);
}
private void removeNS() {
removeDummy(xCoord - 1, yCoord + 1, zCoord);
removeDummy(xCoord - 1, yCoord + 2, zCoord);
removeDummy(xCoord - 1, yCoord + 3, zCoord);
removeDummy(xCoord, yCoord + 1, zCoord);
removeDummy(xCoord, yCoord + 2, zCoord);
removeDummy(xCoord, yCoord + 3, zCoord);
removeDummy(xCoord + 1, yCoord + 1, zCoord);
removeDummy(xCoord + 1, yCoord + 2, zCoord);
removeDummy(xCoord + 1, yCoord + 3, zCoord);
}
private void removeEW() {
removeDummy(xCoord, yCoord + 1, zCoord - 1);
removeDummy(xCoord, yCoord + 2, zCoord - 1);
removeDummy(xCoord, yCoord + 3, zCoord - 1);
removeDummy(xCoord, yCoord + 1, zCoord);
removeDummy(xCoord, yCoord + 2, zCoord);
removeDummy(xCoord, yCoord + 3, zCoord);
removeDummy(xCoord, yCoord + 1, zCoord + 1);
removeDummy(xCoord, yCoord + 2, zCoord + 1);
removeDummy(xCoord, yCoord + 3, zCoord + 1);
}
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
isOpening = nbt.getBoolean("isOpening");
state = nbt.getInteger("state");
sysTime = nbt.getLong("sysTime");
timer = nbt.getInteger("timer");
type = nbt.getInteger("type");
}
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
nbt.setBoolean("isOpening", isOpening);
nbt.setInteger("state", state);
nbt.setLong("sysTime", sysTime);
nbt.setInteger("timer", timer);
nbt.setInteger("type", type);
}
}