44import lombok .NonNull ;
55import lombok .SneakyThrows ;
66import net .azisaba .lgw .core .LeonGunWar ;
7+ import org .bukkit .Bukkit ;
78import org .bukkit .Location ;
9+ import org .bukkit .World ;
810import org .bukkit .configuration .InvalidConfigurationException ;
11+ import org .jetbrains .annotations .Nullable ;
912
1013import java .io .IOException ;
1114import java .util .Collections ;
1518@ Getter
1619public class SpawnsConfig extends Config {
1720
18- private Map <String , Location > spawns ;
19- private Location lobby ;
20- private Location onsen ;
21+ // 位置データは“文字列の world 名+座標”だけ持つ
22+ private static class Pos {
23+ final String worldName ;
24+ final double x , y , z ;
25+ final float yaw , pitch ;
26+ Pos (String worldName , double x , double y , double z , float yaw , float pitch ) {
27+ this .worldName = worldName ; this .x =x ; this .y =y ; this .z =z ; this .yaw =yaw ; this .pitch =pitch ;
28+ }
29+ }
30+
31+ private Map <String , Pos > spawns ; // ← Location ではなく Pos を保存
2132
2233 public SpawnsConfig (@ NonNull LeonGunWar plugin ) {
2334 super (plugin , "configs/spawns.yml" , "spawns.yml" );
2435 }
2536
26- @ SneakyThrows (value = {Exception .class })
2737 @ Override
2838 public void loadConfig () throws IOException , InvalidConfigurationException {
2939 super .loadConfig ();
3040
31- spawns = new HashMap <>();
41+ Map < String , Pos > map = new HashMap <>();
3242 for (String spawnName : config .getValues (false ).keySet ()) {
33- Location spawn = new Location (
34- plugin .getServer ().getWorld (config .getString (spawnName + ".world" )),
43+ String w = config .getString (spawnName + ".world" );
44+ Pos p = new Pos (
45+ w ,
3546 config .getDouble (spawnName + ".x" ),
3647 config .getDouble (spawnName + ".y" ),
3748 config .getDouble (spawnName + ".z" ),
3849 (float ) config .getDouble (spawnName + ".yaw" ),
39- (float ) config .getDouble (spawnName + ".pitch" ));
40- spawns .put (spawnName , spawn );
50+ (float ) config .getDouble (spawnName + ".pitch" )
51+ );
52+ map .put (spawnName , p );
4153 }
42- spawns = Collections .unmodifiableMap (spawns );
43-
44- lobby = spawns .get ("lobby" );
45- onsen = spawns .get ("onsen" );
54+ spawns = Collections .unmodifiableMap (map );
4655 }
4756
48- public Location getLobby () {
49- return lobby ;
57+ /** 使う直前に World を解決。null のときは null を返す(呼び出し側でフォールバック) */
58+ public @ Nullable Location get (String name ) {
59+ Pos p = spawns .get (name );
60+ if (p == null ) {
61+ Bukkit .getLogger ().warning ("[LGW] spawn '" + name + "' not found in spawns.yml" );
62+ return null ;
63+ }
64+ World w = plugin .getServer ().getWorld (p .worldName );
65+ if (w == null ) {
66+ Bukkit .getLogger ().warning ("[LGW] spawn '" + name + "' world not loaded or not found: " + p .worldName );
67+ return null ;
68+ }
69+ return new Location (w , p .x , p .y , p .z , p .yaw , p .pitch );
5070 }
51- }
71+
72+ public @ Nullable Location getLobby () { return get ("lobby" ); }
73+ public @ Nullable Location getOnsen () { return get ("onsen" ); }
74+ }
0 commit comments