Skip to content

Commit 99bfa56

Browse files
committed
グループ周りの更新
1 parent 58b24cf commit 99bfa56

File tree

2 files changed

+71
-22
lines changed

2 files changed

+71
-22
lines changed

src/main/java/dev/felnull/Data/GroupData.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
public class GroupData {
1111
public final String groupName; // グループ名(表示用・識別用)
12-
public final String groupUUID; // グループ固有のUUID(内部識別子)
12+
public final UUID groupUUID; // グループ固有のUUID(内部識別子)
1313
public String displayName;
1414
public Set<OfflinePlayer> playerList; // 所属プレイヤー
1515
public Map<OfflinePlayer, String[]> playerPermission; // 役職
@@ -21,15 +21,15 @@ public class GroupData {
2121
// コンストラクタ(グループ新規作成用)
2222
public GroupData(@NotNull String groupName, @NotNull String displayName, @NotNull Set<OfflinePlayer> playerList,
2323
@NotNull Map<OfflinePlayer, String[]> playerPermission, boolean isPrivate,
24-
StorageData storageData, String ownerPlugin, @Nullable String groupUUID) {
24+
StorageData storageData, String ownerPlugin, @Nullable UUID groupUUID) {
2525
this.groupName = groupName;
2626
this.displayName = displayName;
2727
this.playerList = playerList;
2828
this.playerPermission = playerPermission;
2929
this.isPrivate = isPrivate;
3030
this.ownerPlugin = ownerPlugin;
3131

32-
this.groupUUID = groupUUID != null ? groupUUID : UUID.randomUUID().toString();
32+
this.groupUUID = groupUUID != null ? groupUUID : UUID.randomUUID();
3333

3434
this.storageData = storageData;
3535
if (this.storageData != null) {
@@ -41,7 +41,7 @@ public GroupData(@NotNull String groupName, @NotNull String displayName, @NotNul
4141
// 個人用グループ生成用(UUID自動生成)
4242
public GroupData(@NotNull OfflinePlayer player, StorageData storageData, String ownerPlugin) {
4343
this.groupName = player.getUniqueId().toString();
44-
this.groupUUID = UUID.randomUUID().toString();
44+
this.groupUUID = UUID.randomUUID();
4545
this.displayName = player.getName(); // 任意で変更可能
4646

4747
this.playerList = new HashSet<>();
@@ -57,4 +57,4 @@ public GroupData(@NotNull OfflinePlayer player, StorageData storageData, String
5757
this.storageData.groupData = this;
5858
}
5959
}
60-
}
60+
}
Lines changed: 66 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,90 @@
11
package dev.felnull.DataIO;
22

33
import dev.felnull.Data.GroupData;
4+
import org.bukkit.OfflinePlayer;
45

5-
import java.util.Collection;
6-
import java.util.Map;
6+
import java.util.*;
77
import java.util.concurrent.ConcurrentHashMap;
8+
import java.util.stream.Collectors;
89

910
public class GroupManager {
10-
private static final Map<String, GroupData> groupDataMap = new ConcurrentHashMap<>();
11+
/** groupUUID から GroupData を参照するマップ */
12+
private static final Map<UUID, GroupData> uuidMap = new ConcurrentHashMap<>();
13+
/** groupName(表示用/識別用)から GroupData を参照するマップ */
14+
private static final Map<String, GroupData> nameMap = new ConcurrentHashMap<>();
1115

12-
// グループを登録
16+
// グループを登録(UUID と groupName、両方でアクセス可能にする)
1317
public static void registerGroup(GroupData data) {
14-
groupDataMap.put(data.groupName, data);
18+
uuidMap.put(data.groupUUID, data);
19+
nameMap.put(data.groupName, data);
1520
}
1621

17-
// グループを取得
18-
public static GroupData getGroup(String groupName) {
19-
return groupDataMap.get(groupName);
22+
// UUID でグループを取得
23+
public static GroupData getGroupByUUID(UUID groupUUID) {
24+
return uuidMap.get(groupUUID);
2025
}
2126

22-
// グループを削除
23-
public static void unregisterGroup(String groupName) {
24-
groupDataMap.remove(groupName);
27+
// groupName でグループを取得
28+
public static GroupData getGroupByName(String groupName) {
29+
return nameMap.get(groupName);
2530
}
2631

27-
// 全グループ取得
32+
// UUID でグループを削除
33+
public static void unregisterGroupByUUID(UUID groupUUID) {
34+
GroupData removed = uuidMap.remove(groupUUID);
35+
if (removed != null) {
36+
nameMap.remove(removed.groupName);
37+
}
38+
}
39+
40+
// groupName でグループを削除
41+
public static void unregisterGroupByName(String groupName) {
42+
GroupData removed = nameMap.remove(groupName);
43+
if (removed != null) {
44+
uuidMap.remove(removed.groupUUID);
45+
}
46+
}
47+
48+
// 全グループ取得(UUID マップの値を返す)
2849
public static Collection<GroupData> getAllGroups() {
29-
return groupDataMap.values();
50+
return Collections.unmodifiableCollection(uuidMap.values());
3051
}
3152

32-
// 登録されているか
33-
public static boolean isRegistered(String groupName) {
34-
return groupDataMap.containsKey(groupName);
53+
// UUID ベースで登録済みか
54+
public static boolean isRegisteredByUUID(UUID groupUUID) {
55+
return uuidMap.containsKey(groupUUID);
56+
}
57+
58+
// groupName ベースで登録済みか
59+
public static boolean isRegisteredByName(String groupName) {
60+
return nameMap.containsKey(groupName);
3561
}
3662

3763
// 全削除(再読み込み用など)
3864
public static void clear() {
39-
groupDataMap.clear();
65+
uuidMap.clear();
66+
nameMap.clear();
67+
}
68+
69+
// — 便利ユーティリティ —
70+
71+
/** groupName から UUID を返す(キャッシュがなければ null) */
72+
public static UUID resolveUUID(String groupName) {
73+
GroupData gd = nameMap.get(groupName);
74+
return (gd != null ? gd.groupUUID : null);
75+
}
76+
77+
/** UUID から groupName を返す(キャッシュがなければ null) */
78+
public static String resolveName(UUID groupUUID) {
79+
GroupData gd = uuidMap.get(groupUUID);
80+
return (gd != null ? gd.groupName : null);
81+
}
82+
83+
/** プレイヤー名から所属しているグループ一覧(groupName)を取得 */
84+
public static List<String> getGroupsForPlayer(OfflinePlayer player) {
85+
return uuidMap.values().stream()
86+
.filter(gd -> gd.playerList.contains(player))
87+
.map(gd -> gd.groupName)
88+
.collect(Collectors.toList());
4089
}
4190
}

0 commit comments

Comments
 (0)