mirror of
https://github.com/xHyroM/lighteco.git
synced 2024-11-21 22:41:06 +01:00
feat: add some basic managers, models, api, bukkit & common
This commit is contained in:
parent
d2e7160452
commit
7680f04391
23 changed files with 438 additions and 9 deletions
42
api/.gitignore
vendored
Normal file
42
api/.gitignore
vendored
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
.gradle
|
||||||
|
build/
|
||||||
|
!gradle/wrapper/gradle-wrapper.jar
|
||||||
|
!**/src/main/**/build/
|
||||||
|
!**/src/test/**/build/
|
||||||
|
|
||||||
|
### IntelliJ IDEA ###
|
||||||
|
.idea/modules.xml
|
||||||
|
.idea/jarRepositories.xml
|
||||||
|
.idea/compiler.xml
|
||||||
|
.idea/libraries/
|
||||||
|
*.iws
|
||||||
|
*.iml
|
||||||
|
*.ipr
|
||||||
|
out/
|
||||||
|
!**/src/main/**/out/
|
||||||
|
!**/src/test/**/out/
|
||||||
|
|
||||||
|
### Eclipse ###
|
||||||
|
.apt_generated
|
||||||
|
.classpath
|
||||||
|
.factorypath
|
||||||
|
.project
|
||||||
|
.settings
|
||||||
|
.springBeans
|
||||||
|
.sts4-cache
|
||||||
|
bin/
|
||||||
|
!**/src/main/**/bin/
|
||||||
|
!**/src/test/**/bin/
|
||||||
|
|
||||||
|
### NetBeans ###
|
||||||
|
/nbproject/private/
|
||||||
|
/nbbuild/
|
||||||
|
/dist/
|
||||||
|
/nbdist/
|
||||||
|
/.nb-gradle/
|
||||||
|
|
||||||
|
### VS Code ###
|
||||||
|
.vscode/
|
||||||
|
|
||||||
|
### Mac OS ###
|
||||||
|
.DS_Store
|
11
api/build.gradle.kts
Normal file
11
api/build.gradle.kts
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
plugins {
|
||||||
|
id("lighteco.shadow-logic")
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
compileOnly("org.projectlombok:lombok:1.18.28")
|
||||||
|
annotationProcessor("org.projectlombok:lombok:1.18.28")
|
||||||
|
|
||||||
|
compileOnly("org.checkerframework:checker-qual:3.8.0")
|
||||||
|
compileOnly("org.jetbrains:annotations:20.1.0")
|
||||||
|
}
|
20
api/src/main/java/dev/xhyrom/lighteco/api/LightEco.java
Normal file
20
api/src/main/java/dev/xhyrom/lighteco/api/LightEco.java
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
package dev.xhyrom.lighteco.api;
|
||||||
|
|
||||||
|
import dev.xhyrom.lighteco.api.managers.UserManager;
|
||||||
|
import dev.xhyrom.lighteco.api.platform.Platform;
|
||||||
|
import dev.xhyrom.lighteco.api.platform.PlayerAdapter;
|
||||||
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
|
public interface LightEco {
|
||||||
|
/**
|
||||||
|
* Gets the {@link Platform}, which represents the current platform the
|
||||||
|
* plugin is running on.
|
||||||
|
*
|
||||||
|
* @return the platform
|
||||||
|
*/
|
||||||
|
@NonNull Platform getPlatform();
|
||||||
|
|
||||||
|
@NonNull UserManager getUserManager();
|
||||||
|
|
||||||
|
<T> @NonNull PlayerAdapter<T> getPlayerAdapter(@NonNull Class<T> playerClass);
|
||||||
|
}
|
|
@ -0,0 +1,35 @@
|
||||||
|
package dev.xhyrom.lighteco.api;
|
||||||
|
|
||||||
|
import lombok.experimental.UtilityClass;
|
||||||
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
|
import static org.jetbrains.annotations.ApiStatus.Internal;
|
||||||
|
|
||||||
|
@UtilityClass
|
||||||
|
public final class LightEcoProvider {
|
||||||
|
private static LightEco instance;
|
||||||
|
|
||||||
|
public static @NonNull LightEco get() {
|
||||||
|
LightEco instance = LightEcoProvider.instance;
|
||||||
|
if (instance == null) {
|
||||||
|
throw new NotLoadedException();
|
||||||
|
};
|
||||||
|
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Internal
|
||||||
|
public static void set(LightEco instance) {
|
||||||
|
if (LightEcoProvider.instance != null) {
|
||||||
|
throw new IllegalStateException("LightEco is already loaded!");
|
||||||
|
};
|
||||||
|
|
||||||
|
LightEcoProvider.instance = instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final class NotLoadedException extends IllegalStateException {
|
||||||
|
private NotLoadedException() {
|
||||||
|
super("LightEco is not loaded yet!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
package dev.xhyrom.lighteco.api.managers;
|
||||||
|
|
||||||
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public interface ContextManager<T> {
|
||||||
|
@NonNull UUID getPlayerUniqueId(@NonNull T context);
|
||||||
|
@NonNull Class<?> getPlayerClass();
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
package dev.xhyrom.lighteco.api.managers;
|
||||||
|
|
||||||
|
import dev.xhyrom.lighteco.api.model.user.User;
|
||||||
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
|
public interface UserManager {
|
||||||
|
@NonNull CompletableFuture<User> loadUser(@NonNull UUID uniqueId);
|
||||||
|
|
||||||
|
@NonNull CompletableFuture<Void> saveUser(@NonNull User user);
|
||||||
|
|
||||||
|
@Nullable User getUser(@NonNull UUID uniqueId);
|
||||||
|
|
||||||
|
boolean isLoaded(@NonNull UUID uniqueId);
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
package dev.xhyrom.lighteco.api.model.user;
|
||||||
|
|
||||||
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public interface User {
|
||||||
|
/**
|
||||||
|
* Get the unique id of this user.
|
||||||
|
*
|
||||||
|
* @return the unique id
|
||||||
|
*/
|
||||||
|
@NonNull UUID getUniqueId();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the username of this user.
|
||||||
|
*
|
||||||
|
* @return the username
|
||||||
|
*/
|
||||||
|
@NonNull String getUsername();
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
package dev.xhyrom.lighteco.api.platform;
|
||||||
|
|
||||||
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
|
public interface Platform {
|
||||||
|
@NonNull Type getType();
|
||||||
|
|
||||||
|
enum Type {
|
||||||
|
BUKKIT("Bukkit"),
|
||||||
|
VELOCITY("Velocity"),
|
||||||
|
BUNGEECORD("BungeeCord");
|
||||||
|
|
||||||
|
private final String displayName;
|
||||||
|
|
||||||
|
Type(String displayName) {
|
||||||
|
this.displayName = displayName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return displayName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
package dev.xhyrom.lighteco.api.platform;
|
||||||
|
|
||||||
|
import dev.xhyrom.lighteco.api.model.user.User;
|
||||||
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
|
public interface PlayerAdapter<T> {
|
||||||
|
@NonNull CompletableFuture<User> getUser(@NonNull T player);
|
||||||
|
}
|
|
@ -4,7 +4,7 @@ plugins {
|
||||||
}
|
}
|
||||||
|
|
||||||
java {
|
java {
|
||||||
toolchain.languageVersion.set(JavaLanguageVersion.of(17))
|
// toolchain.languageVersion.set(JavaLanguageVersion.of(17))
|
||||||
withSourcesJar()
|
withSourcesJar()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,5 +7,13 @@ repositories {
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation(project(":lighteco-common"))
|
||||||
|
|
||||||
compileOnly("io.papermc.paper:paper-api:1.20.1-R0.1-SNAPSHOT")
|
compileOnly("io.papermc.paper:paper-api:1.20.1-R0.1-SNAPSHOT")
|
||||||
|
|
||||||
|
compileOnly("org.projectlombok:lombok:1.18.28")
|
||||||
|
annotationProcessor("org.projectlombok:lombok:1.18.28")
|
||||||
|
|
||||||
|
compileOnly("org.checkerframework:checker-qual:3.8.0")
|
||||||
|
compileOnly("org.jetbrains:annotations:20.1.0")
|
||||||
}
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
package dev.xhyrom.lighteco.bukkit;
|
||||||
|
|
||||||
|
import dev.xhyrom.lighteco.api.managers.ContextManager;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public class BukkitContextManager implements ContextManager<Player> {
|
||||||
|
@Override
|
||||||
|
public @NonNull UUID getPlayerUniqueId(@NonNull Player player) {
|
||||||
|
return player.getUniqueId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NonNull Class<?> getPlayerClass() {
|
||||||
|
return Player.class;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,34 @@
|
||||||
package dev.xhyrom.lighteco.bukkit;
|
package dev.xhyrom.lighteco.bukkit;
|
||||||
|
|
||||||
public class BukkitLightEcoPlugin extends JavaPlugin {
|
import dev.xhyrom.lighteco.api.managers.ContextManager;
|
||||||
|
import dev.xhyrom.lighteco.api.managers.UserManager;
|
||||||
|
import dev.xhyrom.lighteco.api.platform.Platform;
|
||||||
|
import dev.xhyrom.lighteco.common.LightEcoPlugin;
|
||||||
|
import dev.xhyrom.lighteco.common.managers.StandardUserManager;
|
||||||
|
import lombok.Getter;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
|
public class BukkitLightEcoPlugin extends JavaPlugin implements LightEcoPlugin {
|
||||||
|
@Getter
|
||||||
|
private UserManager userManager;
|
||||||
|
@Getter
|
||||||
|
private ContextManager<Player> contextManager;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoad() {
|
||||||
|
this.userManager = new StandardUserManager(this);
|
||||||
|
this.contextManager = new BukkitContextManager();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onEnable() {
|
||||||
|
getLogger().info("BukkitLightEco is enabled!");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Platform.@NonNull Type getPlatformType() {
|
||||||
|
return Platform.Type.BUKKIT;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
9
bukkit/src/main/resources/plugin.yml
Normal file
9
bukkit/src/main/resources/plugin.yml
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
name: ${name}
|
||||||
|
description: ${description}
|
||||||
|
version: ${version}
|
||||||
|
main: dev.xhyrom.lighteco.bukkit.BukkitLightEcoPlugin
|
||||||
|
author: ${author}
|
||||||
|
api-version: 1.20
|
||||||
|
|
||||||
|
softdepend:
|
||||||
|
- Vault
|
|
@ -1,3 +1,13 @@
|
||||||
plugins {
|
plugins {
|
||||||
id("lighteco.shadow-logic")
|
id("lighteco.shadow-logic")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
api(project(":lighteco-api"))
|
||||||
|
|
||||||
|
compileOnly("org.projectlombok:lombok:1.18.28")
|
||||||
|
annotationProcessor("org.projectlombok:lombok:1.18.28")
|
||||||
|
|
||||||
|
compileOnly("org.checkerframework:checker-qual:3.8.0")
|
||||||
|
compileOnly("org.jetbrains:annotations:20.1.0")
|
||||||
|
}
|
|
@ -1,7 +0,0 @@
|
||||||
package dev.xhyrom;
|
|
||||||
|
|
||||||
public class Main {
|
|
||||||
public static void main(String[] args) {
|
|
||||||
System.out.println("Hello world!");
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
package dev.xhyrom.lighteco.common;
|
||||||
|
|
||||||
|
import dev.xhyrom.lighteco.api.managers.ContextManager;
|
||||||
|
import dev.xhyrom.lighteco.api.managers.UserManager;
|
||||||
|
import dev.xhyrom.lighteco.api.platform.Platform;
|
||||||
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
|
public interface LightEcoPlugin {
|
||||||
|
Platform.@NonNull Type getPlatformType();
|
||||||
|
|
||||||
|
@NonNull UserManager getUserManager();
|
||||||
|
@NonNull ContextManager<?> getContextManager();
|
||||||
|
}
|
|
@ -0,0 +1,45 @@
|
||||||
|
package dev.xhyrom.lighteco.common.api;
|
||||||
|
|
||||||
|
import dev.xhyrom.lighteco.api.LightEco;
|
||||||
|
import dev.xhyrom.lighteco.api.managers.UserManager;
|
||||||
|
import dev.xhyrom.lighteco.api.platform.Platform;
|
||||||
|
import dev.xhyrom.lighteco.api.platform.PlayerAdapter;
|
||||||
|
import dev.xhyrom.lighteco.common.LightEcoPlugin;
|
||||||
|
import dev.xhyrom.lighteco.common.api.impl.ApiPlatform;
|
||||||
|
import dev.xhyrom.lighteco.common.api.impl.ApiPlayerAdapter;
|
||||||
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
|
public class LightEcoApi implements LightEco {
|
||||||
|
private final LightEcoPlugin plugin;
|
||||||
|
|
||||||
|
private final Platform platform;
|
||||||
|
private final PlayerAdapter<?> playerAdapter;
|
||||||
|
|
||||||
|
public LightEcoApi(LightEcoPlugin plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
|
||||||
|
this.platform = new ApiPlatform(plugin);
|
||||||
|
this.playerAdapter = new ApiPlayerAdapter<>(plugin.getUserManager(), plugin.getContextManager());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NonNull Platform getPlatform() {
|
||||||
|
return this.platform;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NonNull UserManager getUserManager() {
|
||||||
|
return this.plugin.getUserManager();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NonNull <T> PlayerAdapter<T> getPlayerAdapter(@NonNull Class<T> playerClass) {
|
||||||
|
Class<?> expected = this.plugin.getContextManager().getPlayerClass();
|
||||||
|
|
||||||
|
if (!expected.equals(playerClass)) {
|
||||||
|
throw new IllegalArgumentException("Expected player class " + expected.getName() + ", got " + playerClass.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
return (PlayerAdapter<T>) this.playerAdapter;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
package dev.xhyrom.lighteco.common.api.impl;
|
||||||
|
|
||||||
|
import dev.xhyrom.lighteco.api.platform.Platform;
|
||||||
|
import dev.xhyrom.lighteco.common.LightEcoPlugin;
|
||||||
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
|
public class ApiPlatform implements Platform {
|
||||||
|
private final LightEcoPlugin plugin;
|
||||||
|
|
||||||
|
public ApiPlatform(LightEcoPlugin plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NonNull Type getType() {
|
||||||
|
return this.plugin.getPlatformType();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
package dev.xhyrom.lighteco.common.api.impl;
|
||||||
|
|
||||||
|
import dev.xhyrom.lighteco.api.managers.ContextManager;
|
||||||
|
import dev.xhyrom.lighteco.api.model.user.User;
|
||||||
|
import dev.xhyrom.lighteco.api.managers.UserManager;
|
||||||
|
import dev.xhyrom.lighteco.api.platform.PlayerAdapter;
|
||||||
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
|
public class ApiPlayerAdapter<T> implements PlayerAdapter<T> {
|
||||||
|
private final UserManager userManager;
|
||||||
|
private final ContextManager<T> contextManager;
|
||||||
|
|
||||||
|
public ApiPlayerAdapter(UserManager userManager, ContextManager<T> contextManager) {
|
||||||
|
this.userManager = userManager;
|
||||||
|
this.contextManager = contextManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NonNull CompletableFuture<User> getUser(@NonNull T player) {
|
||||||
|
UUID uniqueId = contextManager.getPlayerUniqueId(player);
|
||||||
|
boolean loaded = userManager.isLoaded(uniqueId);
|
||||||
|
|
||||||
|
if (loaded) {
|
||||||
|
return CompletableFuture.completedFuture(userManager.getUser(uniqueId));
|
||||||
|
}
|
||||||
|
|
||||||
|
return userManager.loadUser(uniqueId);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
package dev.xhyrom.lighteco.common.managers;
|
||||||
|
|
||||||
|
import dev.xhyrom.lighteco.api.model.user.User;
|
||||||
|
import dev.xhyrom.lighteco.api.managers.UserManager;
|
||||||
|
import dev.xhyrom.lighteco.common.LightEcoPlugin;
|
||||||
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
|
public class StandardUserManager implements UserManager {
|
||||||
|
private final LightEcoPlugin plugin;
|
||||||
|
|
||||||
|
public StandardUserManager(LightEcoPlugin plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
public User apply(UUID uniqueId) {
|
||||||
|
return new dev.xhyrom.lighteco.common.model.user.User(uniqueId);
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public @NonNull CompletableFuture<User> loadUser(@NonNull UUID uniqueId) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NonNull CompletableFuture<Void> saveUser(User user) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable User getUser(@NonNull UUID uniqueId) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isLoaded(@NonNull UUID uniqueId) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
package dev.xhyrom.lighteco.common.model.user;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public class User implements dev.xhyrom.lighteco.api.model.user.User {
|
||||||
|
@Getter
|
||||||
|
private final UUID uniqueId;
|
||||||
|
|
||||||
|
public User(UUID uniqueId) {
|
||||||
|
this.uniqueId = uniqueId;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NonNull String getUsername() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
rootProject.name = "lighteco-parent"
|
rootProject.name = "lighteco-parent"
|
||||||
|
|
||||||
sequenceOf(
|
sequenceOf(
|
||||||
|
"api",
|
||||||
"common",
|
"common",
|
||||||
"bukkit",
|
"bukkit",
|
||||||
"velocity"
|
"velocity"
|
||||||
|
|
Loading…
Reference in a new issue