99 lines
3.5 KiB
Java
99 lines
3.5 KiB
Java
package eu.univento.core.api;
|
|
|
|
import net.minecraft.server.v1_8_R3.IChatBaseComponent;
|
|
import net.minecraft.server.v1_8_R3.PacketPlayOutPlayerListHeaderFooter;
|
|
import net.minecraft.server.v1_8_R3.PacketPlayOutTitle;
|
|
import net.minecraft.server.v1_8_R3.PlayerConnection;
|
|
import org.bukkit.ChatColor;
|
|
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
|
|
import org.bukkit.entity.Player;
|
|
|
|
import java.lang.reflect.Field;
|
|
|
|
//TODO: find real author, its not me
|
|
/**
|
|
* sends title to player
|
|
* @author joethei
|
|
* @version 1.0
|
|
*/
|
|
public class Title {
|
|
|
|
/**
|
|
* send title to player
|
|
* @param player Player
|
|
* @param fadeIn Integer
|
|
* @param stay Integer
|
|
* @param fadeOut Integer
|
|
* @param title String
|
|
* @param subtitle String
|
|
*/
|
|
public static void sendTitle(Player player, Integer fadeIn, Integer stay, Integer fadeOut, String title, String subtitle) {
|
|
PlayerConnection connection = ((CraftPlayer) player).getHandle().playerConnection;
|
|
|
|
PacketPlayOutTitle packetPlayOutTimes = new PacketPlayOutTitle(PacketPlayOutTitle.EnumTitleAction.TIMES, null, fadeIn.intValue(), stay.intValue(), fadeOut.intValue());
|
|
connection.sendPacket(packetPlayOutTimes);
|
|
|
|
if (subtitle != null) {
|
|
subtitle = subtitle.replaceAll("%player%", player.getDisplayName());
|
|
subtitle = ChatColor.translateAlternateColorCodes('&', subtitle);
|
|
IChatBaseComponent titleSub = IChatBaseComponent.ChatSerializer.a("{\"text\": \"" + subtitle + "\"}");
|
|
PacketPlayOutTitle packetPlayOutSubTitle = new PacketPlayOutTitle(PacketPlayOutTitle.EnumTitleAction.SUBTITLE, titleSub);
|
|
connection.sendPacket(packetPlayOutSubTitle);
|
|
}
|
|
|
|
if (title != null) {
|
|
title = title.replaceAll("%player%", player.getDisplayName());
|
|
title = ChatColor.translateAlternateColorCodes('&', title);
|
|
IChatBaseComponent titleMain = IChatBaseComponent.ChatSerializer.a("{\"text\": \"" + title + "\"}");
|
|
PacketPlayOutTitle packetPlayOutTitle = new PacketPlayOutTitle(PacketPlayOutTitle.EnumTitleAction.TITLE, titleMain);
|
|
connection.sendPacket(packetPlayOutTitle);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* sends tab title to player
|
|
* @param player Player
|
|
* @param header String
|
|
* @param footer String
|
|
*/
|
|
public static void sendTabTitle(Player player, String header, String footer) {
|
|
if (header == null)
|
|
header = "";
|
|
header = ChatColor.translateAlternateColorCodes('&', header);
|
|
|
|
if (footer == null)
|
|
footer = "";
|
|
footer = ChatColor.translateAlternateColorCodes('&', footer);
|
|
|
|
header = header.replaceAll("%player%", player.getDisplayName());
|
|
footer = footer.replaceAll("%player%", player.getDisplayName());
|
|
|
|
PlayerConnection connection = ((CraftPlayer) player).getHandle().playerConnection;
|
|
IChatBaseComponent tabTitle = IChatBaseComponent.ChatSerializer.a("{\"text\": \"" + header + "\"}");
|
|
IChatBaseComponent tabFoot = IChatBaseComponent.ChatSerializer.a("{\"text\": \"" + footer + "\"}");
|
|
PacketPlayOutPlayerListHeaderFooter headerPacket = new PacketPlayOutPlayerListHeaderFooter(tabTitle);
|
|
try {
|
|
Field field = headerPacket.getClass().getDeclaredField("b");
|
|
field.setAccessible(true);
|
|
field.set(headerPacket, tabFoot);
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
} finally {
|
|
connection.sendPacket(headerPacket);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* checks if String is integer
|
|
* @param s String
|
|
* @return boolean
|
|
*/
|
|
boolean isInteger(String s) {
|
|
try {
|
|
Integer.parseInt(s);
|
|
} catch (NumberFormatException e) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
} |