package mekanism.common.multipart;
import io.netty.buffer.ByteBuf;
import java.util.ArrayList;
import mekanism.api.Coord4D;
import mekanism.api.EnumColor;
import mekanism.api.Range4D;
import mekanism.common.Mekanism;
import mekanism.common.content.transporter.TransporterStack;
import mekanism.common.network.PacketTileEntity.TileEntityMessage;
import mekanism.common.util.LangUtils;
import mekanism.common.util.MekanismUtils;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumActionResult;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.text.TextComponentString;
public class PartDiversionTransporter extends PartLogisticalTransporter
{
public int[] modes = {0, 0, 0, 0, 0, 0};
@Override
public ResourceLocation getType()
{
return new ResourceLocation("mekanism:diversion_transporter");
}
@Override
public TransmitterType getTransmitterType()
{
return TransmitterType.DIVERSION_TRANSPORTER;
}
@Override
public boolean renderCenter()
{
return true;
}
@Override
public void readFromNBT(NBTTagCompound nbtTags)
{
super.readFromNBT(nbtTags);
modes = nbtTags.getIntArray("modes");
}
@Override
public NBTTagCompound writeToNBT(NBTTagCompound nbtTags)
{
super.writeToNBT(nbtTags);
nbtTags.setIntArray("modes", modes);
return nbtTags;
}
@Override
public void handlePacketData(ByteBuf dataStream) throws Exception
{
super.handlePacketData(dataStream);
if(getWorld().isRemote)
{
modes[0] = dataStream.readInt();
modes[1] = dataStream.readInt();
modes[2] = dataStream.readInt();
modes[3] = dataStream.readInt();
modes[4] = dataStream.readInt();
modes[5] = dataStream.readInt();
}
}
@Override
public ArrayList<Object> getNetworkedData(ArrayList<Object> data)
{
data = super.getNetworkedData(data);
data.add(modes[0]);
data.add(modes[1]);
data.add(modes[2]);
data.add(modes[3]);
data.add(modes[4]);
data.add(modes[5]);
return data;
}
@Override
public ArrayList<Object> getSyncPacket(TransporterStack stack, boolean kill)
{
ArrayList<Object> data = super.getSyncPacket(stack, kill);
data.add(modes[0]);
data.add(modes[1]);
data.add(modes[2]);
data.add(modes[3]);
data.add(modes[4]);
data.add(modes[5]);
return data;
}
@Override
protected EnumActionResult onConfigure(EntityPlayer player, int part, EnumFacing side)
{
int newMode = (modes[side.ordinal()] + 1) % 3;
String description = "ERROR";
modes[side.ordinal()] = newMode;
switch(newMode)
{
case 0:
description = LangUtils.localize("control.disabled.desc");
break;
case 1:
description = LangUtils.localize("control.high.desc");
break;
case 2:
description = LangUtils.localize("control.low.desc");
break;
}
refreshConnections();
notifyPartUpdate();
notifyTileChange();
player.addChatMessage(new TextComponentString(EnumColor.DARK_BLUE + "[Mekanism]" + EnumColor.GREY + " " + LangUtils.localize("tooltip.configurator.toggleDiverter") + ": " + EnumColor.RED + description));
Coord4D coord = new Coord4D(getPos(), getWorld());
Mekanism.packetHandler.sendToReceivers(new TileEntityMessage(coord, getNetworkedData(new ArrayList<Object>())), new Range4D(coord));
return EnumActionResult.SUCCESS;
}
@Override
public boolean canConnect(EnumFacing side)
{
if(!super.canConnect(side))
{
return false;
}
int mode = modes[side.ordinal()];
boolean redstone = MekanismUtils.isGettingPowered(getWorld(), new Coord4D(getPos(), getWorld()));
if((mode == 2 && redstone) || (mode == 1 && !redstone))
{
return false;
}
return true;
}
@Override
public EnumColor getRenderColor()
{
return null;
}
}