[1.16.4Paper]config.ymlの読み込み周りの書き方について[自作プラグイン]

返信する

スマイリー
:D :) ;) :( :o :? 8-) :x :P :|
スマイリーを全て表示する

BBCode: ON
[img]: ON
[url]: ON
スマイリー: ON

トピックのレビュー
   

展開ビュー トピックのレビュー: [1.16.4Paper]config.ymlの読み込み周りの書き方について[自作プラグイン]

Re: [1.16.4Paper]config.ymlの読み込み周りの書き方について[自作プラグイン]

by @あどれすooo » 2021年9月06日(月) 19:03

こんにちは、コードを読ませていただきました。

まず初めに、KitItemの部分です。

エラーログを呼んでいる原因の個所を見つけるのも大切ですが、それよりもNullになっている原因を知らないと特に解決出来ないものは解決できません。(知ってたら申し訳ないです。)

76行目付近に以下のことが書かれています。

コード: 全て選択

Caused by: java.lang.IllegalArgumentException: Material cannot be null
IllegalArgumentExceptionと言うのは不明な引数をメソッドに渡した際に起こるエラーです。
また、そのあとを見てもらえばわかるんですが マテリアル関連で読み込めてなさそうですね。
ですので、以下のコードに書き直すと出来るようになるはずです。

コード: 全て選択

kitItem = new ItemStack(Material.valueOf(plugin.getConfig().getString("kits."+j+".type")), plugin.getConfig().getInt("kits."+j+".amount"));
また、リロードについてですが 自分が確認した範囲では問題ないかと思われます。

[1.16.4Paper]config.ymlの読み込み周りの書き方について[自作プラグイン]

by tonatsumi » 2021年2月02日(火) 01:20

現在、手軽に使える初期装備配布用のプラグインがなかったため、作ろうとしています。
初歩的な、イベントやコマンド実装というところはできるのですが、config周りのことがいまいち調べても理解ができておらず、うまく動かなくて困っています。(参考サイト:https://jyn.jp/bukkit-plugin-development-7/#i-4

実装したいのは、
  • 初回ログイン時にあらかじめ設定しておいたキットでインベントリーを上書きする
  • コマンドによって、コマンドを打った人のインベントリーでキット(config.yml)を上書きする
  • コマンドで初回ログイン時のキットでのインベントリー上書きを任意にする
  • コンフィグリロード
の4点です。

今できてることは、初回ログイン時にインベントリに何かを入れる(コンフィグのデータからではなく。)(確認用の初期ログインの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...");
    }
}
KitCommands class

コード: 全て選択

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");
     }

}
Events class

コード: 全て選択

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");
        }
    }
}
plugin.yml

コード: 全て選択

name: KitPlugin
version: ${project.version}
main: com.github.tonatumi.kitplugin.KitPlugin
api-version: 1.16
commands:
  kit:
    description: show help
    usage: /<command>
初期config.yml

コード: 全て選択

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:
ゲーム内でkit setを試しにした後のconfig.ymlの例

コード: 全て選択

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
latest.log

コード: 全て選択

[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

ページトップ