Die SkySlayer Core unterstützt uns bei der Entwicklung von Funktionen und Features für den Server. Darüber hinaus ermöglicht sie die Anbindung an SQL- und Redisson-Datenbanken.
Die SkySlayer Core bietet eine Sammlung modularer Bibliotheken zur Unterstützung bei der Entwicklung von Server-Funktionen und -Features. Sie umfasst:
- api-velocity: Ermöglicht die Integration und Entwicklung von Funktionen für das Velocity-Proxysystem.
- api-spigot: Bietet Werkzeuge zur Umsetzung von Features für Spigot-Server.
- api-common: (Java Application): Stellt allgemeine, plattformübergreifende Funktionen für Java-Anwendungen zur Verfügung.
Diese Module erleichtern die Implementierung und Wartung von Server-Funktionen, unterstützen die Anbindung an SQL- und Redisson-Datenbanken und bieten eine flexible Grundlage für die Entwicklung auf verschiedenen Plattformen.
- Java 21
- Gradle
- MySQL (für die Verbindung mit dem SQL Server)
- Redisson (für die Verbindung mit Redisson)
Um einen Entity/Profile Service zu erstellen, mit dem Daten in einer SQL-Datenbank gespeichert werden können, stehen dir die Optionen GlobalEntityService, LocalEntityService und TemporaryEntityService zur Verfügung. Die drei Implementierungen unterscheiden sich wie folgt:
Die Daten, die aus der SQL-Datenbank geladen werden, werden im GlobalEntityService in einem Redisson Cache abgelegt. Dieser Cache dient hauptsächlich dem Austausch von Daten zwischen Velocity, Discord und Spigot. Die Nutzung konzentriert sich vor allem auf Profile, die mindestens auf Velocity und Spigot verwendet werden.
Daten, die aus der SQL-Datenbank im LocalEntityService geladen werden, werden in eine HashMap der direkten Java-Instanz abgelegt. Dies wird für Profile genutzt, die ausschließlich auf dieser Instanz laufen und nicht auf anderen benötigt werden.
Daten, die aus der SQL-Datenbank im TemporaryEntityService geladen werden, gelangen in einen Guava Cache (Google). Dabei kann individuell festgelegt werden, wie lange die Daten im Cache verbleiben sollen. Dieser Service wird hauptsächlich dort verwendet, wo die Daten nicht regelmäßig von Spielern benötigt werden.
/** Laden von einem Entity/Profile **/
/** Synchrone (Return Wert: EntityClass)**/
plugin.getExampleService().
loadEntity(uniqueId);
/** Asynchrone (Return Wert: CompletableFuture<EntityClass>)**/
plugin.
getExampleService().
loadEntityAsync(uniqueId);
/** Speichern von einem Entity/Profile (Der 2. Parameter muss der Key sein, muss aber keine UUID sein.)**/
/** Die Datenspeicherung wird immer automatisch Asynchrone ausgeführt **/
plugin.
getExampleService().
saveEntity(exampleEntity, exampleEntity.getUniqueId());
/** Erhalte ein Entity/Profile (Der 2. Parameter ist Optional für den Retriever [siehe unten])**/
/** Synchrone (Return Wert: EntityClass)**/
plugin.
getExampleService().
getEntity(uniqueId, null);
/** Asynchrone (Return Wert: CompletableFuture<EntityClass>)**/
plugin.
getExampleService().
getEntityAsync(uniqueId, null);