Compare commits

..

1 Commits

Author SHA1 Message Date
Mighty_Squid d1f6eb6b95 Update `wiki` command to new URL and add tab-completion (#23)
Reviewed-on: Minecraft/QoL#23
Co-authored-by: Mighty_Squid <103967@gmail.com>
Co-committed-by: Mighty_Squid <103967@gmail.com>
2024-08-04 15:49:05 +00:00
4 changed files with 70 additions and 31 deletions

10
pom.xml
View File

@ -3,7 +3,7 @@
<groupId>xyz.etztech</groupId> <groupId>xyz.etztech</groupId>
<artifactId>QoL</artifactId> <artifactId>QoL</artifactId>
<!-- Version is used in plugin.yml --> <!-- Version is used in plugin.yml -->
<version>1.16</version> <version>1.17</version>
<packaging>jar</packaging> <packaging>jar</packaging>
<!-- Plugin Information --> <!-- Plugin Information -->
@ -42,7 +42,7 @@
<dependency> <dependency>
<groupId>us.dynmap</groupId> <groupId>us.dynmap</groupId>
<artifactId>dynmap-api</artifactId> <artifactId>dynmap-api</artifactId>
<version>1.9.4</version> <version>3.5</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
@ -53,7 +53,7 @@
<dependency> <dependency>
<groupId>com.discordsrv</groupId> <groupId>com.discordsrv</groupId>
<artifactId>discordsrv</artifactId> <artifactId>discordsrv</artifactId>
<version>1.23.0</version> <version>1.27.0</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
@ -81,7 +81,7 @@
</repository> </repository>
<repository> <repository>
<id>birbmc-repo</id> <id>birbmc-repo</id>
<url>https://mvn.birbmc.com</url> <url>https://mvn.jojodev.com</url>
</repository> </repository>
<repository> <repository>
<id>dynmap-repo</id> <id>dynmap-repo</id>
@ -105,7 +105,7 @@
</repository> </repository>
<repository> <repository>
<id>shopkeepers-repo</id> <id>shopkeepers-repo</id>
<url>https://nexus.lichtspiele.org/repository/releases/</url> <url>https://repo.projectshard.dev/repository/releases/</url>
</repository> </repository>
</repositories> </repositories>

View File

@ -1,25 +1,24 @@
package xyz.etztech.qol.commands; package xyz.etztech.qol.commands;
import com.google.gson.JsonArray; import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser; import com.google.gson.JsonParser;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.TabExecutor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import xyz.etztech.qol.QoL; import xyz.etztech.qol.QoL;
import xyz.etztech.qol.EtzTechUtil; import xyz.etztech.qol.EtzTechUtil;
import xyz.etztech.qol.Lang; import xyz.etztech.qol.Lang;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.net.URL; import java.net.URL;
import java.util.Date; import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class WikiCommand implements CommandExecutor { public class WikiCommand implements TabExecutor {
QoL plugin; QoL plugin;
public WikiCommand(QoL paramQoL) { public WikiCommand(QoL paramQoL) {
@ -28,7 +27,7 @@ public class WikiCommand implements CommandExecutor {
} }
@Override @Override
public boolean onCommand(CommandSender commandSender, Command command, String s, String[] args) { public boolean onCommand(CommandSender commandSender, Command command, String label, String[] args) {
if (!commandSender.hasPermission("qol.wiki")) { if (!commandSender.hasPermission("qol.wiki")) {
EtzTechUtil.sms(commandSender, Lang.NO_PERMISSION.getDef()); EtzTechUtil.sms(commandSender, Lang.NO_PERMISSION.getDef());
return true; return true;
@ -38,23 +37,61 @@ public class WikiCommand implements CommandExecutor {
return true; return true;
} }
try { String query = String.join(" ", args);
Date changedToAt; List<List<String>> result = getWikiResults(query, 1);
JsonObject obj;
InputStream response = new URL(String.format("https://minecraft.gamepedia.com/api.php?action=opensearch&format=json&formatversion=2&search=%s&namespace=0&limit=1", args[0])).openStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(response));
JsonArray jsonArray = new JsonParser().parse(reader.readLine()).getAsJsonArray();
StringBuilder message = new StringBuilder(ChatColor.GREEN + jsonArray.get(1).getAsJsonArray().get(0).getAsString());
message.append(": ");
message.append(ChatColor.WHITE + jsonArray.get(3).getAsJsonArray().get(0).getAsString());
EtzTechUtil.sms(commandSender, message.toString()); if (result.isEmpty())
} catch (IOException e) { {
EtzTechUtil.sms(commandSender, ChatColor.RED + "Minecraft wiki API returned nothing."); EtzTechUtil.sms(commandSender, ChatColor.RED + String.format("Nothing was found on the wiki using: %s", query));
} catch (IndexOutOfBoundsException e) { return true;
EtzTechUtil.sms(commandSender, ChatColor.RED + String.format("Nothing was found on the wiki using: %s", args[0]));
} }
String message = ChatColor.GREEN + result.get(0).get(0) + ": " + ChatColor.WHITE + result.get(0).get(1);
EtzTechUtil.sms(commandSender, message);
return true; return true;
} }
@Override
public List<String> onTabComplete(CommandSender commandSender, Command command, String label, String[] args) {
String query = String.join(" ", args);
if (query.isEmpty()) return null;
List<List<String>> results = getWikiResults(query, 10);
if (results.isEmpty()) return null;
List<String> completions = new ArrayList<>();
results.forEach((result) -> completions.add(result.get(0)));
return completions;
}
private List<List<String>> getWikiResults(String query, Integer numOfResults) {
try {
InputStream response = new URL(String.format(plugin.getConfig().getString("wiki-base-url", "https://minecraft.wiki:") + "/api.php?action=opensearch&format=json&formatversion=2&search=%s&namespace=0&limit=%d", query, numOfResults)).openStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(response));
JsonArray jsonArray = new JsonParser().parse(reader.readLine()).getAsJsonArray();
JsonArray names = jsonArray.get(1).getAsJsonArray();
JsonArray links = jsonArray.get(3).getAsJsonArray();
// Check if we got any result
if (names.size() < 1)
return Collections.emptyList();
List<List<String>> results = new ArrayList<>();
for (int i = 0; i < names.size(); i++)
{
List<String> e = new ArrayList<>();
e.add(names.get(i).getAsString());
e.add(links.get(i).getAsString());
results.add(e);
}
return results;
} catch(Exception e) {
return Collections.emptyList();
}
}
} }

View File

@ -67,17 +67,17 @@ public class AsyncPlayerChatListener implements Listener {
matcher = syntax.matcher(chat); matcher = syntax.matcher(chat);
switch (i) { switch (i) {
case 0: case 0:
chat = matcher.replaceAll("<underlined>$1</underlined>"); chat = matcher.replaceAll("&n$1&r");
break; break;
case 1: case 1:
case 3: case 3:
chat = matcher.replaceAll("<italic>$1</italic>"); chat = matcher.replaceAll("&o$1&r");
break; break;
case 2: case 2:
chat = matcher.replaceAll("<bold>$1</bold>"); chat = matcher.replaceAll("&l$1&r");
break; break;
case 4: case 4:
chat = matcher.replaceAll("<strikethrough>$1</strikethrough>"); chat = matcher.replaceAll("&m$1&r");
break; break;
default: default:
break; break;

View File

@ -124,3 +124,5 @@ head_shop:
# Diamond price of a head in the shop, default is 2 diamonds # Diamond price of a head in the shop, default is 2 diamonds
price: 2 price: 2
# Base URL for the /wiki command. Should support a https://www.mediawiki.org/wiki/API:Opensearch request
wiki-base-url: 'https://minecraft.wiki'