Помогите Установить скин на игрока

  • Автор темы Автор темы koliab
  • Дата начала Дата начала

koliab

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
kolia1_1
Нужно установить скин на игрока по нику "notch"
 
Возможно прокатит:
player.setPlayerProfile(new CraftPlayerProfile(new GameProfile(player.getUniqueId(), username)));
 
Решение на какую-то часть взято отсюда:
Код:
public boolean setSkin(Player p, String profile_name) {
        CraftPlayer cp = (CraftPlayer) p;
        GameProfile profile = cp.getProfile();
        try {
            profile = GameProfileBuilder.fetch(UUIDFetcher.getUUID(profile_name));
        } catch (Exception e) {
            return false;
        }
       
        Collection<Property> props = profile.getProperties().get("textures");
        cp.getProfile().getProperties().removeAll("textures");
        cp.getProfile().getProperties().putAll("textures", props);
        PacketPlayOutEntityDestroy destroy = new PacketPlayOutEntityDestroy(cp.getEntityId());
        sendPacket(destroy);
        PacketPlayOutPlayerInfo tabremove = new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.REMOVE_PLAYER, cp.getHandle());
        sendPacket(tabremove);
        double health = cp.getHealth();
        Location loc = cp.getLocation();
        cp.setHealth(0);
        new BukkitRunnable() {

            @Override
            public void run() {
                PacketPlayOutPlayerInfo tabadd = new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.ADD_PLAYER, cp.getHandle());
                sendPacket(tabadd);
                PacketPlayOutNamedEntitySpawn spawn = new PacketPlayOutNamedEntitySpawn(cp.getHandle());
                for(Player all : Bukkit.getOnlinePlayers()) {
                    if(!all.getName().equals(cp.getName())) {
                        ((CraftPlayer) p).getHandle().playerConnection.sendPacket(spawn);
                    }
                }
                p.spigot().respawn();
                p.setHealth(health);
                p.teleport(loc);
               
            }
        }.runTaskLater(Main.instance, 4);
        return true;
    }

JSON-щики GameProfileBuilder и UUIDFetcher: http://www.postcrafter.de/viewtopic.php?f=15&t=2116
и http://www.postcrafter.de/viewtopic.php?f=15&t=2186
 
Решение на какую-то часть взято отсюда:
Код:
public boolean setSkin(Player p, String profile_name) {
        CraftPlayer cp = (CraftPlayer) p;
        GameProfile profile = cp.getProfile();
        try {
            profile = GameProfileBuilder.fetch(UUIDFetcher.getUUID(profile_name));
        } catch (Exception e) {
            return false;
        }
      
        Collection<Property> props = profile.getProperties().get("textures");
        cp.getProfile().getProperties().removeAll("textures");
        cp.getProfile().getProperties().putAll("textures", props);
        PacketPlayOutEntityDestroy destroy = new PacketPlayOutEntityDestroy(cp.getEntityId());
        sendPacket(destroy);
        PacketPlayOutPlayerInfo tabremove = new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.REMOVE_PLAYER, cp.getHandle());
        sendPacket(tabremove);
        double health = cp.getHealth();
        Location loc = cp.getLocation();
        cp.setHealth(0);
        new BukkitRunnable() {

            @Override
            public void run() {
                PacketPlayOutPlayerInfo tabadd = new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.ADD_PLAYER, cp.getHandle());
                sendPacket(tabadd);
                PacketPlayOutNamedEntitySpawn spawn = new PacketPlayOutNamedEntitySpawn(cp.getHandle());
                for(Player all : Bukkit.getOnlinePlayers()) {
                    if(!all.getName().equals(cp.getName())) {
                        ((CraftPlayer) p).getHandle().playerConnection.sendPacket(spawn);
                    }
                }
                p.spigot().respawn();
                p.setHealth(health);
                p.teleport(loc);
              
            }
        }.runTaskLater(Main.instance, 4);
        return true;
    }

JSON-щики GameProfileBuilder и UUIDFetcher: http://www.postcrafter.de/viewtopic.php?f=15&t=2116
и http://www.postcrafter.de/viewtopic.php?f=15&t=2186
копец жоска как он меняет скин а можно как то полегче?
 
ну также можно еще сделать так чтобы скин был виден только другим игрокам, но зато не будет шатать самого игрока
 
Решение на какую-то часть взято отсюда:
Код:
public boolean setSkin(Player p, String profile_name) {
        CraftPlayer cp = (CraftPlayer) p;
        GameProfile profile = cp.getProfile();
        try {
            profile = GameProfileBuilder.fetch(UUIDFetcher.getUUID(profile_name));
        } catch (Exception e) {
            return false;
        }
     
        Collection<Property> props = profile.getProperties().get("textures");
        cp.getProfile().getProperties().removeAll("textures");
        cp.getProfile().getProperties().putAll("textures", props);
        PacketPlayOutEntityDestroy destroy = new PacketPlayOutEntityDestroy(cp.getEntityId());
        sendPacket(destroy);
        PacketPlayOutPlayerInfo tabremove = new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.REMOVE_PLAYER, cp.getHandle());
        sendPacket(tabremove);
        double health = cp.getHealth();
        Location loc = cp.getLocation();
        cp.setHealth(0);
        new BukkitRunnable() {

            @Override
            public void run() {
                PacketPlayOutPlayerInfo tabadd = new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.ADD_PLAYER, cp.getHandle());
                sendPacket(tabadd);
                PacketPlayOutNamedEntitySpawn spawn = new PacketPlayOutNamedEntitySpawn(cp.getHandle());
                for(Player all : Bukkit.getOnlinePlayers()) {
                    if(!all.getName().equals(cp.getName())) {
                        ((CraftPlayer) p).getHandle().playerConnection.sendPacket(spawn);
                    }
                }
                p.spigot().respawn();
                p.setHealth(health);
                p.teleport(loc);
             
            }
        }.runTaskLater(Main.instance, 4);
        return true;
    }

