essential-actions
Clone or download
Modified Files
.idea/
.idea/
HotkeyAction.iml
*.iml
target/
target/
.settings/
.settings/
.project
.project
.factorypath
.factorypath
.classpath
.classpath
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<modelVersion>4.0.0</modelVersion>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>textblockaction</artifactId>
<artifactId>textblockaction</artifactId>
<version>1.0.0</version>
<version>1.0.1</version>
<build>
<build>
<plugins>
<plugins>
<plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<version>3.1.0</version>
<executions>
<executions>
<execution>
<execution>
<id>test-jar</id>
<id>test-jar</id>
<phase>package</phase>
<phase>package</phase>
<goals>
<goals>
<goal>test-jar</goal>
<goal>test-jar</goal>
</goals>
</goals>
</execution>
</execution>
</executions>
</executions>
</plugin>
</plugin>
<plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<version>3.8.1</version>
<configuration>
<configuration>
<release>11</release>
<release>11</release>
</configuration>
</configuration>
</plugin>
</plugin>
</plugins>
</plugins>
</build>
</build>
<properties>
<properties>
<ActionAPIVersion>1.0.0-SNAPSHOT</ActionAPIVersion>
<ActionAPIVersion>1.0.0-SNAPSHOT</ActionAPIVersion>
<UtilVersion>1.0.0-SNAPSHOT</UtilVersion>
<UtilVersion>1.0.0-SNAPSHOT</UtilVersion>
<JavaFXVersion>16-ea+4</JavaFXVersion>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.target>11</maven.compiler.target>
<IkonliVersion>11.5.0</IkonliVersion>
<IkonliFA5PackVersion>11.5.0</IkonliFA5PackVersion>
</properties>
</properties>
<dependencies>
<dependencies>
<dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>util</artifactId>
<artifactId>util</artifactId>
<version>${UtilVersion}</version>
<version>${UtilVersion}</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>action-api</artifactId>
<artifactId>action-api</artifactId>
<version>${ActionAPIVersion}</version>
<version>${ActionAPIVersion}</version>
</dependency>
</dependency>
<dependency>
<groupId>org.kordamp.ikonli</groupId>
<artifactId>ikonli-fontawesome5-pack</artifactId>
<version>${IkonliFA5PackVersion}</version>
</dependency>
<dependency>
<groupId>org.kordamp.ikonli</groupId>
<artifactId>ikonli-javafx</artifactId>
<version>${IkonliVersion}</version>
</dependency>
</dependencies>
</dependencies>
</project>
</project>
package com.stream_pi.textblockaction;
package com.stream_pi.textblockaction;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Type;
import com.stream_pi.action_api.actionproperty.property.Type;
import com.stream_pi.action_api.externalplugin.NormalAction;
import com.stream_pi.action_api.externalplugin.NormalAction;
import com.stream_pi.util.exception.MinorException;
import com.stream_pi.util.version.Version;
import com.stream_pi.util.version.Version;
import static java.awt.event.KeyEvent.*;
import static java.awt.event.KeyEvent.*;
import java.awt.*;
import java.awt.*;
public class TextBlockAction extends NormalAction {
public class TextBlockAction extends NormalAction
{
public TextBlockAction()
public TextBlockAction()
{
{
setName("Text Block");
setName("Text Block");
setCategory("Essentials");
setCategory("Essentials");
setAuthor("rnayabed");
setAuthor("rnayabed");
setServerButtonGraphic("fas-keyboard");
setServerButtonGraphic("fas-keyboard");
setHelpLink("https://github.com/stream-pi/essentialactions");
setHelpLink("https://github.com/stream-pi/essentialactions");
setVersion(new Version(1,0,0));
setVersion(new Version(1,0,1));
}
}
@Override
@Override
public void initProperties() throws Exception {
public void initProperties() throws MinorException
{
Property textBlockProperty = new Property("text_block", Type.STRING);
Property textBlockProperty = new Property("text_block", Type.STRING);
textBlockProperty.setDisplayName("Text");
textBlockProperty.setDisplayName("Text");
textBlockProperty.setDefaultValueStr("Stream-Pi FTW");
textBlockProperty.setDefaultValueStr("Stream-Pi FTW");
textBlockProperty.setCanBeBlank(false);
textBlockProperty.setCanBeBlank(false);
addClientProperties(textBlockProperty);
addClientProperties(textBlockProperty);
}
}
private Robot robot;
private Robot robot;
@Override
@Override
public void initAction() throws Exception {
public void initAction() throws MinorException
robot = new Robot();
{
try
{
robot = new Robot();
}
catch (AWTException e)
{
e.printStackTrace();
throw new MinorException("Unable to start AWT Robot");
}
}
}
@Override
@Override
public void onActionClicked() throws Exception
public void onActionClicked() throws MinorException
{
{
Property textBlockProperty = getClientProperties().getSingleProperty("text_block");
Property textBlockProperty = getClientProperties().getSingleProperty("text_block");
type(textBlockProperty.getStringValue());
type(textBlockProperty.getStringValue());
}
}
public void type(String toType) throws Exception
public void type(String toType)
{
{
release(VK_CAPS_LOCK);
release(VK_CAPS_LOCK);
release(VK_SHIFT);
release(VK_SHIFT);
for (int i = 0;i<toType.length();i ++)
for (int i = 0;i<toType.length();i ++)
{
{
char c = toType.charAt(i);
char c = toType.charAt(i);
pressAndReleaseKey(c);
pressAndReleaseKey(c);
}
}
if(isShiftOn)
if(isShiftOn)
{
{
isShiftOn = false;
isShiftOn = false;
release(VK_SHIFT);
release(VK_SHIFT);
}
}
}
}
private boolean isShiftOn = false;
private boolean isShiftOn = false;
public void pressAndReleaseKey(char c) throws Exception
public void pressAndReleaseKey(char c)
{
{
if(Character.isUpperCase(c))
if(Character.isUpperCase(c))
{
{
if(!isShiftOn)
if(!isShiftOn)
{
{
isShiftOn = true;
isShiftOn = true;
press(VK_SHIFT);
press(VK_SHIFT);
}
}
}
}
else
else
{
{
if(isShiftOn)
if(isShiftOn)
{
{
isShiftOn = false;
isShiftOn = false;
release(VK_SHIFT);
release(VK_SHIFT);
}
}
}
}
switch (Character.toLowerCase(c)) {
switch (Character.toLowerCase(c)) {
case 'a': pressAndRelease(VK_A); break;
case 'a': pressAndRelease(VK_A); break;
case 'b': pressAndRelease(VK_B); break;
case 'b': pressAndRelease(VK_B); break;
case 'c': pressAndRelease(VK_C); break;
case 'c': pressAndRelease(VK_C); break;
case 'd': pressAndRelease(VK_D); break;
case 'd': pressAndRelease(VK_D); break;
case 'e': pressAndRelease(VK_E); break;
case 'e': pressAndRelease(VK_E); break;
case 'f': pressAndRelease(VK_F); break;
case 'f': pressAndRelease(VK_F); break;
case 'g': pressAndRelease(VK_G); break;
case 'g': pressAndRelease(VK_G); break;
case 'h': pressAndRelease(VK_H); break;
case 'h': pressAndRelease(VK_H); break;
case 'i': pressAndRelease(VK_I); break;
case 'i': pressAndRelease(VK_I); break;
case 'j': pressAndRelease(VK_J); break;
case 'j': pressAndRelease(VK_J); break;
case 'k': pressAndRelease(VK_K); break;
case 'k': pressAndRelease(VK_K); break;
case 'l': pressAndRelease(VK_L); break;
case 'l': pressAndRelease(VK_L); break;
case 'm': pressAndRelease(VK_M); break;
case 'm': pressAndRelease(VK_M); break;
case 'n': pressAndRelease(VK_N); break;
case 'n': pressAndRelease(VK_N); break;
case 'o': pressAndRelease(VK_O); break;
case 'o': pressAndRelease(VK_O); break;
case 'p': pressAndRelease(VK_P); break;
case 'p': pressAndRelease(VK_P); break;
case 'q': pressAndRelease(VK_Q); break;
case 'q': pressAndRelease(VK_Q); break;
case 'r': pressAndRelease(VK_R); break;
case 'r': pressAndRelease(VK_R); break;
case 's': pressAndRelease(VK_S); break;
case 's': pressAndRelease(VK_S); break;
case 't': pressAndRelease(VK_T); break;
case 't': pressAndRelease(VK_T); break;
case 'u': pressAndRelease(VK_U); break;
case 'u': pressAndRelease(VK_U); break;
case 'v': pressAndRelease(VK_V); break;
case 'v': pressAndRelease(VK_V); break;
case 'w': pressAndRelease(VK_W); break;
case 'w': pressAndRelease(VK_W); break;
case 'x': pressAndRelease(VK_X); break;
case 'x': pressAndRelease(VK_X); break;
case 'y': pressAndRelease(VK_Y); break;
case 'y': pressAndRelease(VK_Y); break;
case 'z': pressAndRelease(VK_Z); break;
case 'z': pressAndRelease(VK_Z); break;
case '0': pressAndRelease(VK_0); break;
case '0': pressAndRelease(VK_0); break;
case '1': pressAndRelease(VK_1); break;
case '1': pressAndRelease(VK_1); break;
case '2': pressAndRelease(VK_2); break;
case '2': pressAndRelease(VK_2); break;
case '3': pressAndRelease(VK_3); break;
case '3': pressAndRelease(VK_3); break;
case '4': pressAndRelease(VK_4); break;
case '4': pressAndRelease(VK_4); break;
case '5': pressAndRelease(VK_5); break;
case '5': pressAndRelease(VK_5); break;
case '6': pressAndRelease(VK_6); break;
case '6': pressAndRelease(VK_6); break;
case '7': pressAndRelease(VK_7); break;
case '7': pressAndRelease(VK_7); break;
case '8': pressAndRelease(VK_8); break;
case '8': pressAndRelease(VK_8); break;
case '9': pressAndRelease(VK_9); break;
case '9': pressAndRelease(VK_9); break;
case '-': pressAndRelease(VK_MINUS); break;
case '-': pressAndRelease(VK_MINUS); break;
case '=': pressAndRelease(VK_EQUALS); break;
case '=': pressAndRelease(VK_EQUALS); break;
case '`': pressAndRelease(VK_BACK_QUOTE); break;
case '`': pressAndRelease(VK_BACK_QUOTE); break;
case '[': pressAndRelease(VK_OPEN_BRACKET); break;
case '[': pressAndRelease(VK_OPEN_BRACKET); break;
case ']': pressAndRelease(VK_CLOSE_BRACKET); break;
case ']': pressAndRelease(VK_CLOSE_BRACKET); break;
case '\\': pressAndRelease(VK_BACK_SLASH); break;
case '\\': pressAndRelease(VK_BACK_SLASH); break;
case '{': pressAndRelease(VK_BRACELEFT); break;
case '{': pressAndRelease(VK_BRACELEFT); break;
case '}': pressAndRelease(VK_BRACERIGHT); break;
case '}': pressAndRelease(VK_BRACERIGHT); break;
case '/': pressAndRelease(VK_SLASH); break;
case '/': pressAndRelease(VK_SLASH); break;
case ':': pressAndRelease(VK_SHIFT, VK_SEMICOLON); break;
case ':': pressAndRelease(VK_SHIFT, VK_SEMICOLON); break;
case ';': pressAndRelease(VK_SEMICOLON); break;
case ';': pressAndRelease(VK_SEMICOLON); break;
case '\'': pressAndRelease(VK_QUOTE); break;
case '\'': pressAndRelease(VK_QUOTE); break;
case ',': pressAndRelease(VK_COMMA); break;
case ',': pressAndRelease(VK_COMMA); break;
case '<': pressAndRelease(VK_SHIFT, VK_COMMA); break;
case '<': pressAndRelease(VK_SHIFT, VK_COMMA); break;
case '>': pressAndRelease(VK_SHIFT, VK_PERIOD); break;
case '>': pressAndRelease(VK_SHIFT, VK_PERIOD); break;
case '.': pressAndRelease(VK_PERIOD); break;
case '.': pressAndRelease(VK_PERIOD); break;
case ' ': pressAndRelease(VK_SPACE); break;
case ' ': pressAndRelease(VK_SPACE); break;
case '~': pressAndRelease(VK_SHIFT, VK_BACK_QUOTE); break;
case '~': pressAndRelease(VK_SHIFT, VK_BACK_QUOTE); break;
case '!': pressAndRelease(VK_SHIFT, VK_1); break;
case '!': pressAndRelease(VK_SHIFT, VK_1); break;
case '@': pressAndRelease(VK_SHIFT, VK_2); break;
case '@': pressAndRelease(VK_SHIFT, VK_2); break;
case '#': pressAndRelease(VK_SHIFT, VK_3); break;
case '#': pressAndRelease(VK_SHIFT, VK_3); break;
case '$': pressAndRelease(VK_SHIFT, VK_4); break;
case '$': pressAndRelease(VK_SHIFT, VK_4); break;
case '%': pressAndRelease(VK_SHIFT, VK_5); break;
case '%': pressAndRelease(VK_SHIFT, VK_5); break;
case '^': pressAndRelease(VK_SHIFT, VK_6); break;
case '^': pressAndRelease(VK_SHIFT, VK_6); break;
case '&': pressAndRelease(VK_SHIFT, VK_7); break;
case '&': pressAndRelease(VK_SHIFT, VK_7); break;
case '*': pressAndRelease(VK_SHIFT, VK_8); break;
case '*': pressAndRelease(VK_SHIFT, VK_8); break;
case '(': pressAndRelease(VK_SHIFT, VK_9); break;
case '(': pressAndRelease(VK_SHIFT, VK_9); break;
case ')': pressAndRelease(VK_SHIFT, VK_0); break;
case ')': pressAndRelease(VK_SHIFT, VK_0); break;
case '_': pressAndRelease(VK_SHIFT, VK_MINUS); break;
case '_': pressAndRelease(VK_SHIFT, VK_MINUS); break;
case '+': pressAndRelease(VK_SHIFT, VK_EQUALS); break;
case '+': pressAndRelease(VK_SHIFT, VK_EQUALS); break;
case '|': pressAndRelease(VK_SHIFT, VK_BACK_SLASH); break;
case '|': pressAndRelease(VK_SHIFT, VK_BACK_SLASH); break;
case '?': pressAndRelease(VK_SHIFT, VK_SLASH); break;
case '?': pressAndRelease(VK_SHIFT, VK_SLASH); break;
default:
default:
throw new IllegalArgumentException("Cannot press character " + c);
throw new IllegalArgumentException("Cannot press character " + c);
}
}
}
}
private void pressAndRelease(int... keyCodes)
private void pressAndRelease(int... keyCodes)
{
{
for(int key : keyCodes)
for(int key : keyCodes)
{
{
press(key);
press(key);
}
}
for(int key : keyCodes)
for(int key : keyCodes)
{
{
release(key);
release(key);
}
}
}
}
private void press(int keyCode)
private void press(int keyCode)
{
{
robot.keyPress(keyCode);
robot.keyPress(keyCode);
}
}
private void release(int keyCode)
private void release(int keyCode)
{
{
robot.keyRelease(keyCode);
robot.keyRelease(keyCode);
}
}
@Override
public void onShutDown() throws Exception {
// TODO Auto-generated method stub
}
}
}
import com.stream_pi.textblockaction.TextBlockAction;
module com.stream_pi.textblockaction
{
module com.stream_pi.textblockaction {
requires com.stream_pi.action_api;
requires com.stream_pi.action_api;
requires com.stream_pi.util;
requires com.stream_pi.util;
requires org.kordamp.ikonli.javafx;
requires org.kordamp.ikonli.javafx;
requires org.kordamp.ikonli.fontawesome5;
requires org.kordamp.ikonli.fontawesome5;
requires java.desktop;
requires java.desktop;
provides com.stream_pi.action_api.externalplugin.ExternalPlugin with TextBlockAction;
provides com.stream_pi.action_api.externalplugin.ExternalPlugin with com.stream_pi.textblockaction.TextBlockAction;
}
}