Skip to content

Commit

Permalink
Fix bug with bad stack traces when no entities are found
Browse files Browse the repository at this point in the history
  • Loading branch information
JorelAli committed Oct 6, 2018
1 parent 6097536 commit f163f44
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 15 deletions.
34 changes: 34 additions & 0 deletions 1.13CommandAPI/src/io/github/jorelali/commandapi/Main.java
@@ -1,14 +1,48 @@
package io.github.jorelali.commandapi;

import java.util.Collection;
import java.util.LinkedHashMap;

import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

import io.github.jorelali.commandapi.api.CommandAPI;
import io.github.jorelali.commandapi.api.arguments.Argument;
import io.github.jorelali.commandapi.api.arguments.EntitySelectorArgument;
import io.github.jorelali.commandapi.api.arguments.EntitySelectorArgument.EntitySelector;

public class Main extends JavaPlugin {

@Override
public void onEnable() {
//Nothing required here, just need
//to state that this is a plugin so
//other plugins can depend on it

LinkedHashMap<String, Argument> arguments = new LinkedHashMap<>();
arguments.put("player", new EntitySelectorArgument(EntitySelector.ONE_PLAYER));
CommandAPI.getInstance().register("apioneplayer", arguments, (sender, args) -> {
((Player) args[0]).sendMessage("hello");
});

arguments = new LinkedHashMap<>();
arguments.put("players", new EntitySelectorArgument(EntitySelector.MANY_PLAYERS));
CommandAPI.getInstance().register("apimanyplayers", arguments, (sender, args) -> {
((Collection<Player>) args[0]).forEach(p -> p.sendMessage("hi"));
});

arguments = new LinkedHashMap<>();
arguments.put("entity", new EntitySelectorArgument(EntitySelector.ONE_ENTITY));
CommandAPI.getInstance().register("apioneentity", arguments, (sender, args) -> {
((Entity) args[0]).remove();
});

arguments = new LinkedHashMap<>();
arguments.put("entities", new EntitySelectorArgument(EntitySelector.MANY_ENTITIES));
CommandAPI.getInstance().register("apimanyentities", arguments, (sender, args) -> {
((Collection<Entity>) args[0]).forEach(e -> e.remove());
});
}

}
Expand Up @@ -29,6 +29,7 @@
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import com.mojang.brigadier.builder.RequiredArgumentBuilder;
import com.mojang.brigadier.context.CommandContext;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import com.mojang.brigadier.tree.LiteralCommandNode;

import io.github.jorelali.commandapi.api.CommandPermission.PermissionNode;
Expand Down Expand Up @@ -196,31 +197,56 @@ private Command generateCommand(String commandName, final LinkedHashMap<String,
switch(argument.getEntitySelector()) {
case MANY_ENTITIES:
default:
Collection<?> collectionOfEntities = (Collection<?>) getNMSClass("ArgumentEntity").getDeclaredMethod("c", CommandContext.class, String.class).invoke(null, cmdCtx, entry.getKey());
Collection<Entity> entities = new ArrayList<>();
for(Object nmsEntity : collectionOfEntities) {
entities.add((Entity) getNMSClass("Entity").getDeclaredMethod("getBukkitEntity").invoke(nmsEntity));
try {
Collection<?> collectionOfEntities = (Collection<?>) getNMSClass("ArgumentEntity").getDeclaredMethod("c", CommandContext.class, String.class).invoke(null, cmdCtx, entry.getKey());
Collection<Entity> entities = new ArrayList<>();
for(Object nmsEntity : collectionOfEntities) {
entities.add((Entity) getNMSClass("Entity").getDeclaredMethod("getBukkitEntity").invoke(nmsEntity));
}
arr[count] = entities;
}
catch(InvocationTargetException e) {
if(e.getCause() instanceof CommandSyntaxException) {
arr[count] = (Collection<Entity>) new ArrayList<Entity>();
}
}
arr[count] = entities;
break;
case MANY_PLAYERS:
Collection<?> collectionOfPlayers = (Collection<?>) getNMSClass("ArgumentEntity").getDeclaredMethod("d", CommandContext.class, String.class).invoke(null, cmdCtx, entry.getKey());
Collection<Player> players = new ArrayList<>();
for(Object nmsPlayer : collectionOfPlayers) {
players.add((Player) getNMSClass("Entity").getDeclaredMethod("getBukkitEntity").invoke(nmsPlayer));
try {
Collection<?> collectionOfPlayers = (Collection<?>) getNMSClass("ArgumentEntity").getDeclaredMethod("d", CommandContext.class, String.class).invoke(null, cmdCtx, entry.getKey());
Collection<Player> players = new ArrayList<>();
for(Object nmsPlayer : collectionOfPlayers) {
players.add((Player) getNMSClass("Entity").getDeclaredMethod("getBukkitEntity").invoke(nmsPlayer));
}
arr[count] = players;
} catch(InvocationTargetException e) {
if(e.getCause() instanceof CommandSyntaxException) {
arr[count] = (Collection<Player>) new ArrayList<Player>();
}
}
arr[count] = players;
break;
case ONE_ENTITY:
Object entity = (Object) getNMSClass("ArgumentEntity").getDeclaredMethod("a", CommandContext.class, String.class).invoke(null, cmdCtx, entry.getKey());
arr[count] = (Entity) getNMSClass("Entity").getDeclaredMethod("getBukkitEntity").invoke(entity);
try {
Object entity = (Object) getNMSClass("ArgumentEntity").getDeclaredMethod("a", CommandContext.class, String.class).invoke(null, cmdCtx, entry.getKey());
arr[count] = (Entity) getNMSClass("Entity").getDeclaredMethod("getBukkitEntity").invoke(entity);
} catch(InvocationTargetException e) {
if(e.getCause() instanceof CommandSyntaxException) {
throw (CommandSyntaxException) e.getCause();
}
}
break;
case ONE_PLAYER:
Object player = (Object) getNMSClass("ArgumentEntity").getDeclaredMethod("e", CommandContext.class, String.class).invoke(null, cmdCtx, entry.getKey());
arr[count] = (Player) getNMSClass("Entity").getDeclaredMethod("getBukkitEntity").invoke(player);
try {
Object player = (Object) getNMSClass("ArgumentEntity").getDeclaredMethod("e", CommandContext.class, String.class).invoke(null, cmdCtx, entry.getKey());
arr[count] = (Player) getNMSClass("Entity").getDeclaredMethod("getBukkitEntity").invoke(player);
} catch(InvocationTargetException e) {
if(e.getCause() instanceof CommandSyntaxException) {
throw (CommandSyntaxException) e.getCause();
}
}
break;
}
} catch (NoSuchMethodException | SecurityException | ClassNotFoundException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
} catch (NoSuchMethodException | SecurityException | ClassNotFoundException | IllegalAccessException | IllegalArgumentException e) {
e.printStackTrace();
}
}
Expand Down

0 comments on commit f163f44

Please sign in to comment.