JSON-щики GameProfileBuilder и UUIDFetcher: http://www.postcrafter.de/viewtopic.php?f=15&t=2116
и http://www.postcrafter.de/viewtopic.php?f=15&t=2186
И отвалиться на других версиях. Молодец, два.
 
скажи лучше как взять файл из джарника

ПКМ по файлу -> Открыть в WinRAR -> дёргай все файлы которые хочешь.

его прям калбасит

вот версия с другим методом, плюс еще по идее баккит сервер должен заработать при таком методе. но на другие версии младше 1.14.4 это не заработает т.к. изменилась структура функции moveToWorld
Код:
public boolean setSkin(Player p, String profile_name) {
        CraftPlayer cp = (CraftPlayer) p;
        GameProfile profile = cp.getProfile();
        try {
            profile = GameProfileBuilder.fetch(UUIDFetcher.getUUID(profile_name));
        } catch (Exception e) {
            return false;
        }
      
        Collection<Property> props = profile.getProperties().get("textures");
        cp.getProfile().getProperties().removeAll("textures");
        cp.getProfile().getProperties().putAll("textures", props);
        PacketPlayOutEntityDestroy destroy = new PacketPlayOutEntityDestroy(cp.getEntityId());
        sendPacket(destroy);
        PacketPlayOutPlayerInfo tabremove = new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.REMOVE_PLAYER, cp.getHandle());
        sendPacket(tabremove);
        new BukkitRunnable() {

            @Override
            public void run() {
                PacketPlayOutPlayerInfo tabadd = new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.ADD_PLAYER, cp.getHandle());
                sendPacket(tabadd);
                PacketPlayOutNamedEntitySpawn spawn = new PacketPlayOutNamedEntitySpawn(cp.getHandle());
                for(Player all : Bukkit.getOnlinePlayers()) {
                    if(!all.getName().equals(cp.getName())) {
                        ((CraftPlayer) p).getHandle().playerConnection.sendPacket(spawn);
                    }
                }
                ((CraftServer)Bukkit.getServer()).getHandle().moveToWorld(cp.getHandle(), cp.getHandle().getWorldServer().getWorldProvider().getDimensionManager(), false, cp.getLocation(), true);
              
            }
        }.runTaskLater(Main.instance, 4);
        return true;
    }
 
ПКМ по файлу -> Открыть в WinRAR -> дёргай все файлы которые хочешь.



вот версия с другим методом, плюс еще по идее баккит сервер должен заработать при таком методе. но на другие версии младше 1.14.4 это не заработает т.к. изменилась структура функции moveToWorld
Код:
public boolean setSkin(Player p, String profile_name) {
        CraftPlayer cp = (CraftPlayer) p;
        GameProfile profile = cp.getProfile();
        try {
            profile = GameProfileBuilder.fetch(UUIDFetcher.getUUID(profile_name));
        } catch (Exception e) {
            return false;
        }
     
        Collection<Property> props = profile.getProperties().get("textures");
        cp.getProfile().getProperties().removeAll("textures");
        cp.getProfile().getProperties().putAll("textures", props);
        PacketPlayOutEntityDestroy destroy = new PacketPlayOutEntityDestroy(cp.getEntityId());
        sendPacket(destroy);
        PacketPlayOutPlayerInfo tabremove = new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.REMOVE_PLAYER, cp.getHandle());
        sendPacket(tabremove);
        new BukkitRunnable() {

            @Override
            public void run() {
                PacketPlayOutPlayerInfo tabadd = new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.ADD_PLAYER, cp.getHandle());
                sendPacket(tabadd);
                PacketPlayOutNamedEntitySpawn spawn = new PacketPlayOutNamedEntitySpawn(cp.getHandle());
                for(Player all : Bukkit.getOnlinePlayers()) {
                    if(!all.getName().equals(cp.getName())) {
                        ((CraftPlayer) p).getHandle().playerConnection.sendPacket(spawn);
                    }
                }
                ((CraftServer)Bukkit.getServer()).getHandle().moveToWorld(cp.getHandle(), cp.getHandle().getWorldServer().getWorldProvider().getDimensionManager(), false, cp.getLocation(), true);
             
            }
        }.runTaskLater(Main.instance, 4);
        return true;
    }
как-то можно юзать skinrestorer без джарника в plugins?
 
Скин ночта по дефолту? Если да > скачиваешь плагин ChangeSkin / SkinRestorer и лезешь в конфиг
 
Назад
Верх