11package dev .felnull .DataIO ;
22
33import dev .felnull .Data .GroupData ;
4+ import org .bukkit .OfflinePlayer ;
45
5- import java .util .Collection ;
6- import java .util .Map ;
6+ import java .util .*;
77import java .util .concurrent .ConcurrentHashMap ;
8+ import java .util .stream .Collectors ;
89
910public 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