Refactored CoreProtectAPI
This commit is contained in:
parent
d6c4755fba
commit
5c965b8a68
11 changed files with 812 additions and 303 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -179,6 +179,9 @@ context.json
|
||||||
run.sh
|
run.sh
|
||||||
run_*.sh
|
run_*.sh
|
||||||
no-log4j2.xml
|
no-log4j2.xml
|
||||||
|
database.db
|
||||||
|
*tests.txt
|
||||||
|
refactor.txt
|
||||||
|
|
||||||
# Compiled class file
|
# Compiled class file
|
||||||
*.class
|
*.class
|
||||||
|
|
|
||||||
7
pom.xml
7
pom.xml
|
|
@ -190,7 +190,12 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.logging.log4j</groupId>
|
<groupId>org.apache.logging.log4j</groupId>
|
||||||
<artifactId>log4j-core</artifactId>
|
<artifactId>log4j-core</artifactId>
|
||||||
<version>2.23.1</version>
|
<version>2.19.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.logging.log4j</groupId>
|
||||||
|
<artifactId>log4j-api</artifactId>
|
||||||
|
<version>2.19.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.github.DeadSilenceIV</groupId>
|
<groupId>com.github.DeadSilenceIV</groupId>
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
129
src/main/java/net/coreprotect/api/result/ParseResult.java
Normal file
129
src/main/java/net/coreprotect/api/result/ParseResult.java
Normal file
|
|
@ -0,0 +1,129 @@
|
||||||
|
package net.coreprotect.api.result;
|
||||||
|
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.block.data.BlockData;
|
||||||
|
|
||||||
|
import net.coreprotect.api.SessionLookup;
|
||||||
|
import net.coreprotect.utility.EntityUtils;
|
||||||
|
import net.coreprotect.utility.MaterialUtils;
|
||||||
|
import net.coreprotect.utility.StringUtils;
|
||||||
|
import net.coreprotect.utility.WorldUtils;
|
||||||
|
|
||||||
|
public class ParseResult {
|
||||||
|
private final String[] parse;
|
||||||
|
|
||||||
|
public ParseResult(String[] data) {
|
||||||
|
parse = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getActionId() {
|
||||||
|
return Integer.parseInt(parse[7]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getActionString() {
|
||||||
|
int actionID = Integer.parseInt(parse[7]);
|
||||||
|
if (parse.length < 13 && Integer.parseInt(parse[6]) == SessionLookup.ID) {
|
||||||
|
switch (actionID) {
|
||||||
|
case 0:
|
||||||
|
return "logout";
|
||||||
|
case 1:
|
||||||
|
return "login";
|
||||||
|
default:
|
||||||
|
return "unknown";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String result = "unknown";
|
||||||
|
if (actionID == 0) {
|
||||||
|
result = "break";
|
||||||
|
}
|
||||||
|
else if (actionID == 1) {
|
||||||
|
result = "place";
|
||||||
|
}
|
||||||
|
else if (actionID == 2) {
|
||||||
|
result = "click";
|
||||||
|
}
|
||||||
|
else if (actionID == 3) {
|
||||||
|
result = "kill";
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
public int getData() {
|
||||||
|
return Integer.parseInt(parse[6]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPlayer() {
|
||||||
|
return parse[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
public int getTime() {
|
||||||
|
return Integer.parseInt(parse[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getTimestamp() {
|
||||||
|
return Long.parseLong(parse[0]) * 1000L;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Material getType() {
|
||||||
|
if (parse.length < 13) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
int actionID = this.getActionId();
|
||||||
|
int type = Integer.parseInt(parse[5]);
|
||||||
|
String typeName;
|
||||||
|
|
||||||
|
if (actionID == 3) {
|
||||||
|
typeName = EntityUtils.getEntityType(type).name();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
typeName = MaterialUtils.getType(type).name().toLowerCase(Locale.ROOT);
|
||||||
|
typeName = StringUtils.nameFilter(typeName, this.getData());
|
||||||
|
}
|
||||||
|
|
||||||
|
return MaterialUtils.getType(typeName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public BlockData getBlockData() {
|
||||||
|
if (parse.length < 13) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
String blockData = parse[12];
|
||||||
|
if (blockData == null || blockData.length() == 0) {
|
||||||
|
return getType().createBlockData();
|
||||||
|
}
|
||||||
|
return Bukkit.getServer().createBlockData(blockData);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getX() {
|
||||||
|
return Integer.parseInt(parse[2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getY() {
|
||||||
|
return Integer.parseInt(parse[3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getZ() {
|
||||||
|
return Integer.parseInt(parse[4]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isRolledBack() {
|
||||||
|
if (parse.length < 13) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (Integer.parseInt(parse[8]) == 1 || Integer.parseInt(parse[8]) == 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String worldName() {
|
||||||
|
return WorldUtils.getWorldName(Integer.parseInt(parse.length < 13 ? parse[5] : parse[9]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -28,7 +28,7 @@ import net.coreprotect.utility.Color;
|
||||||
import net.coreprotect.utility.WorldUtils;
|
import net.coreprotect.utility.WorldUtils;
|
||||||
|
|
||||||
public class LookupCommand {
|
public class LookupCommand {
|
||||||
protected static void runCommand(CommandSender player, Command command, boolean permission, String[] args) {
|
public static void runCommand(CommandSender player, Command command, boolean permission, String[] args) {
|
||||||
int resultc = args.length;
|
int resultc = args.length;
|
||||||
args = CommandParser.parsePage(args);
|
args = CommandParser.parsePage(args);
|
||||||
Location lo = CommandParser.parseLocation(player, args);
|
Location lo = CommandParser.parseLocation(player, args);
|
||||||
|
|
@ -470,10 +470,12 @@ public class LookupCommand {
|
||||||
List<String> rollbackusers = argUsers;
|
List<String> rollbackusers = argUsers;
|
||||||
int c = 0;
|
int c = 0;
|
||||||
for (String ruser : rollbackusers) {
|
for (String ruser : rollbackusers) {
|
||||||
List<Player> players = Bukkit.getServer().matchPlayer(ruser);
|
if (Bukkit.getServer() != null) {
|
||||||
for (Player p : players) {
|
List<Player> players = Bukkit.getServer().matchPlayer(ruser);
|
||||||
if (p.getName().equalsIgnoreCase(ruser)) {
|
for (Player p : players) {
|
||||||
rollbackusers.set(c, p.getName());
|
if (p.getName().equalsIgnoreCase(ruser)) {
|
||||||
|
rollbackusers.set(c, p.getName());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
c++;
|
c++;
|
||||||
|
|
@ -524,7 +526,9 @@ public class LookupCommand {
|
||||||
if (lo != null) {
|
if (lo != null) {
|
||||||
x = lo.getBlockX();
|
x = lo.getBlockX();
|
||||||
z = lo.getBlockZ();
|
z = lo.getBlockZ();
|
||||||
wid = WorldUtils.getWorldId(lo.getWorld().getName());
|
if (lo.getWorld() != null) {
|
||||||
|
wid = WorldUtils.getWorldId(lo.getWorld().getName());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rollbackusers.size() == 1 && rollbackusers.contains("#global") && argAction.contains(9)) {
|
if (rollbackusers.size() == 1 && rollbackusers.contains("#global") && argAction.contains(9)) {
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ import net.coreprotect.utility.Color;
|
||||||
import net.coreprotect.utility.WorldUtils;
|
import net.coreprotect.utility.WorldUtils;
|
||||||
|
|
||||||
public class RollbackRestoreCommand {
|
public class RollbackRestoreCommand {
|
||||||
protected static void runCommand(CommandSender player, Command command, boolean permission, String[] args, Location argLocation, long forceStart, long forceEnd) {
|
public static void runCommand(CommandSender player, Command command, boolean permission, String[] args, Location argLocation, long forceStart, long forceEnd) {
|
||||||
Location lo = (argLocation != null ? argLocation : CommandParser.parseLocation(player, args));
|
Location lo = (argLocation != null ? argLocation : CommandParser.parseLocation(player, args));
|
||||||
List<String> argUuids = new ArrayList<>();
|
List<String> argUuids = new ArrayList<>();
|
||||||
List<String> argUsers = CommandParser.parseUsers(args);
|
List<String> argUsers = CommandParser.parseUsers(args);
|
||||||
|
|
|
||||||
|
|
@ -157,7 +157,8 @@ public class ActionParser {
|
||||||
argument = argument.trim().toLowerCase(Locale.ROOT);
|
argument = argument.trim().toLowerCase(Locale.ROOT);
|
||||||
argument = argument.replaceAll("\\\\", "");
|
argument = argument.replaceAll("\\\\", "");
|
||||||
argument = argument.replaceAll("'", "");
|
argument = argument.replaceAll("'", "");
|
||||||
if (argument.equals("#count") || argument.equals("#sum")) {
|
if (argument.equals("#count") || argument.equals("#sum") ||
|
||||||
|
argument.equals("count") || argument.equals("sum")) {
|
||||||
result = true;
|
result = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -214,10 +215,11 @@ public class ActionParser {
|
||||||
argument = argument.trim().toLowerCase(Locale.ROOT);
|
argument = argument.trim().toLowerCase(Locale.ROOT);
|
||||||
argument = argument.replaceAll("\\\\", "");
|
argument = argument.replaceAll("\\\\", "");
|
||||||
argument = argument.replaceAll("'", "");
|
argument = argument.replaceAll("'", "");
|
||||||
if (argument.equals("#preview")) {
|
if (argument.equals("#preview") || argument.equals("preview")) {
|
||||||
result = 1;
|
result = 1;
|
||||||
}
|
}
|
||||||
else if (argument.equals("#preview_cancel")) {
|
else if (argument.equals("#preview_cancel") || argument.equals("#preview-cancel") ||
|
||||||
|
argument.equals("preview_cancel") || argument.equals("preview-cancel")) {
|
||||||
result = 2;
|
result = 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -128,6 +128,14 @@ public class UserParser {
|
||||||
next = 0;
|
next = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Handle u:#player format for excluded users
|
||||||
|
else if (argument.startsWith("u:#")) {
|
||||||
|
String username = argument.substring(3); // Remove the 'u:#' prefix
|
||||||
|
if (!username.isEmpty()) {
|
||||||
|
excluded.add(username);
|
||||||
|
}
|
||||||
|
next = 0;
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
next = 0;
|
next = 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -239,6 +239,16 @@ public enum Phrase {
|
||||||
|
|
||||||
public static String build(Phrase phrase, String... params) {
|
public static String build(Phrase phrase, String... params) {
|
||||||
String output = phrase.getTranslatedPhrase();
|
String output = phrase.getTranslatedPhrase();
|
||||||
|
|
||||||
|
// If translated phrase is null, fall back to the default phrase
|
||||||
|
if (output == null) {
|
||||||
|
output = phrase.getPhrase();
|
||||||
|
// If that's still null, use an empty string to avoid NullPointerException
|
||||||
|
if (output == null) {
|
||||||
|
output = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
String color = "";
|
String color = "";
|
||||||
|
|
||||||
if (HEADERS.contains(phrase)) {
|
if (HEADERS.contains(phrase)) {
|
||||||
|
|
@ -283,6 +293,12 @@ public enum Phrase {
|
||||||
private static String buildInternal(Phrase phrase, String[] params, String color) {
|
private static String buildInternal(Phrase phrase, String[] params, String color) {
|
||||||
String output = phrase.getPhrase(); // get internal phrase
|
String output = phrase.getPhrase(); // get internal phrase
|
||||||
|
|
||||||
|
// If internal phrase is null, use an empty string to avoid NullPointerException
|
||||||
|
if (output == null) {
|
||||||
|
output = "";
|
||||||
|
return output; // Return empty string immediately if no phrase is available
|
||||||
|
}
|
||||||
|
|
||||||
int index = 0;
|
int index = 0;
|
||||||
for (String param : params) {
|
for (String param : params) {
|
||||||
if (index == 0 && COLORS.contains(param)) {
|
if (index == 0 && COLORS.contains(param)) {
|
||||||
|
|
@ -301,6 +317,11 @@ public enum Phrase {
|
||||||
|
|
||||||
public static String getPhraseSelector(Phrase phrase, String selector) {
|
public static String getPhraseSelector(Phrase phrase, String selector) {
|
||||||
String translatedPhrase = phrase.getTranslatedPhrase();
|
String translatedPhrase = phrase.getTranslatedPhrase();
|
||||||
|
// Return empty string if translated phrase is null
|
||||||
|
if (translatedPhrase == null) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
Pattern phrasePattern = Pattern.compile("(\\{[a-zA-Z| ]+})");
|
Pattern phrasePattern = Pattern.compile("(\\{[a-zA-Z| ]+})");
|
||||||
Matcher patternMatch = phrasePattern.matcher(translatedPhrase);
|
Matcher patternMatch = phrasePattern.matcher(translatedPhrase);
|
||||||
String match = "";
|
String match = "";
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ public class SystemUtils {
|
||||||
|
|
||||||
private static boolean testMode = Boolean.getBoolean("net.coreprotect.test");
|
private static boolean testMode = Boolean.getBoolean("net.coreprotect.test");
|
||||||
private static String processorInfo = null;
|
private static String processorInfo = null;
|
||||||
|
private static boolean log4jInitialized = false;
|
||||||
|
|
||||||
private SystemUtils() {
|
private SystemUtils() {
|
||||||
throw new IllegalStateException("Utility class");
|
throw new IllegalStateException("Utility class");
|
||||||
|
|
@ -43,7 +44,17 @@ public class SystemUtils {
|
||||||
else if (System.getProperty("os.name").toLowerCase().contains("android") || System.getProperty("java.runtime.name").toLowerCase().contains("android")) {
|
else if (System.getProperty("os.name").toLowerCase().contains("android") || System.getProperty("java.runtime.name").toLowerCase().contains("android")) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
Configurator.setLevel("oshi.hardware.common.AbstractCentralProcessor", Level.OFF);
|
|
||||||
|
try {
|
||||||
|
if (!log4jInitialized) {
|
||||||
|
Configurator.setLevel("oshi.hardware.common.AbstractCentralProcessor", Level.OFF);
|
||||||
|
log4jInitialized = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
// log4j configuration failure, continue without it
|
||||||
|
}
|
||||||
|
|
||||||
SystemInfo systemInfo = new SystemInfo();
|
SystemInfo systemInfo = new SystemInfo();
|
||||||
result = systemInfo.getHardware().getProcessor();
|
result = systemInfo.getHardware().getProcessor();
|
||||||
}
|
}
|
||||||
|
|
@ -79,6 +90,6 @@ public class SystemUtils {
|
||||||
* @return true if Log4j is disabled
|
* @return true if Log4j is disabled
|
||||||
*/
|
*/
|
||||||
private static boolean isLog4jDisabled() {
|
private static boolean isLog4jDisabled() {
|
||||||
return Boolean.getBoolean("log4j2.disable") || System.getProperty("log4j.configurationFile", "").contains("no-log4j2.xml");
|
return Boolean.getBoolean("log4j2.disable") || Boolean.getBoolean("net.coreprotect.disable.log4j") || System.getProperty("log4j.configurationFile", "").contains("no-log4j2.xml");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,18 @@ public class VersionUtils {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getPluginName() {
|
public static String getPluginName() {
|
||||||
String name = CoreProtect.getInstance().getDescription().getName();
|
CoreProtect instance = CoreProtect.getInstance();
|
||||||
|
// Return default name if instance is null
|
||||||
|
if (instance == null) {
|
||||||
|
return "CoreProtect";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return default name if description is null
|
||||||
|
if (instance.getDescription() == null) {
|
||||||
|
return "CoreProtect";
|
||||||
|
}
|
||||||
|
|
||||||
|
String name = instance.getDescription().getName();
|
||||||
String branch = ConfigHandler.EDITION_BRANCH;
|
String branch = ConfigHandler.EDITION_BRANCH;
|
||||||
|
|
||||||
if (branch.startsWith("-edge")) {
|
if (branch.startsWith("-edge")) {
|
||||||
|
|
@ -107,7 +118,12 @@ public class VersionUtils {
|
||||||
public static String getBranch() {
|
public static String getBranch() {
|
||||||
String branch = "";
|
String branch = "";
|
||||||
try {
|
try {
|
||||||
InputStreamReader reader = new InputStreamReader(CoreProtect.getInstance().getClass().getResourceAsStream("/plugin.yml"));
|
CoreProtect instance = CoreProtect.getInstance();
|
||||||
|
if (instance == null) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
InputStreamReader reader = new InputStreamReader(instance.getClass().getResourceAsStream("/plugin.yml"));
|
||||||
branch = YamlConfiguration.loadConfiguration(reader).getString("branch");
|
branch = YamlConfiguration.loadConfiguration(reader).getString("branch");
|
||||||
reader.close();
|
reader.close();
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue