by meoto2408 » 2019年11月18日(月) 03:05
Vaultのお金要素を使いたくて独自PLにコードを追加しているのですが、参考にできる日本語サイトがないため英字サイトを参考にしながらコードを書き来ました。
その結果、エラーが発生しました。
エラー
コード: 全て選択
[02:54:39 ERROR]: Error occurred while enabling MLSPlugin v1.0-SNAPSHOT (Is it up to date?)
java.lang.NoClassDefFoundError: net/milkbowl/vault/economy/Economy
at jp.dip.monsterlifeserver.mlsplugin.mlsplugin.MLSPlugin.onEnable(MLSPlugin.java:128) ~[?:?]
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:264) ~[patched_1.12.2.jar:git-Paper-1613]
at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:316) ~[patched_1.12.2.jar:git-Paper-1613]
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:405) ~[patched_1.12.2.jar:git-Paper-1613]
at org.bukkit.craftbukkit.v1_12_R1.CraftServer.enablePlugin(CraftServer.java:395) ~[patched_1.12.2.jar:git-Paper-1613]
at org.bukkit.craftbukkit.v1_12_R1.CraftServer.enablePlugins(CraftServer.java:344) ~[patched_1.12.2.jar:git-Paper-1613]
at net.minecraft.server.v1_12_R1.MinecraftServer.t(MinecraftServer.java:442) ~[patched_1.12.2.jar:git-Paper-1613]
at net.minecraft.server.v1_12_R1.MinecraftServer.l(MinecraftServer.java:403) ~[patched_1.12.2.jar:git-Paper-1613]
at net.minecraft.server.v1_12_R1.MinecraftServer.a(MinecraftServer.java:341) ~[patched_1.12.2.jar:git-Paper-1613]
at net.minecraft.server.v1_12_R1.DedicatedServer.init(DedicatedServer.java:289) ~[patched_1.12.2.jar:git-Paper-1613]
at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:616) ~[patched_1.12.2.jar:git-Paper-1613]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_211]
Caused by: java.lang.ClassNotFoundException: net.milkbowl.vault.economy.Economy
at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_211]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:156) ~[patched_1.12.2.jar:git-Paper-1613]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:104) ~[patched_1.12.2.jar:git-Paper-1613]
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_211]
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_211]
... 12 more
[02:54:39 INFO]: [MLSPlugin] Disabling MLSPlugin v1.0-SNAPSHOT
[02:54:39 ERROR]: Error occurred while disabling MLSPlugin v1.0-SNAPSHOT (Is it up to date?)
java.lang.NullPointerException: null
at jp.dip.monsterlifeserver.mlsplugin.mlsplugin.MLSPlugin.onDisable(MLSPlugin.java:250) ~[?:?]
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:266) ~[patched_1.12.2.jar:git-Paper-1613]
at org.bukkit.plugin.java.JavaPluginLoader.disablePlugin(JavaPluginLoader.java:350) ~[patched_1.12.2.jar:git-Paper-1613]
at org.bukkit.plugin.SimplePluginManager.disablePlugin(SimplePluginManager.java:437) ~[patched_1.12.2.jar:git-Paper-1613]
at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:320) ~[patched_1.12.2.jar:git-Paper-1613]
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:405) ~[patched_1.12.2.jar:git-Paper-1613]
at org.bukkit.craftbukkit.v1_12_R1.CraftServer.enablePlugin(CraftServer.java:395) ~[patched_1.12.2.jar:git-Paper-1613]
at org.bukkit.craftbukkit.v1_12_R1.CraftServer.enablePlugins(CraftServer.java:344) ~[patched_1.12.2.jar:git-Paper-1613]
at net.minecraft.server.v1_12_R1.MinecraftServer.t(MinecraftServer.java:442) ~[patched_1.12.2.jar:git-Paper-1613]
at net.minecraft.server.v1_12_R1.MinecraftServer.l(MinecraftServer.java:403) ~[patched_1.12.2.jar:git-Paper-1613]
at net.minecraft.server.v1_12_R1.MinecraftServer.a(MinecraftServer.java:341) ~[patched_1.12.2.jar:git-Paper-1613]
at net.minecraft.server.v1_12_R1.DedicatedServer.init(DedicatedServer.java:289) ~[patched_1.12.2.jar:git-Paper-1613]
at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:616) ~[patched_1.12.2.jar:git-Paper-1613]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_211]
MLSPlugin.java(Main)
コード: 全て選択
package jp.dip.monsterlifeserver.mlsplugin.mlsplugin;
import jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.Color;
import jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.CustomConfig;
import jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.Utility.ChannelStatus;
import jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.teiki_msg;
import jp.dip.monsterlifeserver.mlsplugin.mlsplugin.Discord.DiscordEvent;
import jp.dip.monsterlifeserver.mlsplugin.mlsplugin.Listener.*;
import net.dv8tion.jda.core.JDA;
import net.dv8tion.jda.core.JDABuilder;
import net.dv8tion.jda.core.entities.Guild;
import net.dv8tion.jda.core.entities.Role;
import net.dv8tion.jda.core.entities.TextChannel;
import net.dv8tion.jda.core.entities.VoiceChannel;
import net.milkbowl.vault.economy.Economy;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scoreboard.DisplaySlot;
import org.bukkit.scoreboard.Objective;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.ScoreboardManager;
import javax.security.auth.login.LoginException;
import net.milkbowl.vault.economy.Economy;
import java.util.*;
public final class MLSPlugin extends JavaPlugin {
public static CustomConfig config;
public static CustomConfig msg_conf;
public static CustomConfig dis_conf;
public static CustomConfig data;
public static ArrayList<String> owner;
public static ArrayList<String> owner_sub;
public static ArrayList<String> admin;
public static String Ver;
//Prefix
public static String pre_owner;
public static String pre_owner_sub;
public static String pre_member;
public static String pre_admin;
public static String PLPrefix;
//Discord
public static Long GuildID;
public static Long ChatID;
public static Long ConsoleID;
public static Long ReportID;
public static Long VoiceID;
public static Long RoleID;
public static JDA jda;
public static String token;
public static String GameStatus;
public static Long r_ownerID;
public static Long r_owner_subID;
public static Long r_adminID;
//Discord Channel
public static TextChannel ChatCh;
public static TextChannel ConsoleCh;
public static TextChannel ReportCh;
public static VoiceChannel VoiceCh;
public static Guild Guild;
public static Role Role;
public static Role r_owner;
public static Role r_owner_sub;
public static Role r_admin;
//Topic
public static String online_chat;
public static String online_console;
public static String offline_chat;
public static String offline_console;
//Minecraft Text
public static String mc_join;
public static String kick;
//Tablist
public static String Header;
public static String Footer;
//Discord Text
public static String dis_join;
public static ArrayList<String> list;
// メインスコアボードを取得します。
public static ScoreboardManager manager;
public static Scoreboard board;
public static Plugin plugin;
public static Economy eco;
/** オブジェクトの名前 */
private static final String OBJECTIVE_NAME = "showhealth";
public static HashMap<UUID, Double> moneyMap;
public static HashMap<UUID, Location> location1;
public static HashMap<UUID, Location> location2;
public static double BlockCost;
@Override
public void onEnable() {
//ironna data
moneyMap = new HashMap<>();
location1 = new HashMap<>();
location2 = new HashMap<>();
// Plugin startup logic
Ver = getDescription().getVersion();
plugin = this;
eco = null;
RegisteredServiceProvider<Economy> economyProvider = getServer().getServicesManager().getRegistration(Economy.class);
if (economyProvider != null) {
eco = economyProvider.getProvider();
}
// load config files
config = new CustomConfig(plugin);
msg_conf = new CustomConfig(plugin, "message.yml");
dis_conf = new CustomConfig(plugin, "discord.yml");
data = new CustomConfig(plugin, "data.yml");
config.saveDefaultConfig();
msg_conf.saveDefaultConfig();
dis_conf.saveDefaultConfig();
data.saveDefaultConfig();
BlockCost = config.getConfig().getDouble("BlockCost");
manager = Bukkit.getScoreboardManager();
board = manager.getMainScoreboard();
Objective objective = board.getObjective(OBJECTIVE_NAME);
if ( objective == null ) {
objective = board.registerNewObjective(OBJECTIVE_NAME, "health");
objective.setDisplaySlot(DisplaySlot.BELOW_NAME);
objective.setDisplayName(ChatColor.RED + "♥");
}
for (Player player : Bukkit.getOnlinePlayers()) {
objective.getScore(player).setScore((int)player.getHealth());
}
token = dis_conf.getConfig().getString("token");
try {
jda = new JDABuilder(token)
.addEventListener(new DiscordEvent())
.build();
} catch (LoginException e) {
e.printStackTrace();
}
try {
jda.awaitReady();
} catch (InterruptedException e) {
e.printStackTrace();
}
//Prefix
pre_owner = MLSPlugin.config.getConfig().getString("Prefix.Owner");
pre_owner_sub = MLSPlugin.config.getConfig().getString("Prefix.Owner_sub");
pre_admin = MLSPlugin.config.getConfig().getString("Prefix.Admin");
pre_member = MLSPlugin.config.getConfig().getString("Prefix.Member");
list = (ArrayList<String>) data.getConfig().getStringList("vote");
owner = (ArrayList<String>) config.getConfig().getStringList("owner.uuid");
owner_sub = (ArrayList<String>) config.getConfig().getStringList("owner_sub.uuid");
admin = (ArrayList<String>) config.getConfig().getStringList("admin.uuid");
//load Discord message value
dis_join = msg_conf.getConfig().getString("discord.join");
//load Minecraft message value
mc_join = msg_conf.getConfig().getString("mc.join");
kick = msg_conf.getConfig().getString("mc.kick");
//load Tablist Text
Header = config.getConfig().getString("Tablist.Header");
Footer = config.getConfig().getString("Tablist.Footer");
PLPrefix = config.getConfig().getString("Prefix.Plugin");
PLPrefix = Color.replaceColorCode(PLPrefix);
String enable = msg_conf.getConfig().getString("mc.enable");
enable = Color.replaceColorCode(enable);
getServer().getPluginManager().registerEvents(new Join(), plugin);
getServer().getPluginManager().registerEvents(new Quit(), plugin);
getServer().getPluginManager().registerEvents(new Arashi(), plugin);
getServer().getPluginManager().registerEvents(new Chat(), plugin);
getServer().getPluginManager().registerEvents(new Break(), plugin);
getServer().getPluginManager().registerEvents(new Drop(), plugin);
getServer().getPluginManager().registerEvents(new Move(), plugin);
getServer().getPluginManager().registerEvents(new PickUp(), plugin);
getServer().getPluginManager().registerEvents(new Damage(), plugin);
getServer().getPluginManager().registerEvents(new Place(), plugin);
getServer().getPluginManager().registerEvents(new WorldChange(), plugin);
getServer().getPluginManager().registerEvents(new Vote(), plugin);
getServer().getPluginManager().registerEvents(new Asure(), plugin);
getServer().getPluginManager().registerEvents(new regionCreate(), plugin);
getCommand("report").setExecutor(new Commands());
getCommand("mlog").setExecutor(new Commands());
getCommand("mls").setExecutor(new Commands());
getCommand("menu").setExecutor(new Commands());
getCommand("afk").setExecutor(new Commands());
getLogger().info(PLPrefix + enable + "Ver." + Ver);
String dis_ena = msg_conf.getConfig().getString("discord.enable");
ChatCh.sendMessage(dis_ena).queue();
ConsoleCh.sendMessage(dis_ena).queue();
ChannelStatus.setOnlineChannelStatus();
int count = 300;
BukkitRunnable task = new BukkitRunnable() {
int i = count;
public void run() {
if (i==0) {
new teiki_msg();
i = count;
}
i--;
}
};
task.runTaskTimer(plugin, 0L, 20L);
}
@Override
public void onDisable() {
// Plugin shutdown logic
String dis_disa = msg_conf.getConfig().getString("discord.disable");
String disable = msg_conf.getConfig().getString("mc.disable");
disable = Color.replaceColorCode(disable);
ChatCh.sendMessage(dis_disa).queue();
ConsoleCh.sendMessage(dis_disa).queue();
data.getConfig().set("vote", null);
data.getConfig().set("vote", list);
ChannelStatus.setOfflineChannelStatus();
jda.shutdown();
data.saveConfig();
config.saveConfig();
dis_conf.saveConfig();
msg_conf.saveConfig();
list.clear();
getLogger().info(PLPrefix + disable + "Ver." + Ver);
}
}
Commands.java
コード: 全て選択
package jp.dip.monsterlifeserver.mlsplugin.mlsplugin;
import jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.CustomItem;
import jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.checkPlayerData;
import net.milkbowl.vault.economy.Economy;
import net.dv8tion.jda.core.EmbedBuilder;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import java.awt.*;
import static jp.dip.monsterlifeserver.mlsplugin.mlsplugin.MLSPlugin.*;
public class Commands implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
Player player = (Player) sender;
if (cmd.getName().equalsIgnoreCase("report")) {
if (args == null) {
sender.sendMessage(MLSPlugin.PLPrefix + ChatColor.RED + "報告内容を入力してください。");
return false;
}
if (args.length == 1 && sender instanceof Player) {
String url = "https://ja.namemc.com/profile/" + ((Player) sender).getUniqueId() + "?q=" + ((Player) sender).getUniqueId();
String icon = "https://minotar.net/helm/" + ((Player) sender).getUniqueId() + "/100.png";
MLSPlugin.ReportCh.sendMessage(new EmbedBuilder()
.setTitle("報告", url)
.addField("報告者", sender.getName(), true)
.addField("報告", args[0], true)
.setColor(Color.RED)
.setThumbnail(icon)
.build()).queue();
} else if (args.length >= 2 && sender instanceof Player) {
String url = "https://ja.namemc.com/profile/" + ((Player) sender).getUniqueId() + "?q=" + ((Player) sender).getUniqueId();
String icon = "https://minotar.net/helm/" + ((Player) sender).getUniqueId() + "/100.png";
int i = args.length;
int c = 0;
String one = null;
for (String text : args) {
c++;
if (c == i) {
if (one == null) {
one = text;
} else {
one += text;
}
} else {
if (one == null) {
one = text + "\n";
} else {
one += text + "\n";
}
}
}
MLSPlugin.ReportCh.sendMessage(new EmbedBuilder()
.setTitle("報告", url)
.addField("報告者", sender.getName(), true)
.addField("報告", one, true)
.setColor(Color.RED)
.setThumbnail(icon)
.build()).queue();
}
return true;
} else if (cmd.getName().equalsIgnoreCase("mlog")) {
if (sender instanceof ConsoleCommandSender) {
if (args == null) {
MLSPlugin.ConsoleCh.sendMessage("test");
return false;
}
if (args.length == 1) {
MLSPlugin.ConsoleCh.sendMessage("[MLS] " + args[0]).queue();
} else if (args.length >= 2) {
int i = args.length;
int c = 0;
String one = null;
for (String text : args) {
c++;
if (c == i) {
one += text;
} else {
one += text + "\n";
}
}
MLSPlugin.ConsoleCh.sendMessage("[MLS] " + one).queue();
} else {
sender.sendMessage(PLPrefix + ChatColor.RED + "あなたにそのコマンドを実行する権限はありません。");
}
}
return true;
} else if (cmd.getName().equalsIgnoreCase("mls")) {
if (args[0].equalsIgnoreCase("toti")) {
if (args[1].equalsIgnoreCase("list")) {
sender.sendMessage("test");
return true;
}
if (args[1].equalsIgnoreCase("check")) {
Location loc1 = location1.get(player.getUniqueId());
Location loc2 = location2.get(player.getUniqueId());
if (loc1 != null || loc2 != null) {
double x1 = loc1.getX();
double y1 = loc1.getY();
double z1 = loc1.getZ();
double x2 = loc2.getX();
double y2 = loc2.getY();
double z2 = loc2.getZ();
double x;
x = Math.abs(x1 - x2) + 1;
double y;
y = Math.abs(y1 - y2) + 1;
double z;
z = Math.abs(z1 - z2) + 1;
double cost = x * y * z * BlockCost;
sender.sendMessage(PLPrefix + ChatColor.AQUA + cost + "円かかります。");
}
return true;
}
if (args[1].equalsIgnoreCase("get")) {
if (!args[1].isEmpty()) {
Location loc1 = location1.get(player.getUniqueId());
Location loc2 = location2.get(player.getUniqueId());
if (loc1 != null || loc2 != null) {
double x1 = loc1.getX();
double y1 = loc1.getY();
double z1 = loc1.getZ();
double x2 = loc2.getX();
double y2 = loc2.getY();
double z2 = loc2.getZ();
double x;
x = Math.abs(x1 - x2) + 1;
double y;
y = Math.abs(y1 - y2) + 1;
double z;
z = Math.abs(z1 - z2) + 1;
double cost = x * y * z * BlockCost;
sender.sendMessage(PLPrefix + ChatColor.AQUA + cost + "円かかります。");
}
}
return true;
}
}
if (args[0].equalsIgnoreCase("money")) {
if (args[1].equalsIgnoreCase("check")) {
if (args[2].isEmpty()) {
double m = eco.getBalance(sender.getName());
sender.sendMessage(PLPrefix + ChatColor.AQUA + "あなたの所持金は" + m + "です。");
return true;
} else {
if (sender.isOp()) {
for (Player p : Bukkit.getOnlinePlayers()) {
if (args[2].equalsIgnoreCase(p.getName())) {
double m = eco.getBalance(p.getName());
sender.sendMessage(PLPrefix + ChatColor.AQUA + p.getName() + "の所持金は" + m + "です。");
return true;
}
}
} else {
sender.sendMessage(PLPrefix + ChatColor.RED + "あなたはそのコマンドを実行することはできません。");
return true;
}
}
}
return true;
}
if (args[0].equalsIgnoreCase("home")) {
if (args[1].equalsIgnoreCase("tp")) {
Location loc = checkPlayerData.getDataLocation(player, "home");
player.teleport(loc);
return true;
} else if (args[1].equalsIgnoreCase("set")) {
new checkPlayerData().setDataLocation(player, "home");
return true;
}
sender.sendMessage(PLPrefix + ChatColor.RED + "そのようなコマンドは存在しません。/mls help で確認してください。");
return true;
}
if (args[0].equalsIgnoreCase("gatya")) {
if (args[1].equalsIgnoreCase("ticket")) {
if (!player.getWorld().getName().equals("world")) {
sender.sendMessage(PLPrefix + ChatColor.RED + "このコマンドはサバイバルワールドでのみ使用可能です。");
return true;
}
data.reloadConfig();
int csize = data.getConfig().getInt("data." + player.getUniqueId().toString() + ".log_bonus");
int size = data.getConfig().getInt("data." + player.getUniqueId().toString() + ".log_bonus");
if (csize == 0) {
sender.sendMessage(PLPrefix + ChatColor.RED + "あなたはガチャチケットをすべて受け取り済みのため付与することができません。");
} else {
if (csize > 64) {
csize = 64;
}
Inventory inv = player.getInventory();
int emptySlot = inv.firstEmpty();
if (emptySlot != -1) {
player.getInventory().setItem(emptySlot, CustomItem.GatyaTicket(csize));
size = size - csize;
data.getConfig().set("data." + player.getUniqueId().toString() + ".log_bonus", size);
data.saveConfig();
} else {
sender.sendMessage(PLPrefix + ChatColor.RED + "あなたは空のスロットを持っていないため付与することができません。");
}
}
return true;
} else if (args[1].equalsIgnoreCase("list")) {
sender.sendMessage(jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.Color.replaceColorCode("&6&l==================== &c&lMLS&6&l ===================="));
sender.sendMessage(jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.Color.replaceColorCode("・&6&lL R &a: &6&lレジェンドレア"));
sender.sendMessage(jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.Color.replaceColorCode("・&6&lU R &a: &6&lアルティメットレア"));
sender.sendMessage(jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.Color.replaceColorCode("・&6&lSSR &a: &6&lダブルスーパーレア"));
sender.sendMessage(jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.Color.replaceColorCode("・&6&lS R &a: &6&lスーパーレア"));
sender.sendMessage(jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.Color.replaceColorCode("・&6&lH R &a: &6&lハイパーレア"));
sender.sendMessage(jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.Color.replaceColorCode("・&6&l R &a: &6&lレア"));
sender.sendMessage(jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.Color.replaceColorCode("・&6&lH N &a: &6&lハイノーマル"));
sender.sendMessage(jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.Color.replaceColorCode("・&6&l N &a: &6&lノーマル"));
sender.sendMessage(jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.Color.replaceColorCode("・&6&lOFF &a: &6&lハズレ"));
sender.sendMessage(jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.Color.replaceColorCode("&6&l&6&l&6&l============================================="));
return true;
}
sender.sendMessage(PLPrefix + ChatColor.RED + "そのようなコマンドは存在しません。/mls help で確認してください。");
return true;
}
if (args[0].equalsIgnoreCase("menu")) {
sender.sendMessage("menu");
return true;
}
if (args[0].equalsIgnoreCase("afk")) {
String user = player.getPlayerListName();
String text = "<" + user + ChatColor.RESET + "> 放置します。";
Bukkit.broadcastMessage(text);
user = jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.Color.deleteColorCode(user);
ChatCh.sendMessage(user + " ≫ 放置します。").queue();
return true;
}
sender.sendMessage(PLPrefix + ChatColor.RED + "そのようなコマンドは存在しません。/mls help で確認してください。");
return true;
}
return false;
}
}
Vaultのお金要素を使いたくて独自PLにコードを追加しているのですが、参考にできる日本語サイトがないため英字サイトを参考にしながらコードを書き来ました。
その結果、エラーが発生しました。
エラー
[code][02:54:39 ERROR]: Error occurred while enabling MLSPlugin v1.0-SNAPSHOT (Is it up to date?)
java.lang.NoClassDefFoundError: net/milkbowl/vault/economy/Economy
at jp.dip.monsterlifeserver.mlsplugin.mlsplugin.MLSPlugin.onEnable(MLSPlugin.java:128) ~[?:?]
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:264) ~[patched_1.12.2.jar:git-Paper-1613]
at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:316) ~[patched_1.12.2.jar:git-Paper-1613]
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:405) ~[patched_1.12.2.jar:git-Paper-1613]
at org.bukkit.craftbukkit.v1_12_R1.CraftServer.enablePlugin(CraftServer.java:395) ~[patched_1.12.2.jar:git-Paper-1613]
at org.bukkit.craftbukkit.v1_12_R1.CraftServer.enablePlugins(CraftServer.java:344) ~[patched_1.12.2.jar:git-Paper-1613]
at net.minecraft.server.v1_12_R1.MinecraftServer.t(MinecraftServer.java:442) ~[patched_1.12.2.jar:git-Paper-1613]
at net.minecraft.server.v1_12_R1.MinecraftServer.l(MinecraftServer.java:403) ~[patched_1.12.2.jar:git-Paper-1613]
at net.minecraft.server.v1_12_R1.MinecraftServer.a(MinecraftServer.java:341) ~[patched_1.12.2.jar:git-Paper-1613]
at net.minecraft.server.v1_12_R1.DedicatedServer.init(DedicatedServer.java:289) ~[patched_1.12.2.jar:git-Paper-1613]
at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:616) ~[patched_1.12.2.jar:git-Paper-1613]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_211]
Caused by: java.lang.ClassNotFoundException: net.milkbowl.vault.economy.Economy
at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_211]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:156) ~[patched_1.12.2.jar:git-Paper-1613]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:104) ~[patched_1.12.2.jar:git-Paper-1613]
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_211]
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_211]
... 12 more
[02:54:39 INFO]: [MLSPlugin] Disabling MLSPlugin v1.0-SNAPSHOT
[02:54:39 ERROR]: Error occurred while disabling MLSPlugin v1.0-SNAPSHOT (Is it up to date?)
java.lang.NullPointerException: null
at jp.dip.monsterlifeserver.mlsplugin.mlsplugin.MLSPlugin.onDisable(MLSPlugin.java:250) ~[?:?]
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:266) ~[patched_1.12.2.jar:git-Paper-1613]
at org.bukkit.plugin.java.JavaPluginLoader.disablePlugin(JavaPluginLoader.java:350) ~[patched_1.12.2.jar:git-Paper-1613]
at org.bukkit.plugin.SimplePluginManager.disablePlugin(SimplePluginManager.java:437) ~[patched_1.12.2.jar:git-Paper-1613]
at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:320) ~[patched_1.12.2.jar:git-Paper-1613]
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:405) ~[patched_1.12.2.jar:git-Paper-1613]
at org.bukkit.craftbukkit.v1_12_R1.CraftServer.enablePlugin(CraftServer.java:395) ~[patched_1.12.2.jar:git-Paper-1613]
at org.bukkit.craftbukkit.v1_12_R1.CraftServer.enablePlugins(CraftServer.java:344) ~[patched_1.12.2.jar:git-Paper-1613]
at net.minecraft.server.v1_12_R1.MinecraftServer.t(MinecraftServer.java:442) ~[patched_1.12.2.jar:git-Paper-1613]
at net.minecraft.server.v1_12_R1.MinecraftServer.l(MinecraftServer.java:403) ~[patched_1.12.2.jar:git-Paper-1613]
at net.minecraft.server.v1_12_R1.MinecraftServer.a(MinecraftServer.java:341) ~[patched_1.12.2.jar:git-Paper-1613]
at net.minecraft.server.v1_12_R1.DedicatedServer.init(DedicatedServer.java:289) ~[patched_1.12.2.jar:git-Paper-1613]
at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:616) ~[patched_1.12.2.jar:git-Paper-1613]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_211][/code]
MLSPlugin.java(Main)
[code]package jp.dip.monsterlifeserver.mlsplugin.mlsplugin;
import jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.Color;
import jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.CustomConfig;
import jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.Utility.ChannelStatus;
import jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.teiki_msg;
import jp.dip.monsterlifeserver.mlsplugin.mlsplugin.Discord.DiscordEvent;
import jp.dip.monsterlifeserver.mlsplugin.mlsplugin.Listener.*;
import net.dv8tion.jda.core.JDA;
import net.dv8tion.jda.core.JDABuilder;
import net.dv8tion.jda.core.entities.Guild;
import net.dv8tion.jda.core.entities.Role;
import net.dv8tion.jda.core.entities.TextChannel;
import net.dv8tion.jda.core.entities.VoiceChannel;
import net.milkbowl.vault.economy.Economy;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scoreboard.DisplaySlot;
import org.bukkit.scoreboard.Objective;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.ScoreboardManager;
import javax.security.auth.login.LoginException;
import net.milkbowl.vault.economy.Economy;
import java.util.*;
public final class MLSPlugin extends JavaPlugin {
public static CustomConfig config;
public static CustomConfig msg_conf;
public static CustomConfig dis_conf;
public static CustomConfig data;
public static ArrayList<String> owner;
public static ArrayList<String> owner_sub;
public static ArrayList<String> admin;
public static String Ver;
//Prefix
public static String pre_owner;
public static String pre_owner_sub;
public static String pre_member;
public static String pre_admin;
public static String PLPrefix;
//Discord
public static Long GuildID;
public static Long ChatID;
public static Long ConsoleID;
public static Long ReportID;
public static Long VoiceID;
public static Long RoleID;
public static JDA jda;
public static String token;
public static String GameStatus;
public static Long r_ownerID;
public static Long r_owner_subID;
public static Long r_adminID;
//Discord Channel
public static TextChannel ChatCh;
public static TextChannel ConsoleCh;
public static TextChannel ReportCh;
public static VoiceChannel VoiceCh;
public static Guild Guild;
public static Role Role;
public static Role r_owner;
public static Role r_owner_sub;
public static Role r_admin;
//Topic
public static String online_chat;
public static String online_console;
public static String offline_chat;
public static String offline_console;
//Minecraft Text
public static String mc_join;
public static String kick;
//Tablist
public static String Header;
public static String Footer;
//Discord Text
public static String dis_join;
public static ArrayList<String> list;
// メインスコアボードを取得します。
public static ScoreboardManager manager;
public static Scoreboard board;
public static Plugin plugin;
public static Economy eco;
/** オブジェクトの名前 */
private static final String OBJECTIVE_NAME = "showhealth";
public static HashMap<UUID, Double> moneyMap;
public static HashMap<UUID, Location> location1;
public static HashMap<UUID, Location> location2;
public static double BlockCost;
@Override
public void onEnable() {
//ironna data
moneyMap = new HashMap<>();
location1 = new HashMap<>();
location2 = new HashMap<>();
// Plugin startup logic
Ver = getDescription().getVersion();
plugin = this;
eco = null;
RegisteredServiceProvider<Economy> economyProvider = getServer().getServicesManager().getRegistration(Economy.class);
if (economyProvider != null) {
eco = economyProvider.getProvider();
}
// load config files
config = new CustomConfig(plugin);
msg_conf = new CustomConfig(plugin, "message.yml");
dis_conf = new CustomConfig(plugin, "discord.yml");
data = new CustomConfig(plugin, "data.yml");
config.saveDefaultConfig();
msg_conf.saveDefaultConfig();
dis_conf.saveDefaultConfig();
data.saveDefaultConfig();
BlockCost = config.getConfig().getDouble("BlockCost");
manager = Bukkit.getScoreboardManager();
board = manager.getMainScoreboard();
Objective objective = board.getObjective(OBJECTIVE_NAME);
if ( objective == null ) {
objective = board.registerNewObjective(OBJECTIVE_NAME, "health");
objective.setDisplaySlot(DisplaySlot.BELOW_NAME);
objective.setDisplayName(ChatColor.RED + "♥");
}
for (Player player : Bukkit.getOnlinePlayers()) {
objective.getScore(player).setScore((int)player.getHealth());
}
token = dis_conf.getConfig().getString("token");
try {
jda = new JDABuilder(token)
.addEventListener(new DiscordEvent())
.build();
} catch (LoginException e) {
e.printStackTrace();
}
try {
jda.awaitReady();
} catch (InterruptedException e) {
e.printStackTrace();
}
//Prefix
pre_owner = MLSPlugin.config.getConfig().getString("Prefix.Owner");
pre_owner_sub = MLSPlugin.config.getConfig().getString("Prefix.Owner_sub");
pre_admin = MLSPlugin.config.getConfig().getString("Prefix.Admin");
pre_member = MLSPlugin.config.getConfig().getString("Prefix.Member");
list = (ArrayList<String>) data.getConfig().getStringList("vote");
owner = (ArrayList<String>) config.getConfig().getStringList("owner.uuid");
owner_sub = (ArrayList<String>) config.getConfig().getStringList("owner_sub.uuid");
admin = (ArrayList<String>) config.getConfig().getStringList("admin.uuid");
//load Discord message value
dis_join = msg_conf.getConfig().getString("discord.join");
//load Minecraft message value
mc_join = msg_conf.getConfig().getString("mc.join");
kick = msg_conf.getConfig().getString("mc.kick");
//load Tablist Text
Header = config.getConfig().getString("Tablist.Header");
Footer = config.getConfig().getString("Tablist.Footer");
PLPrefix = config.getConfig().getString("Prefix.Plugin");
PLPrefix = Color.replaceColorCode(PLPrefix);
String enable = msg_conf.getConfig().getString("mc.enable");
enable = Color.replaceColorCode(enable);
getServer().getPluginManager().registerEvents(new Join(), plugin);
getServer().getPluginManager().registerEvents(new Quit(), plugin);
getServer().getPluginManager().registerEvents(new Arashi(), plugin);
getServer().getPluginManager().registerEvents(new Chat(), plugin);
getServer().getPluginManager().registerEvents(new Break(), plugin);
getServer().getPluginManager().registerEvents(new Drop(), plugin);
getServer().getPluginManager().registerEvents(new Move(), plugin);
getServer().getPluginManager().registerEvents(new PickUp(), plugin);
getServer().getPluginManager().registerEvents(new Damage(), plugin);
getServer().getPluginManager().registerEvents(new Place(), plugin);
getServer().getPluginManager().registerEvents(new WorldChange(), plugin);
getServer().getPluginManager().registerEvents(new Vote(), plugin);
getServer().getPluginManager().registerEvents(new Asure(), plugin);
getServer().getPluginManager().registerEvents(new regionCreate(), plugin);
getCommand("report").setExecutor(new Commands());
getCommand("mlog").setExecutor(new Commands());
getCommand("mls").setExecutor(new Commands());
getCommand("menu").setExecutor(new Commands());
getCommand("afk").setExecutor(new Commands());
getLogger().info(PLPrefix + enable + "Ver." + Ver);
String dis_ena = msg_conf.getConfig().getString("discord.enable");
ChatCh.sendMessage(dis_ena).queue();
ConsoleCh.sendMessage(dis_ena).queue();
ChannelStatus.setOnlineChannelStatus();
int count = 300;
BukkitRunnable task = new BukkitRunnable() {
int i = count;
public void run() {
if (i==0) {
new teiki_msg();
i = count;
}
i--;
}
};
task.runTaskTimer(plugin, 0L, 20L);
}
@Override
public void onDisable() {
// Plugin shutdown logic
String dis_disa = msg_conf.getConfig().getString("discord.disable");
String disable = msg_conf.getConfig().getString("mc.disable");
disable = Color.replaceColorCode(disable);
ChatCh.sendMessage(dis_disa).queue();
ConsoleCh.sendMessage(dis_disa).queue();
data.getConfig().set("vote", null);
data.getConfig().set("vote", list);
ChannelStatus.setOfflineChannelStatus();
jda.shutdown();
data.saveConfig();
config.saveConfig();
dis_conf.saveConfig();
msg_conf.saveConfig();
list.clear();
getLogger().info(PLPrefix + disable + "Ver." + Ver);
}
}[/code]
Commands.java
[code]package jp.dip.monsterlifeserver.mlsplugin.mlsplugin;
import jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.CustomItem;
import jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.checkPlayerData;
import net.milkbowl.vault.economy.Economy;
import net.dv8tion.jda.core.EmbedBuilder;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import java.awt.*;
import static jp.dip.monsterlifeserver.mlsplugin.mlsplugin.MLSPlugin.*;
public class Commands implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
Player player = (Player) sender;
if (cmd.getName().equalsIgnoreCase("report")) {
if (args == null) {
sender.sendMessage(MLSPlugin.PLPrefix + ChatColor.RED + "報告内容を入力してください。");
return false;
}
if (args.length == 1 && sender instanceof Player) {
String url = "https://ja.namemc.com/profile/" + ((Player) sender).getUniqueId() + "?q=" + ((Player) sender).getUniqueId();
String icon = "https://minotar.net/helm/" + ((Player) sender).getUniqueId() + "/100.png";
MLSPlugin.ReportCh.sendMessage(new EmbedBuilder()
.setTitle("報告", url)
.addField("報告者", sender.getName(), true)
.addField("報告", args[0], true)
.setColor(Color.RED)
.setThumbnail(icon)
.build()).queue();
} else if (args.length >= 2 && sender instanceof Player) {
String url = "https://ja.namemc.com/profile/" + ((Player) sender).getUniqueId() + "?q=" + ((Player) sender).getUniqueId();
String icon = "https://minotar.net/helm/" + ((Player) sender).getUniqueId() + "/100.png";
int i = args.length;
int c = 0;
String one = null;
for (String text : args) {
c++;
if (c == i) {
if (one == null) {
one = text;
} else {
one += text;
}
} else {
if (one == null) {
one = text + "\n";
} else {
one += text + "\n";
}
}
}
MLSPlugin.ReportCh.sendMessage(new EmbedBuilder()
.setTitle("報告", url)
.addField("報告者", sender.getName(), true)
.addField("報告", one, true)
.setColor(Color.RED)
.setThumbnail(icon)
.build()).queue();
}
return true;
} else if (cmd.getName().equalsIgnoreCase("mlog")) {
if (sender instanceof ConsoleCommandSender) {
if (args == null) {
MLSPlugin.ConsoleCh.sendMessage("test");
return false;
}
if (args.length == 1) {
MLSPlugin.ConsoleCh.sendMessage("[MLS] " + args[0]).queue();
} else if (args.length >= 2) {
int i = args.length;
int c = 0;
String one = null;
for (String text : args) {
c++;
if (c == i) {
one += text;
} else {
one += text + "\n";
}
}
MLSPlugin.ConsoleCh.sendMessage("[MLS] " + one).queue();
} else {
sender.sendMessage(PLPrefix + ChatColor.RED + "あなたにそのコマンドを実行する権限はありません。");
}
}
return true;
} else if (cmd.getName().equalsIgnoreCase("mls")) {
if (args[0].equalsIgnoreCase("toti")) {
if (args[1].equalsIgnoreCase("list")) {
sender.sendMessage("test");
return true;
}
if (args[1].equalsIgnoreCase("check")) {
Location loc1 = location1.get(player.getUniqueId());
Location loc2 = location2.get(player.getUniqueId());
if (loc1 != null || loc2 != null) {
double x1 = loc1.getX();
double y1 = loc1.getY();
double z1 = loc1.getZ();
double x2 = loc2.getX();
double y2 = loc2.getY();
double z2 = loc2.getZ();
double x;
x = Math.abs(x1 - x2) + 1;
double y;
y = Math.abs(y1 - y2) + 1;
double z;
z = Math.abs(z1 - z2) + 1;
double cost = x * y * z * BlockCost;
sender.sendMessage(PLPrefix + ChatColor.AQUA + cost + "円かかります。");
}
return true;
}
if (args[1].equalsIgnoreCase("get")) {
if (!args[1].isEmpty()) {
Location loc1 = location1.get(player.getUniqueId());
Location loc2 = location2.get(player.getUniqueId());
if (loc1 != null || loc2 != null) {
double x1 = loc1.getX();
double y1 = loc1.getY();
double z1 = loc1.getZ();
double x2 = loc2.getX();
double y2 = loc2.getY();
double z2 = loc2.getZ();
double x;
x = Math.abs(x1 - x2) + 1;
double y;
y = Math.abs(y1 - y2) + 1;
double z;
z = Math.abs(z1 - z2) + 1;
double cost = x * y * z * BlockCost;
sender.sendMessage(PLPrefix + ChatColor.AQUA + cost + "円かかります。");
}
}
return true;
}
}
if (args[0].equalsIgnoreCase("money")) {
if (args[1].equalsIgnoreCase("check")) {
if (args[2].isEmpty()) {
double m = eco.getBalance(sender.getName());
sender.sendMessage(PLPrefix + ChatColor.AQUA + "あなたの所持金は" + m + "です。");
return true;
} else {
if (sender.isOp()) {
for (Player p : Bukkit.getOnlinePlayers()) {
if (args[2].equalsIgnoreCase(p.getName())) {
double m = eco.getBalance(p.getName());
sender.sendMessage(PLPrefix + ChatColor.AQUA + p.getName() + "の所持金は" + m + "です。");
return true;
}
}
} else {
sender.sendMessage(PLPrefix + ChatColor.RED + "あなたはそのコマンドを実行することはできません。");
return true;
}
}
}
return true;
}
if (args[0].equalsIgnoreCase("home")) {
if (args[1].equalsIgnoreCase("tp")) {
Location loc = checkPlayerData.getDataLocation(player, "home");
player.teleport(loc);
return true;
} else if (args[1].equalsIgnoreCase("set")) {
new checkPlayerData().setDataLocation(player, "home");
return true;
}
sender.sendMessage(PLPrefix + ChatColor.RED + "そのようなコマンドは存在しません。/mls help で確認してください。");
return true;
}
if (args[0].equalsIgnoreCase("gatya")) {
if (args[1].equalsIgnoreCase("ticket")) {
if (!player.getWorld().getName().equals("world")) {
sender.sendMessage(PLPrefix + ChatColor.RED + "このコマンドはサバイバルワールドでのみ使用可能です。");
return true;
}
data.reloadConfig();
int csize = data.getConfig().getInt("data." + player.getUniqueId().toString() + ".log_bonus");
int size = data.getConfig().getInt("data." + player.getUniqueId().toString() + ".log_bonus");
if (csize == 0) {
sender.sendMessage(PLPrefix + ChatColor.RED + "あなたはガチャチケットをすべて受け取り済みのため付与することができません。");
} else {
if (csize > 64) {
csize = 64;
}
Inventory inv = player.getInventory();
int emptySlot = inv.firstEmpty();
if (emptySlot != -1) {
player.getInventory().setItem(emptySlot, CustomItem.GatyaTicket(csize));
size = size - csize;
data.getConfig().set("data." + player.getUniqueId().toString() + ".log_bonus", size);
data.saveConfig();
} else {
sender.sendMessage(PLPrefix + ChatColor.RED + "あなたは空のスロットを持っていないため付与することができません。");
}
}
return true;
} else if (args[1].equalsIgnoreCase("list")) {
sender.sendMessage(jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.Color.replaceColorCode("&6&l==================== &c&lMLS&6&l ===================="));
sender.sendMessage(jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.Color.replaceColorCode("・&6&lL R &a: &6&lレジェンドレア"));
sender.sendMessage(jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.Color.replaceColorCode("・&6&lU R &a: &6&lアルティメットレア"));
sender.sendMessage(jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.Color.replaceColorCode("・&6&lSSR &a: &6&lダブルスーパーレア"));
sender.sendMessage(jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.Color.replaceColorCode("・&6&lS R &a: &6&lスーパーレア"));
sender.sendMessage(jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.Color.replaceColorCode("・&6&lH R &a: &6&lハイパーレア"));
sender.sendMessage(jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.Color.replaceColorCode("・&6&l R &a: &6&lレア"));
sender.sendMessage(jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.Color.replaceColorCode("・&6&lH N &a: &6&lハイノーマル"));
sender.sendMessage(jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.Color.replaceColorCode("・&6&l N &a: &6&lノーマル"));
sender.sendMessage(jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.Color.replaceColorCode("・&6&lOFF &a: &6&lハズレ"));
sender.sendMessage(jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.Color.replaceColorCode("&6&l&6&l&6&l============================================="));
return true;
}
sender.sendMessage(PLPrefix + ChatColor.RED + "そのようなコマンドは存在しません。/mls help で確認してください。");
return true;
}
if (args[0].equalsIgnoreCase("menu")) {
sender.sendMessage("menu");
return true;
}
if (args[0].equalsIgnoreCase("afk")) {
String user = player.getPlayerListName();
String text = "<" + user + ChatColor.RESET + "> 放置します。";
Bukkit.broadcastMessage(text);
user = jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.Color.deleteColorCode(user);
ChatCh.sendMessage(user + " ≫ 放置します。").queue();
return true;
}
sender.sendMessage(PLPrefix + ChatColor.RED + "そのようなコマンドは存在しません。/mls help で確認してください。");
return true;
}
return false;
}
}[/code]