219 lines
7.1 KiB
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;
|
|
}
|
|
}
|
|
} |