MySkin [1.8 - 1.16.1] 3.1

Lightweight solution for skins on your Minecraft server.

  1. Blackfire62
    Native Minecraft Version:
    1.15
    Tested Minecraft Versions:
    • 1.8
    • 1.9
    • 1.10
    • 1.11
    • 1.12
    • 1.13
    • 1.14
    • 1.15
    • 1.16
    Languages Supported:
    Translate to your language in localize.yml
    [​IMG]
    About MySkin

    This plugin was made as a lightweight solution for skins on offline mode servers. Skins are seeminglessly restored to players who should have them, and instantly changed to those, who set a skin via command. Plugin is also capable of changing your skin even on online mode servers, which will change your head icon in TAB list as well.

    What does the plugin do
    Restores skins for premium players, respects skins set by /skin command and makes skins visible instantly upon setting.
    Skin data is properly cached, you can choose between the default, file caching or MySQL database based one!

    Minecraft version support

    Plugin supports all versions ranging from 1.8 to latest 1.16.1
    Why doesnt the plugin support 1.7 and less?
    To change your skin in those versions, the plugin would have to mess with your name tag (text above your head), and it would only be visible to other players. Due to insufficient requests and actual uses, this feature is not included, and the plugin will only support versions 1.8 onwards.


    Installation
    To install MySkin, just place the .jar file into /plugins/ folder of your BungeeCord/Bukkit server.

    BungeeCord support
    If your players are connected via BungeeCord, and you want instant skin updates, you need to install MySkin on your desired Bukkit servers as well.
    MySkin will detect BungeeCord mode if its set in spigot.yml in "bungeecord: enabled" and will help out with skin updating automatically.

    Localization
    You can translate all messages which are located in the file "localize.yml" inside MySkin folder.

    Skin Caching options
    Plugin defaults to file based caching, with 3 separate folders inside plugins datafolder, which is done automatically.

    Caching with MySQL is recommended for multiple servers to share.
    So, if you wish to use MySQL for caching instead, you can edit config file and fill information about the MySQL database you want the plugin to connect to.
    Don't forget to enable MYSQL_ENABLED and reload the plugin with /myskin reload, if you want to see instant changes.

    SkinSearch
    Thanks to mcskinsearch.com, we have an option to display random skins in a nice menu in-game.
    This feature is still WorkInProgress, and currently, it only works for 1.13+.
    Thus, its disabled by default. If you want to use this feature, enable it in config. You can configure the amount of rows displayed as well. After accessing the menu with /skinsearch, skins will slowly load as the plugin processess them. The entire process is optimized, so you shouldnt get many rate limited errors despite loading so many skins!
    Please report in anything you like/dislike/want/miss about this feature.

    Commands
    Permissions work for both Bukkit and BungeeCord versions.
    • /skin - Change your or another player's skin
      • Permissions:
        • myskin.skincommand.self - Set skin for yourself
        • myskin.skincommand.other - Set skin for other players
        • myskin.skincommand - For both
    • /myskin - Plugin management
      • Permissions:
        • myskin.myskincommand.reload - Reload config and localization
        • myskin.myskincommand.clearcache - Clear cache
        • myskin.myskincommand.skinof - Show skin of player
        • myskin.myskincommand - Everything
    • /skinseach - Search for a random skin you might like
    • Other permissions:
      • myskin.skinsearchcommand - Everything search related
      • myskin.blacklisted.SKIN_NAME - allow to set blacklisted name
      • myskin.blacklisted* - Allow to set all blacklisted names
    Developer API
    Include MySkin.jar in your project, and do the following to acquire MySkin plugin object.

    For Bukkit:
    Code (Java):
    MySkin myskin = (MySkin) Bukkit.getPluginManager().getPlugin("MySkin");
    For BungeeCord:
    Code (Java):
    MySkin myskin = (MySkin) BungeeCord.getInstance().getPluginManager().getPlugin("MySkin");
    MySkin object exposes these methods:
    Code (Java):
     /**
       * @return MySkin configuration
       */

      public SkinConfig getSkinConfig();
     
      /**
       * @return Skin & Player data cache
       */

      public SkinCache getCache();
     
      /**
       * @return Handler forskin changing
       */

      public SkinHandler getHandler();
     
      /**
       * @return Localization
       */

      public SkinLocalize getLocalize();
     
      public boolean isBungeeMode();
     
      public boolean isOutdated();
    SkinCache and SkinHandler expose these helpful methods:

    Code (Java):
    public abstract interface SkinCache {
        /**
         * Loads the UUID of player's custom set skin.
         *
         * @param player - Player's UUID
         * @return skin's UUID or null if no custom skin is set
        */

        public UUID loadSkinOfPlayer(UUID player);
       
        /**
         * Reset player's custom skin.
         *
         * Reseting custom skin of player casuses plugin to use players default skin (for premium players its their own skin, for non-premium its Steve/Alexa)
         *
         * @param player - Player's UUID
         */

        public void resetSkinOfPlayer(UUID player);
       
        /**
         * Saves the UUID of player's custom set skin.
         *
         * Plugin will now use this skin as player's skin.
         *
         * @param player - Player's UUID
         * @param skin - skin's UUID
         */

        public void saveSkinOfPlayer(UUID player, UUID skin);
       
        /**
         * Loads UUID of skin by name.
         *
         * @param skinname - Name of the skin
         * @return skin's UUID or null if does not exist
         */

        public UUID loadUUID(String skinname);
       
        /**
         * Saves UUID of skin by its name.
         *
         * @param skinname - Name of the skin
         * @param uuid - skin's UUID
         */

        public void saveUUID(String skinname, UUID uuid);
       
        /**
         * Loads SkinProperty by skin's UUID.
         *
         * @param skin - skin's UUID
         * @return SkinProperty object or null if does not exist
         */

        public SkinProperty loadSkinProperty(UUID skin);
       
        /**
         * Saves SkinProperty by skin's UUID.
         *
         * @param skin - skin's UUID
         * @param property - SkinProperty object
         */

        public void saveSkinProperty(UUID skin, SkinProperty property);
    }
    Code (Java):
    public abstract interface SkinHandler
    {  
        /**
         *
         * Changes player's skin data on server.
         *
         * This function does NOT visibly update player skin. Use the update() function for that.
         *
         * @see #update(Object)
         *
         * @param player - Player object (ie. ProxiedPlayer, InitialHandler, Player from Bukkit)
         * @param skinProperty - Skin property object, containing name, value and signature
         */

      public abstract void setSkinProperty(Object player, SkinProperty skinProperty);
     
      /**
       * Updates player's skin.
       *
       * Use this in combinaton with setSkinProperty() to instantly change a player's skin.
       *
       * @see #setSkinProperty(Object, SkinProperty)
       *
       * @param player - Player object (ie. ProxiedPlayer, InitialHandler, Player from Bukkit)
       */

      public abstract void update(Object player);
    }
     
    If you have any questions about usage, which are not explained in comments, or anything else, feel free to ask!



    If you have any feature ideas, please let me know.

    Thanks and have fun!
    RenWuLanMEMZ, I2cy, vokz and 11 others like this.

