2020-07-31 16:37:47 +02:00
|
|
|
/*
|
|
|
|
* This file is part of PlaceholderAPI
|
|
|
|
*
|
|
|
|
* PlaceholderAPI
|
|
|
|
* Copyright (c) 2015 - 2020 PlaceholderAPI Team
|
|
|
|
*
|
|
|
|
* PlaceholderAPI free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* PlaceholderAPI is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
2020-07-26 22:26:42 +02:00
|
|
|
package me.clip.placeholderapi.commands.impl.local;
|
|
|
|
|
|
|
|
import com.google.common.io.CharStreams;
|
|
|
|
import com.google.gson.JsonParser;
|
|
|
|
import java.io.IOException;
|
|
|
|
import java.io.InputStream;
|
|
|
|
import java.io.InputStreamReader;
|
|
|
|
import java.io.OutputStream;
|
|
|
|
import java.net.HttpURLConnection;
|
|
|
|
import java.net.URL;
|
|
|
|
import java.nio.charset.StandardCharsets;
|
|
|
|
import java.time.Instant;
|
|
|
|
import java.time.ZoneId;
|
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
|
import java.time.format.FormatStyle;
|
2020-08-01 01:59:55 +02:00
|
|
|
import java.util.Arrays;
|
|
|
|
import java.util.Comparator;
|
2020-07-26 22:26:42 +02:00
|
|
|
import java.util.List;
|
|
|
|
import java.util.Locale;
|
|
|
|
import java.util.concurrent.CompletableFuture;
|
|
|
|
import java.util.concurrent.CompletionException;
|
|
|
|
import java.util.logging.Level;
|
|
|
|
import java.util.stream.Collectors;
|
2020-08-01 04:52:07 +02:00
|
|
|
import me.clip.placeholderapi.PlaceholderAPIPlugin;
|
|
|
|
import me.clip.placeholderapi.commands.PlaceholderCommand;
|
|
|
|
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
|
|
|
|
import me.clip.placeholderapi.util.Msg;
|
|
|
|
import org.bukkit.command.CommandSender;
|
|
|
|
import org.bukkit.plugin.Plugin;
|
|
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
|
import org.jetbrains.annotations.Unmodifiable;
|
|
|
|
|
|
|
|
public final class CommandDump extends PlaceholderCommand {
|
|
|
|
|
|
|
|
@NotNull
|
|
|
|
private static final String URL = "https://paste.helpch.at/";
|
|
|
|
|
|
|
|
@NotNull
|
|
|
|
private static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter
|
|
|
|
.ofLocalizedDateTime(FormatStyle.LONG)
|
|
|
|
.withLocale(Locale.US)
|
|
|
|
.withZone(ZoneId.of("UTC"));
|
|
|
|
|
|
|
|
|
|
|
|
public CommandDump() {
|
|
|
|
super("dump");
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void evaluate(@NotNull final PlaceholderAPIPlugin plugin,
|
|
|
|
@NotNull final CommandSender sender, @NotNull final String alias,
|
|
|
|
@NotNull @Unmodifiable final List<String> params) {
|
|
|
|
postDump(makeDump(plugin)).whenComplete((key, exception) -> {
|
|
|
|
if (exception != null) {
|
|
|
|
plugin.getLogger().log(Level.WARNING, "failed to post dump details", exception);
|
|
|
|
|
|
|
|
Msg.msg(sender,
|
|
|
|
"&cFailed to post dump details, check console.");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
Msg.msg(sender,
|
|
|
|
"&aSuccessfully posted dump: " + URL + key);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
@NotNull
|
|
|
|
private CompletableFuture<String> postDump(@NotNull final String dump) {
|
|
|
|
return CompletableFuture.supplyAsync(() -> {
|
|
|
|
try {
|
|
|
|
final HttpURLConnection connection = ((HttpURLConnection) new URL(URL + "documents")
|
|
|
|
.openConnection());
|
|
|
|
connection.setRequestMethod("POST");
|
|
|
|
connection.setRequestProperty("Content-Type", "text/plain; charset=utf-8");
|
|
|
|
connection.setDoOutput(true);
|
|
|
|
|
|
|
|
connection.connect();
|
|
|
|
|
|
|
|
try (final OutputStream stream = connection.getOutputStream()) {
|
|
|
|
stream.write(dump.getBytes(StandardCharsets.UTF_8));
|
|
|
|
}
|
|
|
|
|
|
|
|
try (final InputStream stream = connection.getInputStream()) {
|
|
|
|
//noinspection UnstableApiUsage
|
|
|
|
final String json = CharStreams
|
|
|
|
.toString(new InputStreamReader(stream, StandardCharsets.UTF_8));
|
|
|
|
return JsonParser.parseString(json).getAsJsonObject().get("key").getAsString();
|
|
|
|
}
|
|
|
|
} catch (final IOException ex) {
|
|
|
|
throw new CompletionException(ex);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
@NotNull
|
|
|
|
private String makeDump(@NotNull final PlaceholderAPIPlugin plugin) {
|
|
|
|
final StringBuilder builder = new StringBuilder();
|
|
|
|
|
|
|
|
builder.append("Generated: ")
|
|
|
|
.append(DATE_FORMAT.format(Instant.now()))
|
|
|
|
.append("\n\n");
|
|
|
|
|
|
|
|
builder.append("PlaceholderAPI: ")
|
|
|
|
.append(plugin.getDescription().getVersion())
|
|
|
|
.append("\n\n");
|
|
|
|
|
|
|
|
builder.append("Expansions Registered:")
|
|
|
|
.append('\n');
|
|
|
|
|
|
|
|
final List<PlaceholderExpansion> expansions = plugin.getLocalExpansionManager()
|
|
|
|
.getExpansions()
|
|
|
|
.stream()
|
|
|
|
.sorted(Comparator.comparing(PlaceholderExpansion::getIdentifier))
|
|
|
|
.sorted(Comparator.comparing(PlaceholderExpansion::getAuthor))
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
|
|
|
int size = 0;
|
|
|
|
|
|
|
|
for (final String name : expansions.stream().map(PlaceholderExpansion::getIdentifier)
|
|
|
|
.collect(Collectors.toList())) {
|
|
|
|
if (name.length() > size) {
|
|
|
|
size = name.length();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
for (final PlaceholderExpansion expansion : expansions) {
|
|
|
|
builder.append(" ")
|
|
|
|
.append(String.format("%-" + size + "s", expansion.getIdentifier()))
|
|
|
|
.append(" [Author: ")
|
|
|
|
.append(expansion.getAuthor())
|
|
|
|
.append(", Version: ")
|
|
|
|
.append(expansion.getVersion())
|
|
|
|
.append("]\n");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
builder.append('\n');
|
|
|
|
|
|
|
|
builder.append("Expansions Directory:")
|
|
|
|
.append('\n');
|
|
|
|
|
|
|
|
final String[] jars = plugin.getLocalExpansionManager()
|
|
|
|
.getExpansionsFolder()
|
|
|
|
.list((dir, name) -> name.toLowerCase().endsWith(".jar"));
|
|
|
|
|
|
|
|
for (final String jar : jars) {
|
|
|
|
builder.append(" ")
|
|
|
|
.append(jar)
|
|
|
|
.append('\n');
|
|
|
|
}
|
|
|
|
|
|
|
|
builder.append('\n');
|
|
|
|
|
|
|
|
builder.append("Server Info: ")
|
|
|
|
.append(plugin.getServer().getBukkitVersion())
|
|
|
|
.append('/')
|
|
|
|
.append(plugin.getServer().getVersion())
|
|
|
|
.append("\n\n");
|
|
|
|
|
|
|
|
builder.append("Plugin Info:")
|
|
|
|
.append('\n');
|
|
|
|
|
|
|
|
List<Plugin> plugins = Arrays.stream(plugin.getServer().getPluginManager().getPlugins())
|
|
|
|
.sorted(Comparator.comparing(Plugin::getName))
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
|
|
|
for (final String pluginName : plugins.stream().map(Plugin::getName)
|
|
|
|
.collect(Collectors.toList())) {
|
|
|
|
if (pluginName.length() > size) {
|
|
|
|
size = pluginName.length();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
for (final Plugin other : plugins) {
|
|
|
|
builder.append(" ")
|
|
|
|
.append(String.format("%-" + size + "s", other.getName()))
|
|
|
|
.append(" [Version: ")
|
|
|
|
.append(other.getDescription().getVersion())
|
|
|
|
.append("]")
|
|
|
|
.append("\n");
|
|
|
|
}
|
2020-07-26 22:26:42 +02:00
|
|
|
|
2020-08-01 04:52:07 +02:00
|
|
|
return builder.toString();
|
|
|
|
}
|
2020-07-26 22:26:42 +02:00
|
|
|
}
|