Compare commits

...
11 Commits
Author SHA1 Message Date
NEZNAMY c231220b42 2.9.2 2021-07-10 13:01:29 +02:00
NEZNAMY 1c6e5bec73 fix IllegalArgument 2021-07-10 12:57:16 +02:00
NEZNAMY 8919aaad94 add missing config option 2021-07-09 16:42:10 +02:00
NEZNAMY ff6a2fe734 equals 2021-07-09 11:58:18 +02:00
NEZNAMY 5ca4f7e411 2.9.2-pre3 2021-07-07 17:13:01 +02:00
NEZNAMY 2c105718b0 1.17.1 support 2021-07-07 17:10:37 +02:00
NEZNAMY 9cc471f66f catch throwable in pipeline 2021-07-06 21:20:47 +02:00
NEZNAMY e18867c938 do not ignore Errors 2021-07-06 21:01:46 +02:00
NEZNAMY 27bd942c4c fix NoSuchFieldError on <1.11 2021-07-06 21:01:36 +02:00
NEZNAMY 234ca72e73 tab out stack traces 2021-07-06 21:01:17 +02:00
NEZNAMY f35a09a34d avoid rare NPE 2021-07-06 19:54:19 +02:00
20 changed files with 62 additions and 37 deletions

No files matched your search

