Skip to content

Commit 2ed9208

Browse files
authored
Merge pull request #303 from DecentSoftware-eu/improvement/283-Reworking-the-NMS-implementation
2 parents 8bee6d6 + 9ace74d commit 2ed9208

File tree

624 files changed

+31666
-442
lines changed

Some content is hidden

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

624 files changed

+31666
-442
lines changed

build.gradle

Lines changed: 20 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,29 @@
1-
plugins {
2-
id "java"
3-
id "maven-publish"
4-
id "com.github.johnrengelman.shadow" version "8.1.1"
5-
}
1+
subprojects {
2+
apply plugin: "java"
63

7-
group = "eu.decentsoftware.holograms"
8-
version = "2.8.17"
9-
description = "A lightweight yet very powerful hologram plugin with many features and configuration options."
4+
group = 'eu.decentsoftware.holograms'
105

11-
repositories {
12-
mavenCentral()
13-
maven { url = "https://oss.sonatype.org/content/repositories/snapshots" }
14-
maven { url = "https://repo.codemc.io/repository/nms/" }
15-
maven { url = "https://repo.codemc.io/repository/maven-public/" }
16-
maven { url = "https://repo.extendedclip.com/content/repositories/placeholderapi/" }
17-
}
18-
19-
dependencies {
20-
compileOnly "org.spigotmc:spigot:1.13-R0.1-SNAPSHOT"
21-
compileOnly "me.clip:placeholderapi:2.11.6"
22-
compileOnly "com.arcaniax:HeadDatabase-API:1.3.2"
23-
24-
implementation "org.bstats:bstats-bukkit:3.1.0"
25-
implementation "de.tr7zw:item-nbt-api:2.15.0"
26-
implementation "com.github.cryptomorin:XSeries:13.0.0"
27-
28-
compileOnly "org.projectlombok:lombok:1.18.36"
29-
annotationProcessor "org.projectlombok:lombok:1.18.36"
30-
compileOnly "org.jetbrains:annotations:26.0.2"
31-
annotationProcessor "org.jetbrains:annotations:26.0.2"
32-
}
33-
34-
java {
35-
withJavadocJar()
36-
withSourcesJar()
37-
toolchain {
38-
languageVersion = JavaLanguageVersion.of(8)
6+
repositories {
7+
mavenCentral()
8+
maven { url = "https://repo.codemc.io/repository/nms/" }
399
}
40-
}
41-
42-
compileJava {
43-
sourceCompatibility = JavaVersion.VERSION_1_8
44-
targetCompatibility = JavaVersion.VERSION_1_8
45-
options.encoding = "UTF-8"
46-
}
4710

48-
processResources {
49-
def props = [version: project.version, description: project.description]
50-
inputs.properties(props)
51-
filteringCharset = "UTF-8"
52-
filesMatching("plugin.yml") {
53-
expand(props)
11+
dependencies {
12+
if (!project.path.endsWith(":shared")) {
13+
implementation project(":shared")
14+
}
5415
}
55-
}
56-
57-
shadowJar {
58-
archiveClassifier.set("")
59-
60-
relocate "org.bstats", "eu.decentsoftware.holograms.metrics"
61-
relocate "de.tr7zw.changeme.nbtapi", "eu.decentsoftware.holograms.libs.nbtapi"
62-
relocate "com.cryptomorin.xseries", "eu.decentsoftware.holograms.libs.xseries"
63-
}
6416

65-
publishing {
66-
publications {
67-
create("shadow", MavenPublication) {
68-
from(components["java"] as SoftwareComponent)
69-
artifactId = "decentholograms"
17+
java {
18+
withSourcesJar()
19+
toolchain {
20+
languageVersion = JavaLanguageVersion.of(8)
7021
}
7122
}
23+
24+
compileJava {
25+
sourceCompatibility = JavaVersion.VERSION_1_8
26+
targetCompatibility = JavaVersion.VERSION_1_8
27+
options.encoding = "UTF-8"
28+
}
7229
}

gradle.properties

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Gradle options
2+
org.gradle.daemon=true
3+
org.gradle.jvmargs=-Xmx512M
4+
org.gradle.parallel=true
5+
org.gradle.caching=true

gradle/libs.versions.toml

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
[versions]
2+
spigot = "1.13-R0.1-SNAPSHOT"
3+
placeholderapi = "2.11.6"
4+
headdatabase-api = "1.3.2"
5+
bstats = "3.1.0"
6+
item-nbt-api = "2.14.1"
7+
xseries = "13.0.0"
8+
lombok = "1.18.36"
9+
annotations = "26.0.2"
10+
# Test
11+
junit = "5.12.0"
12+
junit-platform-launcher = "1.12.0"
13+
mockito = "4.11.0" # Has to be 4.x for Java 8 compatibility
14+
# Plugins
15+
shadow = "8.3.6"
16+
17+
[libraries]
18+
spigot = { module = "org.spigotmc:spigot", version.ref = "spigot" }
19+
placeholderapi = { module = "me.clip:placeholderapi", version.ref = "placeholderapi" }
20+
headdatabase-api = { module = "com.arcaniax:HeadDatabase-API", version.ref = "headdatabase-api" }
21+
bstats-bukkit = { module = "org.bstats:bstats-bukkit", version.ref = "bstats" }
22+
item-nbt-api = { module = "de.tr7zw:item-nbt-api", version.ref = "item-nbt-api" }
23+
xseries = { module = "com.github.cryptomorin:XSeries", version.ref = "xseries" }
24+
lombok = { module = "org.projectlombok:lombok", version.ref = "lombok" }
25+
annotations = { module = "org.jetbrains:annotations", version.ref = "annotations" }
26+
# Test
27+
junit-jupiter-api = { module = "org.junit.jupiter:junit-jupiter-api", version.ref = "junit" }
28+
junit-jupiter-params = { module = "org.junit.jupiter:junit-jupiter-params", version.ref = "junit" }
29+
junit-jupiter-engine = { module = "org.junit.jupiter:junit-jupiter-engine", version.ref = "junit" }
30+
junit-platform-launcher = { module = "org.junit.platform:junit-platform-launcher", version.ref = "junit-platform-launcher" }
31+
mockito-core = { module = "org.mockito:mockito-core", version.ref = "mockito" }
32+
mockito-inline = { module = "org.mockito:mockito-inline", version.ref = "mockito" }
33+
mockito-junit-jupiter = { module = "org.mockito:mockito-junit-jupiter", version.ref = "mockito" }
34+
35+
[plugins]
36+
shadow = { id = "com.gradleup.shadow", version.ref = "shadow" }

gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12.1-bin.zip
44
networkTimeout=10000
55
validateDistributionUrl=true
66
zipStoreBase=GRADLE_USER_HOME

nms/build.gradle

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
subprojects {
2+
dependencies {
3+
if (!project.path.endsWith(":nms-common")) {
4+
implementation project(":nms:nms-common")
5+
}
6+
}
7+
}
8+
9+
dependencies {
10+
childProjects.values().collect { child ->
11+
implementation files("$rootDir/nms/${child.project.name}/build/libs/${child.project.name}.jar")
12+
}
13+
}
14+
15+
compileJava {
16+
dependsOn childProjects.values().collect { child ->
17+
child.tasks.named("jar")
18+
}
19+
}
20+
21+
sourceSets {
22+
main {
23+
java {
24+
setSrcDirs([])
25+
}
26+
resources {
27+
setSrcDirs([])
28+
}
29+
}
30+
test {
31+
java {
32+
setSrcDirs([])
33+
}
34+
resources {
35+
setSrcDirs([])
36+
}
37+
}
38+
}

nms/nms-common/build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
dependencies {
2+
compileOnly(libs.spigot)
3+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package eu.decentsoftware.holograms.nms.api;
2+
3+
import eu.decentsoftware.holograms.shared.DecentHologramsException;
4+
5+
/**
6+
* An exception that may be thrown by an NMS implementation.
7+
*
8+
* @author d0by
9+
* @since 2.9.0
10+
*/
11+
public class DecentHologramsNmsException extends DecentHologramsException {
12+
public DecentHologramsNmsException(String message) {
13+
super(message);
14+
}
15+
16+
public DecentHologramsNmsException(String message, Throwable cause) {
17+
super(message, cause);
18+
}
19+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package eu.decentsoftware.holograms.nms.api;
2+
3+
import eu.decentsoftware.holograms.nms.api.renderer.NmsHologramRendererFactory;
4+
import org.bukkit.entity.Player;
5+
6+
/**
7+
* This class serves as the main access-point to an NMS implementation.
8+
*
9+
* @author d0by
10+
* @since 2.9.0
11+
*/
12+
public interface NmsAdapter {
13+
14+
/**
15+
* Get the factory for creating hologram renderers.
16+
*
17+
* @return An instance of {@link NmsHologramRendererFactory}.
18+
*/
19+
NmsHologramRendererFactory getHologramComponentFactory();
20+
21+
/**
22+
* Register a packet listener for a player.
23+
*
24+
* <p>A player can only have a single listener registered.</p>
25+
*
26+
* @param player The player to register the listener for.
27+
* @param listener The listener to register.
28+
*/
29+
void registerPacketListener(Player player, NmsPacketListener listener);
30+
31+
/**
32+
* Unregister a packet listener for a player.
33+
*
34+
* <p>If there is not registered listener for the given player, nothing will happen.</p>
35+
*
36+
* @param player The player to unregister the listener for.
37+
*/
38+
void unregisterPacketListener(Player player);
39+
40+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package eu.decentsoftware.holograms.nms.api;
2+
3+
import eu.decentsoftware.holograms.shared.DecentPosition;
4+
5+
import java.util.function.Supplier;
6+
7+
/**
8+
* A class that holds the data for a hologram part.
9+
*
10+
* @param <T> the type of content in the hologram part
11+
* @author d0by
12+
* @since 2.9.0
13+
*/
14+
public class NmsHologramPartData<T> {
15+
16+
private final Supplier<DecentPosition> positionSupplier;
17+
private final Supplier<T> contentSupplier;
18+
19+
/**
20+
* Constructs a new NmsHologramPartData object.
21+
*
22+
* @param positionSupplier a supplier that provides the position of the hologram part
23+
* @param contentSupplier a supplier that provides the content of the hologram part
24+
*/
25+
public NmsHologramPartData(Supplier<DecentPosition> positionSupplier, Supplier<T> contentSupplier) {
26+
this.positionSupplier = positionSupplier;
27+
this.contentSupplier = contentSupplier;
28+
}
29+
30+
/**
31+
* Gets the position of the hologram part.
32+
*
33+
* @return the position of the hologram part
34+
*/
35+
public DecentPosition getPosition() {
36+
return positionSupplier.get();
37+
}
38+
39+
/**
40+
* Gets the content of the hologram part.
41+
*
42+
* @return the content of the hologram part
43+
*/
44+
public T getContent() {
45+
return contentSupplier.get();
46+
}
47+
48+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package eu.decentsoftware.holograms.nms.api;
2+
3+
import eu.decentsoftware.holograms.nms.api.event.NmsEntityInteractEvent;
4+
5+
/**
6+
* Represents a listener used for handling NMS-related events.
7+
*
8+
* @author d0by
9+
* @since 2.9.0
10+
*/
11+
public interface NmsPacketListener {
12+
13+
/**
14+
* Invoked when a player interacts with an entity.
15+
*
16+
* @param event The event.
17+
* @see NmsEntityInteractEvent
18+
*/
19+
void onEntityInteract(NmsEntityInteractEvent event);
20+
21+
}

0 commit comments

Comments
 (0)