Skip to content

Commit

Permalink
Fix NoClassDefFoundError on < 1.12 with Discord execute command (Esse…
Browse files Browse the repository at this point in the history
  • Loading branch information
JRoy authored Aug 26, 2021
1 parent df88a89 commit 69850d8
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 23 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package net.ess3.provider.providers;

import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.Server;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
Expand Down Expand Up @@ -60,27 +58,13 @@ public String getName() {

@Override
public Spigot spigot() {
return new Spigot() {
@Override
public void sendMessage(BaseComponent component) {
BukkitSenderProvider.this.sendMessage(component.toLegacyText());
}

@Override
public void sendMessage(BaseComponent... components) {
sendMessage(new TextComponent(components));
}

@Override
public void sendMessage(UUID sender, BaseComponent... components) {
sendMessage(components);
}

@Override
public void sendMessage(UUID sender, BaseComponent component) {
sendMessage(component);
}
};
try {
Class.forName("org.bukkit.command.CommandSender$Spigot");
return ModernCommandSenderSpigotCreator.stupidDumbHackToMakeTheJvmHappy(this);
} catch (ClassNotFoundException ignored) {
//noinspection ConstantConditions
return null;
}
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package net.ess3.provider.providers;

import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.command.CommandSender;

import java.util.UUID;

public final class ModernCommandSenderSpigotCreator {
private ModernCommandSenderSpigotCreator() {
}

/**
* The JVM will FOR SOME REASON try to load inner classes even BEFORE THE CODE WHICH REFERENCE THEM IS CALLED.
* This dumbass hack postpones the class lookup to until we know for sure the class exists.
*/
public static CommandSender.Spigot stupidDumbHackToMakeTheJvmHappy(BukkitSenderProvider provider) {
return new CommandSender.Spigot() {
@Override
public void sendMessage(BaseComponent component) {
provider.sendMessage(component.toLegacyText());
}

@Override
public void sendMessage(BaseComponent... components) {
sendMessage(new TextComponent(components));
}

@Override
public void sendMessage(UUID sender, BaseComponent... components) {
sendMessage(components);
}

@Override
public void sendMessage(UUID sender, BaseComponent component) {
sendMessage(component);
}
};
}
}

0 comments on commit 69850d8

Please # to comment.