前任者の残したプラグインを直したい
サーバーはpaper-1.21でbukkitで開発をしています。
前任のプラグイン開発者がjarファイルのみを残して引退してしまい、元のソースに近い形には出来たと思うのですがコマンドを実行しても処理が起こりません。
正直プラグインの開発がこれが初めてでjavaの知識しかないので知恵をお借りしたいです。
36 Replies
ソースコードを貼ってください
zipになってしまいますが全体はこちらです
CommandExecutorを使用してMainクラスに引き渡し何度か書き換えてみたりもしたのですがコマンドを実行しても(この画像だとscaleコマンド)処理が行われません。
scaleコマンドはそのまま、attributeのscaleを簡単に使えるようにしているコマンドです。本来はnullや範囲外の数値が入力された場合elseでキャッチされて再実行を求められるのですが、scale含めて全てのコマンドがelseの記述すら実行されず何処から手を付けていいのか…というい状態です
必要であれば元のjarファイルも添付します。
ちらっと見ただけなので改善するかはわからないですが、このソースコード内に、JavaPluginのサブクラスがなぜか複数個あって、plugin.yml で現在メインクラスを
main: org.open2.openplugin2.net.OpenPlugin2
と他のクラスを指定してしまっていて、これがほぼ何も行わないクラスでした
なので、今使おうとしている main: org.open2.openplugin2.net.Main
をメインのクラスとしてplugin.yml
で設定してあげるとうまくいくと思いますsheauoian has been timed out for 2m Reason: Similar-Messages Spam
sheauoian | 427681269137145857
また、
CommandMain.java
の onCommand
メソッド内で、command.getName().equalsIgnoreCase("scale")
が常に true
となるため、他の条件が評価されずに処理が終了してしまいます。原因がよくわからないことになっている原因と思います
なるほど、ご指摘ありがとうございます。
帰宅したら確認してみます。
ご指摘いだたいた通り
main: org.open2.openplugin2.net.Main
と変更し、不要なもう一つのメインクラスは削除しました。
Commandmain.java
でもreturn falseを返すようにし、エラーが発生していた場合も考慮してcatchを追加したのですが現状変わらずです。コンソールにもなにも残っていませんでした。
ちゃんとビルドして入れ替えてる?
入れ替えてます。
試しにバージョンを変更し、一つコマンドを削除して入れ替えてみましたがしっかり反映されていました。
-
Main
クラスで、Commandmain
を scale
コマンドの CommandExecutor
として登録する為のコードが書かれていることを確認してください!
- 私が修正してビルド・実装した際、「成功。」が/scale
を使った際に出力されたので、上の二点が直されていれば、正常に動作する可能性が高いと思います!
Main クラス
ありがとうございます
scaleクラスにこの記述があったので、ご指摘いただいた通り
Main
クラスに
new Scale
を追加して実行してみました無事に正常に動作しました、あとは残りのコマンドを同様に記述していけば大丈夫という認識で合っていますか?
すみません、最後にもうひとつお聞きしたいです。
シュルカーボックスをシフト右クリックで回収可能にする
shulker.java
などは同様にMainへの追記で実装できたのですが
このSetup.java
が同じ方法で実装できなかったので何かお分かりでしたらお聞きしたいです、調べてもこの様なクラスから実装しているプラグインを見つけることが出来ませんでした。ほんのり見た限りでは、MainクラスのonEnable()で単に
Setup(this);
を書くと動くと思います!僕もそうだと思ったのですが処理が行われませんでした。
Setupに記述されているクラスも他のクラスと同様にonEnable()に追記して動作するかテストしています。
全て追記して見ましたが、やはりSetupに記述されているものは動作しませんでした。
元々のjarから展開した際に、Mainや他のクラスにonCommandで呼び出されている記述がなかったのも引っ掛かっています。
このプラグインを作成した前任者がどうやってコマンドを実装して処理していたのかが甚だ疑問で仕方ないです…
jarもらえたりしない?
えぐいスパゲッティ
プラグインのことを何も言わず、ある日突然引退したので手掛かりがjarと開発環境が恐らくeclipseということしかわかりません。
サーバー管理人も何も聞いてないそうです。
先程確認してみました:
・
resources
フォルダに config.yml
という空のファイルを作成してください!
・(必要かわからないが) Setup
クラスの、コンストラクタ、config
メソッドのコードを次のように変えてみて下さい:
・Main
クラスのonEnable()
に new Setup(this);
を書いてみて下さい!処理が行われました、ありがとうございます。
サーバー管理人に掛け合い、全体的なテストを行って問題なければ再度こちらでご報告させていただきます。
テストを行ったところ、この様にコマンドを使用するとインベントリが開かれるものや、コマンドを介さず機能を追加するものは動作しませんでした。
恐らくイベントリスナーの追加で解決出来るものなのでしょうが、違っていたらご教授頂けると幸いです。
因みにこの画像は
setting.java
による機能です。1から作ったほうがいいんじゃねぇかなぁ
これかなりスパゲッティだし
命名規則ぐじゃぐじゃだし
今動かないのが上記の様な
createInventory
が絡むものだけなんですよね…
これが解決して一旦僕が改修や新規機能追加が可能になればこれを参考に作り直しも考えてはいるのですが…
それとプラグイン開発の経験がないというのも相まって正直食指が伸びないのも事実ではあったり…
プラグインを導入していながらもjavaを読めるのがサーバー内で僕だけというのも問題点なのですがGithubなどでソースコードを共有してみると、リファクタリングなどの協力がやりやすくなるかもしれないです
GitHub
GitHub - EmeraldREX/openPlugin2
Contribute to EmeraldREX/openPlugin2 development by creating an account on GitHub.
身内で共有する以外にgithubを使用したことがないためこれで確認出来るか心配ですが、リポジトリの作成はしておきました。
inventoryは操作するイベントリスナーが登録されてないからだと思うけど
それはそうですね。
こちらでも自分で触れています。
ごめん見てなかった
帰宅してからイベントリスナーに登録してみたりと色々弄ってみた結果、
Bet
関係とSetting
関係がぐちゃぐちゃ過ぎて全く分からないです。
Bet
に関してはBetclick.java
をいじると賭ける相手のプレイヤーヘッドが取得できる、ドロップする等散々です。また、
Goal
すると賭けた人数によってオッズが決定され賭け金が返却されるのですが、ここの処理がほぼ行われませんでした。
勝ちに設定したプレイヤーと、倍率が2倍で固定されてチャットに表示されるだけです。GitHub
openPlugin2/src/main/java/org/open2/openplugin2/command/bet at mast...
Contribute to EmeraldREX/openPlugin2 development by creating an account on GitHub.
Bet群はこれになります