Skip to content

Commit

Permalink
Fix Folia support
Browse files Browse the repository at this point in the history
  • Loading branch information
Elikill58 committed Apr 28, 2024
1 parent 29a6553 commit 2299798
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
public abstract class SpigotVersionAdapter extends VersionAdapter<Player> {

protected Method getPlayerHandle, getEntityLookup, getBukkitEntity;
protected Field recentTpsField, pingField, tpsField, playerConnectionField;
protected Field recentTpsField, tpsField, playerConnectionField;
protected Field minX, minY, minZ, maxX, maxY, maxZ, entityLookup;
protected Object dedicatedServer;

Expand All @@ -49,23 +49,15 @@ public SpigotVersionAdapter(int protocolVersion) {

getPlayerHandle = PacketUtils.getObcClass("entity.CraftPlayer").getDeclaredMethod("getHandle");

Class<?> entityPlayerClass = PacketUtils.getNmsClass("EntityPlayer", "server.level.");
if (version.isNewerOrEquals(Version.V1_20_2)) {
Class<?> ServerCommonPacketListenerImplClass = PacketUtils.getNmsClass("ServerCommonPacketListenerImpl", "server.network.");
pingField = ServerCommonPacketListenerImplClass.getDeclaredField("i");
pingField.setAccessible(true);
playerConnectionField = entityPlayerClass.getDeclaredField("c");
} else if (version.isNewerOrEquals(Version.V1_20)) {
pingField = entityPlayerClass.getDeclaredField("f");
playerConnectionField = entityPlayerClass.getDeclaredField("c");
Class<?> entityPlayerClass = PacketUtils.getNmsClass(SubPlatform.getSubPlatform().equals(SubPlatform.FOLIA) ? "ServerPlayer" : "EntityPlayer", "server.level.");
if (version.isNewerOrEquals(Version.V1_20)) {
playerConnectionField = entityPlayerClass.getDeclaredField(SubPlatform.getSubPlatform().equals(SubPlatform.FOLIA) ? "connection" : "c");
} else if (version.isNewerOrEquals(Version.V1_17)) {
pingField = entityPlayerClass.getDeclaredField("e");
playerConnectionField = entityPlayerClass.getDeclaredField("b");
} else {
pingField = entityPlayerClass.getDeclaredField("ping");
playerConnectionField = entityPlayerClass.getDeclaredField("playerConnection");
}
Class<?> bbClass = PacketUtils.getNmsClass("AxisAlignedBB", "world.phys.");
Class<?> bbClass = PacketUtils.getNmsClass(SubPlatform.getSubPlatform().equals(SubPlatform.FOLIA) ? "AABB" : "AxisAlignedBB", "world.phys.");

if (version.isNewerOrEquals(Version.V1_13) && hasMinField(bbClass)) {
minX = bbClass.getDeclaredField("minX");
Expand All @@ -87,7 +79,7 @@ public SpigotVersionAdapter(int protocolVersion) {
this.getBukkitEntity = PacketUtils.getNmsClass("Entity", "world.entity.").getDeclaredMethod("getBukkitEntity");

if (version.isNewerOrEquals(Version.V1_17)) {
Class<?> worldServer = PacketUtils.getNmsClass("WorldServer", "server.level.");
Class<?> worldServer = PacketUtils.getNmsClass(SubPlatform.getSubPlatform().equals(SubPlatform.FOLIA) ? "ServerLevel" : "WorldServer", "server.level.");

try {
getEntityLookup = worldServer.getDeclaredMethod("getEntityLookup");
Expand Down Expand Up @@ -132,7 +124,7 @@ public int getPlayerPing(Player player) {
if (version.isNewerOrEquals(Version.V1_17)) {
return (int) player.getClass().getDeclaredMethod("getPing").invoke(player);
} else {
return pingField.getInt(getPlayerHandle.invoke(player));
return PacketUtils.getNmsClass("EntityPlayer", "server.level.").getDeclaredField("ping").getInt(getPlayerHandle.invoke(player));
}
} catch (Exception e) {
e.printStackTrace();
Expand Down Expand Up @@ -168,7 +160,7 @@ public Object getPlayerConnection(Player p) {
public Object getNetworkManager(Player p) {
try {
Object playerConnection = getPlayerConnection(p);
return new PacketContent(playerConnection).getSpecificModifier(PacketUtils.getNmsClass("NetworkManager", "network.")).readSafely(0);
return new PacketContent(playerConnection).getSpecificModifier(PacketUtils.getNmsClass(SubPlatform.getSubPlatform().equals(SubPlatform.FOLIA) ? "Connection" : "NetworkManager", "network.")).readSafely(0);
} catch (Exception e) {
e.printStackTrace();
return null;
Expand Down Expand Up @@ -220,7 +212,7 @@ public List<ChannelFuture> getFuturChannel() {
public BoundingBox getBoundingBox(Entity et) {
try {
Object ep = PacketUtils.getNMSEntity(et);
Object bb = ReflectionUtils.getFirstWith(ep, PacketUtils.getNmsClass("Entity", "world.entity."), PacketUtils.getNmsClass("AxisAlignedBB", "world.phys."));
Object bb = ReflectionUtils.getFirstWith(ep, PacketUtils.getNmsClass("Entity", "world.entity."), PacketUtils.getNmsClass(SubPlatform.getSubPlatform().equals(SubPlatform.FOLIA) ? "AABB" : "AxisAlignedBB", "world.phys."));

double minX = this.minX.getDouble(bb);
double minY = this.minY.getDouble(bb);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.elikill58.negativity.spigot.nms;

import com.elikill58.negativity.spigot.SubPlatform;
import com.elikill58.negativity.spigot.utils.PacketUtils;

public class Spigot_1_20_R3 extends SpigotVersionAdapter {
Expand All @@ -10,6 +11,6 @@ public Spigot_1_20_R3() {

@Override
public String getTpsFieldName() {
return "ac";
return SubPlatform.getSubPlatform().equals(SubPlatform.FOLIA) ? "tickTimesNanos" : "ac";
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.elikill58.negativity.spigot.nms;

import com.elikill58.negativity.spigot.SubPlatform;
import com.elikill58.negativity.spigot.utils.PacketUtils;

public class Spigot_1_20_R4 extends SpigotVersionAdapter {
Expand All @@ -10,6 +11,6 @@ public Spigot_1_20_R4() {

@Override
public String getTpsFieldName() {
return "ab";
return SubPlatform.getSubPlatform().equals(SubPlatform.FOLIA) ? "tickTimesNanos" : "ab";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -175,8 +175,11 @@ public static Object getWorldServer(World w) {
public static int getProtocolVersion() {
try {
Class<?> sharedConstants = PacketUtils.getNmsClass("SharedConstants", "");
try { // try get value directly
return (int) sharedConstants.getDeclaredField("RELEASE_NETWORK_PROTOCOL_VERSION").get(null);
} catch (Exception e) { e.printStackTrace(); }
return (int) sharedConstants.getDeclaredMethod("c").invoke(null);
} catch (Exception e) {} // ignore because it's just an old version
} catch (Exception e) { e.printStackTrace(); } // ignore because it's just an old version
try {
Class<?> serverClazz = getNmsClass("MinecraftServer", "server.");
Object server = serverClazz.getDeclaredMethod("getServer").invoke(null);
Expand Down

0 comments on commit 2299798

Please sign in to comment.