Skip to content

Commit 3fc04dc

Browse files
committed
CreateReward時にRewardIDを指定するように変更
1 parent bd39f22 commit 3fc04dc

File tree

4 files changed

+72
-36
lines changed

4 files changed

+72
-36
lines changed

src/main/java/dev/felnull/pointed/teams/gui/item/EditRewards/AddReward.java

Lines changed: 48 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,16 @@
77
import dev.felnull.pointed.teams.gui.page.EditRewards;
88
import dev.felnull.pointed.teams.manager.reward.RewardAdminService;
99
import net.wesjd.anvilgui.AnvilGUI;
10+
import org.bukkit.Bukkit;
1011
import org.bukkit.Material;
1112
import org.bukkit.entity.Player;
1213
import org.bukkit.event.inventory.InventoryClickEvent;
1314
import org.bukkit.inventory.ItemStack;
1415

1516
import java.sql.SQLException;
17+
import java.util.Collections;
1618
import java.util.List;
19+
import java.util.Optional;
1720

1821
public 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);

src/main/java/dev/felnull/pointed/teams/manager/TeamManager.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,12 @@ public interface TeamManager {
1818
boolean subtractTeamPt(String teamID, String scope, long amount);
1919
long[] setTeamPt(String teamID, String scope, long newNow);
2020

21-
// 初回準備
22-
//TeamIDはCoreで言うsubjectKey
23-
24-
2521
// ランキング
2622
java.util.List<RankRow> getTeamDailyTop(String scope, java.time.LocalDate day, int limit);
2723
java.util.List<RankRow> getTeamWeeklyTop(String scope, java.time.LocalDate startInclusive, java.time.LocalDate endInclusive, int limit);
2824
java.util.List<RankRow> getTeamGlobalTop(String scope, int limit);
2925

30-
// メタと表示名の管理
26+
// メタと表示名の管理 チーム作成
3127
//TeamIDはCoreで言うsubjectKey
3228
void upsertTeam(String teamID, String displayName, String color, Integer sortOrder, Boolean active);
3329

src/main/java/dev/felnull/pointed/teams/manager/reward/RewardAdminService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
public interface RewardAdminService {
1515
// ===== rewards =====
16-
int createReward(String displayName, int needPoint, int needMinTotal, boolean repeatable, boolean active) throws SQLException;
16+
int createReward(int rewardId, String displayName, int needPoint, int needMinTotal, boolean repeatable, boolean active) throws SQLException;
1717
void updateReward(int rewardId, String displayName, Integer needPoint, Integer needMinTotal, Boolean repeatable, Boolean active) throws SQLException;
1818
void deleteReward(int rewardId, boolean force) throws SQLException;
1919

src/main/java/dev/felnull/pointed/teams/manager/reward/impl/RewardAdminServiceImpl.java

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -122,24 +122,32 @@ private static String substitute(String template, PlayerRank r) {
122122

123123
// ================== 以下、既出のAdmin(CRUD)もここに集約 ==================
124124
@Override
125-
public int createReward(String displayName, int needPoint, int needMinTotal,
126-
boolean repeatable, boolean active) throws SQLException {
125+
public int createReward(
126+
int rewardId, // ← 追加
127+
String displayName,
128+
int needPoint,
129+
int needMinTotal,
130+
boolean repeatable,
131+
boolean active) throws SQLException {
132+
127133
String sql = "INSERT INTO " + Names.t("rewards") +
128-
" (display_name, need_point, need_min_total, repeatable, active) " +
129-
" VALUES (?, ?, ?, ?, ?)";
134+
" (id, display_name, need_point, need_min_total, repeatable, active) " +
135+
" VALUES (?, ?, ?, ?, ?, ?)";
136+
130137
try (Connection c = ds.getConnection();
131-
PreparedStatement ps = c.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
132-
ps.setString(1, displayName);
133-
ps.setInt(2, needPoint);
134-
ps.setInt(3, needMinTotal);
135-
ps.setBoolean(4, repeatable);
136-
ps.setBoolean(5, active);
138+
PreparedStatement ps = c.prepareStatement(sql)) {
139+
int i = 1;
140+
ps.setInt(i++, rewardId);
141+
ps.setString(i++, displayName);
142+
ps.setInt(i++, needPoint);
143+
ps.setInt(i++, needMinTotal);
144+
ps.setBoolean(i++, repeatable);
145+
ps.setBoolean(i++, active);
137146
ps.executeUpdate();
138-
try (ResultSet rs = ps.getGeneratedKeys()) {
139-
if (rs.next()) return rs.getInt(1);
140-
}
147+
return rewardId; // そのまま返す
148+
} catch (SQLIntegrityConstraintViolationException dup) {
149+
throw new SQLException("Reward ID が重複しています: " + rewardId, dup);
141150
}
142-
throw new SQLException("Reward ID の取得に失敗しました。");
143151
}
144152

145153
@Override

0 commit comments

Comments
 (0)