Skip to content

Commit 79f6ffc

Browse files
vLuckyyyRollcziCitralFloJakubk15coderabbitai[bot]
authored
GH-884 Add support for 1.21.3, refactor injector. (#884)
* Support new sound serdes after bukkit api update. Drop java 17 support (WiP) * Fix some issues * Create universal old enum composer * Fix local publisher * @compatibility WiP * Use CompatibilityService * Fix * Improve dependency injector management * Update multification. * Prevent redundant delay marking when looping through items * Do not wrap Supplier in another Supplier Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Fixes * Fix potion effect * Fix SHORT_GRASS * Add Material.LEGACY_GRASS, * Rename HOW_USE_DI.md to HOW_USE_TO_DI.md --------- Co-authored-by: Rollczi <[email protected]> Co-authored-by: CitralFlo <[email protected]> Co-authored-by: Jakub Kędziora <[email protected]> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
1 parent 663b19c commit 79f6ffc

File tree

67 files changed

+487
-261
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

67 files changed

+487
-261
lines changed

.github/HOW_USE_DI.md renamed to .github/HOW_USE_TO_DI.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ public class UserCommand {
109109
#### 7. Subscriber
110110
```java
111111
@Controller // <- marks a class that will be registered as an event subscriber.
112-
public class UserSubscriber implements Subscriber {
112+
public class UserSubscriber {
113113

114114
private final UserService exampleService;
115115

@@ -126,12 +126,12 @@ public class UserSubscriber implements Subscriber {
126126
}
127127
```
128128

129-
#### 8. BeanSetup
130-
BeanSetup is a class that allows you to register beans in the bean container.
129+
#### 8. Setup
130+
Setup is an annotation that allows you to register beans in the bean container.
131131
It is used to register dependencies that are cannot be registered in the bean container using annotations. e.g. MiniMessage, AdventureProvider, HikariDataSource, etc.
132132
```java
133133

134-
@BeanSetup // <- marks a class that will be registered as a bean holder.
134+
@Setup // <- marks a class that will be registered as a bean holder.
135135
public class UserBeanSetup {
136136

137137
@Bean // <- marks a method that will be registered as a bean. (dependency)

buildSrc/src/main/kotlin/Versions.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
object Versions {
22

3-
const val SPIGOT_API = "1.19.4-R0.1-SNAPSHOT"
4-
const val PAPER_API = "1.19.4-R0.1-SNAPSHOT"
3+
const val SPIGOT_API = "1.21.3-R0.1-SNAPSHOT"
4+
const val PAPER_API = "1.21.3-R0.1-SNAPSHOT"
55

66
const val ETERNALCODE_COMMONS = "1.1.5"
77
const val MULTIFICATION = "1.2.1"
@@ -36,7 +36,6 @@ object Versions {
3636
const val TRIUMPH_GUI = "3.1.10"
3737

3838
const val BSTATS = "3.1.0"
39-
const val PIXEL_WIDTH = "1.1.0"
4039

4140
const val CAFFEINE = "3.1.8"
4241

buildSrc/src/main/kotlin/eternalcode-java.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,5 @@ java {
3535
tasks.withType<JavaCompile>() {
3636
options.compilerArgs = listOf("-Xlint:deprecation", "-parameters")
3737
options.encoding = "UTF-8"
38-
options.release = 17
38+
options.release = 21
3939
}

eternalcore-api-example/src/main/java/com/eternalcode/example/feature/home/ApiHomeListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ void onHomeTeleport(HomeTeleportEvent event) {
100100

101101
player.sendMessage("Teleporting to home...");
102102

103-
if (player.hasPotionEffect(PotionEffectType.SLOW)) {
103+
if (player.hasPotionEffect(PotionEffectType.SLOWNESS)) {
104104
player.sendMessage("You are slowed down!");
105105
player.teleport(player.getWorld().getSpawnLocation());
106106
}

eternalcore-api/src/main/java/com/eternalcode/core/delay/Delay.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,6 @@ public class Delay<T> {
1313

1414
private final Supplier<Duration> delaySettings;
1515

16-
@Deprecated
17-
public Delay(DelaySettings delaySettings) {
18-
this((Supplier<Duration>) () -> delaySettings.delay());
19-
}
20-
2116
public Delay(Supplier<Duration> delayProvider) {
2217
this.delaySettings = delayProvider;
2318

eternalcore-api/src/main/java/com/eternalcode/core/delay/DelaySettings.java

Lines changed: 0 additions & 10 deletions
This file was deleted.
Lines changed: 40 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,35 @@
11
package com.eternalcode.core;
22

3-
import com.eternalcode.core.configuration.ReloadableConfig;
3+
import com.eternalcode.core.compatibility.CompatibilityService;
44
import com.eternalcode.core.injector.DependencyInjector;
5+
import com.eternalcode.core.injector.annotations.component.Component;
6+
import com.eternalcode.core.injector.annotations.component.ConfigurationFile;
7+
import com.eternalcode.core.injector.annotations.component.Controller;
8+
import com.eternalcode.core.injector.annotations.component.Repository;
9+
import com.eternalcode.core.injector.annotations.component.Service;
10+
import com.eternalcode.core.injector.annotations.component.Setup;
11+
import com.eternalcode.core.injector.annotations.component.Task;
12+
import com.eternalcode.core.injector.annotations.lite.LiteArgument;
13+
import com.eternalcode.core.injector.annotations.lite.LiteCommandEditor;
14+
import com.eternalcode.core.injector.annotations.lite.LiteContextual;
15+
import com.eternalcode.core.injector.annotations.lite.LiteHandler;
516
import com.eternalcode.core.injector.bean.BeanCandidate;
617
import com.eternalcode.core.injector.bean.BeanFactory;
7-
import com.eternalcode.core.injector.bean.BeanHolder;
8-
import com.eternalcode.core.injector.bean.LazyFieldBeanCandidate;
18+
import com.eternalcode.core.injector.bean.BeanCandidatePriorityProvider;
919
import com.eternalcode.core.injector.bean.processor.BeanProcessor;
1020
import com.eternalcode.core.injector.bean.processor.BeanProcessorFactory;
1121
import com.eternalcode.core.injector.scan.DependencyScanner;
12-
import com.eternalcode.core.injector.scan.DependencyScannerFactory;
1322
import com.eternalcode.core.publish.Publisher;
1423
import com.eternalcode.core.publish.event.EternalInitializeEvent;
1524
import com.eternalcode.core.publish.event.EternalShutdownEvent;
16-
import net.dzikoysk.cdn.entity.Contextual;
25+
import dev.rollczi.litecommands.annotations.command.Command;
26+
import dev.rollczi.litecommands.annotations.command.RootCommand;
1727
import org.bukkit.Server;
1828
import org.bukkit.plugin.Plugin;
1929
import org.bukkit.plugin.PluginDescriptionFile;
2030
import org.bukkit.plugin.PluginManager;
2131

2232
import java.io.File;
23-
import java.lang.reflect.Field;
24-
import java.util.List;
2533
import java.util.logging.Logger;
2634

2735
class EternalCore {
@@ -32,6 +40,7 @@ class EternalCore {
3240
public EternalCore(Plugin plugin) {
3341
this.eternalCoreEnvironment = new EternalCoreEnvironment(plugin.getLogger());
3442

43+
CompatibilityService compatibilityService = new CompatibilityService();
3544
BeanProcessor beanProcessor = BeanProcessorFactory.defaultProcessors(plugin);
3645
BeanFactory beanFactory = new BeanFactory(beanProcessor)
3746
.withCandidateSelf()
@@ -40,19 +49,35 @@ public EternalCore(Plugin plugin) {
4049
.addCandidate(Logger.class, () -> plugin.getLogger())
4150
.addCandidate(PluginDescriptionFile.class, () -> plugin.getDescription())
4251
.addCandidate(File.class, () -> plugin.getDataFolder())
43-
.addCandidate(PluginManager.class, () -> plugin.getServer().getPluginManager());
44-
45-
DependencyInjector dependencyInjector = new DependencyInjector(beanFactory);
46-
DependencyScanner scanner = DependencyScannerFactory.createDefault(dependencyInjector);
47-
48-
beanFactory.addCandidate(DependencyInjector.class, () -> dependencyInjector);
52+
.addCandidate(PluginManager.class, () -> plugin.getServer().getPluginManager())
53+
.priorityProvider(new BeanCandidatePriorityProvider());
54+
55+
DependencyInjector injector = new DependencyInjector(beanFactory);
56+
DependencyScanner scanner = new DependencyScanner(injector)
57+
.includeType(type -> compatibilityService.isCompatible(type))
58+
.includeAnnotations(
59+
Component.class,
60+
Service.class,
61+
Repository.class,
62+
Task.class,
63+
Controller.class,
64+
ConfigurationFile.class,
65+
Setup.class,
66+
67+
Command.class,
68+
RootCommand.class,
69+
LiteArgument.class,
70+
LiteHandler.class,
71+
LiteContextual.class,
72+
LiteCommandEditor.class
73+
);
74+
75+
beanFactory.addCandidate(DependencyInjector.class, () -> injector);
4976

5077
for (BeanCandidate beanCandidate : scanner.scan(EternalCore.class.getPackage())) {
5178
beanFactory.addCandidate(beanCandidate);
5279
}
5380

54-
this.loadConfigContextual(beanFactory);
55-
5681
beanFactory.initializeCandidates();
5782

5883
this.publisher = beanFactory.getDependency(Publisher.class);
@@ -67,22 +92,4 @@ public void disable() {
6792
EternalCoreApiProvider.deinitialize();
6893
}
6994

70-
private void loadConfigContextual(BeanFactory beanFactory) {
71-
List<BeanHolder<ReloadableConfig>> beans = beanFactory
72-
.initializeCandidates(ReloadableConfig.class)
73-
.getBeans(ReloadableConfig.class);
74-
75-
for (BeanHolder<ReloadableConfig> bean : beans) {
76-
ReloadableConfig config = bean.get();
77-
78-
for (Field field : config.getClass().getDeclaredFields()) {
79-
if (!field.getType().isAnnotationPresent(Contextual.class)) {
80-
continue;
81-
}
82-
83-
beanFactory.addCandidate(new LazyFieldBeanCandidate(config, field));
84-
}
85-
}
86-
}
87-
8895
}

eternalcore-core/src/main/java/com/eternalcode/core/bridge/BridgeManagerInitializer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
package com.eternalcode.core.bridge;
22

33
import com.eternalcode.core.injector.annotations.Bean;
4-
import com.eternalcode.core.injector.annotations.component.BeanSetup;
4+
import com.eternalcode.core.injector.annotations.component.Setup;
55
import com.eternalcode.core.placeholder.PlaceholderRegistry;
66
import java.util.logging.Logger;
77
import org.bukkit.Server;
88
import org.bukkit.plugin.PluginDescriptionFile;
99

10-
@BeanSetup
10+
@Setup
1111
class BridgeManagerInitializer {
1212

1313
@Bean

eternalcore-core/src/main/java/com/eternalcode/core/bridge/adventure/AdventureSetup.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
import com.eternalcode.commons.adventure.AdventureLegacyColorPreProcessor;
55
import com.eternalcode.commons.adventure.AdventureUrlPostProcessor;
66
import com.eternalcode.core.injector.annotations.Bean;
7-
import com.eternalcode.core.injector.annotations.component.BeanSetup;
7+
import com.eternalcode.core.injector.annotations.component.Setup;
88
import net.kyori.adventure.platform.AudienceProvider;
99
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
1010
import net.kyori.adventure.text.minimessage.MiniMessage;
1111
import org.bukkit.plugin.Plugin;
1212

13-
@BeanSetup
13+
@Setup
1414
class AdventureSetup {
1515

1616
@Bean

eternalcore-core/src/main/java/com/eternalcode/core/bridge/litecommand/LiteCommandsSetup.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
package com.eternalcode.core.bridge.litecommand;
22

33
import com.eternalcode.core.injector.annotations.Bean;
4-
import com.eternalcode.core.injector.annotations.component.BeanSetup;
4+
import com.eternalcode.core.injector.annotations.component.Setup;
55
import com.eternalcode.core.injector.bean.BeanFactory;
66
import com.eternalcode.core.notice.NoticeService;
77
import com.eternalcode.core.publish.Subscribe;
8-
import com.eternalcode.core.publish.Subscriber;
98
import com.eternalcode.core.publish.event.EternalInitializeEvent;
109
import com.eternalcode.core.publish.event.EternalShutdownEvent;
1110
import dev.rollczi.litecommands.LiteCommands;
@@ -20,8 +19,8 @@
2019
import org.bukkit.command.CommandSender;
2120
import org.bukkit.plugin.Plugin;
2221

23-
@BeanSetup
24-
class LiteCommandsSetup implements Subscriber {
22+
@Setup
23+
class LiteCommandsSetup {
2524

2625
@Bean
2726
public LiteCommandsBuilder<CommandSender, ?, ?> liteCommandsBuilder(

eternalcore-core/src/main/java/com/eternalcode/core/bridge/litecommand/configurator/config/CommandConfiguration.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.eternalcode.core.configuration.ReloadableConfig;
44
import com.eternalcode.core.feature.essentials.gamemode.GameModeArgumentSettings;
5+
import com.eternalcode.core.injector.annotations.Bean;
56
import com.eternalcode.core.injector.annotations.component.ConfigurationFile;
67
import net.dzikoysk.cdn.entity.Contextual;
78
import net.dzikoysk.cdn.entity.Description;
@@ -19,6 +20,7 @@
1920
@ConfigurationFile
2021
public class CommandConfiguration implements ReloadableConfig {
2122

23+
@Bean
2224
public Argument argument = new Argument();
2325

2426
@Contextual

eternalcore-core/src/main/java/com/eternalcode/core/bridge/metrics/BStatsMetricsSetup.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
package com.eternalcode.core.bridge.metrics;
22

33
import com.eternalcode.core.injector.annotations.component.Controller;
4-
import com.eternalcode.core.publish.Subscriber;
54
import com.eternalcode.core.publish.event.EternalInitializeEvent;
65
import com.eternalcode.core.publish.Subscribe;
76
import org.bstats.bukkit.Metrics;
87
import org.bukkit.plugin.java.JavaPlugin;
98

109
@Controller
11-
class BStatsMetricsSetup implements Subscriber {
10+
class BStatsMetricsSetup {
1211

1312
@Subscribe(EternalInitializeEvent.class)
1413
public void onInitialize(JavaPlugin javaPlugin) {

eternalcore-core/src/main/java/com/eternalcode/core/bridge/skullapi/SkullAPISetup.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
package com.eternalcode.core.bridge.skullapi;
22

3-
import com.eternalcode.core.publish.Subscriber;
43
import com.eternalcode.core.publish.event.EternalShutdownEvent;
54
import com.eternalcode.core.injector.annotations.Bean;
6-
import com.eternalcode.core.injector.annotations.component.BeanSetup;
5+
import com.eternalcode.core.injector.annotations.component.Setup;
76
import com.eternalcode.core.publish.Subscribe;
87
import dev.rollczi.liteskullapi.LiteSkullFactory;
98
import dev.rollczi.liteskullapi.SkullAPI;
109
import org.bukkit.plugin.Plugin;
1110

12-
@BeanSetup
13-
class SkullAPISetup implements Subscriber {
11+
@Setup
12+
class SkullAPISetup {
1413

1514
@Bean
1615
public SkullAPI skullAPI(Plugin plugin) {
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.eternalcode.core.compatibility;
2+
3+
import java.lang.annotation.ElementType;
4+
import java.lang.annotation.Retention;
5+
import java.lang.annotation.RetentionPolicy;
6+
import java.lang.annotation.Target;
7+
8+
@Retention(RetentionPolicy.RUNTIME)
9+
@Target(ElementType.TYPE)
10+
public @interface Compatibility {
11+
12+
Version from() default @Version(minor = Integer.MIN_VALUE, patch = Integer.MIN_VALUE);
13+
14+
Version to() default @Version(minor = Integer.MAX_VALUE, patch = Integer.MAX_VALUE);
15+
16+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.eternalcode.core.compatibility;
2+
3+
import io.papermc.lib.PaperLib;
4+
5+
public class CompatibilityService {
6+
7+
public boolean isCompatible(Class<?> type) {
8+
Compatibility compatibility = type.getAnnotation(Compatibility.class);
9+
if (compatibility == null) {
10+
return true;
11+
}
12+
13+
Version from = compatibility.from();
14+
Version to = compatibility.to();
15+
16+
int minor = PaperLib.getMinecraftVersion();
17+
int patch = PaperLib.getMinecraftPatchVersion();
18+
19+
return isCompatibleFrom(from, minor, patch) && isCompatibleTo(to, minor, patch);
20+
}
21+
22+
private boolean isCompatibleTo(Version to, int minor, int patch) {
23+
return minor < to.minor() || minor == to.minor() && patch <= to.patch();
24+
}
25+
26+
private boolean isCompatibleFrom(Version from, int minor, int patch) {
27+
return minor > from.minor() || minor == from.minor() && patch >= from.patch();
28+
}
29+
30+
}
31+
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.eternalcode.core.compatibility;
2+
3+
import java.lang.annotation.ElementType;
4+
import java.lang.annotation.Retention;
5+
import java.lang.annotation.RetentionPolicy;
6+
import java.lang.annotation.Target;
7+
8+
@Retention(RetentionPolicy.RUNTIME)
9+
@Target(ElementType.FIELD)
10+
public @interface Version {
11+
12+
int minor();
13+
int patch();
14+
15+
}

0 commit comments

Comments
 (0)