Skip to content

Commit

Permalink
Use MiniMessage, Update to mclogs-java 3.0
Browse files Browse the repository at this point in the history
  • Loading branch information
JulianVennen committed Mar 15, 2023
1 parent 054d520 commit a6e84d0
Show file tree
Hide file tree
Showing 11 changed files with 211 additions and 141 deletions.
3 changes: 0 additions & 3 deletions .gitmodules

This file was deleted.

5 changes: 3 additions & 2 deletions CHANGELOG.md
@@ -1,2 +1,3 @@
- Log file that's being shared
- Prevent sharing of files outside the log or crash-reports folder
- Update to mclogs 3.0.1
- Use MiniMessage for formatting
- Replace config with direct urls
7 changes: 0 additions & 7 deletions README.md
Expand Up @@ -24,10 +24,3 @@ List all currently available server logs and upload them with one click.
/mclogs share <filename>
```
Share a specific log file, .gz files are automatically unpacked.

### Developing
This plugin uses the [mclogs-java](https://github.com/aternosorg/mclogs-java) library.
You need to run the following command to add it to the project:
```bash
git submodule init && git submodule update
```
18 changes: 15 additions & 3 deletions build.gradle
Expand Up @@ -2,19 +2,25 @@ plugins {
id 'java'
id 'com.github.johnrengelman.shadow' version '6.1.0'
id "com.modrinth.minotaur" version "2.+"
id "xyz.jpenilla.run-paper" version "2.0.1"
}

version = project.hasProperty('release') ? project.getProperty('release') : 'dev'

repositories {
mavenCentral()
maven { url = 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/' }
maven {
name = "Spigot"
url = 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/'
}
mavenLocal()
}

dependencies {
compileOnly 'org.spigotmc:spigot-api:1.19.2-R0.1-SNAPSHOT'
implementation project(":mclogs-java")
implementation 'gs.mclo:api:3.0.1'
implementation "net.kyori:adventure-api:4.13.0"
implementation "net.kyori:adventure-platform-bukkit:4.2.0"
}

processResources {
Expand All @@ -28,7 +34,13 @@ processResources {
shadowJar {
from sourceSets.main.allSource
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
archiveFileName = "mclogs-bukkit-${version}.jar"
archiveFileName = "mclogs-bukkit-${project.version}.jar"
}

tasks {
runServer {
minecraftVersion("1.19.3")
}
}

modrinth {
Expand Down
4 changes: 1 addition & 3 deletions settings.gradle
Expand Up @@ -4,6 +4,4 @@ pluginManagement {
}
}

rootProject.name = 'mclogs-bukkit'
include ':mclogs-java'
project(':mclogs-java').projectDir = new File('./mclogs-java')
rootProject.name = 'mclogs-bukkit'
78 changes: 38 additions & 40 deletions src/main/java/gs/mclo/bukkit/CommandMclogs.java
@@ -1,16 +1,16 @@
package gs.mclo.bukkit;

import gs.mclo.java.APIResponse;
import gs.mclo.java.Log;
import gs.mclo.java.MclogsAPI;
import org.bukkit.ChatColor;
import gs.mclo.api.Log;
import gs.mclo.api.response.UploadLogResponse;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.event.ClickEvent;
import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor;
import org.jetbrains.annotations.NotNull;

import java.io.File;
import java.io.IOError;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
Expand All @@ -23,11 +23,12 @@

public class CommandMclogs implements CommandExecutor, TabExecutor {

public final MclogsBukkitLoader plugin;
public final MclogsPlugin plugin;

public final HashMap<String, SubCommand> subCommands = new HashMap<>();

public CommandMclogs(MclogsBukkitLoader plugin) {

public CommandMclogs(MclogsPlugin plugin) {
this.plugin = plugin;
this.registerSubCommands();
}
Expand All @@ -38,21 +39,27 @@ private void registerSubCommands() {
}

@Override
public boolean onCommand(CommandSender sender, Command command, String s, String[] args) {
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String s, String[] args) {
if (args.length == 0) {
if (sender.hasPermission("mclogs.upload")) {
share(sender,"latest.log");
}
else {
sender.sendMessage(ChatColor.RED + "You don't have the permission to use the command!");
plugin.adventure().sender(sender).sendMessage(Component
.text("You don't have the permissions to use the command!")
.color(NamedTextColor.RED)
);
}
return true;
}

SubCommand subCommand = subCommands.get(args[0]);
if (subCommand == null) return false;
if (subCommand.getPermission() != null && !sender.hasPermission(subCommand.getPermission())) {
sender.sendMessage(ChatColor.RED + "You don't have the permissions required to execute this command.");
plugin.adventure().sender(sender).sendMessage(Component
.text("You don't have the permissions to use the command!")
.color(NamedTextColor.RED)
);
return true;
}
return subCommand.onCommand(sender, command, s, Arrays.copyOfRange(args, 1, args.length));
Expand Down Expand Up @@ -81,35 +88,35 @@ public void share(CommandSender commandSender, String file) {

if (!log.toFile().exists() || !isInAllowedDirectory
|| !log.getFileName().toString().matches(Log.ALLOWED_FILE_NAME_PATTERN.pattern())) {
commandSender.sendMessage(ChatColor.RED + "There is no log or crash report with the name '" + file
+ "'. Use '/mclogs list' to list all logs.");
plugin.adventure().sender(commandSender).sendMessage(Component
.text("There is no log or crash report with the name '" + file + "'. Use '/mclogs list' to list all logs.")
.color(NamedTextColor.RED)
);
return;
}

try {
APIResponse response = MclogsAPI.share(log);
if (response.success) {
commandSender.sendMessage(ChatColor.GREEN + "Your log has been uploaded: " + ChatColor.BLUE + this.getMclogsURL(response.id));
}
else {
commandSender.sendMessage(ChatColor.RED + "An error occurred. Check your log for more details");
logger.log(Level.SEVERE,"An error occurred while uploading your log: " + response.error);
}
UploadLogResponse response = plugin.getMclogsClient().uploadLog(log);
plugin.adventure().sender(commandSender).sendMessage(Component
.text("Your log has been uploadded:")
.color(NamedTextColor.GREEN)
.appendSpace()
.append(Component.text(response.getUrl())
.clickEvent(ClickEvent.openUrl(response.getUrl()))
.color(NamedTextColor.AQUA))
);
}
catch (IOException e) {
commandSender.sendMessage(ChatColor.RED + "An error occurred. Check your log for more details");
plugin.adventure().sender(commandSender).sendMessage(Component
.text("An error occurred. Check your log for more details.")
.color(NamedTextColor.RED)
);
logger.log(Level.SEVERE,"An error occurred while reading your log", e);
}
}

public String getMclogsURL(String id) {
String protocol = plugin.getConfig().get("protocol", "https").toString();
String host = plugin.getConfig().get("host", "mclo.gs").toString();
return protocol + "://" + host + "/" + id;
}

@Override
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, String[] args) {
if (args.length == 0) return new ArrayList<>(subCommands.keySet());
SubCommand subCommand = subCommands.get(args[0]);
if (subCommand == null) return new ArrayList<>(subCommands.keySet());
Expand All @@ -120,22 +127,13 @@ public List<String> onTabComplete(CommandSender sender, Command command, String
* @return log files
*/
public String[] listLogs() {
return MclogsAPI.listLogs(plugin.getRunDir());
return plugin.getMclogsClient().listLogsInDirectory(plugin.getRunDir());
}

/**
* @return crash reports
*/
public String[] listCrashReports() {
return MclogsAPI.listCrashReports(plugin.getRunDir());
}

/**
* log a message
* @param level log level
* @param message log message
*/
public void log(Level level, String message) {
plugin.getLogger().log(level, message);
return plugin.getMclogsClient().listCrashReportsInDirectory(plugin.getRunDir());
}
}
48 changes: 0 additions & 48 deletions src/main/java/gs/mclo/bukkit/MclogsBukkitLoader.java

This file was deleted.

55 changes: 27 additions & 28 deletions src/main/java/gs/mclo/bukkit/MclogsListCommand.java
@@ -1,10 +1,11 @@
package gs.mclo.bukkit;

import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.TextComponent;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.event.ClickEvent;
import net.kyori.adventure.text.format.TextDecoration;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.jetbrains.annotations.NotNull;

import java.util.ArrayList;
import java.util.List;
Expand All @@ -23,37 +24,35 @@ String getPermission() {
}

@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
TextComponent message = new TextComponent();

TextComponent logsHeader = new TextComponent("Available logs:");
logsHeader.setBold(true);
logsHeader.setColor(ChatColor.GREEN);
message.addExtra(logsHeader);
for (String log : mclogs.listLogs()) {
TextComponent entry = new TextComponent("\n" + log);
entry.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/mclogs share " + log));
entry.setBold(false);
message.addExtra(entry);
}
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {
mclogs.plugin.adventure().sender(sender).sendMessage(Component.empty()
.append(generateList("logs", mclogs.listLogs()))
.appendNewline()
.appendNewline()
.append(generateList("crash-reports", mclogs.listCrashReports()))
);
return true;
}

TextComponent crashReportsHeader = new TextComponent("\nAvailable crash reports:");
crashReportsHeader.setBold(true);
crashReportsHeader.setColor(ChatColor.GREEN);
message.addExtra(crashReportsHeader);
for (String crashReport : mclogs.listCrashReports()) {
TextComponent entry = new TextComponent("\n" + crashReport);
entry.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/mclogs share " + crashReport));
entry.setBold(false);
message.addExtra(entry);
protected @NotNull Component generateList(String name, String[] entries) {
if (entries.length == 0) {
return Component.text("No " + name + " available.");
}
Component list = Component.empty().append(Component
.text("Available " + name + ":")
.decorate(TextDecoration.UNDERLINED));
for (String log : entries) {
list = list.appendNewline().append(Component
.text(log)
.clickEvent(ClickEvent.runCommand("/mclogs share " + log))
);
}

sender.spigot().sendMessage(message);
return true;
return list;
}

@Override
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, String[] args) {
return new ArrayList<>();
}
}

0 comments on commit a6e84d0

Please sign in to comment.