/* * Copyright (c) CovertJaguar, 2014 http://railcraft.info * * This code is the property of CovertJaguar * and may only be used with explicit written * permission unless otherwise specified on the * license page at http://railcraft.info/wiki/info:license. */ package mods.railcraft.common.blocks.signals; import mods.railcraft.common.blocks.RailcraftBlocks; import mods.railcraft.common.blocks.RailcraftTileEntity; import mods.railcraft.common.plugins.forge.PowerPlugin; import mods.railcraft.common.util.misc.Game; import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; import org.apache.logging.log4j.Level; public abstract class TileSignalFoundation extends RailcraftTileEntity { private boolean checkedBlock = false; public abstract ISignalTileDefinition getSignalType(); @Override public boolean canUpdate() { return true; } @Override public void updateEntity() { super.updateEntity(); if (Game.isNotHost(worldObj)) return; // Check and fix invalid block ids and metadata if (!checkedBlock) { checkedBlock = true; if (!getSignalType().isEnabled()) { worldObj.setBlockToAir(xCoord, yCoord, zCoord); return; } if (getBlockType() != getSignalType().getBlock()) { Game.log(Level.INFO, "Updating Machine Tile Block: {0} {1}->{2}, [{3}, {4}, {5}]", getClass().getSimpleName(), getBlockType(), getSignalType().getBlock(), xCoord, yCoord, zCoord); worldObj.setBlock(xCoord, yCoord, zCoord, getSignalType().getBlock(), getId(), 3); validate(); worldObj.setTileEntity(xCoord, yCoord, zCoord, this); updateContainingBlockInfo(); } int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); if (getBlockType() != null && getClass() != ((BlockSignalBase) getBlockType()).getSignalType(meta).getTileClass()) { worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, getSignalType().getMeta(), 3); validate(); worldObj.setTileEntity(xCoord, yCoord, zCoord, this); Game.log(Level.INFO, "Updating Machine Tile Metadata: {0} {1}->{2}, [{3}, {4}, {5}]", getClass().getSimpleName(), meta, getSignalType().getMeta(), xCoord, yCoord, zCoord); updateContainingBlockInfo(); } } } public boolean blockActivated(int side, EntityPlayer player) { return false; } public boolean rotateBlock(ForgeDirection axis) { return false; } public ForgeDirection[] getValidRotations() { return ForgeDirection.VALID_DIRECTIONS; } public void onBlockPlaced() { } public void onBlockRemoval() { } public void setBlockBoundsBasedOnState(IBlockAccess world, int i, int j, int k) { RailcraftBlocks.getBlockSignal().setBlockBounds(0, 0, 0, 1, 1, 1); } public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int i, int j, int k) { return AxisAlignedBB.getBoundingBox(i, j, k, i + 1, j + 1, k + 1); } public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int i, int j, int k) { return AxisAlignedBB.getBoundingBox(i, j, k, i + 1, j + 1, k + 1); } public boolean isSideSolid(IBlockAccess world, int i, int j, int k, ForgeDirection side) { return false; } public boolean canConnectRedstone(int dir) { return false; } public int getPowerOutput(int side) { return PowerPlugin.NO_POWER; } public float getHardness() { return getSignalType().getHardness(); } @Override public Block getBlockType() { return RailcraftBlocks.getBlockSignal(); } @Override public short getId() { return (short) getSignalType().getMeta(); } @Override public String getLocalizationTag() { return getSignalType().getTag() + ".name"; } @Override public AxisAlignedBB getRenderBoundingBox() { return INFINITE_EXTENT_AABB; } }