From d6c695a3539de00329246aab51c6168d3654eb2f Mon Sep 17 00:00:00 2001
From: Tofaa <82680183+Tofaa2@users.noreply.github.com>
Date: Thu, 1 Feb 2024 14:55:05 +0400
Subject: [PATCH] some fixes
---
.idea/workspace.xml | 81 +++++++----------
.../me/tofaa/entitylib/EntityIdProvider.java | 2 +-
.../entitylib/wrapper/WrapperEntity.java | 10 +-
code-gen/build.gradle | 9 ++
.../java/me/tofaa/entitylib/codegen/Main.java | 91 ++++---------------
.../me/tofaa/entitylib/codegen/MetaClass.java | 4 +
.../tofaa/entitylib/codegen/MetaMethod.java | 30 +++---
.../entitylib/codegen/MetadataClass.java | 86 ++++++++++++++++++
.../tofaa/entitylib/codegen/VersionCheck.java | 4 +
9 files changed, 178 insertions(+), 139 deletions(-)
create mode 100644 code-gen/src/main/java/me/tofaa/entitylib/codegen/MetadataClass.java
create mode 100644 code-gen/src/main/java/me/tofaa/entitylib/codegen/VersionCheck.java
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index a04b889..13d1c14 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -5,25 +5,14 @@
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
@@ -86,36 +75,36 @@
- {
+ "keyToString": {
+ "Downloaded.Files.Path.Enabled": "false",
+ "Gradle.Build EntityLib.executor": "Run",
+ "Gradle.EntityLib [dependencies].executor": "Run",
+ "Gradle.EntityLib:code-gen [:code-gen:Main.main()].executor": "Run",
+ "Gradle.EntityLib:test-plugin [runServer].executor": "Run",
+ "Repository.Attach.Annotations": "false",
+ "Repository.Attach.JavaDocs": "false",
+ "Repository.Attach.Sources": "false",
+ "RunOnceActivity.OpenProjectViewOnStart": "true",
+ "RunOnceActivity.ShowReadmeOnStart": "true",
+ "WebServerToolWindowFactoryState": "false",
+ "git-widget-placeholder": "feat/platform-api",
+ "ignore.virus.scanning.warn.message": "true",
+ "jdk.selected.JAVA_MODULE": "corretto-17",
+ "kotlin-language-version-configured": "true",
+ "last_opened_file_path": "D:/Github/EntityLib/api/src/main/java/me/tofaa/entitylib/meta",
+ "node.js.detected.package.eslint": "true",
+ "node.js.detected.package.tslint": "true",
+ "node.js.selected.package.eslint": "(autodetect)",
+ "node.js.selected.package.tslint": "(autodetect)",
+ "nodejs_package_manager_path": "npm",
+ "project.structure.last.edited": "Project",
+ "project.structure.proportion": "0.15",
+ "project.structure.side.proportion": "0.2",
+ "settings.editor.selected.configurable": "preferences.pluginManager",
+ "vue.rearranger.settings.migration": "true"
}
-}]]>
+}
diff --git a/api/src/main/java/me/tofaa/entitylib/EntityIdProvider.java b/api/src/main/java/me/tofaa/entitylib/EntityIdProvider.java
index b2f3a83..2dc3a17 100644
--- a/api/src/main/java/me/tofaa/entitylib/EntityIdProvider.java
+++ b/api/src/main/java/me/tofaa/entitylib/EntityIdProvider.java
@@ -12,7 +12,7 @@ public interface EntityIdProvider {
class DefaultEntityIdProvider implements EntityIdProvider {
- private final AtomicInteger integer = new AtomicInteger();
+ private final AtomicInteger integer = new AtomicInteger(100000);
@Override
public int provide(@NotNull UUID entityUUID, @NotNull EntityType entityType) {
diff --git a/api/src/main/java/me/tofaa/entitylib/wrapper/WrapperEntity.java b/api/src/main/java/me/tofaa/entitylib/wrapper/WrapperEntity.java
index 407059b..3790363 100644
--- a/api/src/main/java/me/tofaa/entitylib/wrapper/WrapperEntity.java
+++ b/api/src/main/java/me/tofaa/entitylib/wrapper/WrapperEntity.java
@@ -117,11 +117,14 @@ public class WrapperEntity implements Tickable {
teleport(world, location, onGround);
}
- public boolean addViewer(UUID uuid) {
+ /**
+ * Adds a viewer to the viewers set. The viewer will receive all packets and be informed of this addition
+ * @param uuid the uuid of the user to add
+ */
+ public void addViewer(UUID uuid) {
if (!viewers.add(uuid)) {
- return false;
+ return;
}
- if (!spawned) return false;
WrapperPlayServerSpawnEntity packet = new WrapperPlayServerSpawnEntity(
entityId,
Optional.of(this.uuid),
@@ -135,7 +138,6 @@ public class WrapperEntity implements Tickable {
);
sendPacket(uuid, packet);
sendPacket(uuid, entityMeta.createPacket());
- return true;
}
public void addViewer(User user) {
diff --git a/code-gen/build.gradle b/code-gen/build.gradle
index e6439d3..f3f728c 100644
--- a/code-gen/build.gradle
+++ b/code-gen/build.gradle
@@ -12,6 +12,15 @@ repositories {
mavenCentral()
}
+// adding autogenerated sources to the main source set
+sourceSets {
+ main {
+ java {
+ srcDirs += 'autogenerated'
+ }
+ }
+}
+
dependencies {
implementation 'com.google.code.gson:gson:2.10.1'
implementation 'com.squareup:javapoet:1.13.0'
diff --git a/code-gen/src/main/java/me/tofaa/entitylib/codegen/Main.java b/code-gen/src/main/java/me/tofaa/entitylib/codegen/Main.java
index 4cbb5bb..4a912e7 100644
--- a/code-gen/src/main/java/me/tofaa/entitylib/codegen/Main.java
+++ b/code-gen/src/main/java/me/tofaa/entitylib/codegen/Main.java
@@ -1,106 +1,53 @@
package me.tofaa.entitylib.codegen;
-import com.github.retrooper.packetevents.protocol.entity.data.EntityData;
-import com.github.retrooper.packetevents.protocol.entity.data.EntityDataType;
-import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerEntityMetadata;
-import com.google.gson.reflect.TypeToken;
-import com.squareup.javapoet.*;
-import org.jetbrains.annotations.NotNull;
+import com.squareup.javapoet.ClassName;
+import com.squareup.javapoet.JavaFile;
+import com.squareup.javapoet.TypeSpec;
import javax.lang.model.element.Modifier;
import java.io.File;
-import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
-import java.util.Map;
+
+import static me.tofaa.entitylib.codegen.MetadataClass.createMetadataClass;
public final class Main {
private Main() {}
+ static final File OUT = new File("./code-gen/autogenerated/");
+ static {
+ if (!OUT.exists()) {
+ OUT.mkdirs();
+ }
+ if (!OUT.isDirectory()) {
+ OUT.delete();
+ OUT.mkdirs();
+ }
+ }
public static void main(String[] args) throws IOException {
createMetadataClass();
List metaClasses = new ArrayList<>();
// test
+ MetaMethod method = new MetaMethod("username", String.class, "\"\"", "EntityDataType.STRING", List.of(new VersionCheck(47, 47, (byte) 0)));
+ MetaClass obj = new MetaClass("me.tofaa.entitylib.meta:EntityMeta", null, List.of(method));
-
+ writeClass(obj);
}
private static void writeClass(MetaClass metaClass) {
- File file = new File("src/main/java");
TypeSpec typeSpec = metaClass.create();
JavaFile javaFile = JavaFile.builder("me.tofaa.entitylib.meta", typeSpec).build();
try {
- FileWriter fileWriter = new FileWriter(file);
- javaFile.writeTo(fileWriter);
+ javaFile.writeToPath(OUT.toPath());
}
catch (IOException e) {
throw new RuntimeException(e);
}
}
- private static void createMetadataClass() {
-
- TypeSpec.Builder builder = builder("me.tofaa.entitylib.meta", "Metadata");
- builder.addField(int.class, "entityId", Modifier.PRIVATE, Modifier.FINAL);
- builder.addField(TypeToken.getParameterized(Map.class, Byte.class, EntityDataType.class).getType(), "metadataMap", Modifier.PRIVATE, Modifier.FINAL);
-
- MethodSpec.Builder constructor = MethodSpec.constructorBuilder()
- .addModifiers(Modifier.PUBLIC)
- .addCode("this.entityId = entityId;\n")
- .addCode("this.metadataMap = new ConcurrentHashMap<>();\n")
- .addParameter(int.class, "entityId");
-
- MethodSpec.Builder getIndex = MethodSpec.methodBuilder("getIndex")
- .addModifiers(Modifier.PUBLIC)
- .addTypeVariable(TypeVariableName.get("T"))
- .addParameter(byte.class, "index")
- .addParameter(TypeVariableName.get("T"), "defaultValue")
- .returns(TypeVariableName.get("T"))
- .addCode("EntityData entityData = metadataMap.get(index);\n")
- .addCode("if (entityData == null) return defaultValue;\n")
- .addCode("if (entityData.getValue() == null) return defaultValue;\n")
- .addCode("return (T) entityData.getValue();\n");
-
- MethodSpec.Builder setIndex = MethodSpec.methodBuilder("setIndex")
- .addModifiers(Modifier.PUBLIC)
- .addTypeVariable(TypeVariableName.get("T"))
- .addParameter(byte.class, "index")
- .addParameter(EntityDataType.class, "dataType")
- .addParameter(TypeVariableName.get("T"), "value")
- .addCode("EntityData data = new EntityData(index, dataType, value);\n")
- .addCode("this.metadataMap.put(index, data);\n");
-
- MethodSpec.Builder getEntries = MethodSpec.methodBuilder("getEntries")
- .addModifiers(Modifier.PUBLIC)
- .returns(TypeToken.getParameterized(List.class, EntityData.class).getType())
- .addCode("return new ArrayList<>(metadataMap.values());\n")
- .addAnnotation(NotNull.class);
-
- MethodSpec.Builder createPacket = MethodSpec.methodBuilder("createPacket")
- .addModifiers(Modifier.PUBLIC)
- .returns(WrapperPlayServerEntityMetadata.class)
- .addCode("return new WrapperPlayServerEntityMetadata(entityId, getEntries());\n")
- .addAnnotation(NotNull.class);
-
- builder.addMethod(constructor.build());
- builder.addMethod(getIndex.build());
- builder.addMethod(setIndex.build());
- builder.addMethod(getEntries.build());
- builder.addMethod(createPacket.build());
-
- File file = new File("src/main/java");
- JavaFile javaFile = JavaFile.builder("me.tofaa.entitylib.meta", builder.build()).build();
- try {
- FileWriter fileWriter = new FileWriter(file);
- javaFile.writeTo(fileWriter);
- }
- catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
// Include comment in generated code
public static TypeSpec.Builder builder(String packageName, String className) {
diff --git a/code-gen/src/main/java/me/tofaa/entitylib/codegen/MetaClass.java b/code-gen/src/main/java/me/tofaa/entitylib/codegen/MetaClass.java
index 0f84713..1755889 100644
--- a/code-gen/src/main/java/me/tofaa/entitylib/codegen/MetaClass.java
+++ b/code-gen/src/main/java/me/tofaa/entitylib/codegen/MetaClass.java
@@ -23,6 +23,10 @@ public record MetaClass(
if (extendsClass != null) {
String[] extendsSplit = extendsClass.split(":");
builder.superclass(ClassName.get(extendsSplit[0], extendsSplit[1]));
+
+ builder.addField(int.class, "entityId");
+ builder.addField(ClassName.get("me.tofaa.entitylib.meta", "Metadata"), "metadata");
+
}
for (MetaMethod method : methods) {
builder.addMethods(method.create());
diff --git a/code-gen/src/main/java/me/tofaa/entitylib/codegen/MetaMethod.java b/code-gen/src/main/java/me/tofaa/entitylib/codegen/MetaMethod.java
index 90ecc37..cd82db7 100644
--- a/code-gen/src/main/java/me/tofaa/entitylib/codegen/MetaMethod.java
+++ b/code-gen/src/main/java/me/tofaa/entitylib/codegen/MetaMethod.java
@@ -1,32 +1,28 @@
package me.tofaa.entitylib.codegen;
-import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.MethodSpec;
+import com.squareup.javapoet.TypeName;
import javax.lang.model.element.Modifier;
+import java.lang.reflect.Type;
import java.util.List;
public record MetaMethod(
String name,
- String returnType,
+ Type returnType,
String defaultReturn,
String dataType,
List versionChecks
) {
public List create() {
- String[] nameSplit = name.split(":");
- String[] returnSplit = returnType.split(":");
- String namePackage = nameSplit[0];
- String nameClass = nameSplit[1];
- String returnPackage = returnSplit[0];
- String returnClass = returnSplit[1];
- String methodBasedName = nameClass.substring(0, 1).toUpperCase() + nameClass.substring(1);
+ String methodBasedName = name.substring(0, 1).toUpperCase() + name.substring(1);
/* offset calculator first */
MethodSpec.Builder calculator = MethodSpec.methodBuilder(
"calculate" + methodBasedName + "Offset")
+ .returns(byte.class)
.addModifiers(Modifier.PRIVATE, Modifier.STATIC)
.addParameter(int.class, "version");
for (VersionCheck check : versionChecks) {
@@ -40,18 +36,22 @@ public record MetaMethod(
String versionVariable = "byte offset = calculate" + methodBasedName + "Offset(EntityLib.getApi().getPacketEvents().getServerManager().getVersion().getProtocolVersion())";
/* getter method spec. No params */
- MethodSpec.Builder getter = MethodSpec.methodBuilder("get" + methodBasedName)
+ String getterName = "get";
+ if (returnType == TypeName.BOOLEAN) {
+ getterName = "is";
+ }
+ MethodSpec.Builder getter = MethodSpec.methodBuilder(getterName + methodBasedName)
.addModifiers(Modifier.PUBLIC)
- .returns(ClassName.get(returnPackage, returnClass))
+ .returns(returnType)
.addStatement(versionVariable)
- .addStatement("return metadata.getIndex(" + "offset," + defaultReturn);
+ .addStatement("return metadata.getIndex(" + "offset," + defaultReturn + ");");
MethodSpec.Builder setter = MethodSpec.methodBuilder("set" + methodBasedName)
.addModifiers(Modifier.PUBLIC)
.returns(void.class)
- .addParameter(ClassName.get(returnPackage, returnClass), "value")
+ .addParameter(returnType, "value")
.addStatement(versionVariable)
- .addStatement("metadata.setIndex(" + "offset, " + dataType + ", " + "value");
+ .addStatement("metadata.setIndex(" + "offset, " + dataType + ", " + "value" + ");");
return List.of(
calculator.build(),
@@ -60,6 +60,4 @@ public record MetaMethod(
);
}
- public record VersionCheck(int from, int to, byte offset) {}
-
}
diff --git a/code-gen/src/main/java/me/tofaa/entitylib/codegen/MetadataClass.java b/code-gen/src/main/java/me/tofaa/entitylib/codegen/MetadataClass.java
new file mode 100644
index 0000000..ad99b37
--- /dev/null
+++ b/code-gen/src/main/java/me/tofaa/entitylib/codegen/MetadataClass.java
@@ -0,0 +1,86 @@
+package me.tofaa.entitylib.codegen;
+
+import com.github.retrooper.packetevents.protocol.entity.data.EntityData;
+import com.github.retrooper.packetevents.protocol.entity.data.EntityDataType;
+import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerEntityMetadata;
+import com.google.gson.reflect.TypeToken;
+import com.squareup.javapoet.JavaFile;
+import com.squareup.javapoet.MethodSpec;
+import com.squareup.javapoet.TypeSpec;
+import com.squareup.javapoet.TypeVariableName;
+import org.jetbrains.annotations.NotNull;
+
+import javax.lang.model.element.Modifier;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+
+import static me.tofaa.entitylib.codegen.Main.OUT;
+import static me.tofaa.entitylib.codegen.Main.builder;
+
+public final class MetadataClass {
+
+ private MetadataClass() {
+
+ }
+ public static void createMetadataClass() {
+
+ TypeSpec.Builder builder = builder("me.tofaa.entitylib.meta", "Metadata");
+ builder.addField(int.class, "entityId", Modifier.PRIVATE, Modifier.FINAL);
+ builder.addField(TypeToken.getParameterized(Map.class, Byte.class, EntityData.class).getType(), "metadataMap", Modifier.PRIVATE, Modifier.FINAL);
+ MethodSpec.Builder constructor = MethodSpec.constructorBuilder()
+ .addModifiers(Modifier.PUBLIC)
+ .addCode("this.entityId = entityId;\n")
+ .addCode("this.metadataMap = new java.util.concurrent.ConcurrentHashMap<>();\n")
+ .addParameter(int.class, "entityId");
+
+ MethodSpec.Builder getIndex = MethodSpec.methodBuilder("getIndex")
+ .addModifiers(Modifier.PUBLIC)
+ .addTypeVariable(TypeVariableName.get("T"))
+ .addParameter(byte.class, "index")
+ .addParameter(TypeVariableName.get("T"), "defaultValue")
+ .returns(TypeVariableName.get("T"))
+ .addCode("EntityData entityData = metadataMap.get(index);\n")
+ .addCode("if (entityData == null) return defaultValue;\n")
+ .addCode("if (entityData.getValue() == null) return defaultValue;\n")
+ .addCode("return (T) entityData.getValue();\n");
+
+ MethodSpec.Builder setIndex = MethodSpec.methodBuilder("setIndex")
+ .addModifiers(Modifier.PUBLIC)
+ .addTypeVariable(TypeVariableName.get("T"))
+ .addParameter(byte.class, "index")
+ .addParameter(EntityDataType.class, "dataType")
+ .addParameter(TypeVariableName.get("T"), "value")
+ .addCode("EntityData data = new EntityData(index, dataType, value);\n")
+ .addCode("this.metadataMap.put(index, data);\n");
+
+ MethodSpec.Builder getEntries = MethodSpec.methodBuilder("getEntries")
+ .addModifiers(Modifier.PUBLIC)
+ .returns(TypeToken.getParameterized(List.class, EntityData.class).getType())
+ .addCode("return new java.util.ArrayList<>(metadataMap.values());\n")
+ .addAnnotation(NotNull.class);
+
+ MethodSpec.Builder createPacket = MethodSpec.methodBuilder("createPacket")
+ .addModifiers(Modifier.PUBLIC)
+ .returns(WrapperPlayServerEntityMetadata.class)
+ .addCode("return new WrapperPlayServerEntityMetadata(entityId, getEntries());\n")
+ .addAnnotation(NotNull.class);
+
+ builder.addMethod(constructor.build());
+ builder.addMethod(getIndex.build());
+ builder.addMethod(setIndex.build());
+ builder.addMethod(getEntries.build());
+ builder.addMethod(createPacket.build());
+
+ JavaFile javaFile = JavaFile.builder("me.tofaa.entitylib.meta", builder.build()).build();
+ try {
+ javaFile.writeToPath(OUT.toPath());
+ }
+ catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+
+
+}
diff --git a/code-gen/src/main/java/me/tofaa/entitylib/codegen/VersionCheck.java b/code-gen/src/main/java/me/tofaa/entitylib/codegen/VersionCheck.java
new file mode 100644
index 0000000..1120db8
--- /dev/null
+++ b/code-gen/src/main/java/me/tofaa/entitylib/codegen/VersionCheck.java
@@ -0,0 +1,4 @@
+package me.tofaa.entitylib.codegen;
+
+public record VersionCheck(int from, int to, byte offset) {
+}