Skip to content

Commit 6c42ee0

Browse files
committed
Lot of changes
- published to Maven central - refactored package to beer.devs - the lib can now be included in the `plugin.yml` file of your plugin
1 parent a9da297 commit 6c42ee0

File tree

113 files changed

+6684
-2869
lines changed

Some content is hidden

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

113 files changed

+6684
-2869
lines changed

.gitignore

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -110,21 +110,22 @@ buildNumber.properties
110110
# Common working directory
111111
run/
112112

113-
# These files are automatically generated, no need to include them in the versioning.
114-
# Do not ignore fastnbt_nms_v1_17_R1 as it's the template.
115-
/fastnbt_nms_v1_18_R2/src/
116-
/fastnbt_nms_v1_19_R1/src/
117-
/fastnbt_nms_v1_19_R2/src/
118-
/fastnbt_nms_v1_19_R3/src/
119-
/fastnbt_nms_v1_20_R1/src/
120-
/fastnbt_nms_v1_20_R2/src/
121-
/fastnbt_nms_v1_20_R3/src/
122-
# Do not ignore NbtIo_v1_20_R3 as it has some changes in the NbtIo class.
123-
!/fastnbt_nms_v1_20_R3/src/NbtIo_v1_20_R3.java
124-
125-
126113
# Other
127114
/.paper-nms/
128115
/.cache/
129116
target/
130-
/output/
117+
/output/
118+
119+
120+
# Ignore automatically generated contents
121+
/fastnbt_nms_v1_21_4_mojangmap/src/main/java/beer/
122+
/fastnbt_nms_v1_21_4_spigotmap/src/main/java/beer/
123+
124+
/fastnbt_nms_v1_21_3_mojangmap/src/main/java/beer/
125+
/fastnbt_nms_v1_21_3_spigotmap/src/main/java/beer/
126+
127+
/fastnbt_nms_v1_21_1_mojangmap/src/main/java/beer/
128+
/fastnbt_nms_v1_21_1_spigotmap/src/main/java/beer/
129+
130+
/fastnbt_nms_v1_20_6_mojangmap/src/main/java/beer/
131+
/fastnbt_nms_v1_20_6_spigotmap/src/main/java/beer/

.mvn-exec/GenerateNms.js

Lines changed: 74 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,88 @@
11
const fs = require('fs');
2+
const path = require('path');
23

3-
const BASE_MODULE_NAME = "v1_17_R1";
4+
const args = process.argv.slice(2);
5+
if (args.length === 0) {
6+
console.error("Usage: node script.js <nmsFolder>");
7+
process.exit(1);
8+
}
49

