From d686f56b0cef0b0626305b0a8c4df0426c25ea12 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Fri, 8 Jan 2021 18:53:47 +0300 Subject: [PATCH 1/2] =?UTF-8?q?=D0=B8=D0=B7=D0=B1=D0=B0=D0=B2=D0=BB=D1=8F?= =?UTF-8?q?=D0=B5=D0=BC=D1=81=D1=8F=20=D0=BE=D1=82=20=D1=80=D0=B5=D1=84?= =?UTF-8?q?=D0=BB=D0=B5=D0=BA=D1=81=D0=B8=D0=B8:=20=D1=81=D0=BA=D0=B8?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=B4=D0=BB=D1=8F=20=D0=B3=D0=BE=D0=BB=D0=BE?= =?UTF-8?q?=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phantom-classes/build.gradle | 3 ++ phantom-classes/gradle.properties | 2 + .../java/com/mojang/authlib/GameProfile.java | 16 ++++++ .../mojang/authlib/properties/Property.java | 8 +++ .../authlib/properties/PropertyMap.java | 12 +++++ .../server/v1_12_R1/BlockPosition.java | 7 +++ .../minecraft/server/v1_12_R1/TileEntity.java | 5 ++ .../server/v1_12_R1/TileEntitySkull.java | 10 ++++ .../server/v1_12_R1/WorldServer.java | 8 +++ .../craftbukkit/v1_12_R1/CraftWorld.java | 10 ++++ settings.gradle | 2 +- tools/build.gradle | 1 + tools/src/main/java/ghast/BuildHelper.java | 54 ++++++------------- 13 files changed, 98 insertions(+), 40 deletions(-) create mode 100644 phantom-classes/build.gradle create mode 100644 phantom-classes/gradle.properties create mode 100644 phantom-classes/src/main/java/com/mojang/authlib/GameProfile.java create mode 100644 phantom-classes/src/main/java/com/mojang/authlib/properties/Property.java create mode 100644 phantom-classes/src/main/java/com/mojang/authlib/properties/PropertyMap.java create mode 100644 phantom-classes/src/main/java/net/minecraft/server/v1_12_R1/BlockPosition.java create mode 100644 phantom-classes/src/main/java/net/minecraft/server/v1_12_R1/TileEntity.java create mode 100644 phantom-classes/src/main/java/net/minecraft/server/v1_12_R1/TileEntitySkull.java create mode 100644 phantom-classes/src/main/java/net/minecraft/server/v1_12_R1/WorldServer.java create mode 100644 phantom-classes/src/main/java/org/bukkit/craftbukkit/v1_12_R1/CraftWorld.java diff --git a/phantom-classes/build.gradle b/phantom-classes/build.gradle new file mode 100644 index 0000000..4e7c334 --- /dev/null +++ b/phantom-classes/build.gradle @@ -0,0 +1,3 @@ +dependencies { + compileOnly libs.bukkit +} \ No newline at end of file diff --git a/phantom-classes/gradle.properties b/phantom-classes/gradle.properties new file mode 100644 index 0000000..0461b43 --- /dev/null +++ b/phantom-classes/gradle.properties @@ -0,0 +1,2 @@ +moduleName=phantom-classes +moduleVersion=1.0-SNAPSHOT \ No newline at end of file diff --git a/phantom-classes/src/main/java/com/mojang/authlib/GameProfile.java b/phantom-classes/src/main/java/com/mojang/authlib/GameProfile.java new file mode 100644 index 0000000..ec0f667 --- /dev/null +++ b/phantom-classes/src/main/java/com/mojang/authlib/GameProfile.java @@ -0,0 +1,16 @@ +package com.mojang.authlib; + +import com.mojang.authlib.properties.PropertyMap; + +import java.util.UUID; + +public class GameProfile { + + public GameProfile(UUID id, String name) { + + } + + public PropertyMap getProperties() { + return null; + } +} diff --git a/phantom-classes/src/main/java/com/mojang/authlib/properties/Property.java b/phantom-classes/src/main/java/com/mojang/authlib/properties/Property.java new file mode 100644 index 0000000..31ca57c --- /dev/null +++ b/phantom-classes/src/main/java/com/mojang/authlib/properties/Property.java @@ -0,0 +1,8 @@ +package com.mojang.authlib.properties; + +public class Property { + + public Property(String value, String name) { + + } +} diff --git a/phantom-classes/src/main/java/com/mojang/authlib/properties/PropertyMap.java b/phantom-classes/src/main/java/com/mojang/authlib/properties/PropertyMap.java new file mode 100644 index 0000000..fa3d519 --- /dev/null +++ b/phantom-classes/src/main/java/com/mojang/authlib/properties/PropertyMap.java @@ -0,0 +1,12 @@ +package com.mojang.authlib.properties; + +import com.google.common.collect.ForwardingMultimap; +import com.google.common.collect.Multimap; + +public class PropertyMap extends ForwardingMultimap { + + @Override + protected Multimap delegate() { + return null; + } +} diff --git a/phantom-classes/src/main/java/net/minecraft/server/v1_12_R1/BlockPosition.java b/phantom-classes/src/main/java/net/minecraft/server/v1_12_R1/BlockPosition.java new file mode 100644 index 0000000..af9225b --- /dev/null +++ b/phantom-classes/src/main/java/net/minecraft/server/v1_12_R1/BlockPosition.java @@ -0,0 +1,7 @@ +package net.minecraft.server.v1_12_R1; + +public class BlockPosition { + + public BlockPosition(double x, double y, double z) { + } +} diff --git a/phantom-classes/src/main/java/net/minecraft/server/v1_12_R1/TileEntity.java b/phantom-classes/src/main/java/net/minecraft/server/v1_12_R1/TileEntity.java new file mode 100644 index 0000000..af37696 --- /dev/null +++ b/phantom-classes/src/main/java/net/minecraft/server/v1_12_R1/TileEntity.java @@ -0,0 +1,5 @@ +package net.minecraft.server.v1_12_R1; + +public class TileEntity { + +} diff --git a/phantom-classes/src/main/java/net/minecraft/server/v1_12_R1/TileEntitySkull.java b/phantom-classes/src/main/java/net/minecraft/server/v1_12_R1/TileEntitySkull.java new file mode 100644 index 0000000..231b1ad --- /dev/null +++ b/phantom-classes/src/main/java/net/minecraft/server/v1_12_R1/TileEntitySkull.java @@ -0,0 +1,10 @@ +package net.minecraft.server.v1_12_R1; + +import com.mojang.authlib.GameProfile; + +public class TileEntitySkull extends TileEntity { + + public void setGameProfile(GameProfile gameprofile) { + + } +} diff --git a/phantom-classes/src/main/java/net/minecraft/server/v1_12_R1/WorldServer.java b/phantom-classes/src/main/java/net/minecraft/server/v1_12_R1/WorldServer.java new file mode 100644 index 0000000..120881c --- /dev/null +++ b/phantom-classes/src/main/java/net/minecraft/server/v1_12_R1/WorldServer.java @@ -0,0 +1,8 @@ +package net.minecraft.server.v1_12_R1; + +public class WorldServer { + + public TileEntity getTileEntity(BlockPosition pos) { + return null; + } +} diff --git a/phantom-classes/src/main/java/org/bukkit/craftbukkit/v1_12_R1/CraftWorld.java b/phantom-classes/src/main/java/org/bukkit/craftbukkit/v1_12_R1/CraftWorld.java new file mode 100644 index 0000000..73cf2c7 --- /dev/null +++ b/phantom-classes/src/main/java/org/bukkit/craftbukkit/v1_12_R1/CraftWorld.java @@ -0,0 +1,10 @@ +package org.bukkit.craftbukkit.v1_12_R1; + +import net.minecraft.server.v1_12_R1.WorldServer; + +public class CraftWorld { + + public WorldServer getHandle() { + return null; + } +} diff --git a/settings.gradle b/settings.gradle index dcdebbd..50ae36a 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,2 +1,2 @@ +include 'phantom-classes' include 'tools' - diff --git a/tools/build.gradle b/tools/build.gradle index c89368b..a9416c6 100644 --- a/tools/build.gradle +++ b/tools/build.gradle @@ -4,6 +4,7 @@ repositories { } dependencies { + compileOnly project(':phantom-classes') compileOnly libs.bukkit implementation libs.commons_text implementation libs.refobj diff --git a/tools/src/main/java/ghast/BuildHelper.java b/tools/src/main/java/ghast/BuildHelper.java index 70d97f4..3bd5975 100644 --- a/tools/src/main/java/ghast/BuildHelper.java +++ b/tools/src/main/java/ghast/BuildHelper.java @@ -1,6 +1,10 @@ package ghast; +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.properties.Property; import lombok.experimental.UtilityClass; +import net.minecraft.server.v1_12_R1.BlockPosition; +import net.minecraft.server.v1_12_R1.TileEntitySkull; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.SkullType; @@ -8,8 +12,7 @@ import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.block.Sign; import org.bukkit.block.Skull; -import ru.dmitriymx.reflection.ReflectionClass; -import ru.dmitriymx.reflection.ReflectionObject; +import org.bukkit.craftbukkit.v1_12_R1.CraftWorld; import java.nio.charset.StandardCharsets; import java.util.Base64; @@ -19,9 +22,6 @@ import java.util.UUID; @SuppressWarnings("unused") public class BuildHelper { - private final Class CLASS_BLOCKPOSITION = getClassForName("net.minecraft.server.v1_12_R1.BlockPosition"); - private final Class CLASS_GAMEPROFILE = getClassForName("com.mojang.authlib.GameProfile"); - /** * Установка черепа. *

@@ -95,17 +95,10 @@ public class BuildHelper { * @param skinUrl URL на текстуру */ public static void setPlayerHeadSkin(Skull skull, String skinUrl) { - //TODO заменить рефлексию на "фантомные" классы - ReflectionObject refobjBlockPosition = new ReflectionClass(CLASS_BLOCKPOSITION) - .constructor(double.class, double.class, double.class) - .newInstance(skull.getX(), skull.getY(), skull.getZ()); - - new ReflectionObject(skull.getWorld()) - .method("getHandle").invoke() - .method("getTileEntity", CLASS_BLOCKPOSITION) - .invoke(refobjBlockPosition.getOriginalObject()) - .method("setGameProfile", CLASS_GAMEPROFILE) - .invoke(getRefObjPlayerProfile(skinUrl).getOriginalObject()); + ((TileEntitySkull) (((CraftWorld) skull.getWorld()) + .getHandle() + .getTileEntity(new BlockPosition(skull.getX(), skull.getY(), skull.getZ())))) + .setGameProfile(generateTexturedPlayerProfile(skinUrl)); } public Sign placeSignWall(Location location, BlockFace face) { @@ -119,29 +112,12 @@ public class BuildHelper { return sign; } - private ReflectionObject getRefObjPlayerProfile(String url){ - ReflectionObject refobjProperty = new ReflectionClass( - getClassForName("com.mojang.authlib.properties.Property")) - .constructor(String.class, String.class) - .newInstance("textures", Base64.getEncoder() - .encodeToString(("{textures:{SKIN:{url:\"" + url + "\"}}}").getBytes(StandardCharsets.UTF_8))); + private GameProfile generateTexturedPlayerProfile(String skinUrl) { + GameProfile gameProfile = new GameProfile(UUID.randomUUID(), null); - ReflectionObject refobjGameProfile = new ReflectionClass(CLASS_GAMEPROFILE) - .constructor(UUID.class, String.class) - .newInstance(UUID.randomUUID(), null); - refobjGameProfile - .method("getProperties").invoke() - .method("put", Object.class, Object.class) - .invoke("textures", refobjProperty.getOriginalObject()); - - return refobjGameProfile; - } - - private Class getClassForName(String className) { - try { - return Class.forName(className); - } catch (Exception e) { - throw new RuntimeException(e); - } + gameProfile.getProperties().put("textures", + new Property("textures", Base64.getEncoder().encodeToString( + ("{textures:{SKIN:{url:\"" + skinUrl + "\"}}}").getBytes(StandardCharsets.UTF_8)))); + return gameProfile; } } From f2ab5521d10b5efe8b079bc4ae0f730f8ac48cd9 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Fri, 8 Jan 2021 20:00:20 +0300 Subject: [PATCH 2/2] =?UTF-8?q?=D0=B8=D0=B7=D0=B1=D0=B0=D0=B2=D0=BB=D1=8F?= =?UTF-8?q?=D0=B5=D0=BC=D1=81=D1=8F=20=D0=BE=D1=82=20=D1=80=D0=B5=D1=84?= =?UTF-8?q?=D0=BB=D0=B5=D0=BA=D1=81=D0=B8=D0=B8:=20CommnadManager:=20regis?= =?UTF-8?q?ter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buildSrc/src/main/groovy/libs/LibsExtention.groovy | 1 - .../bukkit/craftbukkit/v1_12_R1/CraftServer.java | 10 ++++++++++ tools/build.gradle | 1 - .../main/java/ghast/command/CommandManager.java | 14 +++++--------- 4 files changed, 15 insertions(+), 11 deletions(-) create mode 100644 phantom-classes/src/main/java/org/bukkit/craftbukkit/v1_12_R1/CraftServer.java diff --git a/buildSrc/src/main/groovy/libs/LibsExtention.groovy b/buildSrc/src/main/groovy/libs/LibsExtention.groovy index 938030e..edf3e51 100644 --- a/buildSrc/src/main/groovy/libs/LibsExtention.groovy +++ b/buildSrc/src/main/groovy/libs/LibsExtention.groovy @@ -5,7 +5,6 @@ class LibsExtention { final def commons_text = 'org.apache.commons:commons-text:1.9' final def lombok = 'org.projectlombok:lombok:1.18.12' - final def refobj = 'ru.dmitriymx:reflection-object:1.2' final def bukkit = filter([ lib : 'org.bukkit:bukkit:1.12.2-R0.1-SNAPSHOT', diff --git a/phantom-classes/src/main/java/org/bukkit/craftbukkit/v1_12_R1/CraftServer.java b/phantom-classes/src/main/java/org/bukkit/craftbukkit/v1_12_R1/CraftServer.java new file mode 100644 index 0000000..09ae211 --- /dev/null +++ b/phantom-classes/src/main/java/org/bukkit/craftbukkit/v1_12_R1/CraftServer.java @@ -0,0 +1,10 @@ +package org.bukkit.craftbukkit.v1_12_R1; + +import org.bukkit.command.SimpleCommandMap; + +public class CraftServer { + + public SimpleCommandMap getCommandMap() { + return null; + } +} diff --git a/tools/build.gradle b/tools/build.gradle index a9416c6..f524670 100644 --- a/tools/build.gradle +++ b/tools/build.gradle @@ -7,7 +7,6 @@ dependencies { compileOnly project(':phantom-classes') compileOnly libs.bukkit implementation libs.commons_text - implementation libs.refobj testImplementation libs.bukkit testImplementation libs.test.h2db diff --git a/tools/src/main/java/ghast/command/CommandManager.java b/tools/src/main/java/ghast/command/CommandManager.java index b4a27f7..4e86314 100644 --- a/tools/src/main/java/ghast/command/CommandManager.java +++ b/tools/src/main/java/ghast/command/CommandManager.java @@ -4,8 +4,7 @@ import lombok.AccessLevel; import lombok.RequiredArgsConstructor; import lombok.experimental.UtilityClass; import org.bukkit.Bukkit; -import org.bukkit.command.Command; -import ru.dmitriymx.reflection.ReflectionObject; +import org.bukkit.craftbukkit.v1_12_R1.CraftServer; @UtilityClass @SuppressWarnings("unused") @@ -59,13 +58,10 @@ public class CommandManager { } public void register() { - //TODO для Paper такие "извращения" не требуются. Нужно продумать. - new ReflectionObject(Bukkit.getServer()) - .method("getCommandMap").invoke() - .method("register", String.class, Command.class).invoke( - name, new CommandWrapper(name, this.onlyPlayer, this.deniedMessage, - this.executer, this.errorConsumer) - ); + ((CraftServer) Bukkit.getServer()).getCommandMap().register( + name, + new CommandWrapper(name, this.onlyPlayer, this.deniedMessage, this.executer, this.errorConsumer) + ); } } }