Skip to content

Commit eb8e1b1

Browse files
CopilotTheMeinerLP
andcommitted
fix: complete dependency injection refactor for all listeners
Co-authored-by: TheMeinerLP <[email protected]>
1 parent e877016 commit eb8e1b1

File tree

4 files changed

+93
-33
lines changed

4 files changed

+93
-33
lines changed

src/main/java/net/onelitefeather/antiredstoneclockremastered/AntiRedstoneClockRemastered.java

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -193,24 +193,36 @@ private void registerEvents() {
193193
getServer().getPluginManager().registerEvents(injector.getInstance(PistonListener.class), this);
194194
}
195195

196-
// Material-dependent listeners still use manual registration for now
196+
// Material-dependent listeners now use dependency injection
197197
if (getConfig().getBoolean("check.comparator", true)) {
198198
var comparator = Material.getMaterial("COMPARATOR");
199199
if (comparator != null) {
200-
getServer().getPluginManager().registerEvents(new ComparatorListener(comparator, this), this);
200+
var listener = injector.getInstance(ListenerModule.class)
201+
.createComparatorListener(comparator, redstoneClockService, tps, this);
202+
getServer().getPluginManager().registerEvents(listener, this);
201203
} else {
202-
getServer().getPluginManager().registerEvents(new ComparatorListener(Material.getMaterial("REDSTONE_COMPARATOR_OFF"), this), this);
203-
getServer().getPluginManager().registerEvents(new ComparatorListener(Material.getMaterial("REDSTONE_COMPARATOR_ON"), this), this);
204+
var listener1 = injector.getInstance(ListenerModule.class)
205+
.createComparatorListener(Material.getMaterial("REDSTONE_COMPARATOR_OFF"), redstoneClockService, tps, this);
206+
var listener2 = injector.getInstance(ListenerModule.class)
207+
.createComparatorListener(Material.getMaterial("REDSTONE_COMPARATOR_ON"), redstoneClockService, tps, this);
208+
getServer().getPluginManager().registerEvents(listener1, this);
209+
getServer().getPluginManager().registerEvents(listener2, this);
204210
}
205211
}
206212

207213
if (getConfig().getBoolean("check.redstoneAndRepeater", true)) {
208214
var repeater = Material.getMaterial("REPEATER");
209215
if (repeater != null) {
210-
getServer().getPluginManager().registerEvents(new RedstoneListener(repeater, this), this);
216+
var listener = injector.getInstance(ListenerModule.class)
217+
.createRedstoneListener(repeater, redstoneClockService, tps, this);
218+
getServer().getPluginManager().registerEvents(listener, this);
211219
} else {
212-
getServer().getPluginManager().registerEvents(new RedstoneListener(Material.getMaterial("DIODE_BLOCK_ON"), this), this);
213-
getServer().getPluginManager().registerEvents(new RedstoneListener(Material.getMaterial("DIODE_BLOCK_OFF"), this), this);
220+
var listener1 = injector.getInstance(ListenerModule.class)
221+
.createRedstoneListener(Material.getMaterial("DIODE_BLOCK_ON"), redstoneClockService, tps, this);
222+
var listener2 = injector.getInstance(ListenerModule.class)
223+
.createRedstoneListener(Material.getMaterial("DIODE_BLOCK_OFF"), redstoneClockService, tps, this);
224+
getServer().getPluginManager().registerEvents(listener1, this);
225+
getServer().getPluginManager().registerEvents(listener2, this);
214226
}
215227
}
216228
}

src/main/java/net/onelitefeather/antiredstoneclockremastered/injection/ListenerModule.java

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package net.onelitefeather.antiredstoneclockremastered.injection;
22

