Core/src/main/java/eu/univento/core/api/player/NickName.java

219 lines
7.1 KiB
Java

package eu.univento.core.api.player;
import com.mojang.authlib.GameProfile;
import com.mojang.authlib.properties.Property;
import eu.univento.core.Core;
import eu.univento.core.api.database.MySQL;
import net.minecraft.server.v1_9_R1.Packet;
import net.minecraft.server.v1_9_R1.PacketPlayOutEntityDestroy;
import net.minecraft.server.v1_9_R1.PacketPlayOutNamedEntitySpawn;
import net.minecraft.server.v1_9_R1.PacketPlayOutPlayerInfo;
import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Random;
/**
* gets nick settings for players
* @author joethei
* @version 1.1
*/
public class NickName {
private static HashMap<CustomPlayer, String> nicks = new HashMap<>();
private static Field nameField = getField(GameProfile.class, "name");
/**
*
* @param p remove nickname from player
*/
public static void remove(CustomPlayer p) {
if (nicks.containsKey(p))
nicks.remove(p);
}
/**
* sets nick boolean
* @param p player
* @param nick boolean
* @throws ClassNotFoundException Class couldn't be found
* @throws SQLException SQL server not available or throwing error
*/
static void setNick(CustomPlayer p, boolean nick) throws SQLException, ClassNotFoundException {
MySQL sql = Core.returnSQL();
sql.openConnection();
if (nick)
sql.getConnection().createStatement().executeUpdate("UPDATE PlayerSettings SET nick = '1' WHERE ID = '" + p.getID() + "';");
else
sql.getConnection().createStatement().executeUpdate("UPDATE PlayerSettings SET nick = '0' WHERE ID = '" + p.getID() + "';");
sql.closeConnection();
}
/**
* gets if player is nicked
* @param p player
* @return true / false
* @throws ClassNotFoundException Class couldn't be found
* @throws SQLException SQL server not available or throwing error
*/
static boolean isNicked(CustomPlayer p) throws SQLException, ClassNotFoundException {
MySQL sql = Core.returnSQL();
sql.openConnection();
ResultSet rs = sql.getConnection().createStatement().executeQuery("SELECT nick FROM PlayerSettings WHERE ID = '" + p.getID() + "';");
if (rs.next()) {
boolean is = rs.getInt("nick") == 1;
sql.closeConnection();
return is;
}
sql.closeConnection();
return false;
}
/**
* gets nickname of player
* @param p player
* @return String
*/
static String getNick(CustomPlayer p) {
if (nicks.containsKey(p)) {
return nicks.get(p);
}else if(p.isNicked()){
nicks.put(p, getRandomNick());
return nicks.get(p);
}
return null;
}
/**
* gets random Nickname
* @return String
*/
private static String getRandomNick() {
ArrayList<String> names = new ArrayList<>();
names.add("GommeHD");
names.add("Notch");
names.add("12ms");
names.add("Coriux");
names.add("Kekse");
names.add("AFK");
names.add("13ms");
names.add("Inhaltsangabe");
names.add("LassMichEinfach");
names.add("Inventar");
names.add("DDoS");
names.add("Upps");
names.add("Hater");
names.add("ServerOwner");
names.add("HastDuMinecraft");
names.add("Telekom");
names.add("TeamBlauNurGute");
names.add("Stats");
names.add("Herbst");
names.add("IchHabTwitter");
names.add("Versager");
names.add("ImmerAmSterben");
names.add("Lagmolia");
names.add("Bowspammer");
names.add("Behindert");
names.add("DasProgramm");
names.add("DasPlugin");
names.add("Staubsauger");
names.add("Buchstabe");
names.add("gekickt");
names.add("Einfachpermaban");
names.add("KeinNameWarFrei");
names.add("KlopapierIstLeer");
names.add("Packungsbeilage");
names.add("HabKeinRewiPremium");
names.add("PermaBanAufGomme");
names.add("Vorteil");
names.add("Nachteil");
names.add("Oberteil");
names.add("Einstellung");
names.add("Verbindung");
names.add("WarAFKWasWar");
Random r = new Random();
int i = r.nextInt(names.size());
return names.get(i);
}
static void changeSkin(CustomPlayer p, String name) {
Skin skin = new Skin(Bukkit.getOfflinePlayer(name).getUniqueId().toString().replace("_", ""));
if(skin.getName() != null) {
GameProfile profile = p.getProfile();
profile.getProperties().clear();
profile.getProperties().put(skin.getName(), new Property(skin.getName(), skin.getValue(), skin.getSignature()));
Bukkit.getScheduler().runTaskLater(Core.getInstance(), () -> {
for(Player players : Bukkit.getOnlinePlayers()) {
players.hidePlayer(p);
}
}, 1L);
Bukkit.getScheduler().runTaskLater(Core.getInstance(), () -> {
for(Player players : Bukkit.getOnlinePlayers()) {
players.showPlayer(p);
}
}, 1L);
}
}
static void setName(CustomPlayer p, String name) {
p.setDisplayName(name);
try {
nameField.set(p.getProfile(), name);
PacketPlayOutEntityDestroy destroy = new PacketPlayOutEntityDestroy(p.getEntityId());
sendPacket(destroy);
removeFromTablist(p);
new BukkitRunnable() {
@Override
public void run() {
addToTablist(p);
PacketPlayOutNamedEntitySpawn spawn = new PacketPlayOutNamedEntitySpawn(p.getHandle());
Bukkit.getOnlinePlayers().stream().filter(players -> !players.equals(p)).forEach(players -> {
((CraftPlayer) players).getHandle().playerConnection.sendPacket(spawn);
});
}
}.runTaskLater(Core.getInstance(), 4);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
private static void addToTablist(CraftPlayer p) {
PacketPlayOutPlayerInfo packet = new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER, p.getHandle());
sendPacket(packet);
}
private static void removeFromTablist(CraftPlayer cp) {
PacketPlayOutPlayerInfo packet = new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, cp.getHandle());
sendPacket(packet);
}
private static void sendPacket(Packet<?> packet) {
for(Player players : Bukkit.getOnlinePlayers()) {
((CraftPlayer)players).getHandle().playerConnection.sendPacket(packet);
}
}
private static Field getField(Class<?> clazz, String name) {
try{
Field field = clazz.getDeclaredField(name);
field.setAccessible(true);
return field;
}catch (NoSuchFieldException | SecurityException e) {
e.printStackTrace();
return null;
}
}
}