package shedar.mods.ic2.nuclearcontrol.utils;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import shedar.mods.ic2.nuclearcontrol.network.ChannelHandler;
import shedar.mods.ic2.nuclearcontrol.network.message.*;
import shedar.mods.ic2.nuclearcontrol.tileentities.TileEntityAverageCounter;
import shedar.mods.ic2.nuclearcontrol.tileentities.TileEntityEnergyCounter;
import shedar.mods.ic2.nuclearcontrol.tileentities.TileEntityInfoPanel;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.inventory.ICrafting;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.network.simpleimpl.IMessage;
public class NuclearNetworkHelper {
public static final int FIELD_DOUBLE = 1;
public static final int FIELD_INT = 2;
public static final int FIELD_STRING = 3;
public static final int FIELD_BOOLEAN = 4;
public static final int FIELD_TAG = 5;
public static final int FIELD_NULL = 6;
public static final int FIELD_LONG = 7;
// server
public static void sendEnergyCounterValue(TileEntityEnergyCounter counter, ICrafting crafter) {
if (counter == null || !(crafter instanceof EntityPlayerMP))
return;
ChannelHandler.network.sendTo(new PacketEncounter(counter.xCoord, counter.yCoord, counter.zCoord, counter.counter), (EntityPlayerMP) crafter);
}
// server
public static void sendAverageCounterValue(TileEntityAverageCounter counter, ICrafting crafter, int average) {
if (counter == null || !(crafter instanceof EntityPlayerMP))
return;
ChannelHandler.network.sendTo(new PacketAcounter(counter.xCoord, counter.yCoord, counter.zCoord, average), (EntityPlayerMP) crafter);
}
// server
private static void sendPacketToAllAround(int x, int y, int z, int dist, World world, IMessage packet) {
@SuppressWarnings("unchecked")
List<EntityPlayerMP> players = world.playerEntities;
for (EntityPlayerMP player : players) {
double dx = x - player.posX;
double dy = y - player.posY;
double dz = z - player.posZ;
if (dx * dx + dy * dy + dz * dz < dist * dist)
ChannelHandler.network.sendTo(packet, player);
}
}
// server
public static void setSensorCardField(TileEntity panel, byte slot, Map<String, Object> fields) {
if (fields == null || fields.isEmpty() || panel == null || !(panel instanceof TileEntityInfoPanel) || slot == -1)
return;
if (panel.getWorldObj().isRemote)
return;
sendPacketToAllAround(panel.xCoord, panel.yCoord, panel.zCoord, 64, panel.getWorldObj(), new PacketSensor(panel.xCoord, panel.yCoord, panel.zCoord, slot, fields));
}
// client
public static void setDisplaySettings(TileEntityInfoPanel panel, byte slot, int settings) {
if (panel == null)
return;
if (FMLCommonHandler.instance().getEffectiveSide().isServer())
return;
ChannelHandler.network.sendToServer(new PacketClientDisplaySettings(panel.xCoord, panel.yCoord, panel.zCoord, slot, settings));
}
// client
public static void setCardSettings(ItemStack card, TileEntity panelTE, Map<String, Object> fields, int slot) {
if (card == null || fields == null || fields.isEmpty() || panelTE == null || !(panelTE instanceof TileEntityInfoPanel))
return;
if (FMLCommonHandler.instance().getEffectiveSide().isServer())
return;
ChannelHandler.network.sendToServer(new PacketClientSensor(panelTE.xCoord, panelTE.yCoord, panelTE.zCoord, slot, card.getItem().getClass().getName(), fields));
}
// server
public static void setSensorCardTitle(TileEntityInfoPanel panel, byte slot, String title) {
if (title == null || panel == null)
return;
sendPacketToAllAround(panel.xCoord, panel.yCoord, panel.zCoord, 64,
panel.getWorldObj(), new PacketSensorTitle(panel.xCoord,
panel.yCoord, panel.zCoord, slot, title));
}
public static void chatMessage(EntityPlayer player, String message) {
if (player instanceof EntityPlayerMP) {
ChannelHandler.network.sendTo(new PacketChat(message),
(EntityPlayerMP) player);
}
}
// client
public static void setNewAlarmSound(int x, int y, int z, byte slot, String soundName) {
ChannelHandler.network.sendToServer(new PacketClientSound(x, y, z, slot, soundName));
}
// client
public static void setRangeTrigger(int x, int y, int z, double value, boolean isEnd) {
ChannelHandler.network.sendToServer(new PacketClientRangeTrigger(x, y, z, value, isEnd));
}
// client
public static void setScreenColor(int x, int y, int z, int back, int text) {
ChannelHandler.network.sendToServer(new PacketClientColor(x, y, z, (back << 4) | text));
}
// client
public static void requestDisplaySettings(TileEntityInfoPanel panel) {
ChannelHandler.network.sendToServer(new PacketClientRequest(panel.xCoord, panel.yCoord, panel.zCoord));
}
// server
public static void sendDisplaySettingsToPlayer(int x, int y, int z, EntityPlayerMP player) {
TileEntity tileEntity = player.worldObj.getTileEntity(x, y, z);
if (!(tileEntity instanceof TileEntityInfoPanel))
return;
Map<Byte, Map<UUID, Integer>> settings = ((TileEntityInfoPanel) tileEntity).getDisplaySettings();
if (settings == null)
return;
ChannelHandler.network.sendTo(new PacketDispSettingsAll(x, y, z, settings), player);
}
// server
public static void sendDisplaySettingsUpdate(TileEntityInfoPanel panel, byte slot, UUID key, int value) {
sendPacketToAllAround(panel.xCoord, panel.yCoord, panel.zCoord, 64, panel.getWorldObj(), new PacketDispSettingsUpdate(panel.xCoord, panel.yCoord, panel.zCoord, slot, key, value));
}
}