1.14 support, fixes #105
3 changed files with 75 additions and 12 deletions
6
pom.xml
6
pom.xml
|
@ -223,6 +223,12 @@
|
||||||
<version>1.12.2-R0.1-SNAPSHOT</version>
|
<version>1.12.2-R0.1-SNAPSHOT</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<!-- <dependency>
|
||||||
|
<groupId>org.spigotmc</groupId>
|
||||||
|
<artifactId>spigot</artifactId>
|
||||||
|
<version>1.14.4-R0.1-SNAPSHOT</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency> -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.github.webbukkit</groupId>
|
<groupId>com.github.webbukkit</groupId>
|
||||||
<artifactId>Dynmap-Towny</artifactId>
|
<artifactId>Dynmap-Towny</artifactId>
|
||||||
|
|
|
@ -1,18 +1,65 @@
|
||||||
package buttondevteam.chat;
|
package buttondevteam.chat;
|
||||||
|
|
||||||
|
import buttondevteam.core.MainPlugin;
|
||||||
import buttondevteam.lib.TBMCChatEvent;
|
import buttondevteam.lib.TBMCChatEvent;
|
||||||
import lombok.experimental.UtilityClass;
|
import lombok.experimental.UtilityClass;
|
||||||
import net.minecraft.server.v1_12_R1.EntityHuman.EnumChatVisibility;
|
import lombok.val;
|
||||||
|
import net.minecraft.server.v1_12_R1.ChatComponentUtils;
|
||||||
|
import net.minecraft.server.v1_12_R1.IChatBaseComponent;
|
||||||
import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer;
|
import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
@UtilityClass
|
@UtilityClass
|
||||||
public class VanillaUtils {
|
public class VanillaUtils {
|
||||||
public int getMCScoreIfChatOn(Player p, TBMCChatEvent e) {
|
public int getMCScoreIfChatOn(Player p, TBMCChatEvent e) {
|
||||||
if (!(p instanceof CraftPlayer) || ((CraftPlayer) p).getHandle().getChatFlags() == EnumChatVisibility.FULL) // Only send if client allows chat
|
try {
|
||||||
|
if (isChatOn(p)) // Only send if client allows chat
|
||||||
return e.getMCScore(p);
|
return e.getMCScore(p);
|
||||||
else
|
else
|
||||||
return -1;
|
return -1;
|
||||||
|
} catch (NoClassDefFoundError ex) {
|
||||||
|
MainPlugin.Instance.getLogger().warning("Compatibility error, can't check if the chat is hidden by the player.");
|
||||||
|
return e.getMCScore(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Predicate<Player> isChatOn;
|
||||||
|
|
||||||
|
private boolean isChatOn(Player p) {
|
||||||
|
try {
|
||||||
|
if (isChatOn == null) {
|
||||||
|
val cl = p.getClass();
|
||||||
|
if (!cl.getSimpleName().contains("CraftPlayer")) return true; // p instanceof CraftPlayer
|
||||||
|
val hm = cl.getMethod("getHandle");
|
||||||
|
val handle = hm.invoke(p); //p.getHandle()
|
||||||
|
val vpcl = handle.getClass();
|
||||||
|
val gcfm = vpcl.getMethod("getChatFlags");
|
||||||
|
Class<?> encl;
|
||||||
|
try {
|
||||||
|
encl = Class.forName(handle.getClass().getPackage().getName() + ".EnumChatVisibility");
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
encl = Class.forName(handle.getClass().getPackage().getName() + ".EntityHuman$EnumChatVisibility");
|
||||||
|
}
|
||||||
|
val ff = encl.getField("FULL");
|
||||||
|
val full = ff.get(null); // EnumChatVisibility.FULL
|
||||||
|
isChatOn = pl -> {
|
||||||
|
try {
|
||||||
|
val ph = hm.invoke(pl); //pl.getHandle()
|
||||||
|
val flags = gcfm.invoke(ph); //handle.getChatFlags()
|
||||||
|
return flags == full; //TODO: It's only checked if not global
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return isChatOn.test(p);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*private String version;
|
/*private String version;
|
||||||
|
@ -23,4 +70,13 @@ public class VanillaUtils {
|
||||||
"org.bukkit.craftbukkit.v", "_R1").orElse("1_8").replace("_", "");
|
"org.bukkit.craftbukkit.v", "_R1").orElse("1_8").replace("_", "");
|
||||||
return Short.parseShort(v);
|
return Short.parseShort(v);
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
|
public String tellRaw(Player p, String json) {
|
||||||
|
try {
|
||||||
|
ChatComponentUtils.filterForDisplay(((CraftPlayer) p).getHandle(), //TODO: Reflection
|
||||||
|
IChatBaseComponent.ChatSerializer.a(json), ((CraftPlayer) p).getHandle());
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package buttondevteam.chat.components.towny;
|
package buttondevteam.chat.components.towny;
|
||||||
|
|
||||||
|
import buttondevteam.chat.ChatUtils;
|
||||||
import buttondevteam.chat.PluginMain;
|
import buttondevteam.chat.PluginMain;
|
||||||
import buttondevteam.chat.formatting.TellrawPart;
|
import buttondevteam.chat.formatting.TellrawPart;
|
||||||
import buttondevteam.core.component.channel.Channel;
|
import buttondevteam.core.component.channel.Channel;
|
||||||
|
@ -51,8 +52,8 @@ public class TownyComponent extends Component<PluginMain> {
|
||||||
if (channel.ID.equals(TownChat.ID) || channel.ID.equals(NationChat.ID)) {
|
if (channel.ID.equals(TownChat.ID) || channel.ID.equals(NationChat.ID)) {
|
||||||
((List<TellrawPart>) json.getExtra()).add(0, new TellrawPart("[SPY]"));
|
((List<TellrawPart>) json.getExtra()).add(0, new TellrawPart("[SPY]"));
|
||||||
String jsonstr = toJson.apply(json);
|
String jsonstr = toJson.apply(json);
|
||||||
Bukkit.getServer().dispatchCommand(PluginMain.Console, String.format(
|
ChatUtils.dispatchConsoleCommand(String.format(
|
||||||
"tellraw @a[score_%s=1000,score_%s_min=1000] %s", channel.ID, channel.ID, jsonstr));
|
"tellraw @a[score_%s=1000,score_%s_min=1000] %s", channel.ID, channel.ID, jsonstr), true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue