11package gemesil .fasterpathways ;
22
3- import net .md_5 .bungee .api .ChatMessageType ;
4- import net .md_5 .bungee .api .chat .TextComponent ;
3+ import gemesil .fasterpathways .core .BoostService ;
4+ import gemesil .fasterpathways .core .ConfigManager ;
5+ import gemesil .fasterpathways .core .MovementListener ;
56import org .bukkit .Bukkit ;
6- import org .bukkit .ChatColor ;
7- import org .bukkit .Material ;
8- import org .bukkit .World ;
9- import org .bukkit .block .Block ;
10- import org .bukkit .block .BlockFace ;
11- import org .bukkit .configuration .file .FileConfiguration ;
7+ import org .bukkit .attribute .Attribute ;
128import org .bukkit .entity .Player ;
13- import org .bukkit .event .EventHandler ;
14- import org .bukkit .event .Listener ;
15- import org .bukkit .event .player .PlayerMoveEvent ;
169import org .bukkit .plugin .java .JavaPlugin ;
17- import org .bukkit .potion .PotionEffect ;
18- import org .bukkit .potion .PotionEffectType ;
1910
20- import java .util .HashSet ;
21- import java .util .Set ;
22- import java .util .logging .Level ;
11+ /**
12+ * Entry point for the FasterPathways plugin.
13+ * Keeps lifecycle minimal and delegates to the core package.
14+ */
15+ public final class FasterPathways extends JavaPlugin {
2316
24- public final class FasterPathways extends JavaPlugin implements Listener {
25-
26- private PotionEffect speedEffect ;
27- private Set <Material > speedBlocks ;
28- private Set <String > disabledWorlds ;
29- private String actionBarMessage ;
30- private boolean showActionBar ;
17+ private ConfigManager configManager ;
18+ private BoostService boostService ;
3119
3220 @ Override
3321 public void onEnable () {
3422 saveDefaultConfig ();
35- loadConfiguration ();
36- getServer ().getPluginManager ().registerEvents (this , this );
37- getLogger ().info ("FasterPathways | Plugin has been enabled!" );
38- }
39-
40- private void loadConfiguration () {
41- reloadConfig ();
42- FileConfiguration config = getConfig ();
43-
44- // Load speed effect settings
45- int speedLevel = config .getInt ("speed.level" , 1 );
46- int speedDuration = config .getInt ("speed.duration" , 2 );
47- speedEffect = new PotionEffect (PotionEffectType .SPEED , speedDuration * 20 , speedLevel - 1 );
48-
49- // Load action bar settings
50- actionBarMessage = ChatColor .translateAlternateColorCodes ('&' ,
51- config .getString ("messages.actionBar" , "&eYou're moving faster!" ));
52- showActionBar = config .getBoolean ("messages.showActionBar" , true );
23+ reloadAll ();
5324
54- // Load disabled worlds
55- disabledWorlds = new HashSet <>(config .getStringList ("disabledWorlds" ));
56- for (String worldName : disabledWorlds ) {
57- if (Bukkit .getWorld (worldName ) == null ) {
58- getLogger ().warning ("FasterPathways | World not found: " + worldName );
59- }
60- }
25+ // Register movement listener
26+ Bukkit .getPluginManager ().registerEvents (
27+ new MovementListener (configManager , boostService ),
28+ this
29+ );
30+ }
6131
62- // Load speed blocks
63- speedBlocks = new HashSet <>();
64- for (String blockName : config .getStringList ("speedBlocks" )) {
65- try {
66- Material material = Material .valueOf (blockName .toUpperCase ());
67- speedBlocks .add (material );
68- } catch (IllegalArgumentException e ) {
69- getLogger ().log (Level .WARNING , "FasterPathways | Invalid block material in config: " + blockName );
32+ @ Override
33+ public void onDisable () {
34+ // Ensure no one remains boosted after disable/reload
35+ for (Player onlinePlayer : getServer ().getOnlinePlayers ()) {
36+ if (onlinePlayer .getAttribute (Attribute .MOVEMENT_SPEED ) != null ) {
37+ boostService .removeSpeedMultiplier (onlinePlayer );
7038 }
7139 }
72-
73- if (speedBlocks .isEmpty ()) {
74- getLogger ().warning ("FasterPathways | No valid speed blocks configured! Adding DIRT_PATH as default." );
75- speedBlocks .add (Material .DIRT_PATH );
76- }
7740 }
7841
79- @ EventHandler
80- public void onPlayerMove (PlayerMoveEvent event ) {
81- if (event .getTo () != null && event .getTo ().getBlock ().equals (event .getFrom ().getBlock ())) {
82- return ;
83- }
84-
85- final Player player = event .getPlayer ();
86-
87- // Check if world is disabled
88- if (disabledWorlds .contains (player .getWorld ().getName ())) {
89- return ;
90- }
91-
92- final Block block = player .getLocation ().getBlock ();
93- final Block relativeBlock = block .getRelative (BlockFace .DOWN );
94-
95- if (speedBlocks .contains (block .getType ()) || speedBlocks .contains (relativeBlock .getType ())) {
96- player .addPotionEffect (speedEffect );
97-
98- if (showActionBar ) {
99- player .spigot ().sendMessage (ChatMessageType .ACTION_BAR ,
100- TextComponent .fromLegacyText (actionBarMessage ));
101- }
102- }
42+ /**
43+ * Reloads configuration and re-initializes services.
44+ * Call this if you later add a /reload command.
45+ */
46+ public void reloadAll () {
47+ reloadConfig ();
48+ this .configManager = new ConfigManager (getConfig (), getLogger (), getServer ());
49+ this .boostService = new BoostService ();
10350 }
104- }
51+ }
0 commit comments