11package dev .felnull .api ;
22
3+ import dev .felnull .BetterStorage ;
34import dev .felnull .Data .GroupPermENUM ;
45import dev .felnull .Data .InventoryData ;
56import dev .felnull .Data .StorageData ;
7+ import jp .azisaba .lgw .ecplus .EnderChestPlus ;
8+ import jp .azisaba .lgw .ecplus .InventoryLoader ;
69import org .bukkit .Bukkit ;
710import org .bukkit .Material ;
811import org .bukkit .configuration .ConfigurationSection ;
912import org .bukkit .configuration .file .YamlConfiguration ;
1013import org .bukkit .inventory .ItemStack ;
14+ import org .bukkit .plugin .Plugin ;
1115
1216import java .io .File ;
17+ import java .lang .reflect .Field ;
18+ import java .lang .reflect .Method ;
19+ import java .sql .Connection ;
20+ import java .sql .PreparedStatement ;
21+ import java .sql .ResultSet ;
22+ import java .sql .SQLException ;
1323import java .util .*;
1424
15-
1625public class EcpImporter {
1726
1827 public static StorageData importFromUUID (UUID playerUUID , UUID groupUUID ) {
28+ try (Connection conn = BetterStorage .BSPlugin .getDatabaseManager ().getConnection ();
29+ PreparedStatement ps = conn .prepareStatement (
30+ "SELECT ecp_imported FROM group_table WHERE group_uuid = ?" )) {
31+ ps .setString (1 , groupUUID .toString ());
32+ try (ResultSet rs = ps .executeQuery ()) {
33+ if (rs .next () && rs .getBoolean ("ecp_imported" )) {
34+ Bukkit .getLogger ().warning ("[BetterStorage] このグループはすでにECPからインポートされていますにゃ!" );
35+ return null ;
36+ }
37+ }
38+ } catch (SQLException e ) {
39+ throw new RuntimeException (e );
40+ }
41+ // EnderChestPlusのファイルパス
1942 File file = new File (Bukkit .getPluginManager ().getPlugin ("BetterStorage" )
2043 .getDataFolder ().getParent (), "EnderChestPlus/Inventories/" + playerUUID + ".yml" );
2144
2245 if (!file .exists ()) return null ;
2346
24- YamlConfiguration config = YamlConfiguration .loadConfiguration (file );
47+ YamlConfiguration config ;
48+ try {
49+ config = YamlConfiguration .loadConfiguration (file );
50+ } catch (Exception ex ) {
51+ Bukkit .getLogger ().warning ("[BetterStorage] ECPインポート時にファイルの読み込みに失敗したにゃ: " + ex .getMessage ());
52+ return null ;
53+ }
54+
55+ Plugin plugin = Bukkit .getPluginManager ().getPlugin ("EnderChestPlus" );
56+
57+ if (plugin != null && plugin .isEnabled () && plugin instanceof EnderChestPlus ) {
58+ EnderChestPlus ecp = (EnderChestPlus ) plugin ;
59+ InventoryLoader loader = ecp .getLoader ();
60+
61+ if (loader != null ) {
62+ loader .saveAllInventoryData (false ); // false = 非同期ではない
63+ Bukkit .getLogger ().info ("[BetterStorage] EnderChestPlus のセーブを実行したにゃ" );
64+ } else {
65+ Bukkit .getLogger ().warning ("[BetterStorage] EnderChestPlus の loader が null だったにゃ" );
66+ }
67+ }
2568
69+ // バンク権限(ストレージ全体にアクセスするための最低限の権限)
2670 Set <String > bankPerms = new HashSet <>();
2771 bankPerms .add (GroupPermENUM .MEMBER .getPermName ());
72+
73+ // ページID → InventoryData
2874 Map <String , InventoryData > inventoryMap = new HashMap <>();
2975
3076 for (String pageId : config .getKeys (false )) {
3177 ConfigurationSection pageSection = config .getConfigurationSection (pageId );
78+ if (pageSection == null ) continue ;
3279
3380 Map <Integer , ItemStack > itemMap = new HashMap <>();
3481 for (String slotKey : pageSection .getKeys (false )) {
35- int slot = Integer .parseInt (slotKey );
36- ItemStack item = pageSection .getItemStack (slotKey );
37- if (item != null && item .getType () != Material .AIR ) {
38- itemMap .put (slot , item );
82+ try {
83+ int slot = Integer .parseInt (slotKey );
84+ if (slot < 0 || slot >= 57 ) continue ; // スロット番号チェック追加
85+ ItemStack item = pageSection .getItemStack (slotKey );
86+ if (item != null && item .getType () != Material .AIR ) {
87+ itemMap .put (slot , item );
88+ }
89+ } catch (NumberFormatException ex ) {
90+ continue ; // 無効なスロットキーはスキップ
3991 }
4092 }
4193
94+ // ページ権限
4295 Set <String > pagePerms = new HashSet <>();
4396 pagePerms .add (GroupPermENUM .MEMBER .getPermName ());
4497
45- InventoryData inv = new InventoryData ("ECPページ #" + pageId , 57 , pagePerms , itemMap );
46- inv .addUserTag ("ecp-imported" );
98+ int displayPageId ;
99+ try {
100+ displayPageId = Integer .parseInt (pageId );
101+ } catch (NumberFormatException ex ) {
102+ displayPageId = 0 ; // fallback
103+ }
104+
105+ // InventoryDataを作成
106+ InventoryData inv = new InventoryData ("ECPページ #" + (displayPageId + 1 ), 57 , pagePerms , itemMap );
47107
48- inventoryMap .put (pageId , inv );
108+ inventoryMap .put (pageId , inv ); // 内部IDはそのまま(ズレ防止)
49109 }
50110
111+ // ストレージデータ構築
51112 StorageData storageData = new StorageData (bankPerms , inventoryMap , 0.0 );
52113 storageData .groupUUID = groupUUID ;
53114
115+ try (Connection conn = BetterStorage .BSPlugin .getDatabaseManager ().getConnection ();
116+ PreparedStatement ps = conn .prepareStatement (
117+ "UPDATE group_table SET ecp_imported = TRUE WHERE group_uuid = ?" )) {
118+ ps .setString (1 , groupUUID .toString ());
119+ ps .executeUpdate ();
120+ } catch (SQLException e ) {
121+ throw new RuntimeException (e );
122+ }
123+
54124 return storageData ;
55125 }
56- }
126+
127+ }
0 commit comments