mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-27 07:20:00 +08:00
05466e3b47
Upstream has released updates that appear to apply compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing. Bukkit Changes: d2834556 SPIGOT-4219: Event for PigZombies angering. CraftBukkit Changes:a9c796f1
SPIGOT-4184: Fix furnaces not matching Vanilla smelt or animations195f071e
SPIGOT-4219: Event for PigZombies angering.5e3082c7
SPIGOT-4230: Improve legacy block types
160 lines
7.0 KiB
Diff
160 lines
7.0 KiB
Diff
From 23918472ceeac090b7d1dc1cacc894ca722fc0a7 Mon Sep 17 00:00:00 2001
|
|
From: Minecrell <minecrell@minecrell.net>
|
|
Date: Wed, 11 Oct 2017 19:30:51 +0200
|
|
Subject: [PATCH] Call PaperServerListPingEvent for legacy pings
|
|
|
|
|
|
diff --git a/src/main/java/com/destroystokyo/paper/network/PaperLegacyStatusClient.java b/src/main/java/com/destroystokyo/paper/network/PaperLegacyStatusClient.java
|
|
new file mode 100644
|
|
index 0000000000..74c012fd40
|
|
--- /dev/null
|
|
+++ b/src/main/java/com/destroystokyo/paper/network/PaperLegacyStatusClient.java
|
|
@@ -0,0 +1,73 @@
|
|
+package com.destroystokyo.paper.network;
|
|
+
|
|
+import com.destroystokyo.paper.event.server.PaperServerListPingEvent;
|
|
+import net.minecraft.server.MinecraftServer;
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
+import org.bukkit.ChatColor;
|
|
+
|
|
+import java.net.InetSocketAddress;
|
|
+
|
|
+import javax.annotation.Nullable;
|
|
+
|
|
+public final class PaperLegacyStatusClient implements StatusClient {
|
|
+
|
|
+ private final InetSocketAddress address;
|
|
+ private final int protocolVersion;
|
|
+ @Nullable private final InetSocketAddress virtualHost;
|
|
+
|
|
+ private PaperLegacyStatusClient(InetSocketAddress address, int protocolVersion, @Nullable InetSocketAddress virtualHost) {
|
|
+ this.address = address;
|
|
+ this.protocolVersion = protocolVersion;
|
|
+ this.virtualHost = virtualHost;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public InetSocketAddress getAddress() {
|
|
+ return this.address;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public int getProtocolVersion() {
|
|
+ return this.protocolVersion;
|
|
+ }
|
|
+
|
|
+ @Nullable
|
|
+ @Override
|
|
+ public InetSocketAddress getVirtualHost() {
|
|
+ return this.virtualHost;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public boolean isLegacy() {
|
|
+ return true;
|
|
+ }
|
|
+
|
|
+ public static PaperServerListPingEvent processRequest(MinecraftServer server,
|
|
+ InetSocketAddress address, int protocolVersion, @Nullable InetSocketAddress virtualHost) {
|
|
+
|
|
+ PaperServerListPingEvent event = new PaperServerListPingEventImpl(server,
|
|
+ new PaperLegacyStatusClient(address, protocolVersion, virtualHost), Byte.MAX_VALUE, null);
|
|
+ server.server.getPluginManager().callEvent(event);
|
|
+
|
|
+ if (event.isCancelled()) {
|
|
+ return null;
|
|
+ }
|
|
+
|
|
+ return event;
|
|
+ }
|
|
+
|
|
+ public static String getMotd(PaperServerListPingEvent event) {
|
|
+ return getFirstLine(event.getMotd());
|
|
+ }
|
|
+
|
|
+ public static String getUnformattedMotd(PaperServerListPingEvent event) {
|
|
+ // Strip color codes and all other occurrences of the color char (because it's used as delimiter)
|
|
+ return getFirstLine(StringUtils.remove(ChatColor.stripColor(event.getMotd()), ChatColor.COLOR_CHAR));
|
|
+ }
|
|
+
|
|
+ private static String getFirstLine(String s) {
|
|
+ int pos = s.indexOf('\n');
|
|
+ return pos >= 0 ? s.substring(0, pos) : s;
|
|
+ }
|
|
+
|
|
+}
|
|
diff --git a/src/main/java/net/minecraft/server/LegacyPingHandler.java b/src/main/java/net/minecraft/server/LegacyPingHandler.java
|
|
index 07c53f5057..91acfceec8 100644
|
|
--- a/src/main/java/net/minecraft/server/LegacyPingHandler.java
|
|
+++ b/src/main/java/net/minecraft/server/LegacyPingHandler.java
|
|
@@ -9,6 +9,7 @@ import java.net.InetSocketAddress;
|
|
import java.nio.charset.StandardCharsets;
|
|
import org.apache.logging.log4j.LogManager;
|
|
import org.apache.logging.log4j.Logger;
|
|
+import com.destroystokyo.paper.network.PaperLegacyStatusClient; // Paper
|
|
|
|
public class LegacyPingHandler extends ChannelInboundHandlerAdapter {
|
|
|
|
@@ -44,11 +45,20 @@ public class LegacyPingHandler extends ChannelInboundHandlerAdapter {
|
|
MinecraftServer minecraftserver = this.b.d();
|
|
int i = bytebuf.readableBytes();
|
|
String s;
|
|
+ com.destroystokyo.paper.event.server.PaperServerListPingEvent event; // Paper
|
|
|
|
switch (i) {
|
|
case 0:
|
|
LegacyPingHandler.a.debug("Ping: (<1.3.x) from {}:{}", inetsocketaddress.getAddress(), Integer.valueOf(inetsocketaddress.getPort()));
|
|
- s = String.format("%s\u00a7%d\u00a7%d", new Object[] { minecraftserver.getMotd(), Integer.valueOf(minecraftserver.A()), Integer.valueOf(minecraftserver.B())});
|
|
+ // Paper start - Call PaperServerListPingEvent and use results
|
|
+ event = PaperLegacyStatusClient.processRequest(minecraftserver, inetsocketaddress, 39, null);
|
|
+ if (event == null) {
|
|
+ channelhandlercontext.close();
|
|
+ break;
|
|
+ }
|
|
+ s = String.format("%s\u00a7%d\u00a7%d", PaperLegacyStatusClient.getUnformattedMotd(event), event.getNumPlayers(), event.getMaxPlayers());
|
|
+
|
|
+ // Paper end
|
|
this.a(channelhandlercontext, this.a(s));
|
|
break;
|
|
|
|
@@ -57,8 +67,15 @@ public class LegacyPingHandler extends ChannelInboundHandlerAdapter {
|
|
return;
|
|
}
|
|
|
|
- LegacyPingHandler.a.debug("Ping: (1.4-1.5.x) from {}:{}", inetsocketaddress.getAddress(), Integer.valueOf(inetsocketaddress.getPort()));
|
|
- s = String.format("\u00a71\u0000%d\u0000%s\u0000%s\u0000%d\u0000%d", new Object[] { Integer.valueOf(127), minecraftserver.getVersion(), minecraftserver.getMotd(), Integer.valueOf(minecraftserver.A()), Integer.valueOf(minecraftserver.B())});
|
|
+ // Paper start - Call PaperServerListPingEvent and use results
|
|
+ event = PaperLegacyStatusClient.processRequest(minecraftserver, inetsocketaddress, 61, null);
|
|
+ if (event == null) {
|
|
+ channelhandlercontext.close();
|
|
+ break;
|
|
+ }
|
|
+ s = String.format("\u00a71\u0000%d\u0000%s\u0000%s\u0000%d\u0000%d", event.getProtocolVersion(), event.getVersion(),
|
|
+ PaperLegacyStatusClient.getMotd(event), event.getNumPlayers(), event.getMaxPlayers());
|
|
+ // Paper end
|
|
this.a(channelhandlercontext, this.a(s));
|
|
break;
|
|
|
|
@@ -170,8 +187,16 @@ public class LegacyPingHandler extends ChannelInboundHandlerAdapter {
|
|
|
|
a.debug("Ping: (1.6) from {}", ctx.channel().remoteAddress());
|
|
|
|
- String response = String.format("\u00a71\u0000%d\u0000%s\u0000%s\u0000%d\u0000%d",
|
|
- Byte.MAX_VALUE, server.getVersion(), server.getMotd(), server.getPlayerCount(), server.getMaxPlayers());
|
|
+ InetSocketAddress virtualHost = com.destroystokyo.paper.network.PaperNetworkClient.prepareVirtualHost(host, port);
|
|
+ com.destroystokyo.paper.event.server.PaperServerListPingEvent event = PaperLegacyStatusClient.processRequest(
|
|
+ server, (InetSocketAddress) ctx.channel().remoteAddress(), protocolVersion, virtualHost);
|
|
+ if (event == null) {
|
|
+ ctx.close();
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ String response = String.format("\u00a71\u0000%d\u0000%s\u0000%s\u0000%d\u0000%d", event.getProtocolVersion(), event.getVersion(),
|
|
+ PaperLegacyStatusClient.getMotd(event), event.getNumPlayers(), event.getMaxPlayers());
|
|
this.a(ctx, this.a(response));
|
|
}
|
|
|
|
--
|
|
2.18.0
|
|
|