33
import com.google.inject.AbstractModule;
4-
import net.onelitefeather.antiredstoneclockremastered.listener.ObserverListener;
5-
import net.onelitefeather.antiredstoneclockremastered.listener.PistonListener;
6-
import net.onelitefeather.antiredstoneclockremastered.listener.PlayerListener;
7-
import net.onelitefeather.antiredstoneclockremastered.listener.SculkListener;
4+
import com.google.inject.Provides;
5+
import net.onelitefeather.antiredstoneclockremastered.listener.*;
6+
import net.onelitefeather.antiredstoneclockremastered.service.api.RedstoneClockService;
7+
import net.onelitefeather.antiredstoneclockremastered.utils.CheckTPS;
8+
import org.bukkit.Material;
9+
import org.bukkit.plugin.Plugin;
810

911
/**
1012
* Guice module for listener dependencies.
@@ -21,7 +23,21 @@ protected void configure() {
2123
bind(ObserverListener.class);
2224
bind(SculkListener.class);
2325
bind(PistonListener.class);
24-
// ComparatorListener and RedstoneListener require Material parameters
25-
// and are handled directly in the main plugin class for now
26+
}
27+
28+
/**
29+
* Creates ComparatorListener instances for different materials.
30+
*/
31+
public ComparatorListener createComparatorListener(Material material, RedstoneClockService redstoneClockService,
32+
CheckTPS checkTPS, Plugin plugin) {
33+
return new ComparatorListener(material, redstoneClockService, checkTPS, plugin);
34+
}
35+
36+
/**
37+
* Creates RedstoneListener instances for different materials.
38+
*/
39+
public RedstoneListener createRedstoneListener(Material material, RedstoneClockService redstoneClockService,
40+
CheckTPS checkTPS, Plugin plugin) {
41+
return new RedstoneListener(material, redstoneClockService, checkTPS, plugin);
2642
}
2743
}
Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,49 @@
11
package net.onelitefeather.antiredstoneclockremastered.listener;
22

