mirror of
				https://github.com/SquidDev-CC/CC-Tweaked
				synced 2025-10-31 21:52:59 +00:00 
			
		
		
		
	Allow copying peripheral names from wired modems when attaching/detaching
This is implemented in a rather ugly way: we register a client command (/computercraft_copy) which updates the clipboard, and run that via a click handler on the chat message. This hopefully makes wired modems a little easier to use. We'll see.
This commit is contained in:
		| @@ -9,6 +9,7 @@ package dan200.computercraft.client.proxy; | |||||||
| import dan200.computercraft.ComputerCraft; | import dan200.computercraft.ComputerCraft; | ||||||
| import dan200.computercraft.client.gui.*; | import dan200.computercraft.client.gui.*; | ||||||
| import dan200.computercraft.client.render.*; | import dan200.computercraft.client.render.*; | ||||||
|  | import dan200.computercraft.shared.command.CommandCopy; | ||||||
| import dan200.computercraft.shared.command.ContainerViewComputer; | import dan200.computercraft.shared.command.ContainerViewComputer; | ||||||
| import dan200.computercraft.shared.computer.blocks.ComputerState; | import dan200.computercraft.shared.computer.blocks.ComputerState; | ||||||
| import dan200.computercraft.shared.computer.blocks.TileComputer; | import dan200.computercraft.shared.computer.blocks.TileComputer; | ||||||
| @@ -51,6 +52,7 @@ import net.minecraft.util.SoundEvent; | |||||||
| import net.minecraft.util.math.BlockPos; | import net.minecraft.util.math.BlockPos; | ||||||
| import net.minecraft.util.text.ITextComponent; | import net.minecraft.util.text.ITextComponent; | ||||||
| import net.minecraft.world.World; | import net.minecraft.world.World; | ||||||
|  | import net.minecraftforge.client.ClientCommandHandler; | ||||||
| import net.minecraftforge.client.event.ModelRegistryEvent; | import net.minecraftforge.client.event.ModelRegistryEvent; | ||||||
| import net.minecraftforge.client.event.RenderGameOverlayEvent; | import net.minecraftforge.client.event.RenderGameOverlayEvent; | ||||||
| import net.minecraftforge.client.event.RenderHandEvent; | import net.minecraftforge.client.event.RenderHandEvent; | ||||||
| @@ -88,6 +90,9 @@ public class ComputerCraftProxyClient extends ComputerCraftProxyCommon | |||||||
|  |  | ||||||
|         // Setup client forge handlers |         // Setup client forge handlers | ||||||
|         registerForgeHandlers(); |         registerForgeHandlers(); | ||||||
|  |  | ||||||
|  |         // Register any client-specific commands | ||||||
|  |         ClientCommandHandler.instance.registerCommand( CommandCopy.INSTANCE ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @SubscribeEvent |     @SubscribeEvent | ||||||
|   | |||||||
| @@ -0,0 +1,75 @@ | |||||||
|  | /* | ||||||
|  |  * This file is part of ComputerCraft - http://www.computercraft.info | ||||||
|  |  * Copyright Daniel Ratcliffe, 2011-2018. Do not distribute without permission. | ||||||
|  |  * Send enquiries to dratcliffe@gmail.com | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | package dan200.computercraft.shared.command; | ||||||
|  |  | ||||||
|  | import net.minecraft.client.gui.GuiScreen; | ||||||
|  | import net.minecraft.command.CommandBase; | ||||||
|  | import net.minecraft.command.ICommandSender; | ||||||
|  | import net.minecraft.server.MinecraftServer; | ||||||
|  | import net.minecraft.util.text.ITextComponent; | ||||||
|  | import net.minecraft.util.text.TextComponentString; | ||||||
|  | import net.minecraft.util.text.TextComponentTranslation; | ||||||
|  | import net.minecraft.util.text.event.ClickEvent; | ||||||
|  | import net.minecraft.util.text.event.HoverEvent; | ||||||
|  | import net.minecraftforge.client.IClientCommand; | ||||||
|  | import net.minecraftforge.fml.relauncher.Side; | ||||||
|  | import net.minecraftforge.fml.relauncher.SideOnly; | ||||||
|  |  | ||||||
|  | import javax.annotation.Nonnull; | ||||||
|  |  | ||||||
|  | public class CommandCopy extends CommandBase implements IClientCommand | ||||||
|  | { | ||||||
|  |     public static final CommandCopy INSTANCE = new CommandCopy(); | ||||||
|  |     private static final String NAME = "computercraft_copy"; | ||||||
|  |  | ||||||
|  |     private CommandCopy() | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public boolean allowUsageWithoutPrefix( ICommandSender sender, String message ) | ||||||
|  |     { | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Nonnull | ||||||
|  |     @Override | ||||||
|  |     public String getName() | ||||||
|  |     { | ||||||
|  |         return NAME; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Nonnull | ||||||
|  |     @Override | ||||||
|  |     public String getUsage( @Nonnull ICommandSender sender ) | ||||||
|  |     { | ||||||
|  |         return "computercraft_copy <text>"; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public int getRequiredPermissionLevel() | ||||||
|  |     { | ||||||
|  |         return 0; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     @SideOnly( Side.CLIENT ) | ||||||
|  |     public void execute( @Nonnull MinecraftServer server, @Nonnull ICommandSender sender, @Nonnull String[] args ) | ||||||
|  |     { | ||||||
|  |         String message = String.join( " ", args ); | ||||||
|  |         if( !message.isEmpty() ) GuiScreen.setClipboardString( message ); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public static ITextComponent createCopyText( String text ) | ||||||
|  |     { | ||||||
|  |         TextComponentString name = new TextComponentString( text ); | ||||||
|  |         name.getStyle() | ||||||
|  |             .setClickEvent( new ClickEvent( ClickEvent.Action.RUN_COMMAND, "/" + NAME + " " + text ) ) | ||||||
|  |             .setHoverEvent( new HoverEvent( HoverEvent.Action.SHOW_TEXT, new TextComponentTranslation( "gui.computercraft:tooltip.copy" ) ) ); | ||||||
|  |         return name; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -11,6 +11,7 @@ import dan200.computercraft.ComputerCraft; | |||||||
| import dan200.computercraft.api.network.wired.IWiredElement; | import dan200.computercraft.api.network.wired.IWiredElement; | ||||||
| import dan200.computercraft.api.network.wired.IWiredNode; | import dan200.computercraft.api.network.wired.IWiredNode; | ||||||
| import dan200.computercraft.api.peripheral.IPeripheral; | import dan200.computercraft.api.peripheral.IPeripheral; | ||||||
|  | import dan200.computercraft.shared.command.CommandCopy; | ||||||
| import dan200.computercraft.shared.common.BlockGeneric; | import dan200.computercraft.shared.common.BlockGeneric; | ||||||
| import dan200.computercraft.shared.peripheral.PeripheralType; | import dan200.computercraft.shared.peripheral.PeripheralType; | ||||||
| import dan200.computercraft.shared.peripheral.common.BlockCable; | import dan200.computercraft.shared.peripheral.common.BlockCable; | ||||||
| @@ -407,13 +408,15 @@ public class TileCable extends TileModemBase | |||||||
|                     if( oldPeriphName != null ) |                     if( oldPeriphName != null ) | ||||||
|                     { |                     { | ||||||
|                         player.sendMessage( |                         player.sendMessage( | ||||||
|                             new TextComponentTranslation( "gui.computercraft:wired_modem.peripheral_disconnected", oldPeriphName ) |                             new TextComponentTranslation( "gui.computercraft:wired_modem.peripheral_disconnected", | ||||||
|  |                                 CommandCopy.createCopyText( oldPeriphName ) ) | ||||||
|                         ); |                         ); | ||||||
|                     } |                     } | ||||||
|                     if( periphName != null ) |                     if( periphName != null ) | ||||||
|                     { |                     { | ||||||
|                         player.sendMessage( |                         player.sendMessage( | ||||||
|                             new TextComponentTranslation( "gui.computercraft:wired_modem.peripheral_connected", periphName ) |                             new TextComponentTranslation( "gui.computercraft:wired_modem.peripheral_connected",  | ||||||
|  |                                 CommandCopy.createCopyText( periphName ) ) | ||||||
|                         ); |                         ); | ||||||
|                     } |                     } | ||||||
|                     return true; |                     return true; | ||||||
|   | |||||||
| @@ -11,6 +11,7 @@ import dan200.computercraft.ComputerCraft; | |||||||
| import dan200.computercraft.api.network.wired.IWiredElement; | import dan200.computercraft.api.network.wired.IWiredElement; | ||||||
| import dan200.computercraft.api.network.wired.IWiredNode; | import dan200.computercraft.api.network.wired.IWiredNode; | ||||||
| import dan200.computercraft.api.peripheral.IPeripheral; | import dan200.computercraft.api.peripheral.IPeripheral; | ||||||
|  | import dan200.computercraft.shared.command.CommandCopy; | ||||||
| import dan200.computercraft.shared.peripheral.common.BlockCable; | import dan200.computercraft.shared.peripheral.common.BlockCable; | ||||||
| import dan200.computercraft.shared.peripheral.common.TilePeripheralBase; | import dan200.computercraft.shared.peripheral.common.TilePeripheralBase; | ||||||
| import dan200.computercraft.shared.wired.CapabilityWiredElement; | import dan200.computercraft.shared.wired.CapabilityWiredElement; | ||||||
| @@ -20,6 +21,7 @@ import net.minecraft.util.EnumFacing; | |||||||
| import net.minecraft.util.math.AxisAlignedBB; | import net.minecraft.util.math.AxisAlignedBB; | ||||||
| import net.minecraft.util.math.BlockPos; | import net.minecraft.util.math.BlockPos; | ||||||
| import net.minecraft.util.math.Vec3d; | import net.minecraft.util.math.Vec3d; | ||||||
|  | import net.minecraft.util.text.TextComponentString; | ||||||
| import net.minecraft.util.text.TextComponentTranslation; | import net.minecraft.util.text.TextComponentTranslation; | ||||||
| import net.minecraft.world.World; | import net.minecraft.world.World; | ||||||
| import net.minecraftforge.common.capabilities.Capability; | import net.minecraftforge.common.capabilities.Capability; | ||||||
| @@ -181,29 +183,14 @@ public class TileWiredModemFull extends TilePeripheralBase | |||||||
|         if( !getWorld().isRemote ) |         if( !getWorld().isRemote ) | ||||||
|         { |         { | ||||||
|             // On server, we interacted if a peripheral was found |             // On server, we interacted if a peripheral was found | ||||||
|             Set<String> oldPeriphName = getConnectedPeripheralNames(); |             Set<String> oldPeriphNames = getConnectedPeripheralNames(); | ||||||
|             togglePeripheralAccess(); |             togglePeripheralAccess(); | ||||||
|             Set<String> periphName = getConnectedPeripheralNames(); |             Set<String> periphNames = getConnectedPeripheralNames(); | ||||||
|  |  | ||||||
|             if( !Objects.equal( periphName, oldPeriphName ) ) |             if( !Objects.equal( periphNames, oldPeriphNames ) ) | ||||||
|             { |             { | ||||||
|                 if( !oldPeriphName.isEmpty() ) |                 sendPeripheralChanges( player, "gui.computercraft:wired_modem.peripheral_disconnected", oldPeriphNames ); | ||||||
|                 { |                 sendPeripheralChanges( player, "gui.computercraft:wired_modem.peripheral_connected", periphNames ); | ||||||
|                     List<String> names = new ArrayList<>( oldPeriphName ); |  | ||||||
|                     names.sort( Comparator.naturalOrder() ); |  | ||||||
|  |  | ||||||
|                     player.sendMessage( |  | ||||||
|                         new TextComponentTranslation( "gui.computercraft:wired_modem.peripheral_disconnected", String.join( ", ", names ) ) |  | ||||||
|                     ); |  | ||||||
|                 } |  | ||||||
|                 if( !periphName.isEmpty() ) |  | ||||||
|                 { |  | ||||||
|                     List<String> names = new ArrayList<>( periphName ); |  | ||||||
|                     names.sort( Comparator.naturalOrder() ); |  | ||||||
|                     player.sendMessage( |  | ||||||
|                         new TextComponentTranslation( "gui.computercraft:wired_modem.peripheral_connected", String.join( ", ", names ) ) |  | ||||||
|                     ); |  | ||||||
|                 } |  | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             return true; |             return true; | ||||||
| @@ -216,6 +203,23 @@ public class TileWiredModemFull extends TilePeripheralBase | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     private static void sendPeripheralChanges( EntityPlayer player, String kind, Collection<String> peripherals ) | ||||||
|  |     { | ||||||
|  |         if( peripherals.isEmpty() ) return; | ||||||
|  |  | ||||||
|  |         List<String> names = new ArrayList<>( peripherals ); | ||||||
|  |         names.sort( Comparator.naturalOrder() ); | ||||||
|  |  | ||||||
|  |         TextComponentString base = new TextComponentString( "" ); | ||||||
|  |         for( int i = 0; i < names.size(); i++ ) | ||||||
|  |         { | ||||||
|  |             if( i > 0 ) base.appendText( ", " ); | ||||||
|  |             base.appendSibling( CommandCopy.createCopyText( names.get( i ) ) ); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         player.sendMessage( new TextComponentTranslation( kind, base ) ); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public void readFromNBT( NBTTagCompound tag ) |     public void readFromNBT( NBTTagCompound tag ) | ||||||
|     { |     { | ||||||
|   | |||||||
| @@ -42,6 +42,8 @@ upgrade.computercraft:speaker.adjective=Noisy | |||||||
| gui.computercraft:wired_modem.peripheral_connected=Peripheral "%s" connected to network | gui.computercraft:wired_modem.peripheral_connected=Peripheral "%s" connected to network | ||||||
| gui.computercraft:wired_modem.peripheral_disconnected=Peripheral "%s" disconnected from network | gui.computercraft:wired_modem.peripheral_disconnected=Peripheral "%s" disconnected from network | ||||||
|  |  | ||||||
|  | gui.computercraft:tooltip.copy=Copy to clipboard | ||||||
|  |  | ||||||
| gui.computercraft:config.http_enable=Enable HTTP API | gui.computercraft:config.http_enable=Enable HTTP API | ||||||
| gui.computercraft:config.http_websocket_enable=Enable HTTP websockets | gui.computercraft:config.http_websocket_enable=Enable HTTP websockets | ||||||
| gui.computercraft:config.http_whitelist=HTTP whitelist | gui.computercraft:config.http_whitelist=HTTP whitelist | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 SquidDev
					SquidDev