Recent Updates

  1. Update to 1.16.1
  2. Bugfixes, some new features, etc
  3. Updated for 1.15

Recent Reviews

  1. MiChUxd_
    MiChUxd_
    4/5,
    Version: 3.0
    P L Z Update to 1.16.1 :) a
  2. KingAdolph
    KingAdolph
    5/5,
    Version: 3.0
    Hello, thank you!
    I have a question here: [myskin] plugin myskin v3.0 generated an exception while executing task 5
    java.lang.NumberFormatException : For input string: "{"name":"KingAdolph","id":"fcedb17e"
    At java.lang.NumberFormatException.forInputString (Unknown Source) ~[?: 1.8.0_ 241]
    At java.lang.Long.parseLong (Unknown Source) ~[?: 1.8.0_ 241]
    At java.lang.Long.valueOf (Unknown Source) ~[?: 1.8.0_ 241]
    At java.lang.Long.decode (Unknown Source) ~[?: 1.8.0_ 241]
    At java.util.UUID.fromString (Unknown Source) ~[?: 1.8.0_ 241]
    At eu.blackfire62.myskin.shared.util.MojangAPI.getUUID ( MojangAPI.java:34 ) ~[?:?]
    At eu.blackfire62.myskin.bukkit.command.SkinCommand $ 1.run ( SkinCommand.java:129 ) ~[?:?]
    At org.bukkit.craftbukkit.v1_ 15_ R1.scheduler.CraftTask.run ( CraftTask.java:84 ) ~[patched_ 1.15.2.jar :git-Paper-284]
    At org.bukkit.craftbukkit.v1_ 15_ R1.scheduler.CraftAsyncTask.run ( CraftAsyncTask.java:54 ) ~[patched_ 1.15.2.jar :git-Paper-284]
    At com.destroystokyo.paper.ServerSchedulerReportingWrapper.run ( ServerSchedulerReportingWrapper.java:22 ) ~[patched_ 1.15.2.jar :git-Paper-284]
    At java.util.concurrent.ThreadPoolExecutor.runWorker (Unknown Source) [?: 1.8.0_ 241]
    At java.util.concurrent.ThreadPoolExecutor $ Worker.run (Unknown Source) [?: 1.8.0_ 241]
    At java.lang.Thread.run (Unknown Source) [?: 1.8.0_ 241]
  3. Federe76
    Federe76
    5/5,
    Version: 3.0
    I will edit this review once I test it and see how it works, but it hurts me to see so many non-reviews asking for support. So take these 5 stars for now. Will be adding some input after installing. Keep up the good work.
  4. Temporaly001
    Temporaly001
    1/5,
    Version: 3.0
    Plugin MySkin v3.0 generated an exception while executing task 25.
    Minecraft version 1.15.2 cracked.
  5. DatsMaboi
    DatsMaboi
    5/5,
    Version: 3.0
    Nice work man keep it up. Please don't force bungeecord mode as even tho i have a bungee i dont want to use it.
  6. Horin
    Horin
    2/5,
    Version: 3.0
    There isn't any command to remove a skin, sadly. So once you give someone a skin, you can't remove it, only change it...
    1. Blackfire62
      Author's Response
      This is not the support discussion.
  7. PixelTNT
    PixelTNT
    5/5,
    Version: 3.0
    Ich finde es echt cool da ich schon lange so ein Plugin gesucht habe und es ist auch super das es für jeder Version geht. Geniales Plugin =D
    1. Blackfire62
      Author's Response
      Thank you for the review.
  8. Betob89
    Betob89
    1/5,
    Version: 3.0
    localize.yml not loading on bungecoord .
    1. Blackfire62
      Author's Response
      Review section is not for discussion or bug reports.
  9. solidira
    solidira
    3/5,
    Version: 3.0
    Is it normal that my GUI shows no skin? otherwise everything works perfectly well, it is a very good plugin for crack server
    1. Blackfire62
      Author's Response
      I cant fix that. mcskinsearch.com website went down, if the API comes back up, it will work
  10. Raveun
    Raveun
    1/5,
    Version: 3.0
    This plugin never worked for me whitout sending any message in the console, maybe because im on a LAN server I hope
    1. Blackfire62
      Author's Response
      Maybe its because you cant read, this is a review section, not a support section.