質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.34%

  • Java

    14471questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Java spigot 1.13.2のプラグイン開発 if文がうまく動かず、エラーが出てしまい、エラー解決方法がわからない

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 69

rito_528

score 3

Minecraft 1.13.2 (spigot 1.13.2)のプラグイン作成でif文がうまく動作しない

ソース

package com.gmail.rotoyutoriapp.ticketsystem;

import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.block.data.Ageable;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

public final class TicketSystem extends JavaPlugin implements Listener {

    @Override
    public void onEnable() {
        // Plugin startup logic
        getLogger().info("TicketSystem Enabled");
        Bukkit.getServer().getPluginManager().registerEvents(this, this);
    }

    @Override
    public void onDisable() {
        // Plugin shutdown logic
        getLogger().info("TicketSystem Disabled");
    }
    File dir;
    @EventHandler
    public void onJoin(PlayerJoinEvent j) {
        Player p = j.getPlayer();
        String uuid = p.getUniqueId().toString();
        dir = new File("plugins/TicketSystem/DataBase/" + uuid);
        if (!(dir.exists())) {
            try {
                dir.createNewFile();
                FileWriter file = new FileWriter("plugins/TicketSystem/DataBase/" + uuid);
                PrintWriter pw = new PrintWriter(new BufferedWriter(file));
                FileReader filereader = new FileReader(dir);
                pw.print(0);
                pw.close();
                System.out.println("データーの作成を行いました。");
            } catch (java.io.IOException a) {
                a.printStackTrace();
            }
        } else {
            System.out.println("ファイルが存在するため、データーの作成は行われませんでした。");
        }
    }
    @EventHandler
    public void syuukaku(BlockBreakEvent e) {
        Ageable age = (Ageable) e.getBlock().getBlockData();
        Player p = e.getPlayer();
        String uuid = p.getUniqueId().toString();
        if (e.getBlock().getType().equals(Material.WHEAT) && age.getAge() == 7) {
            try {
                BufferedReader filereader = new BufferedReader(new FileReader(dir));
                String data;
                data = filereader.readLine();
                int keisan = Integer.valueOf(data) + 1;

                FileWriter file = new FileWriter(dir);
                PrintWriter pw = new PrintWriter(new BufferedWriter(file));
                pw.print(keisan);
                int keisann = Integer.valueOf(data);
                if (keisann == 300) {
                    pw.print(0);
                    pw.close();
                } else {
                    pw.close();
                }
            }
        catch(java.io.IOException a){
                    a.printStackTrace();
                }
        } else if (e.getBlock().getType().equals(Material.POTATOES) && age.getAge() == 7){
            try {
                BufferedReader filereader = new BufferedReader(new FileReader(dir));
                String data;
                data = filereader.readLine();
                int keisan = Integer.valueOf(data) + 1;

                FileWriter file = new FileWriter(dir);
                PrintWriter pw = new PrintWriter(new BufferedWriter(file));
                pw.print(keisan);
                pw.close();
            }
            catch(java.io.IOException a){
                a.printStackTrace();
            }
        } else if (e.getBlock().getType().equals(Material.CARROTS) && age.getAge() == 7){
            try {
                BufferedReader filereader = new BufferedReader(new FileReader(dir));
                String data;
                data = filereader.readLine();
                int keisan = Integer.valueOf(data) + 1;

                FileWriter file = new FileWriter(dir);
                PrintWriter pw = new PrintWriter(new BufferedWriter(file));
                pw.print(keisan);
                pw.close();
            }
            catch(java.io.IOException a){
                a.printStackTrace();
            }
        } else if (e.getBlock().getType().equals(Material.BEETROOTS) && age.getAge() == 3){
            try {
                BufferedReader filereader = new BufferedReader(new FileReader(dir));
                String data;
                data = filereader.readLine();
                int keisan = Integer.valueOf(data) + 1;

                FileWriter file = new FileWriter(dir);
                PrintWriter pw = new PrintWriter(new BufferedWriter(file));
                pw.print(keisan);
            }
            catch(java.io.IOException a) {
                a.printStackTrace();
            }
        } else {
            System.out.println("不明なエラーが発生しました。");
        }
    }
}

実現したいこと

dataに書き込まれている数が300に到達したときに、そのファイルをリセット(0を上書きしたい)したいです。

エラー内容

300に到達したときに、if文が動かずに、コンソールにてエラーが出てしまう。

