I get the error:
Caused by: java.lang.NoClassDefFoundError: net/milkbowl/vault/metrics/bukkit/Metrics$CustomChart
and its causing my plugin to fail to decompile.
full error code
Could not load 'plugins\EvadedEconomy-v1.2.jar' in folder 'plugins'
org.bukkit.plugin.InvalidPluginException: java.lang.NoClassDefFoundError: net/milkbowl/vault/metrics/bukkit/Metrics$CustomChart
at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:149) ~[spigot-api-1.18.2-R0.1-SNAPSHOT.jar:?]
at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:394) ~[spigot-api-1.18.2-R0.1-SNAPSHOT.jar:?]
at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:301) ~[spigot-api-1.18.2-R0.1-SNAPSHOT.jar:?]
at org.bukkit.craftbukkit.v1_18_R2.CraftServer.loadPlugins(CraftServer.java:407) ~[spigot-1.18.2-R0.1-SNAPSHOT.jar:3498-Spigot-b081915-10ba1be]
at net.minecraft.server.dedicated.DedicatedServer.e(DedicatedServer.java:232) ~[spigot-1.18.2-R0.1-SNAPSHOT.jar:3498-Spigot-b081915-10ba1be]
at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:1007) ~[spigot-1.18.2-R0.1-SNAPSHOT.jar:3498-Spigot-b081915-10ba1be]
at net.minecraft.server.MinecraftServer.lambda$0(MinecraftServer.java:304) ~[spigot-1.18.2-R0.1-SNAPSHOT.jar:3498-Spigot-b081915-10ba1be]
at java.lang.Thread.run(Thread.java:833) [?:?]
Caused by: java.lang.NoClassDefFoundError: net/milkbowl/vault/metrics/bukkit/Metrics$CustomChart
at java.lang.Class.forName0(Native Method) ~[?:?]
at java.lang.Class.forName(Class.java:488) ~[?:?]
at java.lang.Class.forName(Class.java:467) ~[?:?]
at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:67) ~[spigot-api-1.18.2-R0.1-SNAPSHOT.jar:?]
at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:145) ~[spigot-api-1.18.2-R0.1-SNAPSHOT.jar:?]
... 7 more
Caused by: java.lang.ClassNotFoundException: net.milkbowl.vault.metrics.bukkit.Metrics$CustomChart
at org.bukkit.plugin.java.PluginClassLoader.loadClass0(PluginClassLoader.java:147) ~[spigot-api-1.18.2-R0.1-SNAPSHOT.jar:?]
at org.bukkit.plugin.java.PluginClassLoader.loadClass(PluginClassLoader.java:99) ~[spigot-api-1.18.2-R0.1-SNAPSHOT.jar:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[?:?]
at java.lang.Class.forName0(Native Method) ~[?:?]
at java.lang.Class.forName(Class.java:488) ~[?:?]
at java.lang.Class.forName(Class.java:467) ~[?:?]
at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:67) ~[spigot-api-1.18.2-R0.1-SNAPSHOT.jar:?]
at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:145) ~[spigot-api-1.18.2-R0.1-SNAPSHOT.jar:?]
... 7 more
Main class
package main.java.me.lmaoloq.evadedeco;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.concurrent.CompletableFuture;
import java.util.logging.Level;
import org.bukkit.plugin.ServicePriority;
import org.bukkit.plugin.java.JavaPlugin;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import main.java.me.lmaoloq.evadedeco.command.CommandManager;
import main.java.me.lmaoloq.evadedeco.model.BankAccount;
import main.java.me.lmaoloq.evadedeco.storage.BankStorage;
import main.java.me.lmaoloq.evadedeco.storage.FileStorage;
import main.java.me.lmaoloq.evadedeco.storage.sql.MySqlStorage;
import main.java.me.lmaoloq.evadedeco.storage.sql.SqLiteStorage;
import net.milkbowl.vault.economy.Economy;
import net.milkbowl.vault.metrics.bukkit.Metrics;
import net.milkbowl.vault.metrics.bukkit.Metrics.SimplePie;
public class EvadedEco extends JavaPlugin {
private BankStorage storage;
private CompletableFuture<Void> checkUpdate() {
CompletableFuture<Void> future = new CompletableFuture<>();
getServer().getScheduler().runTaskAsynchronously(this, () -> {
try {
getLogger().info("Checking for updates...");
URL url = new URL("https://api.spiget.org/v2/resources/81941/versions?size=1&page=1&sort=-releaseDate");
URLConnection conn = url.openConnection();
conn.setRequestProperty("User-Agent", "EvadedEco/UpdateChecker");
InputStreamReader reader = new InputStreamReader(conn.getInputStream());
JsonElement element = JSONParser.parseReader(reader);
if (element.isJsonArray()) {
JsonObject result = element.getAsJsonArray().get(0).getAsJsonObject();
String version = result.get("name").getAsString();
if (!version.equals(getDescription().getVersion())) {
getLogger().warning("Version " + version + " of EvadedEco is available. You are running version " + getDescription().getVersion());
getLogger().warning("Download here: " + getDescription().getWebsite());
} else {
getLogger().info("You are running the latest version (" + getDescription().getVersion() + ")");
}
} else {
getLogger().severe("Failed to check for updates: Unexpected Result: " + element.toString());
}
} catch (Exception ex) {
getLogger().log(Level.SEVERE, "Failed to check for updates", ex);
} finally {
future.complete(null);
}
});
return future;
}
@Override
public void onLoad() {
saveDefaultConfig();
String storageType = getConfig().getString("storage-type");
switch (storageType.toLowerCase()) {
case "sqlite":
storage = new SqLiteStorage(this);
break;
case "mysql":
storage = new MySqlStorage(this);
break;
case "flatfile":
storage = new FileStorage(this);
break;
default:
getLogger().warning("Invalid storage type: " + storageType);
getLogger().warning("Using flatfile storage as fallback");
storage = new FileStorage(this);
}
storage.getAccounts()
.thenAccept(getBankManager()::loadAccounts)
.exceptionally(ex -> {
getLogger().log(Level.SEVERE, "Failed to load bank accounts", ex);
getLogger().log(Level.SEVERE, "Plugin will be disabled");
getServer().getPluginManager().disablePlugin(this);
return null;
});
}
@Override
public void onEnable() {
if (getServer().getPluginManager().isPluginEnabled("Vault")) {
Economy economy = new VaultEconomy(this);
getServer().getServicesManager().register(Economy.class, economy, this, ServicePriority.Normal);
}
CommandManager command = new CommandManager(this);
getCommand("money").setExecutor(command);
getCommand("money").setTabCompleter(command);
Metrics metrics = new Metrics(this);
metrics.addCustomChart(new SimplePie("storage_type", () -> getStorage().getTypeName()));
metrics.addCustomChart(new SimplePie("multi_world", () ->
getConfig().getBoolean("multi-world") ? "Enabled" : "Disabled"));
checkUpdate();
}
public BankManager getBankManager() {
return BankManager.get(this);
}
public String format(double balance) {
int decimalPlaces = getConfig().getInt("formatting.decimal-places");
String value = String.format("%,." + decimalPlaces + "f", balance);
String format = getConfig().getString("formatting.format");
return format.replace("{value}", value).replace("{sign}", getConfig().getString("formatting.sign"));
}
public BankStorage getStorage() {
return storage;
}
}
I have tried changing from import org.json.simple.parser.ParseException; to import com.google.gson.JSONParser and that didn't fix the issue for me.
I need help with fixing the error. From what I can see the issue is to do with parseReader(InputStreamReader) not being defined in JSONParser but I'm not sure how to fix it. I have spent about 30 minutes trying to search around for a fix but can't seem to find one.