Skip to content

Commit 6bdbed5

Browse files
authored
Correctif du plugin qui ne se lancait pas sans dépendance mise. (#1326)
* fix plugin loading without dependancy * branch change * fix
1 parent 1541a64 commit 6bdbed5

7 files changed

Lines changed: 115 additions & 57 deletions

File tree

src/main/java/fr/openmc/core/OMCPlugin.java

Lines changed: 63 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
import fr.openmc.api.menulib.MenuLib;
66
import fr.openmc.api.packetmenulib.PacketMenuLib;
77
import fr.openmc.core.bootstrap.features.Feature;
8-
import fr.openmc.core.bootstrap.features.types.LoadAfterItemsAdder;
8+
import fr.openmc.core.bootstrap.features.FeatureFactory;
9+
import fr.openmc.core.bootstrap.features.FeatureLoadingType;
910
import fr.openmc.core.bootstrap.hooks.Hooks;
1011
import fr.openmc.core.bootstrap.integration.DatabaseManager;
1112
import fr.openmc.core.bootstrap.integration.ErrorReporter;
@@ -76,47 +77,50 @@ public class OMCPlugin extends JavaPlugin {
7677
public static final String VANISH_META_KEY = "omcstaff.vanished";
7778

7879
// ** Registry of OMC Features
79-
public final List<Feature> REGISTRY_FEATURE = new ArrayList<>(List.of(
80-
new TicketManager(new File(this.getDataFolder(), "data/stats")),
81-
new PrivateMessageManager(),
82-
new SocialSpyManager(),
83-
new SpawnManager(),
84-
new UpdateManager(),
85-
new EconomyManager(),
86-
new BankManager(),
87-
new ScoreboardManager(),
88-
new HomesManager(),
89-
new TPAManager(),
90-
new FreezeManager(),
91-
new TransactionsManager(),
92-
new AnalyticsManager(),
93-
new FriendManager(),
94-
new TabList(),
95-
new AdminShopManager(),
96-
new HelpConfigManager(),
97-
new BossbarManager(),
98-
new AnimationsManager(),
99-
new HalloweenManager(),
100-
new QuestProgressSaveManager(),
101-
new MotdUtils(),
102-
new MascotsManager(),
103-
new PlayerSettingsManager(),
104-
new MailboxManager(),
105-
new QuestsManager(),
106-
new CityManager(),
107-
new DynamicCooldownManager(),
108-
new ContestManager(),
109-
new WeeklyEventsManager(),
110-
new CalendarManager(),
111-
new DreamManager(),
112-
new MultiBlockManager(),
113-
new MilestonesManager(),
114-
new LeaderboardManager(),
115-
new MainMenu(),
116-
new HologramLoader(),
117-
new HomeIconCacheManager()
80+
// () -> nécessaire si y'a un package d'api externe (ex com.comphenix.protocol)
81+
public final List<FeatureFactory> REGISTRY_FEATURE = new ArrayList<>(List.of(
82+
() -> new TicketManager(new File(this.getDataFolder(), "data/stats")),
83+
PrivateMessageManager::new,
84+
SocialSpyManager::new,
85+
SpawnManager::new,
86+
UpdateManager::new,
87+
EconomyManager::new,
88+
BankManager::new,
89+
ScoreboardManager::new,
90+
HomesManager::new,
91+
TPAManager::new,
92+
FreezeManager::new,
93+
TransactionsManager::new,
94+
AnalyticsManager::new,
95+
FriendManager::new,
96+
() -> new TabList(),
97+
AdminShopManager::new,
98+
HelpConfigManager::new,
99+
BossbarManager::new,
100+
() -> new AnimationsManager(),
101+
() -> new HalloweenManager(),
102+
QuestProgressSaveManager::new,
103+
MotdUtils::new,
104+
MascotsManager::new,
105+
PlayerSettingsManager::new,
106+
MailboxManager::new,
107+
QuestsManager::new,
108+
CityManager::new,
109+
DynamicCooldownManager::new,
110+
ContestManager::new,
111+
WeeklyEventsManager::new,
112+
CalendarManager::new,
113+
DreamManager::new,
114+
MultiBlockManager::new,
115+
MilestonesManager::new,
116+
() -> new LeaderboardManager(),
117+
() -> new MainMenu(),
118+
() -> new HologramLoader(),
119+
HomeIconCacheManager::new
118120
));
119121

122+
public final List<Feature> loadedFeature = new ArrayList<>();
123+
120124
// ** Registry of OMC Plugin Hooks
121125
public final List<Hooks> REGISTRY_HOOKS = new ArrayList<>(List.of(
122126
new ProtocolLibHook(),
@@ -175,9 +179,15 @@ public void onEnable() {
175179
OMCRegistry.initAll();
176180

177181
/* FEATURES */
178-
REGISTRY_FEATURE.stream()
179-
.filter(f -> !(f instanceof LoadAfterItemsAdder))
180-
.forEachOrdered(Feature::startInit);
182+
REGISTRY_FEATURE
183+
.forEach(f -> {
184+
Feature feature = f.create(FeatureLoadingType.RUNTIME);
185+
186+
if (feature != null) {
187+
feature.startInit();
188+
loadedFeature.add(feature);
189+
}
190+
});
181191

182192
// * Si ItemsAdder est pas présent, alors on charge les dernieres features maintenant
183193
if (!ItemsAdderHook.isEnable()) {
@@ -196,9 +206,15 @@ public void loadAfterItemsAdder() {
196206
OMCRegistry.postInitAll();
197207

198208
/* FEATURES */
199-
REGISTRY_FEATURE.stream()
200-
.filter(f -> f instanceof LoadAfterItemsAdder)
201-
.forEachOrdered(Feature::startInit);
209+
REGISTRY_FEATURE
210+
.forEach(f -> {
211+
Feature feature = f.create(FeatureLoadingType.AFTER_IA);
212+
213+
if (feature != null) {
214+
feature.startInit();
215+
loadedFeature.add(feature);
216+
}
217+
});
202218

203219
if (WorldGuardHook.isEnable()) {
204220
ParticleUtils.spawnParticlesInRegion("spawn", Bukkit.getWorld("world"), Particle.CHERRY_LEAVES, 50, 70, 130);
@@ -211,7 +227,7 @@ public void loadAfterItemsAdder() {
211227
@Override
212228
public void onDisable() {
213229
// ** SAVE **
214-
for (Feature feature : REGISTRY_FEATURE) {
230+
for (Feature feature : loadedFeature) {
215231
feature.startSave();
216232
}
217233

src/main/java/fr/openmc/core/bootstrap/features/Feature.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ public final void startInit() {
6262
initialize = false;
6363
OMCLogger.errorFormatted("Feature " + this.getClass().getSimpleName() + " non initialisée.");
6464
throw e;
65+
} catch (NoClassDefFoundError e) {
66+
OMCLogger.errorFormatted("Plugin has failed to start feature because " + e.getMessage() + " does not exist.");
6567
}
6668
}
6769

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package fr.openmc.core.bootstrap.features;
2+
3+
import fr.openmc.core.bootstrap.features.types.LoadAfterItemsAdder;
4+
import fr.openmc.core.bootstrap.integration.OMCLogger;
5+
6+
@FunctionalInterface
7+
public interface FeatureFactory {
8+
Feature create() throws NoClassDefFoundError;
9+
10+
default Feature create(FeatureLoadingType type) {
11+
Feature feature = null;
12+
try {
13+
feature = create();
14+
} catch (NoClassDefFoundError e) {
15+
String featureName = "null";
16+
if (feature != null) {
17+
featureName = feature.getClass().getSimpleName();
18+
}
19+
20+
OMCLogger.errorFormatted("Plugin has failed to start feature {} because {} does not exist.",
21+
featureName, e.getMessage());
22+
}
23+
24+
if ((type.equals(FeatureLoadingType.RUNTIME) && !(feature instanceof LoadAfterItemsAdder)) ||
25+
(type.equals(FeatureLoadingType.AFTER_IA) && feature instanceof LoadAfterItemsAdder)
26+
) {
27+
return feature;
28+
}
29+
return null;
30+
}
31+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package fr.openmc.core.bootstrap.features;
2+
3+
public enum FeatureLoadingType {
4+
RUNTIME,
5+
AFTER_IA
6+
}

src/main/java/fr/openmc/core/bootstrap/features/types/LoadIfEnable.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ default boolean shouldLoad() {
3737
e.printStackTrace();
3838
return false;
3939
} catch (NoClassDefFoundError e) {
40-
OMCLogger.errorFormatted("Plugin has failed to register hooks because " + e.getMessage() + " does not exist.");
40+
OMCLogger.errorFormatted("Plugin has failed to register hooks because " + e.getMessage() + " does not exist.");
4141
return false;
4242
}
4343
}

src/main/java/fr/openmc/core/bootstrap/integration/DatabaseManager.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import com.j256.ormlite.logger.LocalLogBackend;
66
import com.j256.ormlite.support.ConnectionSource;
77
import fr.openmc.core.OMCPlugin;
8-
import fr.openmc.core.bootstrap.features.types.DatabaseFeature;
8+
import fr.openmc.core.bootstrap.features.Feature;
99
import lombok.Getter;
1010
import org.bukkit.configuration.file.FileConfiguration;
1111

@@ -44,17 +44,20 @@ public static void init() {
4444
String password = config.getString("database.password");
4545
connectionSource = new JdbcPooledConnectionSource(databaseUrl, username, password);
4646

47-
OMCPlugin.getInstance().REGISTRY_FEATURE.stream()
48-
.filter(f -> f instanceof DatabaseFeature)
47+
OMCPlugin.getInstance().REGISTRY_FEATURE
4948
.forEach(f -> {
5049
try {
51-
f.startDB(connectionSource);
50+
Feature feature = f.create();
51+
feature.startDB(connectionSource);
5252
} catch (SQLException e) {
5353
OMCLogger.error("Failed to initialize the database connection.", e);
5454
throw new RuntimeException(e);
5555
} catch (ConnectionPendingException e) {
5656
OMCLogger.error("Database connection is pending. Please check your database configuration.");
5757
throw new RuntimeException(e);
58+
} catch (NoClassDefFoundError e) {
59+
OMCLogger.errorFormatted("Plugin has failed to start feature because {} does not exist.",
60+
e.getMessage());
5861
}
5962
});
6063
} catch (SQLException e) {

src/main/resources/paper-plugin.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,25 @@ dependencies:
88
server:
99
FancyNpcs:
1010
load: BEFORE
11-
required: true
11+
required: false
1212
PlaceholderAPI:
1313
load: BEFORE
1414
required: false
1515
LuckPerms:
1616
load: BEFORE
17-
required: true
17+
required: false
1818
ItemsAdder:
1919
load: BEFORE
20-
required: true
20+
required: false
2121
ProtocolLib:
2222
load: BEFORE
23-
required: true
23+
required: false
2424
WorldGuard:
2525
load: BEFORE
2626
required: false
2727
FastAsyncWorldEdit:
2828
load: BEFORE
29-
required: true
29+
required: false
3030

3131
prefix: OMC
3232
authors: [ La communauté ]

0 commit comments

Comments
 (0)