1717import java .io .File ;
1818import java .io .IOException ;
1919import java .nio .file .Path ;
20+ import java .util .ArrayList ;
21+ import java .util .List ;
2022
2123import org .slf4j .Logger ;
2224import org .slf4j .LoggerFactory ;
3840import mr_krab .dupefixer .listeners .DropListener ;
3941import mr_krab .dupefixer .listeners .InteractItemListenerFluidFixGP ;
4042import mr_krab .dupefixer .listeners .InteractItemListenerFluidFixRP ;
43+ import mr_krab .dupefixer .listeners .PortalListener ;
4144import mr_krab .dupefixer .listeners .ShiftClickListener ;
4245import mr_krab .dupefixer .utils .ConfigUtil ;
4346import mr_krab .dupefixer .utils .ProtectPluginsAPI ;
4649
4750@ Plugin (id = "dupefixer" ,
4851 name = "DupeFixer" ,
49- version = "1.2 " ,
52+ version = "1.3 " ,
5053 authors = "Mr_Krab" ,
5154 dependencies = {
5255 @ Dependency (id = "griefprevention" , optional = true ),
@@ -71,8 +74,14 @@ public class DupeFixer {
7174 private static DupeFixer instance ;
7275 private static ConfigUtil configUtil ;
7376 private static ProtectPluginsAPI protectPluginsAPI ;
77+ private static DropListener dropListener ;
78+ private static InteractItemListenerFluidFixGP iGp ;
79+ private static InteractItemListenerFluidFixRP iRp ;
80+ private static PortalListener portalListener ;
81+ private static ShiftClickListener shiftClickListener ;
7482
7583 boolean foundRP = false ;
84+ List <String > enableListeners = new ArrayList <String >();
7685
7786 public Path getConfigDir () {
7887 return configDir ;
@@ -93,15 +102,6 @@ public ProtectPluginsAPI getProtectPluginsAPI() {
93102 return protectPluginsAPI ;
94103 }
95104
96- public void load () {
97- configLoader = YAMLConfigurationLoader .builder ().setPath (configDir .resolve ("config.yml" )).setFlowStyle (FlowStyle .BLOCK ).build ();
98- try {
99- rootNode = configLoader .load ();
100- } catch (IOException e ) {
101- e .printStackTrace ();
102- }
103- }
104-
105105 @ Listener
106106 public void onPostInitialization (GamePostInitializationEvent event ) {
107107 logger = (Logger )LoggerFactory .getLogger ("DupeFixer" );
@@ -110,7 +110,7 @@ public void onPostInitialization(GamePostInitializationEvent event) {
110110 load ();
111111 configUtil .checkConfigVersion ();
112112 protectPluginsAPI = new ProtectPluginsAPI ();
113- registerListeners ();
113+ updateListeners ();
114114 }
115115
116116 @ Listener
@@ -124,31 +124,85 @@ public void onCompleteLoadServer(GameStartedServerEvent event) {
124124 @ Listener
125125 public void onReload (GameReloadEvent event ) {
126126 load ();
127+ updateListeners ();
128+ }
129+
130+ public void load () {
131+ configLoader = YAMLConfigurationLoader .builder ().setPath (configDir .resolve ("config.yml" )).setFlowStyle (FlowStyle .BLOCK ).build ();
132+ try {
133+ rootNode = configLoader .load ();
134+ } catch (IOException e ) {
135+ e .printStackTrace ();
136+ }
127137 }
128138
129- private void registerListeners () {
130- if (rootNode .getNode ("FixContainer" , "Enable" ).getBoolean ()) {
131- Sponge .getEventManager ().registerListeners (this , new DropListener (this ));
139+ private void updateListeners () {
140+ if (rootNode .getNode ("FixContainer" , "Enable" ).getBoolean () && !enableListeners .contains ("DropListener" )) {
141+ dropListener = new DropListener (this );
142+ Sponge .getEventManager ().registerListeners (this , dropListener );
143+ enableListeners .add ("DropListener" );
144+ } else {
145+ if (dropListener != null ) {
146+ Sponge .getEventManager ().unregisterListeners (dropListener );
147+ enableListeners .remove ("DropListener" );
148+ dropListener = null ;
149+ }
132150 }
151+
133152 if (rootNode .getNode ("FixFluidDupe" , "Enable" ).getBoolean ()) {
134- if (Sponge .getPluginManager ().isLoaded ("griefprevention" )) {
153+ iRp = new InteractItemListenerFluidFixRP (this );
154+ if (Sponge .getPluginManager ().isLoaded ("griefprevention" ) && !enableListeners .contains ("InteractItemListenerFluidFixGP" )) {
135155 protectPluginsAPI .setGriefPreventionAPI (GriefPrevention .getApi ());
136- Sponge .getEventManager ().registerListeners (this ,new InteractItemListenerFluidFixGP (this ));
156+ iGp = new InteractItemListenerFluidFixGP (this );
157+ Sponge .getEventManager ().registerListeners (this , iGp );
158+ enableListeners .add ("InteractItemListenerFluidFixGP" );
159+ } else {
160+ if (iGp != null ) {
161+ Sponge .getEventManager ().unregisterListeners (iGp );
162+ enableListeners .remove ("InteractItemListenerFluidFixGP" );
163+ iGp = null ;
164+ }
137165 }
138166 /*
139167 * Руки оторвать бы разработчику RedProtect за то, как он предоставляет API своего плагина.
140168 * The RedProtect developer needs to tear off his hands for how he provides his plugin API.
141169 */
142- if (Sponge .getPluginManager ().getPlugin ("redprotect" ).isPresent ()) {
170+ if (Sponge .getPluginManager ().getPlugin ("redprotect" ).isPresent () && ! enableListeners . contains ( "InteractItemListenerFluidFixRP" ) ) {
143171 foundRP = true ;
144- Sponge .getEventManager ().registerListeners (this ,new InteractItemListenerFluidFixRP (this ));
172+ Sponge .getEventManager ().registerListeners (this , iRp );
173+ enableListeners .add ("InteractItemListenerFluidFixRP" );
174+ } else {
175+ if (iRp != null ) {
176+ Sponge .getEventManager ().unregisterListeners (iRp );
177+ enableListeners .remove ("InteractItemListenerFluidFixRP" );
178+ iRp = null ;
179+ }
145180 }
146181 if (!protectPluginsAPI .isPresentGP () && !foundRP ) {
147182 logger .error ("None of the supported claims protection plugins were found!" );
148183 }
149184 }
150- if (rootNode .getNode ("BlockShiftClick" , "Enable" ).getBoolean ()) {
151- Sponge .getEventManager ().registerListeners (this , new ShiftClickListener (this ));
185+ if (rootNode .getNode ("BlockShiftClick" , "Enable" ).getBoolean () && !enableListeners .contains ("ShiftClickListener" )) {
186+ shiftClickListener = new ShiftClickListener (this );
187+ Sponge .getEventManager ().registerListeners (this , shiftClickListener );
188+ enableListeners .add ("ShiftClickListener" );
189+ } else {
190+ if (shiftClickListener != null ) {
191+ Sponge .getEventManager ().unregisterListeners (shiftClickListener );
192+ enableListeners .remove ("ShiftClickListener" );
193+ shiftClickListener = null ;
194+ }
195+ }
196+ if (rootNode .getNode ("PortalLock" , "Enable" ).getBoolean () && !enableListeners .contains ("PortalListener" )) {
197+ portalListener = new PortalListener (this );
198+ Sponge .getEventManager ().registerListeners (this , portalListener );
199+ enableListeners .add ("PortalListener" );
200+ } else {
201+ if (portalListener != null ) {
202+ Sponge .getEventManager ().unregisterListeners (portalListener );
203+ enableListeners .remove ("PortalListener" );
204+ portalListener = null ;
205+ }
152206 }
153207 }
154208}
0 commit comments