+1 -1
View File
@@ -5,7 +5,7 @@
<parent>
<groupId>me.neznamy</groupId>
<artifactId>TAB</artifactId>
<version>2.9.2-pre2</version>
<version>2.9.2</version>
</parent>
<artifactId>bukkit</artifactId>
@@ -328,10 +328,12 @@ public class BukkitPacketBuilder implements PacketBuilder {
* @throws InstantiationException
*/
public Object buildEntityDestroyPacket(int id) throws InstantiationException, IllegalAccessException, InvocationTargetException {
if (nms.getMinorVersion() >= 17) {
try {
return nms.getConstructor("PacketPlayOutEntityDestroy").newInstance(new int[] {id});
} catch (IllegalArgumentException e) {
//1.17.0
return nms.getConstructor("PacketPlayOutEntityDestroy").newInstance(id);
}
return nms.getConstructor("PacketPlayOutEntityDestroy").newInstance(new int[] {id});
}
/**
@@ -101,12 +101,12 @@ public class BukkitPipelineInjector extends PipelineInjector {
tab.getFeatureManager().onObjective(player, packet);
}
tab.getFeatureManager().onPacketSend(player, packet);
} catch (Exception e){
} catch (Throwable e){
tab.getErrorManager().printError("An error occurred when reading packets", e);
}
try {
super.write(context, packet, channelPromise);
} catch (Exception e) {
} catch (Throwable e) {
tab.getErrorManager().printError("Failed to forward packet " + packet.getClass().getSimpleName() + " to " + player.getName(), e);
}
}
@@ -131,7 +131,7 @@ public class BukkitPipelineInjector extends PipelineInjector {
continue;
}
if (!tab.getFeatureManager().getNameTagFeature().getPlayersInDisabledWorlds().contains(p) && !p.hasTeamHandlingPaused() &&
!p.getTeamName().equals(teamName)) {
!teamName.equals(p.getTeamName())) {
logTeamOverride(teamName, entry);
} else {
newList.add(entry);
@@ -79,7 +79,7 @@ public class Main extends JavaPlugin {
Bukkit.getConsoleSender().sendMessage("\u00a7c[TAB] Your server version is marked as compatible, but a compatibility issue was found. Please report the error below (include your server version & fork too)");
Bukkit.getConsoleSender().sendMessage(ex.getClass().getName() + ": " + ex.getMessage());
for (StackTraceElement e : ex.getStackTrace()) {
Bukkit.getConsoleSender().sendMessage(e.toString());
Bukkit.getConsoleSender().sendMessage("\t" + e.toString());
}
} else {
Bukkit.getConsoleSender().sendMessage("\u00a7c[TAB] Your server version is completely unsupported. This plugin version only supports 1.5.x - 1.17. Disabling.");
@@ -311,13 +311,13 @@ public class BukkitArmorStand implements ArmorStand {
if (vehicle.getType().toString().contains("HORSE")) { //covering all 3 horse types
return vehicle.getLocation().getY() + 0.85;
}
if (vehicle.getType() == EntityType.DONKEY) {
if (vehicle.getType().toString().equals("DONKEY")) { //1.11+
return vehicle.getLocation().getY() + 0.525;
}
if (vehicle.getType() == EntityType.PIG) {
return vehicle.getLocation().getY() + 0.325;
}
if (vehicle.getType().toString().equals("STRIDER")) { //added in 1.16
if (vehicle.getType().toString().equals("STRIDER")) { //1.16+
return vehicle.getLocation().getY() + 1.15;
}
}
@@ -57,6 +57,7 @@ public class PacketListener implements RawPacketListener {
return packet;
}
@SuppressWarnings("unchecked")
@Override
public void onPacketSend(TabPlayer receiver, Object packet) throws IllegalAccessException {
if (receiver.getVersion().getMinorVersion() < 8) return;
@@ -71,7 +72,12 @@ public class PacketListener implements RawPacketListener {
onEntitySpawn(receiver, nms.getField("PacketPlayOutNamedEntitySpawn_ENTITYID").getInt(packet));
} else if (nms.getClass("PacketPlayOutEntityDestroy").isInstance(packet)) {
if (nms.getMinorVersion() >= 17) {
onEntityDestroy(receiver, nms.getField("PacketPlayOutEntityDestroy_ENTITIES").getInt(packet));
try {
onEntityDestroy(receiver, (List<Integer>) nms.getField("PacketPlayOutEntityDestroy_ENTITIES").get(packet));
} catch (ClassCastException e) {
//1.17.0
onEntityDestroy(receiver, nms.getField("PacketPlayOutEntityDestroy_ENTITIES").getInt(packet));
}
} else {
onEntityDestroy(receiver, (int[]) nms.getField("PacketPlayOutEntityDestroy_ENTITIES").get(packet));
}
@@ -83,7 +89,7 @@ public class PacketListener implements RawPacketListener {
* @param receiver - packet receiver
* @param entityId - entity that moved
*/
public void onEntityMove(TabPlayer receiver, int entityId) {
private void onEntityMove(TabPlayer receiver, int entityId) {
TabPlayer pl = nameTagX.getEntityIdMap().get(entityId);
List<Entity> vehicleList;
if (pl != null) {
@@ -100,20 +106,30 @@ public class PacketListener implements RawPacketListener {
}
}
public void onEntitySpawn(TabPlayer receiver, int entityId) {
private void onEntitySpawn(TabPlayer receiver, int entityId) {
TabPlayer spawnedPlayer = nameTagX.getEntityIdMap().get(entityId);
if (spawnedPlayer != null && spawnedPlayer.isLoaded()) {
tab.getCPUManager().runMeasuredTask("processing NamedEntitySpawn", getFeatureType(), UsageType.PACKET_NAMED_ENTITY_SPAWN, () -> spawnedPlayer.getArmorStandManager().spawn(receiver));
}
}
public void onEntityDestroy(TabPlayer receiver, int... entities) {
private void onEntityDestroy(TabPlayer receiver, List<Integer> entities) {
for (int entity : entities) {
TabPlayer despawnedPlayer = nameTagX.getEntityIdMap().get(entity);
if (despawnedPlayer != null && despawnedPlayer.isLoaded())
tab.getCPUManager().runMeasuredTask("processing EntityDestroy", getFeatureType(), UsageType.PACKET_ENTITY_DESTROY, () -> despawnedPlayer.getArmorStandManager().destroy(receiver));
onEntityDestroy(receiver, entity);
}
}
private void onEntityDestroy(TabPlayer receiver, int... entities) {
for (int entity : entities) {
onEntityDestroy(receiver, entity);
}
}
private void onEntityDestroy(TabPlayer receiver, int entity) {
TabPlayer despawnedPlayer = nameTagX.getEntityIdMap().get(entity);
if (despawnedPlayer != null && despawnedPlayer.isLoaded())
tab.getCPUManager().runMeasuredTask("processing EntityDestroy", getFeatureType(), UsageType.PACKET_ENTITY_DESTROY, () -> despawnedPlayer.getArmorStandManager().destroy(receiver));
}
@Override
public TabFeature getFeatureType() {
@@ -258,8 +258,9 @@ public class NMSStorage {
classes.put("PacketPlayOutEntityMetadata", getNMSClass("net.minecraft.network.protocol.game.PacketPlayOutEntityMetadata", "PacketPlayOutEntityMetadata", "Packet40EntityMetadata"));
classes.put("PacketPlayOutNamedEntitySpawn", getNMSClass("net.minecraft.network.protocol.game.PacketPlayOutNamedEntitySpawn", "PacketPlayOutNamedEntitySpawn", "Packet20NamedEntitySpawn"));
constructors.put("PacketPlayOutEntityMetadata", getClass("PacketPlayOutEntityMetadata").getConstructor(int.class, getClass("DataWatcher"), boolean.class));
constructors.put("PacketPlayOutEntityDestroy", getConstructor(getClass("PacketPlayOutEntityDestroy"), 1));
fields.put("PacketPlayOutEntity_ENTITYID", getFields(getClass("PacketPlayOutEntity"), int.class).get(0));
fields.put("PacketPlayOutEntityDestroy_ENTITIES", getClass("PacketPlayOutEntityDestroy").getDeclaredFields()[0]);
fields.get("PacketPlayOutEntityDestroy_ENTITIES").setAccessible(true);
fields.put("PacketPlayOutEntityMetadata_LIST", getFields(getClass("PacketPlayOutEntityMetadata"), List.class).get(0));
fields.put("PacketPlayOutNamedEntitySpawn_ENTITYID", getFields(getClass("PacketPlayOutNamedEntitySpawn"), int.class).get(0));
if (minorVersion >= 7) {
@@ -269,9 +270,12 @@ public class NMSStorage {
}
if (minorVersion >= 17) {
classes.put("PacketPlayInUseEntity$d", Class.forName("net.minecraft.network.protocol.game.PacketPlayInUseEntity$d"));
fields.put("PacketPlayOutEntityDestroy_ENTITIES", getFields(getClass("PacketPlayOutEntityDestroy"), int.class).get(0));
} else {
fields.put("PacketPlayOutEntityDestroy_ENTITIES", getFields(getClass("PacketPlayOutEntityDestroy"), int[].class).get(0));
}
try {
constructors.put("PacketPlayOutEntityDestroy", getClass("PacketPlayOutEntityDestroy").getConstructor(int[].class));
} catch (NoSuchMethodException e) {
//1.17.0
constructors.put("PacketPlayOutEntityDestroy", getClass("PacketPlayOutEntityDestroy").getConstructor(int.class));
}
}
+1 -1
View File
@@ -5,7 +5,7 @@
<parent>
<groupId>me.neznamy</groupId>
<artifactId>TAB</artifactId>
<version>2.9.2-pre2</version>
<version>2.9.2</version>
</parent>
<artifactId>bungeecord</artifactId>
@@ -108,12 +108,12 @@ public class BungeePipelineInjector extends PipelineInjector {
tab.getFeatureManager().onLoginPacket(player);
return;
}
} catch (Exception e){
} catch (Throwable e){
tab.getErrorManager().printError("An error occurred when analyzing packets for player " + player.getName() + " with client version " + player.getVersion().getFriendlyName(), e);
}
try {
super.write(context, modifiedPacket, channelPromise);
} catch (Exception e) {
} catch (Throwable e) {
tab.getErrorManager().printError("Failed to forward packet " + modifiedPacket.getClass().getSimpleName() + " to " + player.getName(), e);
}
}
+2 -6
View File
@@ -5,7 +5,7 @@
<parent>
<groupId>me.neznamy</groupId>
<artifactId>TAB</artifactId>
<version>2.9.2-pre2</version>
<version>2.9.2</version>
</parent>
<artifactId>jar</artifactId>
<build>
@@ -21,11 +21,7 @@
<includes>
<include>com.googlecode.json-simple:json-simple</include>
<include>com.github.NEZNAMY:YamlAssist</include>
<include>com.github.NEZNAMY:VelocityPacketInjector</include>
<include>org.bstats:bstats-base</include>
<include>org.bstats:bstats-bukkit</include>
<include>org.bstats:bstats-bungeecord</include>
<include>org.bstats:bstats-velocity</include>
<include>org.bstats:*</include>
<include>me.neznamy:*</include>
</includes>
</artifactSet>
+1 -1
View File
@@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>me.neznamy</groupId>
<artifactId>TAB</artifactId>
<version>2.9.2-pre2</version>
<version>2.9.2</version>
<packaging>pom</packaging>
<description>An all-in-one solution that works</description>
<modules>
+1 -1
View File
@@ -5,7 +5,7 @@
<parent>
<groupId>me.neznamy</groupId>
<artifactId>TAB</artifactId>
<version>2.9.2-pre2</version>
<version>2.9.2</version>
</parent>
<artifactId>shared</artifactId>
@@ -121,13 +121,13 @@ public class ErrorManager {
tab.getPlatform().sendConsoleMessage("&c[TAB] An error occurred when printing error message into file", true);
tab.getPlatform().sendConsoleMessage(ex.getClass().getName() + ": " + ex.getMessage(), true);
for (StackTraceElement e : ex.getStackTrace()) {
tab.getPlatform().sendConsoleMessage(e.toString(), true);
tab.getPlatform().sendConsoleMessage("\t" + e.toString(), true);
}
tab.getPlatform().sendConsoleMessage("&c[TAB] Original error: " + message, true);
if (error != null) {
tab.getPlatform().sendConsoleMessage(error.getClass().getName() + ": " + error.getMessage(), true);
for (StackTraceElement e : error.getStackTrace()) {
tab.getPlatform().sendConsoleMessage(e.toString(), true);
tab.getPlatform().sendConsoleMessage("\t" + e.toString(), true);
}
}
}
@@ -6,6 +6,7 @@ package me.neznamy.tab.shared;
public enum ProtocolVersion {
UNKNOWN (999),
V1_17_1 (756),
V1_17 (755),
V1_16_5 (754),
V1_16_4 (754),
@@ -25,7 +25,7 @@ public class TAB {
private static TAB instance;
//version of plugin
public static final String PLUGIN_VERSION = "2.9.2-pre2";
public static final String PLUGIN_VERSION = "2.9.2";
//player data
private final Map<UUID, TabPlayer> data = new ConcurrentHashMap<>();
@@ -178,7 +178,7 @@ public class CPUManager {
exe.submit(() -> {
try {
task.run();
} catch (Exception e) {
} catch (Exception | Error e) {
errorManager.printError("An error occurred when " + errorDescription, e);
}
});
@@ -13,7 +13,7 @@ import me.neznamy.tab.shared.TAB;
public class UpdateChecker {
//separate field to prevent false flag on pre releases
private String currentRelease = "2.9.1";
private String currentRelease = "2.9.2";
public UpdateChecker(TAB tab) {
new Thread(() -> {
@@ -10,6 +10,11 @@
sorting-type: GROUPS
sorting-placeholder: "%some_level_maybe?%"
#if sorting type is set to PLACEHOLDER, list all possible outputs here in order you want them in tablist
placeholder-order:
- value1
- value2
#by default, names are sorted as A-Z _ a-z
#by disabling you will make it Aa-Zz
#this also applies for everything else, such as sorting by placeholder (factions, ..)
+1 -1
View File
@@ -5,7 +5,7 @@
<parent>
<groupId>me.neznamy</groupId>
<artifactId>TAB</artifactId>
<version>2.9.2-pre2</version>
<version>2.9.2</version>
</parent>
<artifactId>velocity-1.1.0</artifactId>
@@ -150,6 +150,7 @@ public class VelocityTabPlayer extends ProxyTabPlayer {
for (PlayerInfoData data : packet.getEntries()) {
switch (packet.getAction()) {
case ADD_PLAYER:
if (player.getTabList().containsEntry(data.getUniqueId())) continue;
player.getTabList().addEntry(TabListEntry.builder()
.tabList(player.getTabList())
.displayName(data.getDisplayName() == null ? null : Main.stringToComponent(data.getDisplayName().toString(getVersion())))