Could not pass event BlockBreakEvent to TicketSystem v1.0
org.bukkit.event.EventException: null
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:308) ~[spigot-1.13.2.jar:git-Spigot-a1ba5fe-3359cb1]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot-1.13.2.jar:git-Spigot-a1ba5fe-3359cb1]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:500) ~[spigot-1.13.2.jar:git-Spigot-a1ba5fe-3359cb1]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:485) ~[spigot-1.13.2.jar:git-Spigot-a1ba5fe-3359cb1]
        at net.minecraft.server.v1_13_R2.PlayerInteractManager.breakBlock(PlayerInteractManager.java:292) ~[spigot-1.13.2.jar:git-Spigot-a1ba5fe-3359cb1]
        at net.minecraft.server.v1_13_R2.PlayerInteractManager.a(PlayerInteractManager.java:123) ~[spigot-1.13.2.jar:git-Spigot-a1ba5fe-3359cb1]
        at net.minecraft.server.v1_13_R2.PlayerConnection.a(PlayerConnection.java:1167) ~[spigot-1.13.2.jar:git-Spigot-a1ba5fe-3359cb1]
        at net.minecraft.server.v1_13_R2.PacketPlayInBlockDig.a(SourceFile:40) ~[spigot-1.13.2.jar:git-Spigot-a1ba5fe-3359cb1]
        at net.minecraft.server.v1_13_R2.PacketPlayInBlockDig.a(SourceFile:10) ~[spigot-1.13.2.jar:git-Spigot-a1ba5fe-3359cb1]
        at net.minecraft.server.v1_13_R2.PlayerConnectionUtils.a(SourceFile:10) ~[spigot-1.13.2.jar:git-Spigot-a1ba5fe-3359cb1]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_191]
        at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_191]
        at net.minecraft.server.v1_13_R2.SystemUtils.a(SourceFile:199) [spigot-1.13.2.jar:git-Spigot-a1ba5fe-3359cb1]
        at net.minecraft.server.v1_13_R2.MinecraftServer.b(MinecraftServer.java:900) [spigot-1.13.2.jar:git-Spigot-a1ba5fe-3359cb1]
        at net.minecraft.server.v1_13_R2.DedicatedServer.b(DedicatedServer.java:417) [spigot-1.13.2.jar:git-Spigot-a1ba5fe-3359cb1]
        at net.minecraft.server.v1_13_R2.MinecraftServer.a(MinecraftServer.java:835) [spigot-1.13.2.jar:git-Spigot-a1ba5fe-3359cb1]
        at net.minecraft.server.v1_13_R2.MinecraftServer.run(MinecraftServer.java:733) [spigot-1.13.2.jar:git-Spigot-a1ba5fe-3359cb1]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_191]
Caused by: java.lang.NullPointerException
        at java.io.FileInputStream.<init>(Unknown Source) ~[?:1.8.0_191]
        at java.io.FileReader.<init>(Unknown Source) ~[?:1.8.0_191]
        at com.gmail.rotoyutoriapp.ticketsystem.TicketSystem.syuukaku(TicketSystem.java:63) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_191]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_191]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_191]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_191]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:304) ~[spigot-1.13.2.jar:git-Spigot-a1ba5fe-3359cb1]
        ... 17 more

動かしたい場所

 public void syuukaku(BlockBreakEvent e) {
        Ageable age = (Ageable) e.getBlock().getBlockData();
        Player p = e.getPlayer();
        String uuid = p.getUniqueId().toString();
        if (e.getBlock().getType().equals(Material.WHEAT) && age.getAge() == 7) {
            try {
                BufferedReader filereader = new BufferedReader(new FileReader(dir));
                String data;
                data = filereader.readLine();
                int keisan = Integer.valueOf(data) + 1;

                FileWriter file = new FileWriter(dir);
                PrintWriter pw = new PrintWriter(new BufferedWriter(file));
                pw.print(keisan);
                int keisann = Integer.valueOf(data);
                if (keisann == 300) {
                    pw.print(0);
                    pw.close();
                } else {
                    pw.close();
                }
            }
        catch(java.io.IOException a){
                    a.printStackTrace();
                }
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

そもそもエラー原因の場所が違います。

Caused by: java.lang.NullPointerException
        at java.io.FileInputStream.<init>(Unknown Source) ~[?:1.8.0_191]
        at java.io.FileReader.<init>(Unknown Source) ~[?:1.8.0_191]
        at com.gmail.rotoyutoriapp.ticketsystem.TicketSystem.syuukaku(TicketSystem.java:63) ~[?:?]


63行目が原因のようで、そこで呼び出しているFileInputStreamのコンストラクタでnullを渡し、NullPointerExceptionが発生しています。つまりtryの次の行ですね。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/06 20:50

    回答有り難うございます。
    もう少し細かい解決方法を教えていただけると嬉しいです....

    キャンセル

  • 2018/12/07 00:05

    dirがnullなんじゃないかということしかわかりません。

    キャンセル

同じタグがついた質問を見る

  • Java

    14471questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • トップ
  • Javaに関する質問
  • Java spigot 1.13.2のプラグイン開発 if文がうまく動かず、エラーが出てしまい、エラー解決方法がわからない