/*
* This file is part of Matter Overdrive
* Copyright (c) 2015., Simeon Radivoev, All rights reserved.
*
* Matter Overdrive is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Matter Overdrive is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Matter Overdrive. If not, see <http://www.gnu.org/licenses>.
*/
package matteroverdrive.tile;
import cpw.mods.fml.common.gameevent.TickEvent;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import matteroverdrive.api.inventory.UpgradeTypes;
import matteroverdrive.api.network.IMatterNetworkClient;
import matteroverdrive.data.BlockPos;
import matteroverdrive.machines.MOTileEntityMachine;
import matteroverdrive.matter_network.MatterNetworkPacket;
import matteroverdrive.matter_network.MatterNetworkPacketQueue;
import matteroverdrive.matter_network.components.MatterNetworkComponentQueue;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
/**
* Created by Simeon on 4/30/2015.
*/
public abstract class TileEntityMachinePacketQueue extends MOTileEntityMachine implements IMatterNetworkClient
{
public static int BROADCAST_DELAY = 2;
public static int TASK_QUEUE_SIZE = 16;
protected MatterNetworkComponentQueue networkComponent;
@SideOnly(Side.CLIENT)
public int flashTime;
public TileEntityMachinePacketQueue(int upgradeCount)
{
super(upgradeCount);
}
protected void registerComponents()
{
super.registerComponents();
networkComponent = new MatterNetworkComponentQueue(this);
addComponent(networkComponent);
}
@Override
public void updateEntity()
{
super.updateEntity();
if (worldObj.isRemote)
{
if (flashTime > 0)
{
flashTime--;
}
}
}
@Override
public boolean canConnectFromSide(ForgeDirection side)
{
return true;
}
@Override
public boolean isAffectedByUpgrade(UpgradeTypes type)
{
return type.equals(UpgradeTypes.Speed);
}
//region Matter Network
@Override
public int onNetworkTick(World world,TickEvent.Phase phase)
{
return networkComponent.onNetworkTick(world, phase);
}
@Override
public boolean canPreform(MatterNetworkPacket packet)
{
return networkComponent.canPreform(packet);
}
@Override
public void queuePacket(MatterNetworkPacket packet,ForgeDirection from)
{
networkComponent.queuePacket(packet, from);
}
@Override
public BlockPos getPosition()
{
return new BlockPos(xCoord, yCoord, zCoord);
}
@Override
public MatterNetworkPacketQueue getPacketQueue(int queueID) {
return networkComponent.getPacketQueue(queueID);
}
//endregion
//region Events
@Override
public void onAdded(World world, int x, int y, int z) {
}
@Override
public void onPlaced(World world, EntityLivingBase entityLiving) {
}
@Override
public void onDestroyed() {
}
@Override
protected void onAwake(Side side)
{
}
//endregion
//region Getters and Setters
@Override
public String getSound() {
return null;
}
@Override
public boolean hasSound() {
return false;
}
@Override
public boolean getServerActive()
{
return false;
}
@Override
public float soundVolume() { return 0;}
@Override
@SideOnly(Side.CLIENT)
public double getMaxRenderDistanceSquared()
{
return 1024.0D;
}
@Override
public int getPacketQueueCount() {
return networkComponent.getPacketQueueCount();
}
//endregion
}