Convert into a multi-module project.
For now, the API module only contains a few assorted utilities. More will be added later.
This commit is contained in:
29
api/build.gradle
Normal file
29
api/build.gradle
Normal file
@@ -0,0 +1,29 @@
|
||||
plugins {
|
||||
id 'java'
|
||||
id 'com.github.johnrengelman.shadow' version '2.0.4'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile 'com.google.code.gson:gson:2.8.5'
|
||||
compile 'com.google.guava:guava:25.1-jre'
|
||||
compile 'net.kyori:text:1.12-1.6.0-SNAPSHOT'
|
||||
compile 'com.moandjiezana.toml:toml4j:0.7.2'
|
||||
testCompile "org.junit.jupiter:junit-jupiter-api:${junitVersion}"
|
||||
testCompile "org.junit.jupiter:junit-jupiter-engine:${junitVersion}"
|
||||
}
|
||||
|
||||
task javadocJar(type: Jar) {
|
||||
classifier 'javadoc'
|
||||
from javadoc
|
||||
}
|
||||
|
||||
task sourcesJar(type: Jar) {
|
||||
classifier 'sources'
|
||||
from sourceSets.main.allSource
|
||||
}
|
||||
|
||||
artifacts {
|
||||
archives javadocJar
|
||||
archives shadowJar
|
||||
archives sourcesJar
|
||||
}
|
@@ -0,0 +1,5 @@
|
||||
package com.velocitypowered.api;
|
||||
|
||||
/**
|
||||
* Welcome to the Velocity API documentation.
|
||||
*/
|
@@ -0,0 +1,54 @@
|
||||
package com.velocitypowered.api.servers;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
|
||||
import java.net.InetSocketAddress;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* ServerInfo represents a server that a player can connect to. This object is immutable and safe for concurrent access.
|
||||
*/
|
||||
public final class ServerInfo {
|
||||
private final String name;
|
||||
private final InetSocketAddress address;
|
||||
|
||||
/**
|
||||
* Creates a new ServerInfo object.
|
||||
* @param name the name for the server
|
||||
* @param address the address of the server to connect to
|
||||
*/
|
||||
public ServerInfo(String name, InetSocketAddress address) {
|
||||
this.name = Preconditions.checkNotNull(name, "name");
|
||||
this.address = Preconditions.checkNotNull(address, "address");
|
||||
}
|
||||
|
||||
public final String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public final InetSocketAddress getAddress() {
|
||||
return address;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "ServerInfo{" +
|
||||
"name='" + name + '\'' +
|
||||
", address=" + address +
|
||||
'}';
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
ServerInfo that = (ServerInfo) o;
|
||||
return Objects.equals(name, that.name) &&
|
||||
Objects.equals(address, that.address);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final int hashCode() {
|
||||
return Objects.hash(name, address);
|
||||
}
|
||||
}
|
@@ -0,0 +1,56 @@
|
||||
package com.velocitypowered.api.util;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* LegacyChatColorUtils contains utilities for handling legacy Minecraft color codes. Generally, you should prefer
|
||||
* JSON-based components, but for convenience Velocity provides a limited set of tools to handle Minecraft color codes.
|
||||
*/
|
||||
public enum LegacyChatColorUtils {
|
||||
;
|
||||
|
||||
public static final char FORMAT_CHAR = '\u00a7';
|
||||
private static final Pattern CHAT_COLOR_MATCHER = Pattern.compile("(?i)" + Character.toString(FORMAT_CHAR) + "[0-9A-FL-OR]");
|
||||
|
||||
/**
|
||||
* Translates a string with Minecraft color codes prefixed with a different character than the section symbol into
|
||||
* a string that uses the section symbol.
|
||||
* @param originalChar the char the color codes are prefixed by
|
||||
* @param text the text to translate
|
||||
* @return the translated text
|
||||
*/
|
||||
public static String translate(char originalChar, String text) {
|
||||
Preconditions.checkNotNull(text, "text");
|
||||
char[] textChars = text.toCharArray();
|
||||
int foundSectionIdx = -1;
|
||||
for (int i = 0; i < textChars.length; i++) {
|
||||
char textChar = textChars[i];
|
||||
if (textChar == originalChar) {
|
||||
foundSectionIdx = i;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (foundSectionIdx >= 0) {
|
||||
textChar = Character.toLowerCase(textChar);
|
||||
if ((textChar >= 'a' && textChar <= 'f') || (textChar >= '0' && textChar <= '9') ||
|
||||
(textChar >= 'l' && textChar <= 'o' || textChar == 'r')) {
|
||||
textChars[foundSectionIdx] = FORMAT_CHAR;
|
||||
}
|
||||
foundSectionIdx = -1;
|
||||
}
|
||||
}
|
||||
return new String(textChars);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes all Minecraft color codes from the string.
|
||||
* @param text the text to remove color codes from
|
||||
* @return a new String without Minecraft color codes
|
||||
*/
|
||||
public static String removeFormatting(String text) {
|
||||
Preconditions.checkNotNull(text, "text");
|
||||
return CHAT_COLOR_MATCHER.matcher(text).replaceAll("");
|
||||
}
|
||||
}
|
@@ -0,0 +1,62 @@
|
||||
package com.velocitypowered.api.util;
|
||||
|
||||
import com.velocitypowered.api.util.LegacyChatColorUtils;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class LegacyChatColorUtilsTest {
|
||||
private static final String NON_FORMATTED = "Velocity";
|
||||
private static final String FORMATTED = "\u00a7cVelocity";
|
||||
private static final String FORMATTED_MULTIPLE = "\u00a7c\u00a7lVelocity";
|
||||
private static final String FORMATTED_MULTIPLE_VARIED = "\u00a7c\u00a7lVelo\u00a7a\u00a7mcity";
|
||||
private static final String INVALID = "\u00a7gVelocity";
|
||||
private static final String RAW_SECTION = "\u00a7";
|
||||
|
||||
@Test
|
||||
void removeFormattingNonFormatted() {
|
||||
assertEquals(NON_FORMATTED, LegacyChatColorUtils.removeFormatting(NON_FORMATTED));
|
||||
}
|
||||
|
||||
@Test
|
||||
void removeFormattingFormatted() {
|
||||
assertEquals(NON_FORMATTED, LegacyChatColorUtils.removeFormatting(FORMATTED));
|
||||
}
|
||||
|
||||
@Test
|
||||
void removeFormattingFormattedMultiple() {
|
||||
assertEquals(NON_FORMATTED, LegacyChatColorUtils.removeFormatting(FORMATTED_MULTIPLE));
|
||||
}
|
||||
|
||||
@Test
|
||||
void removeFormattingFormattedMultipleVaried() {
|
||||
assertEquals(NON_FORMATTED, LegacyChatColorUtils.removeFormatting(FORMATTED_MULTIPLE_VARIED));
|
||||
}
|
||||
|
||||
@Test
|
||||
void removeFormattingInvalidFormat() {
|
||||
assertEquals(INVALID, LegacyChatColorUtils.removeFormatting(INVALID));
|
||||
}
|
||||
|
||||
@Test
|
||||
void removeFormattingRawSection() {
|
||||
assertEquals(RAW_SECTION, LegacyChatColorUtils.removeFormatting(RAW_SECTION));
|
||||
}
|
||||
|
||||
@Test
|
||||
void translate() {
|
||||
assertEquals(FORMATTED, LegacyChatColorUtils.translate('&', "&cVelocity"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void translateMultiple() {
|
||||
assertEquals(FORMATTED_MULTIPLE, LegacyChatColorUtils.translate('&', "&c&lVelocity"));
|
||||
assertEquals(FORMATTED_MULTIPLE_VARIED, LegacyChatColorUtils.translate('&', "&c&lVelo&a&mcity"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void translateDifferentChar() {
|
||||
assertEquals(FORMATTED, LegacyChatColorUtils.translate('$', "$cVelocity"));
|
||||
assertEquals(FORMATTED_MULTIPLE_VARIED, LegacyChatColorUtils.translate('$', "$c$lVelo$a$mcity"));
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user