77import dev .felnull .pointed .teams .gui .page .EditRewards ;
88import dev .felnull .pointed .teams .manager .reward .RewardAdminService ;
99import net .wesjd .anvilgui .AnvilGUI ;
10+ import org .bukkit .Bukkit ;
1011import org .bukkit .Material ;
1112import org .bukkit .entity .Player ;
1213import org .bukkit .event .inventory .InventoryClickEvent ;
1314import org .bukkit .inventory .ItemStack ;
1415
1516import java .sql .SQLException ;
17+ import java .util .Collections ;
1618import java .util .List ;
19+ import java .util .Optional ;
1720
1821public class AddReward extends GUIItem {
1922
@@ -40,28 +43,57 @@ public void openCreateRewardAnvil(Player player) {
4043 .title ("新しいコマンドを入力" )
4144 .text (Util .r (current )) // 初期表示(色コードは剥がす)
4245 .onClick ((slot , state ) -> {
43- if (slot != AnvilGUI .Slot .OUTPUT ) return java . util . Collections .emptyList ();
46+ if (slot != AnvilGUI .Slot .OUTPUT ) return Collections .emptyList ();
4447
45- String inputRaw = state .getText ().trim ();
46-
47- // バリデーション(例)
48- if (inputRaw .isEmpty ()) {
49- player .sendMessage (Util .f ("&c空のリワードは設定できません" ));
50- return java .util .List .of (AnvilGUI .ResponseAction .replaceInputText ("もう一度" ));
48+ String raw = Optional .ofNullable (state .getText ()).orElse ("" ).trim ();
49+ if (raw .isEmpty ()) {
50+ player .sendMessage (Util .f ("&c入力してください" ));
51+ return List .of (AnvilGUI .ResponseAction .replaceInputText ("ID:名前" ));
5152 }
52- if (inputRaw .length () > 50 ) {
53- player .sendMessage (Util .f ("&c50文字以内で入力してください (&7{0}&c)" , inputRaw .length ()));
54- return java .util .List .of (AnvilGUI .ResponseAction .replaceInputText ("50文字以内!" ));
53+
54+ int colon = raw .indexOf (':' );
55+ if (colon < 0 ) {
56+ player .sendMessage (Util .f ("&c「ID:名前」の形式で入力してください" ));
57+ return List .of (AnvilGUI .ResponseAction .replaceInputText ("1:テストReward" ));
5558 }
5659
60+ String idPart = raw .substring (0 , colon ).trim ();
61+ String namePart = Util .r (raw .substring (colon + 1 ).trim ());
62+
63+ int rewardId ;
5764 try {
58- adminService .createReward (inputRaw , 100 , 100 , false , false );
59- player .sendMessage (Util .f ("&f{0} &aで登録しました" , inputRaw ));
60- } catch (SQLException e ) {
61- player .sendMessage (Util .f ("&f{0} &aで登録できませんでした..." , inputRaw ));
62- throw new RuntimeException (e );
65+ rewardId = Integer .parseInt (idPart );
66+ } catch (NumberFormatException ex ) {
67+ player .sendMessage (Util .f ("&cIDは整数で入力してください: &7{0}" , idPart ));
68+ return List .of (AnvilGUI .ResponseAction .replaceInputText ("1:テストReward" ));
69+ }
70+
71+ if (namePart .isEmpty ()) {
72+ player .sendMessage (Util .f ("&c名前が空です" ));
73+ return List .of (AnvilGUI .ResponseAction .replaceInputText ("名前を入力" ));
6374 }
64- page .reopen (0 );
75+ if (namePart .length () > 50 ) {
76+ player .sendMessage (Util .f ("&c50文字以内で入力してください (&7{0}&c)" , namePart .length ()));
77+ return List .of (AnvilGUI .ResponseAction .replaceInputText ("50文字以内" ));
78+ }
79+
80+ // DB登録は非同期
81+ Bukkit .getScheduler ().runTaskAsynchronously (Pointed .getInstance (), () -> {
82+ String msg ;
83+ try {
84+ adminService .createReward (rewardId , namePart , 100 , 100 , false , false );
85+ msg = Util .f ("&aリワード登録完了: ID &f{0}&a, 名前 &f{1}" , rewardId , namePart );
86+ } catch (SQLException e ) {
87+ msg = Util .f ("&cリワード登録失敗: {0}" , e .getMessage ());
88+ }
89+
90+ String finalMsg = msg ;
91+ Bukkit .getScheduler ().runTask (Pointed .getInstance (), () -> {
92+ player .sendMessage (finalMsg );
93+ page .reopen (0 );
94+ });
95+ });
96+
6597 return List .of (AnvilGUI .ResponseAction .close ());
6698 })
6799 .open (player );
0 commit comments