初歩的な、イベントやコマンド実装というところはできるのですが、config周りのことがいまいち調べても理解ができておらず、うまく動かなくて困っています。(参考サイト:https://jyn.jp/bukkit-plugin-development-7/#i-4)
実装したいのは、
- 初回ログイン時にあらかじめ設定しておいたキットでインベントリーを上書きする
- コマンドによって、コマンドを打った人のインベントリーでキット(config.yml)を上書きする
- コマンドで初回ログイン時のキットでのインベントリー上書きを任意にする
- コンフィグリロード
今できてることは、初回ログイン時にインベントリに何かを入れる(コンフィグのデータからではなく。)(確認用の初期ログインのp.sendMessage("hello kit");はなぜか出ませんでしたが)です。
また、config.ymlが書き換えられているので、キットの上書きもできているんだろうと思います。
今できていないことは、コマンドによってキットの取得を任意にすることと、コンフィグリロードはできているか不明です(必要なのかも不明)
エラーログで言われる問題の箇所は、KitCommandsクラスのkit giveのところの
コード: 全て選択
kitItem = new ItemStack((Material) plugin.getConfig().get("kits."+j+".type"),plugin.getConfig().getInt("kits."+j+".amount"));
このあたりの記述の仕方がいまいち理解できていないので、わかる方いたら教えていただければ幸いです。
よろしくお願いいたします。
以下ソース等です。
main class
コード: 全て選択
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.plugin.java.JavaPlugin;
public final class KitPlugin extends JavaPlugin {
@Override
public void onEnable() {
// Plugin startup logic
getLogger().info("start:KitPlugin...");
getCommand("kit").setExecutor(new KitCommands(this));
getServer().getPluginManager().registerEvents(new Events(this), this);
saveDefaultConfig();
FileConfiguration config = getConfig();
}
@Override
public void onDisable() {
// Plugin shutdown logic
getLogger().info("stop:KitPlugin...");
}
}
コード: 全て選択
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
public class KitCommands implements CommandExecutor {
private final KitPlugin plugin;
public KitCommands(KitPlugin plugin){
this.plugin = plugin;
}
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args){
if(!(sender instanceof Player)){
return true;
}
Player p = (Player) sender;
//kit
if(label.equalsIgnoreCase("kit") && args.length == 0){
showHelp(p);
return true;
}
//kit set
if(args[0].equalsIgnoreCase("set") && args.length == 1){
ItemStack item;
for(int i=0; i<36; i++){
item = p.getInventory().getItem(i);
plugin.getConfig().set(String.valueOf(i),item);
}
plugin.saveConfig();
p.sendMessage("kit saved!");
return true;
}
//kit give
if(args[0].equalsIgnoreCase("give") && args.length == 1){
plugin.getConfig();
ItemStack kitItem;
for(int j = 0; j<36; j++){
kitItem = new ItemStack((Material) plugin.getConfig().get("kits."+j+".type"),plugin.getConfig().getInt("kits."+j+".amount"));
p.getInventory().setItem(j,kitItem);
}
p.sendMessage("kit set!");
return true;
}
//kit reload
if(args[0].equalsIgnoreCase("reload") && args.length == 1){
plugin.reloadConfig();
plugin.getConfig();
p.sendMessage("reload config!");
return true;
}
return false;
}
public void showHelp(Player p){
p.sendMessage("/kit:show help");
p.sendMessage("/kit set:set a kit by your inventory");
p.sendMessage("/kit give:rewrite your inventory by kit");
p.sendMessage("/kit reload:reload config");
}
}
コード: 全て選択
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.inventory.ItemStack;
public class Events implements Listener {
KitPlugin plugin;
public Events(KitPlugin plugin){
this.plugin = plugin;
}
@EventHandler
public void onPlayerJoin(PlayerLoginEvent event){
Player p = event.getPlayer();
if(!(p.hasPlayedBefore())){
p.getInventory().addItem(new ItemStack(Material.ALLIUM,2));
p.sendMessage("hello kit");
}
}
}
コード: 全て選択
name: KitPlugin
version: ${project.version}
main: com.github.tonatumi.kitplugin.KitPlugin
api-version: 1.16
commands:
kit:
description: show help
usage: /<command>
コード: 全て選択
Kits:
0:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
コード: 全て選択
Kits: {}
'0':
==: org.bukkit.inventory.ItemStack
v: 2584
type: COBBLESTONE
amount: 64
'1':
==: org.bukkit.inventory.ItemStack
v: 2584
type: LEVER
'2':
==: org.bukkit.inventory.ItemStack
v: 2584
type: BRICK
コード: 全て選択
[01:02:04] [main/INFO]: Environment: authHost='https://authserver.mojang.com', accountsHost='https://api.mojang.com', sessionHost='https://sessionserver.mojang.com', servicesHost='https://api.minecraftservices.com', name='PROD'
[01:02:04] [main/INFO]: Reloading ResourceManager: Default, bukkit
[01:02:04] [Worker-Main-2/INFO]: Loaded 7 recipes
[01:02:05] [Server thread/INFO]: Starting minecraft server version 1.16.4
[01:02:05] [Server thread/INFO]: Loading properties
[01:02:05] [Server thread/INFO]: This server is running Paper version git-Paper-332 (MC: 1.16.4) (Implementing API version 1.16.4-R0.1-SNAPSHOT)
[01:02:05] [Server thread/INFO]: Debug logging is disabled
[01:02:05] [Server thread/INFO]: Using 4 threads for Netty based IO
[01:02:05] [Server thread/INFO]: Server Ping Player Sample Count: 12
[01:02:05] [Server thread/INFO]: Default game type: SURVIVAL
[01:02:05] [Server thread/INFO]: Generating keypair
[01:02:06] [Server thread/INFO]: Starting Minecraft server on *:25565
[01:02:06] [Server thread/INFO]: Using default channel type
[01:02:07] [Server thread/INFO]: [KitPlugin] Loading KitPlugin v1.0-SNAPSHOT
[01:02:07] [Server thread/INFO]: Server permissions file permissions.yml is empty, ignoring it
[01:02:07] [Server thread/INFO]: Preparing level "world"
[01:02:07] [Server thread/INFO]: Preparing start region for dimension minecraft:overworld
[01:02:07] [Server thread/INFO]: Loaded 0 spawn chunks for world world
[01:02:07] [Server thread/INFO]: Preparing spawn area: 0%
[01:02:07] [Server thread/INFO]: Time elapsed: 349 ms
[01:02:07] [Server thread/INFO]: Preparing start region for dimension minecraft:the_nether
[01:02:07] [Server thread/INFO]: Loaded 0 spawn chunks for world world_nether
[01:02:07] [Server thread/INFO]: Time elapsed: 176 ms
[01:02:07] [Server thread/INFO]: Preparing start region for dimension minecraft:the_end
[01:02:07] [Server thread/INFO]: Loaded 0 spawn chunks for world world_the_end
[01:02:07] [Server thread/INFO]: Time elapsed: 71 ms
[01:02:07] [Server thread/INFO]: [KitPlugin] Enabling KitPlugin v1.0-SNAPSHOT
[01:02:07] [Server thread/INFO]: [KitPlugin] start:KitPlugin...
[01:02:07] [Server thread/INFO]: Running delayed init tasks
[01:02:07] [Server thread/INFO]: Done (2.015s)! For help, type "help"
[01:02:07] [Server thread/WARN]: [io.papermc.paper.util.PaperJvmChecker] ************************************************************
[01:02:07] [Server thread/WARN]: [io.papermc.paper.util.PaperJvmChecker] * WARNING - YOU ARE RUNNING AN OUTDATED VERSION OF JAVA.
[01:02:07] [Server thread/WARN]: [io.papermc.paper.util.PaperJvmChecker] * PAPER WILL STOP BEING COMPATIBLE WITH THIS VERSION OF
[01:02:07] [Server thread/WARN]: [io.papermc.paper.util.PaperJvmChecker] * JAVA WHEN MINECRAFT 1.17 IS RELEASED.
[01:02:07] [Server thread/WARN]: [io.papermc.paper.util.PaperJvmChecker] *
[01:02:07] [Server thread/WARN]: [io.papermc.paper.util.PaperJvmChecker] * Please update the version of Java you use to run Paper
[01:02:07] [Server thread/WARN]: [io.papermc.paper.util.PaperJvmChecker] * to at least Java 11. When Paper for Minecraft 1.17 is
[01:02:07] [Server thread/WARN]: [io.papermc.paper.util.PaperJvmChecker] * released support for versions of Java before 11 will
[01:02:07] [Server thread/WARN]: [io.papermc.paper.util.PaperJvmChecker] * be dropped.
[01:02:07] [Server thread/WARN]: [io.papermc.paper.util.PaperJvmChecker] *
[01:02:07] [Server thread/WARN]: [io.papermc.paper.util.PaperJvmChecker] * Current Java version: 1.8.0_211
[01:02:07] [Server thread/WARN]: [io.papermc.paper.util.PaperJvmChecker] *
[01:02:07] [Server thread/WARN]: [io.papermc.paper.util.PaperJvmChecker] * Check this forum post for more information:
[01:02:07] [Server thread/WARN]: [io.papermc.paper.util.PaperJvmChecker] * https://papermc.io/java11
[01:02:07] [Server thread/WARN]: [io.papermc.paper.util.PaperJvmChecker] ************************************************************
[01:02:07] [Server thread/INFO]: Timings Reset
[01:02:14] [User Authenticator #1/INFO]: UUID of player tonatsumi is f529e6f1-201f-4fec-85bf-6611e9663049
[01:02:14] [Server thread/INFO]: tonatsumi joined the game
[01:02:14] [Server thread/INFO]: tonatsumi[/127.0.0.1:64313] logged in with entity id 268 at ([world]-103.5, 79.0, 2.5)
[01:03:43] [Server thread/INFO]: tonatsumi issued server command: /kit
[01:03:48] [Server thread/INFO]: tonatsumi issued server command: /kit set
[01:03:59] [Server thread/INFO]: tonatsumi issued server command: /kit reload
[01:04:04] [Server thread/INFO]: tonatsumi issued server command: /kit give
[01:04:04] [Server thread/ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'kit' in plugin KitPlugin v1.0-SNAPSHOT
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:47) ~[patched_1.16.4.jar:git-Paper-332]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:159) ~[patched_1.16.4.jar:git-Paper-332]
at org.bukkit.craftbukkit.v1_16_R3.CraftServer.dispatchCommand(CraftServer.java:807) ~[patched_1.16.4.jar:git-Paper-332]
at net.minecraft.server.v1_16_R3.PlayerConnection.handleCommand(PlayerConnection.java:2011) ~[patched_1.16.4.jar:git-Paper-332]
at net.minecraft.server.v1_16_R3.PlayerConnection.c(PlayerConnection.java:1822) ~[patched_1.16.4.jar:git-Paper-332]
at net.minecraft.server.v1_16_R3.PlayerConnection.a(PlayerConnection.java:1775) ~[patched_1.16.4.jar:git-Paper-332]
at net.minecraft.server.v1_16_R3.PacketPlayInChat.a(PacketPlayInChat.java:47) ~[patched_1.16.4.jar:git-Paper-332]
at net.minecraft.server.v1_16_R3.PacketPlayInChat.a(PacketPlayInChat.java:5) ~[patched_1.16.4.jar:git-Paper-332]
at net.minecraft.server.v1_16_R3.PlayerConnectionUtils.lambda$ensureMainThread$1(PlayerConnectionUtils.java:23) ~[patched_1.16.4.jar:git-Paper-332]
at net.minecraft.server.v1_16_R3.TickTask.run(SourceFile:18) ~[patched_1.16.4.jar:git-Paper-332]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeTask(IAsyncTaskHandler.java:136) ~[patched_1.16.4.jar:git-Paper-332]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) ~[patched_1.16.4.jar:git-Paper-332]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeNext(IAsyncTaskHandler.java:109) ~[patched_1.16.4.jar:git-Paper-332]
at net.minecraft.server.v1_16_R3.MinecraftServer.bb(MinecraftServer.java:1133) ~[patched_1.16.4.jar:git-Paper-332]
at net.minecraft.server.v1_16_R3.MinecraftServer.executeNext(MinecraftServer.java:1126) ~[patched_1.16.4.jar:git-Paper-332]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.awaitTasks(IAsyncTaskHandler.java:119) ~[patched_1.16.4.jar:git-Paper-332]
at net.minecraft.server.v1_16_R3.MinecraftServer.sleepForTick(MinecraftServer.java:1087) ~[patched_1.16.4.jar:git-Paper-332]
at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1001) ~[patched_1.16.4.jar:git-Paper-332]
at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:178) ~[patched_1.16.4.jar:git-Paper-332]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_211]
Caused by: java.lang.IllegalArgumentException: Material cannot be null
at org.apache.commons.lang.Validate.notNull(Validate.java:192) ~[patched_1.16.4.jar:git-Paper-332]
at org.bukkit.inventory.ItemStack.<init>(ItemStack.java:85) ~[patched_1.16.4.jar:git-Paper-332]
at org.bukkit.inventory.ItemStack.<init>(ItemStack.java:73) ~[patched_1.16.4.jar:git-Paper-332]
at org.bukkit.inventory.ItemStack.<init>(ItemStack.java:61) ~[patched_1.16.4.jar:git-Paper-332]
at com.github.tonatumi.kitplugin.KitCommands.onCommand(KitCommands.java:50) ~[?:?]
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[patched_1.16.4.jar:git-Paper-332]
... 19 more
[01:04:17] [Server thread/INFO]: tonatsumi lost connection: Disconnected
[01:04:17] [Server thread/INFO]: tonatsumi left the game
[01:04:21] [Server thread/INFO]: Stopping the server
[01:04:21] [Server thread/INFO]: Stopping server
[01:04:21] [Server thread/INFO]: [KitPlugin] Disabling KitPlugin v1.0-SNAPSHOT
[01:04:21] [Server thread/INFO]: [KitPlugin] stop:KitPlugin...
[01:04:21] [Server thread/INFO]: Saving players
[01:04:21] [Server thread/INFO]: Saving worlds
[01:04:21] [Server thread/INFO]: Saving chunks for level 'ServerLevel[world]'/minecraft:overworld
[01:04:22] [Server thread/INFO]: ThreadedAnvilChunkStorage (world): All chunks are saved
[01:04:22] [Server thread/INFO]: Saving chunks for level 'ServerLevel[world_nether]'/minecraft:the_nether
[01:04:23] [Server thread/INFO]: ThreadedAnvilChunkStorage (DIM-1): All chunks are saved
[01:04:23] [Server thread/INFO]: Saving chunks for level 'ServerLevel[world_the_end]'/minecraft:the_end
[01:04:23] [Server thread/INFO]: ThreadedAnvilChunkStorage (DIM1): All chunks are saved
[01:04:23] [Server thread/INFO]: ThreadedAnvilChunkStorage (world): All chunks are saved
[01:04:23] [Server thread/INFO]: ThreadedAnvilChunkStorage (DIM-1): All chunks are saved
[01:04:23] [Server thread/INFO]: ThreadedAnvilChunkStorage (DIM1): All chunks are saved
[01:04:23] [Server thread/INFO]: Flushing Chunk IO
[01:04:23] [Server thread/INFO]: Closing Thread Pool
[01:04:23] [Server thread/INFO]: Closing Server