【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

MOD・プラグイン・ツールなどの開発に関する質問はこちら
penM
サーバー管理者
記事: 150
登録日時: 2019年7月23日(火) 02:14

【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事 by penM »

このトピックでは「Bukkit Plugin制作」フォーラムにおける単発質問を受け付けます
Monster2408
初心者
記事: 8
登録日時: 2019年10月14日(月) 15:34

LunaChatを参考にしたが・・・

投稿記事 by Monster2408 »

LunaChatを参考にひらがなを漢字に変換するコードを書いたのですがエラーが発生します。

原因と解決策がわかる方いませんか?
環境
Paper-1613(1.12.2)
Main.java

コード: 全て選択

    @EventHandler
    public void onChat(AsyncPlayerChatEvent e) {
        String origin = e.getMessage();
        String result = Color.replaceColorCode(origin);
        result = MonsterKanaConverter.conv(result);
        //result = GoogleIME.convByGoogleIME(result);
        String one = Color.deleteColorCode(origin);
        one = MonsterKanaConverter.conv(one);
        String msg = ChatColor.GOLD + result + ChatColor.RED + "[" + ChatColor.GRAY + origin + ChatColor.RED + "]";

        String user = e.getPlayer().getPlayerListName();

        e.setFormat("[" + e.getPlayer().getWorld().getName() + "]<" + user + ChatColor.RESET + "> " + msg);

        user = Color.deleteColorCode(user);

        ChatCh.sendMessage(user + " ≫ " + one + "[" + origin + "]").queue();
    }
}
GoogleIME.java

コード: 全て選択

public class GoogleIME {

    private static final String GOOGLE_IME_URL =
            "https://www.google.com/transliterate?langpair=ja-Hira|ja&text=";

    public static String  convByGoogleIME(String org) {
        return conv(org);
    }

    // 変換の実行
    private static String conv(String org) {
        if (org.isEmpty()) {
            return "";
        }

        HttpURLConnection urlconn = null;
        BufferedReader reader = null;
        try {
            String baseurl;
            String encode = "UTF-8";
            baseurl = GOOGLE_IME_URL + URLEncoder.encode(org , "UTF-8");

            URL url = new URL(baseurl);

            urlconn = (HttpURLConnection)url.openConnection();
            urlconn.setRequestMethod("GET");
            urlconn.setInstanceFollowRedirects(false);
            urlconn.connect();

            reader = new BufferedReader(
                    new InputStreamReader(urlconn.getInputStream(), encode));

            String json = CharStreams.toString(reader);

            return parseJson(json);

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (ProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if ( urlconn != null ) {
                urlconn.disconnect();
            }
            if ( reader != null ) {
                try {
                    reader.close();
                } catch (IOException e) { // do nothing.
                }
            }
        }

        return "";
    }

    // デバッグ用エントリ
    /**
     * GoogleIMEの最初の変換候補を抽出して結合します
     *
     * @param json 変換元のJson形式の文字列
     * @return 変換後の文字列
     * @since 2.8.10
     */
    public static String parseJson(String json) {
        StringBuilder result = new StringBuilder();
        for (JsonElement response : new Gson().fromJson(json, JsonArray.class)) {
            result.append(response.getAsJsonArray().get(1).getAsJsonArray().get(0).getAsString());
        }
        return result.toString();
    }

}
エラー

コード: 全て選択

[21:59:15 ERROR]: Could not pass event AsyncPlayerChatEvent to MLSPlugin v1.0-SNAPSHOT
org.bukkit.event.EventException: null
	at org.bukkit.plugin.EventExecutor$2.execute(EventExecutor.java:72) ~[patched_1.12.2.jar:git-Paper-1613]
	at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:74) ~[patched_1.12.2.jar:git-Paper-1613]
	at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[patched_1.12.2.jar:git-Paper-1613]
	at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:513) ~[patched_1.12.2.jar:git-Paper-1613]
	at net.minecraft.server.v1_12_R1.PlayerConnection.chat(PlayerConnection.java:1393) ~[patched_1.12.2.jar:git-Paper-1613]
	at net.minecraft.server.v1_12_R1.PlayerConnection.a(PlayerConnection.java:1308) ~[patched_1.12.2.jar:git-Paper-1613]
	at net.minecraft.server.v1_12_R1.PacketPlayInChat$1.run(PacketPlayInChat.java:39) ~[patched_1.12.2.jar:git-Paper-1613]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) ~[?:?]
	at java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
	at java.lang.Thread.run(Thread.java:834) [?:?]
Caused by: java.lang.ClassCastException: class sun.net.www.protocol.https.HttpsURLConnectionImpl cannot be cast to class sun.net.www.protocol.http.HttpURLConnection (sun.net.www.protocol.https.HttpsURLConnectionImpl and sun.net.www.protocol.http.HttpURLConnection are in module java.base of loader 'bootstrap')
	at jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.GoogleIME.conv(GoogleIME.java:47) ~[?:?]
	at jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.GoogleIME.convByGoogleIME(GoogleIME.java:29) ~[?:?]
	at jp.dip.monsterlifeserver.mlsplugin.mlsplugin.Listener.Chat.onChat(Chat.java:59) ~[?:?]
	at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor870.execute(Unknown Source) ~[?:?]
	at org.bukkit.plugin.EventExecutor$2.execute(EventExecutor.java:70) ~[patched_1.12.2.jar:git-Paper-1613]
	... 11 more
penM
サーバー管理者
記事: 150
登録日時: 2019年7月23日(火) 02:14

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事 by penM »

LunaChatを参考にひらがなを漢字に変換するコードを書いたのですがエラーが発生します。

原因と解決策がわかる方いませんか?
javaには詳しくないので、もし既に検証していたらすみません。
e.getMessage();
はnullである場合があるのではないでしょうか?
String.isEmptyはnull判定ができない?
GoogleIME.javaでは殆どをtry catchで握り潰しているのですが、先頭のifだけそれに含まれていないのでそこに注目しました。
検証としてオウム返しはできますか?これができれば、イベントは正しく発火しています。もしできなければ・・・どこでしょうね・・・
Monster2408
初心者
記事: 8
登録日時: 2019年10月14日(月) 15:34

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事 by Monster2408 »

オウム返しなどはすでに確認しておりました。

そして

コード: 全て選択

sun.net.www.protocol.http.HttpURLConnection

コード: 全て選択

java.net.HttpURLConnection
にすることで解決しました。
返信する