Don't send json text on MC 1.7
This commit is contained in:
parent
07f38aa283
commit
00895fc7ab
@ -22,7 +22,6 @@
|
|||||||
|
|
||||||
package me.lucko.luckperms.bukkit.compat;
|
package me.lucko.luckperms.bukkit.compat;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
@ -58,7 +57,7 @@ public class BukkitJsonMessageHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Class<?> packetChatClass = Class.forName(getVersionedClassName("PacketPlayOutChat"));
|
Class<?> packetChatClass = ReflectionUtil.nmsClass("PacketPlayOutChat");
|
||||||
Constructor[] packetConstructors = packetChatClass.getDeclaredConstructors();
|
Constructor[] packetConstructors = packetChatClass.getDeclaredConstructors();
|
||||||
for (Constructor c : packetConstructors) {
|
for (Constructor c : packetConstructors) {
|
||||||
Class<?>[] parameters = c.getParameterTypes();
|
Class<?>[] parameters = c.getParameterTypes();
|
||||||
@ -68,30 +67,19 @@ public class BukkitJsonMessageHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Class<?> baseComponentClass = Class.forName(getVersionedClassName("IChatBaseComponent"));
|
Class<?> baseComponentClass = ReflectionUtil.nmsClass("IChatBaseComponent");
|
||||||
Class<?> chatSerializerClass = baseComponentClass.getClasses()[0];
|
Class<?> chatSerializerClass;
|
||||||
|
|
||||||
|
if (baseComponentClass.getClasses().length > 0) {
|
||||||
|
chatSerializerClass = baseComponentClass.getClasses()[0];
|
||||||
|
} else {
|
||||||
|
// 1.7 class is here instead.
|
||||||
|
chatSerializerClass = ReflectionUtil.nmsClass("ChatSerializer");
|
||||||
|
}
|
||||||
|
|
||||||
SERIALIZE_METHOD = chatSerializerClass.getDeclaredMethod("a", String.class);
|
SERIALIZE_METHOD = chatSerializerClass.getDeclaredMethod("a", String.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String getVersionedClassName(String className) {
|
|
||||||
Class server = Bukkit.getServer().getClass();
|
|
||||||
if (!server.getSimpleName().equals("CraftServer")) {
|
|
||||||
throw new RuntimeException("Couldn't reflect into server " + server);
|
|
||||||
}
|
|
||||||
|
|
||||||
String version;
|
|
||||||
if (server.getName().equals("org.bukkit.craftbukkit.CraftServer")) {
|
|
||||||
// Non versioned class
|
|
||||||
version = ".";
|
|
||||||
} else {
|
|
||||||
version = server.getName().substring("org.bukkit.craftbukkit".length());
|
|
||||||
version = version.substring(0, version.length() - "CraftServer".length());
|
|
||||||
}
|
|
||||||
|
|
||||||
return "net.minecraft.server" + version + className;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static synchronized boolean trySetup(Object player) {
|
private static synchronized boolean trySetup(Object player) {
|
||||||
if (setup) return true;
|
if (setup) return true;
|
||||||
if (triedAndFailed) return false;
|
if (triedAndFailed) return false;
|
||||||
|
@ -37,7 +37,7 @@ public class MessageHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void sendJsonMessage(CommandSender sender, FancyMessage message) {
|
public void sendJsonMessage(CommandSender sender, FancyMessage message) {
|
||||||
if (sender instanceof Player) {
|
if (ReflectionUtil.isChatCompatible() && sender instanceof Player) {
|
||||||
Player player = (Player) sender;
|
Player player = (Player) sender;
|
||||||
String json = message.toJSONString();
|
String json = message.toJSONString();
|
||||||
|
|
||||||
|
@ -0,0 +1,71 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016 Lucko (Luck) <luck@lucko.me>
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package me.lucko.luckperms.bukkit.compat;
|
||||||
|
|
||||||
|
import lombok.experimental.UtilityClass;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
|
||||||
|
@UtilityClass
|
||||||
|
public class ReflectionUtil {
|
||||||
|
private static final String SERVER_VERSION = _getServerVersion();
|
||||||
|
private static final boolean CHAT_COMPATIBLE = !SERVER_VERSION.startsWith(".v1_7_");
|
||||||
|
|
||||||
|
private static String _getServerVersion() {
|
||||||
|
Class<?> server = Bukkit.getServer().getClass();
|
||||||
|
if (!server.getSimpleName().equals("CraftServer")) {
|
||||||
|
return ".";
|
||||||
|
}
|
||||||
|
if (server.getName().equals("org.bukkit.craftbukkit.CraftServer")) {
|
||||||
|
// Non versioned class
|
||||||
|
return ".";
|
||||||
|
} else {
|
||||||
|
String version = server.getName().substring("org.bukkit.craftbukkit".length());
|
||||||
|
return version.substring(0, version.length() - "CraftServer".length());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getServerVersion() {
|
||||||
|
return SERVER_VERSION;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isChatCompatible() {
|
||||||
|
return CHAT_COMPATIBLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String nms(String className) {
|
||||||
|
return "net.minecraft.server" + getServerVersion() + className;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Class<?> nmsClass(String className) throws ClassNotFoundException {
|
||||||
|
return Class.forName(nms(className));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String obc(String className) {
|
||||||
|
return "org.bukkit.craftbukkit" + getServerVersion() + className;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Class<?> obcClass(String className) throws ClassNotFoundException {
|
||||||
|
return Class.forName(obc(className));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user