🐛 Fixed bugs in the code

This commit is contained in:
SBDeveloper 2022-07-01 14:13:46 +02:00
parent ed127b7e71
commit ba1b3e515f
5 changed files with 107 additions and 13 deletions

37
pom.xml
View file

@ -40,6 +40,13 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> </properties>
<distributionManagement>
<repository>
<id>nexus-releases</id>
<url>https://repo.sbdevelopment.tech/repository/maven-releases/</url>
</repository>
</distributionManagement>
<build> <build>
<plugins> <plugins>
<plugin> <plugin>
@ -73,6 +80,33 @@
</execution> </execution>
</executions> </executions>
</plugin> </plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>3.0.0-M2</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>1.6.13</version>
<executions>
<execution>
<id>default-deploy</id>
<phase>deploy</phase>
<goals>
<goal>deploy</goal>
</goals>
</execution>
</executions>
<configuration>
<serverId>nexus-releases</serverId>
<nexusUrl>https://repo.sbdevelopment.tech/</nexusUrl>
<skipStaging>true</skipStaging>
</configuration>
</plugin>
</plugins> </plugins>
<resources> <resources>
<resource> <resource>
@ -102,6 +136,7 @@
<groupId>org.spigotmc</groupId> <groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId> <artifactId>spigot-api</artifactId>
<version>1.19-R0.1-SNAPSHOT</version> <version>1.19-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.bergerkiller.bukkit</groupId> <groupId>com.bergerkiller.bukkit</groupId>
@ -112,7 +147,7 @@
<dependency> <dependency>
<groupId>com.comphenix.protocol</groupId> <groupId>com.comphenix.protocol</groupId>
<artifactId>ProtocolLib</artifactId> <artifactId>ProtocolLib</artifactId>
<version>4.8.0</version> <version>5.0.0-SNAPSHOT</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>

View file

