package mcjty.rftools.blocks.teleporter; import cpw.mods.fml.common.Optional; import dan200.computercraft.api.lua.ILuaContext; import dan200.computercraft.api.lua.LuaException; import dan200.computercraft.api.peripheral.IComputerAccess; import dan200.computercraft.api.peripheral.IPeripheral; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; import li.cil.oc.api.network.SimpleComponent; import mcjty.lib.entity.GenericEnergyReceiverTileEntity; import mcjty.lib.network.Argument; import mcjty.lib.varia.Coordinate; import mcjty.lib.varia.GlobalCoordinate; import mcjty.rftools.blocks.dimlets.DimletConfiguration; import mcjty.rftools.dimension.DimensionStorage; import mcjty.rftools.dimension.RfToolsDimensionManager; import mcjty.rftools.playerprops.PlayerExtendedProperties; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.server.MinecraftServer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Optional.InterfaceList({ @Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers"), @Optional.Interface(iface = "dan200.computercraft.api.peripheral.IPeripheral", modid = "ComputerCraft")}) public class DialingDeviceTileEntity extends GenericEnergyReceiverTileEntity implements SimpleComponent, IPeripheral { public static final String CMD_TELEPORT = "tp"; public static final String CMD_GETRECEIVERS = "getReceivers"; public static final String CLIENTCMD_GETRECEIVERS = "getReceivers"; public static final String CMD_DIAL = "dial"; public static final String CMD_DIALONCE = "dialOnce"; public static final String CMD_FAVORITE = "favorite"; public static final String CMD_SHOWFAVORITE = "showFavorite"; public static final String CLIENTCMD_DIAL = "dialResult"; public static final String CMD_GETTRANSMITTERS = "getTransmitters"; public static final String CLIENTCMD_GETTRANSMITTERS = "getTransmitters"; public static final String CMD_CHECKSTATUS = "checkStatus"; public static final String CLIENTCMD_STATUS = "status"; public static final int DIAL_RECEIVER_BLOCKED_MASK = 0x1; // One value for blocked or not on receiver side public static final int DIAL_TRANSMITTER_BLOCKED_MASK = 0x2; // One value for blocked or not on transmitter side public static final int DIAL_INVALID_DESTINATION_MASK = 0x4; // The destination is somehow invalid public static final int DIAL_DIALER_POWER_LOW_MASK = 0x8; // The dialer itself is low on power public static final int DIAL_RECEIVER_POWER_LOW_MASK = 0x10; // The receiver is low on power public static final int DIAL_TRANSMITTER_NOACCESS = 0x20; // No access to transmitter public static final int DIAL_RECEIVER_NOACCESS = 0x40; // No access to receiver public static final int DIAL_INTERRUPTED = 0x80; // The dial was interrupted public static final int DIAL_INVALID_SOURCE_MASK = 0x100; // The source is somehow invalid public static final int DIAL_DIMENSION_POWER_LOW_MASK = 0x200; // The destination dimension is low on power public static final int DIAL_INVALID_TRANSMITTER = 0x400; // The transmitter is gone! public static final int DIAL_OK = 0; // All is ok public static final String COMPONENT_NAME = "dialing_device"; private boolean showOnlyFavorites = false; public DialingDeviceTileEntity() { super(TeleportConfiguration.DIALER_MAXENERGY, TeleportConfiguration.DIALER_RECEIVEPERTICK); } /** * Calculate the distance (in string form) between a transmitter and receiver. * @param world * @param transmitterInfo * @param teleportDestination * @return the distance or else 'dimension warp' in case it is another dimension. */ public static String calculateDistance(World world, TransmitterInfo transmitterInfo, TeleportDestination teleportDestination) { if (world.provider.dimensionId != teleportDestination.getDimension()) { return "dimension warp"; } else { Coordinate c1 = transmitterInfo.getCoordinate(); Coordinate c2 = teleportDestination.getCoordinate(); double dist = Vec3.createVectorHelper(c1.getX(), c1.getY(), c1.getZ()).distanceTo(Vec3.createVectorHelper(c2.getX(), c2.getY(), c2.getZ())); return Integer.toString((int) dist); } } public static boolean isMatterBoosterAvailable(World world, int x, int y, int z) { if (TeleporterSetup.matterBoosterBlock.equals(world.getBlock(x + 1, y, z))) { return true; } if (TeleporterSetup.matterBoosterBlock.equals(world.getBlock(x - 1, y, z))) { return true; } if (TeleporterSetup.matterBoosterBlock.equals(world.getBlock(x, y + 1, z))) { return true; } if (TeleporterSetup.matterBoosterBlock.equals(world.getBlock(x, y - 1, z))) { return true; } if (TeleporterSetup.matterBoosterBlock.equals(world.getBlock(x, y, z + 1))) { return true; } if (TeleporterSetup.matterBoosterBlock.equals(world.getBlock(x, y, z - 1))) { return true; } return false; } public static boolean isDestinationAnalyzerAvailable(World world, int x, int y, int z) { if (TeleporterSetup.destinationAnalyzerBlock.equals(world.getBlock(x + 1, y, z))) { return true; } if (TeleporterSetup.destinationAnalyzerBlock.equals(world.getBlock(x - 1, y, z))) { return true; } if (TeleporterSetup.destinationAnalyzerBlock.equals(world.getBlock(x, y + 1, z))) { return true; } if (TeleporterSetup.destinationAnalyzerBlock.equals(world.getBlock(x, y - 1, z))) { return true; } if (TeleporterSetup.destinationAnalyzerBlock.equals(world.getBlock(x, y, z + 1))) { return true; } if (TeleporterSetup.destinationAnalyzerBlock.equals(world.getBlock(x, y, z - 1))) { return true; } return false; } @Override @Optional.Method(modid = "ComputerCraft") public String getType() { return COMPONENT_NAME; } @Override @Optional.Method(modid = "ComputerCraft") public String[] getMethodNames() { return new String[] { "getTransmitterCount", "getTransmitter", "getReceiverCount", "getReceiver", "getReceiverName", "getTransmitterName", "dial", "dialOnce", "interrupt", "getDialed" }; } @Override @Optional.Method(modid = "ComputerCraft") public Object[] callMethod(IComputerAccess computer, ILuaContext context, int method, Object[] arguments) throws LuaException, InterruptedException { switch (method) { case 0: { List<TransmitterInfo> transmitterInfos = searchTransmitters(); return new Object[] { transmitterInfos.size() }; } case 1: { List<TransmitterInfo> transmitterInfos = searchTransmitters(); int idx = ((Double) arguments[0]).intValue(); TransmitterInfo ti = transmitterInfos.get(idx); return new Object[] { ti.getCoordinate().getX(), ti.getCoordinate().getY(), ti.getCoordinate().getZ() }; } case 2: { List<TeleportDestinationClientInfo> receivers = searchReceivers(null); return new Object[] { receivers.size() }; } case 3: { List<TeleportDestinationClientInfo> receivers = searchReceivers(null); int idx = ((Double) arguments[0]).intValue(); TeleportDestinationClientInfo ti = receivers.get(idx); return new Object[] { ti.getDimension(), ti.getCoordinate().getX(), ti.getCoordinate().getY(), ti.getCoordinate().getZ() }; } case 4: { List<TeleportDestinationClientInfo> receivers = searchReceivers(null); int idx = ((Double) arguments[0]).intValue(); TeleportDestinationClientInfo ti = receivers.get(idx); TeleportDestinations destinations = TeleportDestinations.getDestinations(worldObj); TeleportDestination destination = destinations.getDestination(ti.getCoordinate(), ti.getDimension()); if (destination == null) { return null; } return new Object[] { destination.getName() }; } case 5: { List<TransmitterInfo> transmitterInfos = searchTransmitters(); int idx = ((Double) arguments[0]).intValue(); TransmitterInfo ti = transmitterInfos.get(idx); return new Object[] { ti.getName() }; } case 6: { List<TransmitterInfo> transmitterInfos = searchTransmitters(); List<TeleportDestinationClientInfo> receivers = searchReceivers(null); int transIdx = ((Double) arguments[0]).intValue(); int recIdx = ((Double) arguments[1]).intValue(); TransmitterInfo trans = transmitterInfos.get(transIdx); TeleportDestinationClientInfo rec = receivers.get(recIdx); int transDim = worldObj.provider.dimensionId; int result = dial(null, trans.getCoordinate(), transDim, rec.getCoordinate(), rec.getDimension(), false); return new Object[] { result }; } case 7: { List<TransmitterInfo> transmitterInfos = searchTransmitters(); List<TeleportDestinationClientInfo> receivers = searchReceivers(null); int transIdx = ((Double) arguments[0]).intValue(); int recIdx = ((Double) arguments[1]).intValue(); TransmitterInfo trans = transmitterInfos.get(transIdx); TeleportDestinationClientInfo rec = receivers.get(recIdx); int transDim = worldObj.provider.dimensionId; int result = dial(null, trans.getCoordinate(), transDim, rec.getCoordinate(), rec.getDimension(), true); return new Object[] { result }; } case 8: { List<TransmitterInfo> transmitterInfos = searchTransmitters(); int transIdx = ((Double) arguments[0]).intValue(); TransmitterInfo trans = transmitterInfos.get(transIdx); int transDim = worldObj.provider.dimensionId; int result = dial(null, trans.getCoordinate(), transDim, null, -1, false); if (result == DIAL_INVALID_DESTINATION_MASK) { result = 0; } return new Object[] { result }; } case 9: { List<TransmitterInfo> transmitterInfos = searchTransmitters(); int transIdx = ((Double) arguments[0]).intValue(); TransmitterInfo trans = transmitterInfos.get(transIdx); TeleportDestination teleportDestination = trans.getTeleportDestination(); if (teleportDestination == null) { return null; } Coordinate c = teleportDestination.getCoordinate(); return new Object[] { teleportDestination.getDimension(), c.getX(), c.getY(), c.getZ() }; } } return new Object[0]; } @Override @Optional.Method(modid = "ComputerCraft") public void attach(IComputerAccess computer) { } @Override @Optional.Method(modid = "ComputerCraft") public void detach(IComputerAccess computer) { } @Override @Optional.Method(modid = "ComputerCraft") public boolean equals(IPeripheral other) { return false; } @Override @Optional.Method(modid = "OpenComputers") public String getComponentName() { return COMPONENT_NAME; } @Callback(doc = "Get all transmitters that can be reached by this dialer. This returns a table of coordinates with each coordinate being table index by 'x, 'y', and 'z'", getter = true) @Optional.Method(modid = "OpenComputers") public Object[] getTransmitters(Context context, Arguments args) throws Exception { List<TransmitterInfo> transmitterInfos = searchTransmitters(); List<Map<String,Integer>> result = new ArrayList<Map<String, Integer>>(); for (TransmitterInfo info : transmitterInfos) { Map<String,Integer> coordinate = new HashMap<String, Integer>(); coordinate.put("x", info.getCoordinate().getX()); coordinate.put("y", info.getCoordinate().getY()); coordinate.put("z", info.getCoordinate().getZ()); result.add(coordinate); } return new Object[] { result }; } @Callback(doc = "Get all receivers that exist in the world. This returns a table of coordinates with each coordinate being table index by 'dim', 'x, 'y', and 'z' (dim is the dimension number)", getter = true) @Optional.Method(modid = "OpenComputers") public Object[] getReceivers(Context context, Arguments args) throws Exception { List<TeleportDestinationClientInfo> receivers = searchReceivers(null); List<Map<String,Integer>> result = new ArrayList<Map<String, Integer>>(); for (TeleportDestinationClientInfo info : receivers) { Map<String,Integer> coordinate = new HashMap<String, Integer>(); coordinate.put("dim", info.getDimension()); coordinate.put("x", info.getCoordinate().getX()); coordinate.put("y", info.getCoordinate().getY()); coordinate.put("z", info.getCoordinate().getZ()); result.add(coordinate); } return new Object[] { result }; } @Callback(doc = "For a given receiver (given as a table parameter with indexes 'dim', 'x', 'y', and 'z') return the name of that receiver", getter = true) @Optional.Method(modid = "OpenComputers") public Object[] getReceiverName(Context context, Arguments args) throws Exception { Map receiver = args.checkTable(0); if (!receiver.containsKey("x") || !receiver.containsKey("y") || !receiver.containsKey("z")) { throw new IllegalArgumentException("Receiver map doesn't contain the right x,y,z coordinate!"); } if (!receiver.containsKey("dim")) { throw new IllegalArgumentException("Receiver map doesn't contain the right dimension!"); } Coordinate recC = new Coordinate(((Double) receiver.get("x")).intValue(), ((Double) receiver.get("y")).intValue(), ((Double) receiver.get("z")).intValue()); int recDim = ((Double) receiver.get("dim")).intValue(); TeleportDestinations destinations = TeleportDestinations.getDestinations(worldObj); TeleportDestination destination = destinations.getDestination(recC, recDim); if (destination == null) { return null; } return new Object[] { destination.getName() }; } @Callback(doc = "For a given transmitter (given as a table parameter with indexes 'x', 'y', and 'z') return the name of that transmitter", getter = true) @Optional.Method(modid = "OpenComputers") public Object[] getTransmitterName(Context context, Arguments args) throws Exception { Map transmitter = args.checkTable(0); if (!transmitter.containsKey("x") || !transmitter.containsKey("y") || !transmitter.containsKey("z")) { throw new IllegalArgumentException("Transmitter map doesn't contain the right x,y,z coordinate!"); } Coordinate transC = new Coordinate(((Double) transmitter.get("x")).intValue(), ((Double) transmitter.get("y")).intValue(), ((Double) transmitter.get("z")).intValue()); for (TransmitterInfo info : searchTransmitters()) { if (transC.equals(info.getCoordinate())) { return new Object[] { info.getName() }; } } return null; } @Callback(doc = "First parameter is a table describing the transmitter ('x', 'y', and 'z'). The second parameter is a table describing the receiver ('dim', 'x', 'y', and 'z'). This method will dial the transmitter to the receiver") @Optional.Method(modid = "OpenComputers") public Object[] dial(Context context, Arguments args) throws Exception { Map transmitter = args.checkTable(0); Map receiver = args.checkTable(1); if (!transmitter.containsKey("x") || !transmitter.containsKey("y") || !transmitter.containsKey("z")) { throw new IllegalArgumentException("Transmitter map doesn't contain the right x,y,z coordinate!"); } if (!receiver.containsKey("x") || !receiver.containsKey("y") || !receiver.containsKey("z")) { throw new IllegalArgumentException("Receiver map doesn't contain the right x,y,z coordinate!"); } if (!receiver.containsKey("dim")) { throw new IllegalArgumentException("Receiver map doesn't contain the right dimension!"); } Coordinate transC = new Coordinate(((Double) transmitter.get("x")).intValue(), ((Double) transmitter.get("y")).intValue(), ((Double) transmitter.get("z")).intValue()); int transDim = worldObj.provider.dimensionId; Coordinate recC = new Coordinate(((Double) receiver.get("x")).intValue(), ((Double) receiver.get("y")).intValue(), ((Double) receiver.get("z")).intValue()); int recDim = ((Double) receiver.get("dim")).intValue(); int result = dial(null, transC, transDim, recC, recDim, false); return new Object[] { result }; } @Callback(doc = "First parameter is a table describing the transmitter ('x', 'y', and 'z'). The second parameter is a table describing the receiver ('dim', 'x', 'y', and 'z'). This method will dial the transmitter to the receiver (dial once mode)") @Optional.Method(modid = "OpenComputers") public Object[] dialOnce(Context context, Arguments args) throws Exception { Map transmitter = args.checkTable(0); Map receiver = args.checkTable(1); if (!transmitter.containsKey("x") || !transmitter.containsKey("y") || !transmitter.containsKey("z")) { throw new IllegalArgumentException("Transmitter map doesn't contain the right x,y,z coordinate!"); } if (!receiver.containsKey("x") || !receiver.containsKey("y") || !receiver.containsKey("z")) { throw new IllegalArgumentException("Receiver map doesn't contain the right x,y,z coordinate!"); } if (!receiver.containsKey("dim")) { throw new IllegalArgumentException("Receiver map doesn't contain the right dimension!"); } Coordinate transC = new Coordinate(((Double) transmitter.get("x")).intValue(), ((Double) transmitter.get("y")).intValue(), ((Double) transmitter.get("z")).intValue()); int transDim = worldObj.provider.dimensionId; Coordinate recC = new Coordinate(((Double) receiver.get("x")).intValue(), ((Double) receiver.get("y")).intValue(), ((Double) receiver.get("z")).intValue()); int recDim = ((Double) receiver.get("dim")).intValue(); int result = dial(null, transC, transDim, recC, recDim, true); return new Object[] { result }; } @Callback(doc = "The parameter is a table describing the transmitter ('x', 'y', and 'z'). This method will interrupt the dialed connection") @Optional.Method(modid = "OpenComputers") public Object[] interrupt(Context context, Arguments args) throws Exception { Map transmitter = args.checkTable(0); if (!transmitter.containsKey("x") || !transmitter.containsKey("y") || !transmitter.containsKey("z")) { throw new IllegalArgumentException("Transmitter map doesn't contain the right x,y,z coordinate!"); } Coordinate transC = new Coordinate(((Double) transmitter.get("x")).intValue(), ((Double) transmitter.get("y")).intValue(), ((Double) transmitter.get("z")).intValue()); int transDim = worldObj.provider.dimensionId; int result = dial(null, transC, transDim, null, -1, false); if (result == DIAL_INVALID_DESTINATION_MASK) { result = 0; } return new Object[] { result }; } @Callback(doc = "Return the receiver (in the form of a table 'dim', 'x', 'y', and 'z') where the given transmitter is dialed too. The parameter is a table describing the transmitter ('x', 'y', and 'z')", getter = true) @Optional.Method(modid = "OpenComputers") public Object[] getDialed(Context context, Arguments args) throws Exception { Map transmitter = args.checkTable(0); if (!transmitter.containsKey("x") || !transmitter.containsKey("y") || !transmitter.containsKey("z")) { throw new IllegalArgumentException("Transmitter map doesn't contain the right x,y,z coordinate!"); } Coordinate transC = new Coordinate(((Double) transmitter.get("x")).intValue(), ((Double) transmitter.get("y")).intValue(), ((Double) transmitter.get("z")).intValue()); List<TransmitterInfo> transmitterInfos = searchTransmitters(); for (TransmitterInfo info : transmitterInfos) { if (info.getCoordinate().equals(transC)) { TeleportDestination teleportDestination = info.getTeleportDestination(); if (teleportDestination == null) { return null; } Map<String,Integer> coordinate = new HashMap<String, Integer>(); coordinate.put("dim", teleportDestination.getDimension()); Coordinate c = teleportDestination.getCoordinate(); coordinate.put("x", c.getX()); coordinate.put("y", c.getY()); coordinate.put("z", c.getZ()); return new Object[] { coordinate }; } } return null; } public boolean isShowOnlyFavorites() { return showOnlyFavorites; } public void setShowOnlyFavorites(boolean showOnlyFavorites) { this.showOnlyFavorites = showOnlyFavorites; markDirty(); worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); } @Override public void readFromNBT(NBTTagCompound tagCompound) { super.readFromNBT(tagCompound); } @Override public void readRestorableFromNBT(NBTTagCompound tagCompound) { super.readRestorableFromNBT(tagCompound); showOnlyFavorites = tagCompound.getBoolean("showFav"); } @Override public void writeToNBT(NBTTagCompound tagCompound) { super.writeToNBT(tagCompound); } @Override public void writeRestorableToNBT(NBTTagCompound tagCompound) { super.writeRestorableToNBT(tagCompound); tagCompound.setBoolean("showFav", showOnlyFavorites); } private List<TeleportDestinationClientInfo> searchReceivers(String playerName) { TeleportDestinations destinations = TeleportDestinations.getDestinations(worldObj); return new ArrayList<TeleportDestinationClientInfo>(destinations.getValidDestinations(worldObj, playerName)); } public List<TransmitterInfo> searchTransmitters() { int x = xCoord; int y = yCoord; int z = zCoord; int hrange = TeleportConfiguration.horizontalDialerRange; int vrange = TeleportConfiguration.verticalDialerRange; List<TransmitterInfo> transmitters = new ArrayList<TransmitterInfo>(); for (int dy = -vrange ; dy <= vrange ; dy++) { int yy = y + dy; if (yy >= 0 && yy < worldObj.getHeight()) { for (int dz = -hrange ; dz <= hrange; dz++) { int zz = z + dz; for (int dx = -hrange ; dx <= hrange ; dx++) { int xx = x + dx; if (dx != 0 || dy != 0 || dz != 0) { Coordinate c = new Coordinate(xx, yy, zz); TileEntity tileEntity = worldObj.getTileEntity(xx, yy, zz); if (tileEntity != null) { if (tileEntity instanceof MatterTransmitterTileEntity) { MatterTransmitterTileEntity matterTransmitterTileEntity = (MatterTransmitterTileEntity) tileEntity; transmitters.add(new TransmitterInfo(c, matterTransmitterTileEntity.getName(), matterTransmitterTileEntity.getTeleportDestination())); } } } } } } } return transmitters; } // Server side only. private void changeFavorite(String playerName, Coordinate receiver, int dimension, boolean favorite) { List list = MinecraftServer.getServer().getConfigurationManager().playerEntityList; for (Object p : list) { EntityPlayerMP entityplayermp = (EntityPlayerMP) p; if (playerName.equals(entityplayermp.getDisplayName())) { PlayerExtendedProperties properties = PlayerExtendedProperties.getProperties(entityplayermp); properties.getFavoriteDestinationsProperties().setDestinationFavorite(new GlobalCoordinate(receiver, dimension), favorite); return; } } } // Server side only private int dial(String player, Coordinate transmitter, int transDim, Coordinate coordinate, int dimension, boolean once) { return TeleportationTools.dial(worldObj, this, player, transmitter, transDim, coordinate, dimension, once); } // Server side only private int checkStatus(Coordinate c, int dim) { int cost = TeleportConfiguration.rfPerCheck; cost = (int) (cost * (2.0f - getInfusedFactor()) / 2.0f); if (getEnergyStored(ForgeDirection.DOWN) < cost) { return DialingDeviceTileEntity.DIAL_DIALER_POWER_LOW_MASK; } consumeEnergy(cost); RfToolsDimensionManager dimensionManager = RfToolsDimensionManager.getDimensionManager(worldObj); World w = dimensionManager.getWorldForDimension(dim); if (w == null) { TeleportDestinations destinations = TeleportDestinations.getDestinations(worldObj); destinations.cleanupInvalid(worldObj); return DialingDeviceTileEntity.DIAL_INVALID_DESTINATION_MASK; } TileEntity tileEntity = w.getTileEntity(c.getX(), c.getY(), c.getZ()); if (!(tileEntity instanceof MatterReceiverTileEntity)) { TeleportDestinations destinations = TeleportDestinations.getDestinations(worldObj); destinations.cleanupInvalid(worldObj); return DialingDeviceTileEntity.DIAL_INVALID_DESTINATION_MASK; } if (dimensionManager.getDimensionInformation(dim) != null) { // This is an RFTools dimension. Check power. DimensionStorage dimensionStorage = DimensionStorage.getDimensionStorage(w); int energyLevel = dimensionStorage.getEnergyLevel(dim); if (energyLevel < DimletConfiguration.DIMPOWER_WARN_TP) { return DialingDeviceTileEntity.DIAL_DIMENSION_POWER_LOW_MASK; } } MatterReceiverTileEntity matterReceiverTileEntity = (MatterReceiverTileEntity) tileEntity; return matterReceiverTileEntity.checkStatus(); } @Override public List executeWithResultList(String command, Map<String, Argument> args) { List rc = super.executeWithResultList(command, args); if (rc != null) { return rc; } if (CMD_GETRECEIVERS.equals(command)) { String playerName = args.get("player").getString(); return searchReceivers(playerName); } else if (CMD_GETTRANSMITTERS.equals(command)) { return searchTransmitters(); } return null; } @Override public boolean execute(EntityPlayerMP playerMP, String command, Map<String, Argument> args) { boolean rc = super.execute(playerMP, command, args); if (rc) { return rc; } if (CMD_FAVORITE.equals(command)) { String player = args.get("player").getString(); Coordinate receiver = args.get("receiver").getCoordinate(); int dimension = args.get("dimension").getInteger(); boolean favorite = args.get("favorite").getBoolean(); changeFavorite(player, receiver, dimension, favorite); return true; } else if (CMD_SHOWFAVORITE.equals(command)) { boolean favorite = args.get("favorite").getBoolean(); setShowOnlyFavorites(favorite); return true; } return false; } @Override public Integer executeWithResultInteger(String command, Map<String, Argument> args) { Integer rc = super.executeWithResultInteger(command, args); if (rc != null) { return rc; } if (CMD_CHECKSTATUS.equals(command)) { Coordinate c = args.get("c").getCoordinate(); int dim = args.get("dim").getInteger(); return checkStatus(c, dim); } else if (CMD_DIAL.equals(command)) { String player = args.get("player").getString(); Coordinate transmitter = args.get("trans").getCoordinate(); int transDim = args.get("transDim").getInteger(); Coordinate c = args.get("c").getCoordinate(); int dim = args.get("dim").getInteger(); return dial(player, transmitter, transDim, c, dim, false); } else if (CMD_DIALONCE.equals(command)) { String player = args.get("player").getString(); Coordinate transmitter = args.get("trans").getCoordinate(); int transDim = args.get("transDim").getInteger(); Coordinate c = args.get("c").getCoordinate(); int dim = args.get("dim").getInteger(); return dial(player, transmitter, transDim, c, dim, true); } return null; } @Override public boolean execute(String command, List list) { boolean rc = super.execute(command, list); if (rc) { return true; } if (CLIENTCMD_GETRECEIVERS.equals(command)) { GuiDialingDevice.fromServer_receivers = new ArrayList<TeleportDestinationClientInfo>(list); return true; } else if (CLIENTCMD_GETTRANSMITTERS.equals(command)) { GuiDialingDevice.fromServer_transmitters = new ArrayList<TransmitterInfo>(list); return true; } return false; } @Override public boolean execute(String command, Integer result) { boolean rc = super.execute(command, result); if (rc) { return true; } if (CLIENTCMD_STATUS.equals(command)) { GuiDialingDevice.fromServer_receiverStatus = result; return true; } else if (CLIENTCMD_DIAL.equals(command)) { GuiDialingDevice.fromServer_dialResult = result; return true; } return false; } }