5-
function handle(name, prevVersion, newVersion)
6-
{
7-
let content = fs.readFileSync(`./fastnbt_nms_${prevVersion}/src/main/java/dev/lone/fastnbt/nms/nbt/${name}_${prevVersion}.java`).toString();
8-
content = content.replaceAll(prevVersion, newVersion)
10+
const nmsFolder = args[0];
11+
const srcFolder = path.join(nmsFolder, "src/");
912

10-
try {
11-
let dir = `./fastnbt_nms_${newVersion}/src/main/java/dev/lone/fastnbt/nms/nbt/`
12-
let path = `${dir}${name}_${newVersion}.java`;
13-
if (!fs.existsSync(dir)){
14-
fs.mkdirSync(dir, { recursive: true });
15-
}
16-
// Remove read-only from file if exists.
17-
if(fs.existsSync(path)) {
18-
fs.chmodSync(path, "666");
19-
}
20-
fs.writeFileSync(path, content, 'utf8');
21-
// Set file read-only
22-
fs.chmodSync(path, "444");
23-
}
24-
catch (e) {
25-
console.error(e);
26-
}
13+
if (!fs.existsSync(srcFolder)) {
14+
console.error(`Error: Source folder '${srcFolder}' does not exist.`);
15+
process.exit(1);
2716
}
2817

29-
function handleGroup(newVersion){
30-
if(newVersion === "v1_20_R4") // Total shit
31-
return;
18+
const mojangmapFolder = `${nmsFolder}_mojangmap`;
19+
const spigotmapFolder = `${nmsFolder}_spigotmap`;
20+
21+
function handleRecursiveFiles(srcFolder, callback) {
22+
fs.readdir(srcFolder, (err, files) => {
23+
if (err) {
24+
console.error(`Error reading directory '${srcFolder}':`, err);
25+
return;
26+
}
27+
28+
files.forEach(file => {
29+
const srcFile = path.join(srcFolder, file);
3230

33-
console.log(`Generating NMS for ${newVersion}`)
34-
handle("CompoundTag", "v1_17_R1", newVersion)
35-
handle("CraftItemStack", "v1_17_R1", newVersion)
36-
handle("ListTag", "v1_17_R1", newVersion)
31+
fs.lstat(srcFile, (err, stats) => {
32+
if (err) {
33+
console.error(`Error reading file/directory '${srcFile}':`, err);
34+
return;
35+
}
3736

38-
// Because it has some changes in NbtIo methods signature and I can't auto generate.
39-
if(newVersion !== "v1_20_R3")
40-
handle("NbtIo", "v1_17_R1", newVersion)
37+
if (stats.isDirectory()) {
38+
// Recursively process subdirectory
39+
handleRecursiveFiles(srcFile, callback);
40+
} else if (stats.isFile()) {
41+
// Process the file
42+
fs.readFile(srcFile, 'utf8', (err, data) => {
43+
if (err) {
44+
console.error(`Error reading file '${srcFile}':`, err);
45+
return;
46+
}
47+
48+
callback(data, srcFile);
49+
});
50+
}
51+
});
52+
});
53+
});
4154
}
4255

43-
const lines = fs.readFileSync('./pom.xml').toString().split("\n");
44-
for (let i in lines) {
45-
let line = lines[i]
46-
if(line.includes("<module>")) {
47-
const regex = new RegExp('<module>fastnbt_nms_(.*R[0-9])<', 'gm')
48-
const matches = regex.exec(line);
49-
if(!matches || matches.length < 2) {
50-
continue;
51-
}
56+
handleRecursiveFiles(srcFolder, (data, file) => {
57+
console.log(`Processing file: ${file}`);
58+
59+
if (!fs.lstatSync(file).isFile()) {
60+
console.log(`Skipping directory: ${file}`);
61+
return;
62+
}
5263

53-
if(matches[1] === BASE_MODULE_NAME) {
54-
continue;
64+
fs.readFile(file, 'utf8', (err, data) => {
65+
if (err) {
66+
console.error(`Error reading file ${file}:`, err);
67+
return;
5568
}
5669

57-
handleGroup(matches[1])
70+
copyFileToFolder(data.replaceAll("nbt.impl", 'nbt.impl_mojangmap'), file.replaceAll(nmsFolder, mojangmapFolder).replaceAll("impl", 'impl_mojangmap'));
71+
copyFileToFolder(data.replaceAll("nbt.impl", 'nbt.impl_spigotmap'), file.replaceAll(nmsFolder, spigotmapFolder).replaceAll("impl", 'impl_spigotmap'));
72+
});
73+
});
74+
75+
function copyFileToFolder(data, destinationFile) {
76+
const destinationFolder = path.dirname(destinationFile);
77+
if (!fs.existsSync(destinationFolder)) {
78+
fs.mkdirSync(destinationFolder, { recursive: true });
5879
}
59-
}
80+
81+
fs.writeFile(destinationFile, data, (err) => {
82+
if (err) {
83+
console.error(`Error writing file ${destinationFile}:`, err);
84+
return;
85+
}
86+
console.log(`File copied to: ${destinationFile}`);
87+
});
88+
}

FastNbt-core/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
55
<parent>
66
<artifactId>FastNbt</artifactId>
7-
<groupId>dev.lone</groupId>
8-
<version>1.3.6</version>
7+
<groupId>beer.devs</groupId>
8+
<version>1.4.1</version>
99
</parent>
1010
<modelVersion>4.0.0</modelVersion>
1111

FastNbt-core/src/main/java/dev/lone/fastnbt/Metrics.java renamed to FastNbt-core/src/main/java/beer/devs/fastnbt/Metrics.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package dev.lone.fastnbt;
1+
package beer.devs.fastnbt;
22

33
import com.google.gson.JsonArray;
44
import com.google.gson.JsonObject;
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package beer.devs.fastnbt.nms;
2+
3+
import org.jetbrains.annotations.NotNull;
4+
5+
import java.util.logging.Level;
6+
import java.util.logging.LogRecord;
7+
import java.util.logging.Logger;
8+
9+
public class FastNbtLogger
10+
{
11+
private static final Logger logger = new InternalLogger("FastNbt");
12+
13+
public static void log(String message)
14+
{
15+
logger.info("[FastNbt] " + message);
16+
}
17+
18+
public static void error(String message)
19+
{
20+
logger.severe("[FastNbt] " + message);
21+
}
22+
23+
public static class InternalLogger extends Logger
24+
{
25+
private String prefix;
26+
27+
public InternalLogger(@NotNull String prefix)
28+
{
29+
super(prefix.getClass().getCanonicalName(), null);
30+
setLevel(Level.ALL);
31+
}
32+
33+
@Override
34+
public void log(@NotNull LogRecord logRecord)
35+
{
36+
logRecord.setMessage(prefix + logRecord.getMessage());
37+
super.log(logRecord);
38+
}
39+
40+
}
41+
}
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
package beer.devs.fastnbt.nms;
2+
3+
import org.bukkit.Bukkit;
4+
import org.jetbrains.annotations.Nullable;
5+
6+
import java.lang.reflect.Constructor;
7+
import java.lang.reflect.Field;
8+
import java.util.HashMap;
9+
import java.util.Map;
10+
11+
public class NMSImpl
12+
{
13+
private static final String NMS_IMPL_PACKAGE_SPIGOTMAP = "beer.devs.fastnbt.nms.nbt.impl_spigotmap";
14+
private static final String NMS_IMPL_PACKAGE_MOJANGMAP = "beer.devs.fastnbt.nms.nbt.impl_mojangmap";
15+
16+
public static boolean isPaper;
17+
private static final Map<Class<?>, Constructor<?>> CACHED_CONSTRUCTORS = new HashMap<>();
18+
19+
static
20+
{
21+
isPaper = isPaper();
22+
}
23+
24+
public static boolean hasClass(String className)
25+
{
26+
try
27+
{
28+
Class.forName(className);
29+
return true;
30+
}
31+
catch (Throwable ignored) {}
32+
return false;
33+
}
34+
35+
public static boolean isPaper()
36+
{
37+
String name = Bukkit.getServer().getName();
38+
if (name.contains("Paper") || name.contains("Purpur"))
39+
return true;
40+
41+
return
42+
hasClass("com.destroystokyo.paper.event.player.PlayerSetSpawnEvent$Cause") ||
43+
hasClass("com.destroystokyo.paper.utils.PaperPluginLogger") ||
44+
hasClass("io.papermc.paper.ServerBuildInfo") ||
45+
hasClass("io.papermc.paper.text.PaperComponents");
46+
}
47+
48+
@Nullable
49+
public static Field getField(Class<?> clazz, Class<?> type)
50+
{
51+
for (Field field : clazz.getDeclaredFields())
52+
{
53+
if (field.getType() == type)
54+
{
55+
field.setAccessible(true);
56+
return field;
57+
}
58+
}
59+
return null;
60+
}
61+
62+
/**
63+
* Since Paper 1.20.5 the NMS classes might not be Spigot mapped anymore.
64+
* They might use the Mojang mappings.
65+
*/
66+
public static boolean isSpigotMapped()
67+
{
68+
// Split Bukkit.getServer().getClass().getPackageName() and check if the last entry starts by v1_
69+
String[] split = Bukkit.getServer().getClass().getPackageName().split("\\.");
70+
String version = split[split.length - 1];
71+
return version.startsWith("v1_");
72+
}
73+
74+
private static Class<?> getImplClass(Class<?> type) throws ClassNotFoundException
75+
{
76+
String classNamePath;
77+
Version version = Version.get();
78+
String typeName = type.getSimpleName();
79+
if(typeName.startsWith("I"))
80+
typeName = typeName.substring(1);
81+
82+
if (isSpigotMapped())
83+
classNamePath = NMS_IMPL_PACKAGE_SPIGOTMAP + "." + typeName + "_" + version.toString();
84+
else
85+
classNamePath = NMS_IMPL_PACKAGE_MOJANGMAP + "." + typeName + "_" + version.toString();
86+
87+
return Class.forName(classNamePath);
88+
}
89+
90+
public static <T> T instantiate(Class<T> type)
91+
{
92+
Class<?> clazz = null;
93+
try
94+
{
95+
clazz = getImplClass(type);
96+
return instantiate(type, clazz);
97+
}
98+
catch (Throwable e)
99+
{
100+
FastNbtLogger.error("Can't instantiate NMS wrapper");
101+
FastNbtLogger.error("This server version is not compatible with this plugin.");
102+
throw new RuntimeException("Failed to create instance for class: " + clazz + " (" + type.getName() + ")", e);
103+
}
104+
}
105+
106+
@SuppressWarnings("unchecked")
107+
private static <T> T instantiate(Class<T> type, Class<?> clazz) throws Exception
108+
{
109+
Constructor<?> constructor = CACHED_CONSTRUCTORS.computeIfAbsent(type, s -> {
110+
try
111+
{
112+
return clazz.getDeclaredConstructor();
113+
}
114+
catch (NoSuchMethodException e)
115+
{
116+
throw new RuntimeException(e);
117+
}
118+
});
119+
return (T) constructor.newInstance();
120+
}
121+
122+
}

FastNbt-core/src/main/java/dev/lone/fastnbt/nms/Version.java renamed to FastNbt-core/src/main/java/beer/devs/fastnbt/nms/Version.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package dev.lone.fastnbt.nms;
1+
package beer.devs.fastnbt.nms;
22

33
import org.bukkit.Bukkit;
44

FastNbt-core/src/main/java/dev/lone/fastnbt/nms/nbt/ICompoundTag.java renamed to FastNbt-core/src/main/java/beer/devs/fastnbt/nms/nbt/ICompoundTag.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package dev.lone.fastnbt.nms.nbt;
1+
package beer.devs.fastnbt.nms.nbt;
22

33
import com.google.gson.JsonParser;
44
import org.jetbrains.annotations.Nullable;

FastNbt-core/src/main/java/dev/lone/fastnbt/nms/nbt/ICraftItemStack.java renamed to FastNbt-core/src/main/java/beer/devs/fastnbt/nms/nbt/ICraftItemStack.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package dev.lone.fastnbt.nms.nbt;
1+
package beer.devs.fastnbt.nms.nbt;
22

33
import org.bukkit.inventory.ItemStack;
44
import org.jetbrains.annotations.Nullable;

FastNbt-core/src/main/java/dev/lone/fastnbt/nms/nbt/IDataComponents.java renamed to FastNbt-core/src/main/java/beer/devs/fastnbt/nms/nbt/IDataComponents.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package dev.lone.fastnbt.nms.nbt;
1+
package beer.devs.fastnbt.nms.nbt;
22

33
import org.bukkit.inventory.ItemStack;
44
import org.jetbrains.annotations.Nullable;

0 commit comments

Comments
 (0)