3-
import net.onelitefeather.antiredstoneclockremastered.AntiRedstoneClockRemastered;
3+
import net.onelitefeather.antiredstoneclockremastered.service.api.RedstoneClockService;
4+
import net.onelitefeather.antiredstoneclockremastered.utils.CheckTPS;
45
import org.bukkit.Material;
6+
import org.bukkit.configuration.file.FileConfiguration;
57
import org.bukkit.event.EventHandler;
68
import org.bukkit.event.EventPriority;
79
import org.bukkit.event.Listener;
810
import org.bukkit.event.block.BlockRedstoneEvent;
9-
11+
import org.bukkit.plugin.Plugin;
12+
13+
/**
14+
* Listener for handling comparator-based redstone clocks.
15+
* Uses dependency injection for better testability and maintainability.
16+
*
17+
* @author TheMeinerLP
18+
* @version 2.2.0
19+
* @since 1.0.0
20+
*/
1021
public final class ComparatorListener implements Listener {
1122
private final Material comparatorMaterial;
12-
private final AntiRedstoneClockRemastered antiRedstoneClockRemastered;
23+
private final RedstoneClockService redstoneClockService;
24+
private final CheckTPS checkTPS;
25+
private final FileConfiguration config;
1326

14-
public ComparatorListener(Material comparatorMaterial, AntiRedstoneClockRemastered antiRedstoneClockRemastered) {
27+
public ComparatorListener(Material comparatorMaterial, RedstoneClockService redstoneClockService,
28+
CheckTPS checkTPS, Plugin plugin) {
1529
this.comparatorMaterial = comparatorMaterial;
16-
this.antiRedstoneClockRemastered = antiRedstoneClockRemastered;
30+
this.redstoneClockService = redstoneClockService;
31+
this.checkTPS = checkTPS;
32+
this.config = plugin.getConfig();
1733
}
1834

1935
@EventHandler(priority = EventPriority.LOWEST)
2036
private void onRedstoneComparatorClock(BlockRedstoneEvent blockRedstoneEvent) {
2137

22-
if (!this.antiRedstoneClockRemastered.getTps().isTpsOk()) return;
23-
if (!this.antiRedstoneClockRemastered.getConfig().getBoolean("check.comparator")) return;
38+
if (!this.checkTPS.isTpsOk()) return;
39+
if (!this.config.getBoolean("check.comparator")) return;
2440

2541
var block = blockRedstoneEvent.getBlock();
2642
var type = block.getType();
2743
if (type != comparatorMaterial) return;
2844

2945
if (blockRedstoneEvent.getOldCurrent() != 0) return;
3046

31-
this.antiRedstoneClockRemastered.getRedstoneClockService().checkAndUpdateClockState(block);
47+
this.redstoneClockService.checkAndUpdateClockState(block);
3248
}
3349
}
Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,49 @@
11
package net.onelitefeather.antiredstoneclockremastered.listener;
22

3-
import net.onelitefeather.antiredstoneclockremastered.AntiRedstoneClockRemastered;
3+
import net.onelitefeather.antiredstoneclockremastered.service.api.RedstoneClockService;
4+
import net.onelitefeather.antiredstoneclockremastered.utils.CheckTPS;
45
import org.bukkit.Material;
6+
import org.bukkit.configuration.file.FileConfiguration;
57
import org.bukkit.event.EventHandler;
68
import org.bukkit.event.EventPriority;
79
import org.bukkit.event.Listener;
810
import org.bukkit.event.block.BlockRedstoneEvent;
9-
11+
import org.bukkit.plugin.Plugin;
12+
13+
/**
14+
* Listener for handling redstone repeater-based redstone clocks.
15+
* Uses dependency injection for better testability and maintainability.
16+
*
17+
* @author TheMeinerLP
18+
* @version 2.2.0
19+
* @since 1.0.0
20+
*/
1021
public final class RedstoneListener implements Listener {
11-
private final Material reperaterMaterial;
12-
private final AntiRedstoneClockRemastered antiRedstoneClockRemastered;
13-
14-
public RedstoneListener(Material reperaterMaterial, AntiRedstoneClockRemastered antiRedstoneClockRemastered) {
15-
this.reperaterMaterial = reperaterMaterial;
16-
this.antiRedstoneClockRemastered = antiRedstoneClockRemastered;
22+
private final Material repeaterMaterial;
23+
private final RedstoneClockService redstoneClockService;
24+
private final CheckTPS checkTPS;
25+
private final FileConfiguration config;
26+
27+
public RedstoneListener(Material repeaterMaterial, RedstoneClockService redstoneClockService,
28+
CheckTPS checkTPS, Plugin plugin) {
29+
this.repeaterMaterial = repeaterMaterial;
30+
this.redstoneClockService = redstoneClockService;
31+
this.checkTPS = checkTPS;
32+
this.config = plugin.getConfig();
1733
}
1834

1935
@EventHandler(priority = EventPriority.LOWEST)
2036
private void onRedstoneClock(BlockRedstoneEvent blockRedstoneEvent) {
2137

22-
if (!this.antiRedstoneClockRemastered.getTps().isTpsOk()) return;
23-
if (!this.antiRedstoneClockRemastered.getConfig().getBoolean("check.redstoneAndRepeater")) return;
38+
if (!this.checkTPS.isTpsOk()) return;
39+
if (!this.config.getBoolean("check.redstoneAndRepeater")) return;
2440

2541
var block = blockRedstoneEvent.getBlock();
2642
var type = block.getType();
27-
if (type != Material.REDSTONE_WIRE && type != reperaterMaterial) return;
43+
if (type != Material.REDSTONE_WIRE && type != repeaterMaterial) return;
2844

2945
if (blockRedstoneEvent.getOldCurrent() != 0) return;
3046

31-
this.antiRedstoneClockRemastered.getRedstoneClockService().checkAndUpdateClockState(block);
47+
this.redstoneClockService.checkAndUpdateClockState(block);
3248
}
3349
}

0 commit comments

Comments
 (0)