Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.gmail.filoghost.uuidfix;
- import java.lang.reflect.Field;
- import java.lang.reflect.Method;
- import java.lang.reflect.Modifier;
- import java.util.UUID;
- import java.util.logging.Level;
- import net.minecraft.util.com.mojang.authlib.GameProfile;
- import org.bukkit.Bukkit;
- import org.bukkit.entity.Player;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.Listener;
- import org.bukkit.event.player.PlayerLoginEvent;
- import org.bukkit.event.player.PlayerLoginEvent.Result;
- import org.bukkit.plugin.java.JavaPlugin;
- import com.google.common.base.Charsets;
- public class UUIDFix extends JavaPlugin implements Listener {
- private String nmsRoot;
- private String craftbukkitRoot;
- private Class<?> entityHumanClass;
- private Class<?> entityClass;
- private Class<?> craftPlayerClass;
- private Method getHandleMethod;
- private Field gameProfileField;
- private Field idField;
- private Field uniqueIDField;
- @Override
- public void onEnable() {
- try {
- String craftServer = Bukkit.getServer().getClass().getName();
- String craftRoot = craftServer.substring(0, craftServer.lastIndexOf('.'));
- String nmsVersion = craftRoot.substring(craftRoot.lastIndexOf('.') + 1);
- nmsRoot = "net.minecraft.server." + nmsVersion;
- craftbukkitRoot = "org.bukkit.craftbukkit." + nmsVersion;
- entityHumanClass = Class.forName(nmsRoot + ".EntityHuman");
- entityClass = Class.forName(nmsRoot + ".Entity");
- craftPlayerClass = Class.forName(craftbukkitRoot + ".entity.CraftPlayer");
- getHandleMethod = craftPlayerClass.getDeclaredMethod("getHandle");
- gameProfileField = findFieldByClass(entityHumanClass, GameProfile.class);
- removeFinalModifier(gameProfileField);
- gameProfileField.setAccessible(true);
- idField = findFieldByClass(GameProfile.class, UUID.class);
- removeFinalModifier(idField);
- idField.setAccessible(true);
- uniqueIDField = findFieldByClass(entityClass, UUID.class);
- removeFinalModifier(uniqueIDField);
- uniqueIDField.setAccessible(true);
- } catch (Exception ex) {
- getLogger().log(Level.WARNING, "Error loading with reflection", ex);
- }
- Bukkit.getPluginManager().registerEvents(this, this);
- }
- @EventHandler
- public void onLogin(PlayerLoginEvent event) {
- Player player = event.getPlayer();
- if (player.getName().equals(player.getName().toLowerCase())) {
- // Non ha bisogno di essere sistemato
- return;
- }
- System.out.println("Before: " + player.getUniqueId());
- try {
- UUID fixedId = UUID.nameUUIDFromBytes(("OfflinePlayer:" + player.getName().toLowerCase()).getBytes(Charsets.UTF_8));
- Object nmsPlayer = getHandleMethod.invoke(player);
- Object gameProfile = gameProfileField.get(nmsPlayer);
- idField.set(gameProfile, fixedId);
- uniqueIDField.set(nmsPlayer, fixedId);
- } catch (Exception e) {
- event.disallow(Result.KICK_OTHER, "Errore interno, per favore contatta lo staff.");
- e.printStackTrace();
- }
- System.out.println("After: " + player.getUniqueId());
- }
- private Field findFieldByClass(Class<?> source, Class<?> fieldClass) {
- for (Field field : source.getDeclaredFields()) {
- if (field.getType() == fieldClass) {
- return field;
- }
- }
- return null;
- }
- private static void removeFinalModifier(Field field) throws Exception {
- Field fieldModifiers = Field.class.getDeclaredField("modifiers");
- fieldModifiers.setAccessible(true);
- fieldModifiers.setInt(field, field.getModifiers() & ~Modifier.FINAL);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement