Fixed WorldEditListener issues

This commit is contained in:
Butzlabben 2020-02-04 23:01:00 +01:00
parent 1c674e1393
commit 767b743d78
2 changed files with 40 additions and 15 deletions

10
pom.xml
View File

@ -144,12 +144,12 @@
AsyncWorld is not in the api so I have to use a local file
Issue: https://github.com/boy0001/FastAsyncWorldedit/issues/1060
-->
<!-- FAWE-Bukkit Dependency -->
<dependency>
<groupId>com.boydti</groupId>
<artifactId>fawe-bukkit</artifactId>
<!-- https://ci.athion.net/job/FastAsyncWorldEdit/ws/mvn/com/boydti/fawe-bukkit/ -->
<version>19.11.13-5505943-1282-22.3.5</version>
<groupId>com.sk98q.worldedit</groupId>
<artifactId>FastAsnycWorldEdit</artifactId>
<scope>system</scope>
<version>1.0</version>
<systemPath>${pom.basedir}/lib/FastAsyncWorldEdit.jar</systemPath>
</dependency>
<dependency>

View File

@ -1,18 +1,48 @@
package de.butzlabben.world.listener;
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
import de.butzlabben.world.config.MessageConfig;
import de.butzlabben.world.config.WorldConfig;
import de.butzlabben.world.config.WorldPerm;
import de.butzlabben.world.wrapper.WorldPlayer;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.SimpleCommandMap;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class WorldEditListener implements Listener {
private final List<String> worldEditCommands= new ArrayList<>();
public WorldEditListener() {
try {
String packageName = Bukkit.getServer().getClass().getPackage().getName();
String version = packageName.substring(packageName.lastIndexOf(".") + 1);
Class<?> serverClass = Class.forName("org.bukkit.craftbukkit." + version + ".CraftServer");
Field f1 = serverClass.getDeclaredField("commandMap");
f1.setAccessible(true);
SimpleCommandMap commandMap = (SimpleCommandMap) f1.get(Bukkit.getServer());
Field f2 = SimpleCommandMap.class.getDeclaredField("knownCommands");
f2.setAccessible(true);
@SuppressWarnings({"unchecked", "rawtypes"})
Map<String, Command> knownCommands = (Map) f2.get(commandMap);
worldEditCommands.addAll(knownCommands.entrySet().stream().filter(entry -> entry.getKey().contains("worldedit"))
.map(entry -> entry.getValue().getName()).collect(Collectors.toList()));
} catch (Exception e) {
e.printStackTrace();
}
}
@EventHandler
public void playerCommandHandler(PlayerCommandPreprocessEvent event) {
String command = event.getMessage().split(" ")[0];
@ -33,14 +63,9 @@ public class WorldEditListener implements Listener {
}
private boolean isWorldEditCommand(String command) {
WorldEditPlugin plugin = (WorldEditPlugin) Bukkit.getPluginManager().getPlugin("WorldEdit");
// WorldEdit plugin not foung
if (plugin == null)
return false;
if (command.startsWith("/")) {
command = command.replaceFirst("/", "");
}
return plugin.getCommand(command) != null;
System.out.println(command);
return worldEditCommands.contains(command)
|| worldEditCommands.contains(command.replaceFirst("/", ""))
|| worldEditCommands.contains(command.replaceFirst("/worldedit:", ""));
}
}