From ea14d121d512e0e820bf7b68ebafbedb6611ec30 Mon Sep 17 00:00:00 2001 From: Aikar Date: Fri, 21 Apr 2017 21:00:17 -0400 Subject: [PATCH] Use reflection to set name if setName doesnt exists, Fixes #16 --- src/main/java/co/aikar/commands/BaseCommand.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/co/aikar/commands/BaseCommand.java b/src/main/java/co/aikar/commands/BaseCommand.java index e8c47f69..796de683 100644 --- a/src/main/java/co/aikar/commands/BaseCommand.java +++ b/src/main/java/co/aikar/commands/BaseCommand.java @@ -38,6 +38,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.util.StringUtil; +import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; @@ -108,7 +109,18 @@ public abstract class BaseCommand extends Command { cmd = CommandPatterns.PIPE.split(rootCmdAlias.value())[0]; } cmd = cmd.toLowerCase(); - setName(cmd); + try { + setName(cmd); + } catch (NoSuchMethodError ignored) { + try { + // To support pre 1.8 where setName was not added. + Field field = Command.class.getDeclaredField("name"); + field.setAccessible(true); + field.set(this, cmd); + } catch (NoSuchFieldException | IllegalAccessException e) { + CommandLog.exception("Error setting name for command", e); + } + } setLabel(cmd); }