@ -73,7 +73,7 @@ public class MapSender {
} }
private static final Class<?> packetPlayOutMapClass = ReflectionUtil.getNMSClass("network.protocol.game", "PacketPlayOutMap"); private static final Class<?> packetPlayOutMapClass = ReflectionUtil.getNMSClass("network.protocol.game", "PacketPlayOutMap");
private static final Class<?> worldMapData = ReflectionUtil.supports(17) ? ReflectionUtil.getNMSClass("world.level.saveddata.maps", "WorldMap") : null; private static final Class<?> worldMapData = ReflectionUtil.supports(17) ? ReflectionUtil.getNMSClass("world.level.saveddata.maps", "WorldMap$b") : null;
/** /**
* Send a map to a player * Send a map to a player

View file

@ -47,9 +47,9 @@ public class MapWrapper {
this.content = image; this.content = image;
} }
private static final Class<?> craftStackClass = ReflectionUtil.getCraftClass("CraftItemStack"); private static final Class<?> craftStackClass = ReflectionUtil.getCraftClass("inventory.CraftItemStack");
private static final Class<?> setSlotPacketClass = ReflectionUtil.getNMSClass("network.protocol.game", "PacketPlayOutSetSlot"); private static final Class<?> setSlotPacketClass = ReflectionUtil.getNMSClass("network.protocol.game", "PacketPlayOutSetSlot");
private static final Class<?> tagCompoundClass = ReflectionUtil.getCraftClass("NBTTagCompound"); private static final Class<?> tagCompoundClass = ReflectionUtil.getNMSClass("nbt", "NBTTagCompound");
private static final Class<?> entityClass = ReflectionUtil.getNMSClass("world.entity", "Entity"); private static final Class<?> entityClass = ReflectionUtil.getNMSClass("world.entity", "Entity");
private static final Class<?> dataWatcherClass = ReflectionUtil.getNMSClass("network.syncher", "DataWatcher"); private static final Class<?> dataWatcherClass = ReflectionUtil.getNMSClass("network.syncher", "DataWatcher");
private static final Class<?> entityMetadataPacketClass = ReflectionUtil.getNMSClass("network.protocol.game", "PacketPlayOutEntityMetadata"); private static final Class<?> entityMetadataPacketClass = ReflectionUtil.getNMSClass("network.protocol.game", "PacketPlayOutEntityMetadata");
@ -260,7 +260,7 @@ public class MapWrapper {
} }
ReflectionUtil.callMethod(nbtObject, ReflectionUtil.supports(18) ? "a" : "setInt", "map", mapId); ReflectionUtil.callMethod(nbtObject, ReflectionUtil.supports(18) ? "a" : "setInt", "map", mapId);
Object dataWatcher = ReflectionUtil.callConstructor(dataWatcherClass, entityClass.cast(null)); Object dataWatcher = ReflectionUtil.callConstructorNull(dataWatcherClass, entityClass);
Object packet = ReflectionUtil.callConstructor(entityMetadataPacketClass, Object packet = ReflectionUtil.callConstructor(entityMetadataPacketClass,
entityId, entityId,
@ -268,9 +268,9 @@ public class MapWrapper {
true true
); );
List<Object> list = new ArrayList<>(); List list = new ArrayList<>();
Object dataWatcherObject = ReflectionUtil.getDeclaredField(entityItemFrameClass, ReflectionUtil.supports(17) ? "ao" : ReflectionUtil.supports(14) ? "ITEM" : ReflectionUtil.supports(13) ? "e" : "c"); Object dataWatcherObject = ReflectionUtil.getDeclaredField(entityItemFrameClass, ReflectionUtil.supports(17) ? "ao" : ReflectionUtil.supports(14) ? "ITEM" : ReflectionUtil.supports(13) ? "e" : "c");
Object dataWatcherItem = ReflectionUtil.callConstructor(dataWatcherItemClass, dataWatcherObject, nmsStack); Object dataWatcherItem = ReflectionUtil.callFirstConstructor(dataWatcherItemClass, dataWatcherObject, nmsStack);
list.add(dataWatcherItem); list.add(dataWatcherItem);
ReflectionUtil.setDeclaredField(packet, "b", list); ReflectionUtil.setDeclaredField(packet, "b", list);

View file

@ -69,12 +69,18 @@ public class PacketListener extends PacketAdapter {
if (event.getPacketType() == PacketType.Play.Client.USE_ENTITY) { if (event.getPacketType() == PacketType.Play.Client.USE_ENTITY) {
int entityId = event.getPacket().getIntegers().read(0); //entityId int entityId = event.getPacket().getIntegers().read(0); //entityId
WrappedEnumEntityUseAction action = event.getPacket().getEnumEntityUseActions().read(0); WrappedEnumEntityUseAction action = event.getPacket().getEnumEntityUseActions().read(0);
EnumWrappers.EntityUseAction actionEnum = action.getAction(); EnumWrappers.EntityUseAction actionEnum = null;
EnumWrappers.Hand hand = action.getHand(); EnumWrappers.Hand hand = null;
Vector pos = action.getPosition(); Vector pos = null;
try {
actionEnum = action.getAction();
hand = action.getHand();
pos = action.getPosition();
} catch (IllegalArgumentException ignored) {
}
boolean async = !plugin.getServer().isPrimaryThread(); boolean async = !plugin.getServer().isPrimaryThread();
MapInteractEvent interactEvent = new MapInteractEvent(event.getPlayer(), entityId, actionEnum.ordinal(), pos, hand.ordinal(), async); MapInteractEvent interactEvent = new MapInteractEvent(event.getPlayer(), entityId, actionEnum != null ? actionEnum.ordinal() : 0, pos, hand != null ? hand.ordinal() : 0, async);
if (interactEvent.getFrame() != null && interactEvent.getMapWrapper() != null) { if (interactEvent.getFrame() != null && interactEvent.getMapWrapper() != null) {
Bukkit.getPluginManager().callEvent(interactEvent); Bukkit.getPluginManager().callEvent(interactEvent);
if (interactEvent.isCancelled()) event.setCancelled(true); if (interactEvent.isCancelled()) event.setCancelled(true);

View file

@ -36,7 +36,9 @@ import java.lang.reflect.Constructor;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
@ -191,12 +193,13 @@ public class ReflectionUtil {
if (clazz == Byte.class) return byte.class; if (clazz == Byte.class) return byte.class;
if (clazz == Void.class) return void.class; if (clazz == Void.class) return void.class;
if (clazz == Character.class) return char.class; if (clazz == Character.class) return char.class;
if (clazz == ArrayList.class) return Collection.class;
return clazz; return clazz;
} }
private static Class<?>[] toParamTypes(Object... params) { private static Class<?>[] toParamTypes(Object... params) {
return Arrays.stream(params) return Arrays.stream(params)
.map(obj -> wrapperToPrimitive(obj.getClass())) .map(obj -> obj != null ? wrapperToPrimitive(obj.getClass()) : null)
.toArray(Class<?>[]::new); .toArray(Class<?>[]::new);
} }
@ -210,6 +213,32 @@ public class ReflectionUtil {
} }
} }
@Nullable
public static Object callConstructorNull(Class<?> clazz, Class<?> paramClass) {
try {
Constructor<?> con = clazz.getConstructor(paramClass);
con.setAccessible(true);
return con.newInstance(clazz.cast(null));
} catch (NoSuchMethodException | IllegalAccessException | InstantiationException |
InvocationTargetException ex) {
ex.printStackTrace();
return null;
}
}
@Nullable
public static Object callFirstConstructor(Class<?> clazz, Object... params) {
try {
Constructor<?> con = clazz.getConstructors()[0];
con.setAccessible(true);
return con.newInstance(params);
} catch (IllegalAccessException | InstantiationException |
InvocationTargetException ex) {
ex.printStackTrace();
return null;
}
}
@Nullable @Nullable
public static Object callConstructor(Class<?> clazz, Object... params) { public static Object callConstructor(Class<?> clazz, Object... params) {
try { try {
@ -236,6 +265,18 @@ public class ReflectionUtil {
} }
} }
@Nullable
public static Object callMethod(Class<?> clazz, String method, Object... params) {
try {
Method m = clazz.getMethod(method, toParamTypes(params));
m.setAccessible(true);
return m.invoke(null, params);
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) {
ex.printStackTrace();
return null;
}
}
@Nullable @Nullable
public static Object callMethod(Object obj, String method, Object... params) { public static Object callMethod(Object obj, String method, Object... params) {
try { try {
@ -272,6 +313,18 @@ public class ReflectionUtil {
} }
} }
@Nullable
public static Object getDeclaredField(Class<?> clazz, String field) {
try {
Field f = clazz.getDeclaredField(field);
f.setAccessible(true);
return f.get(null);
} catch (NoSuchFieldException | IllegalAccessException ex) {
ex.printStackTrace();
return null;
}
}
@Nullable @Nullable
public static Object getDeclaredField(Object object, String field) { public static Object getDeclaredField(Object object, String field) {
try { try {
@ -288,7 +341,7 @@ public class ReflectionUtil {
try { try {
Field f = object.getClass().getDeclaredField(field); Field f = object.getClass().getDeclaredField(field);
f.setAccessible(true); f.setAccessible(true);
f.set(object, toParamTypes(value)); f.set(object, value);
} catch (NoSuchFieldException | IllegalAccessException ex) { } catch (NoSuchFieldException | IllegalAccessException ex) {
ex.printStackTrace(); ex.printStackTrace();
} }