MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    Problème serveur skin + cape

    Planifier Épinglé Verrouillé Déplacé Sans suite
    6 Messages 2 Publieurs 1.8k Vues 1 Watching
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • mathmatboyM Hors-ligne
      mathmatboy
      dernière édition par

      Tout d’abord salut tout le monde 😄

      Aujourd’hui j’essais faire un serveur skin + cape via mon mods mais j’y arrive pas ! j’ai gossé la dessus de plus de 2h pour trouver mon problème mais bref, j’ai pas trouver. A l’instant je vais vous montrer tout se que j’ai fait pour serveur skin + cape

      ma class PlayerCustom

      
      package fr.fruitkit.robotykh.warfury.common;
      
      import java.net.HttpURLConnection;
      import java.net.URL;
      
      import net.minecraft.util.StringUtils;
      
      public class PlayerCustom {
      
      private static String connexion (String adress, String par0Str, String part){
      int code=404;
      try {
      URL u = new URL (adress);
      HttpURLConnection huc = ( HttpURLConnection ) u.openConnection ();
      huc.setRequestMethod ("GET");
      huc.connect () ;
      code = huc.getResponseCode() ;
      System.out.println("SKINURL:code "+code);
      if (code == HttpURLConnection.HTTP_OK)
      return adress;else if (code == HttpURLConnection.HTTP_MOVED_TEMP
      || code == HttpURLConnection.HTTP_MOVED_PERM
      || code == HttpURLConnection.HTTP_SEE_OTHER) {
      String newUrl = huc.getHeaderField("Location");
      huc = (HttpURLConnection) new URL(newUrl).openConnection();
      huc.setRequestMethod ("GET");
      huc.connect ();
      code = huc.getResponseCode();
      System.out.println("SKINURL:code "+code);
      if (code == HttpURLConnection.HTTP_OK)
      return newUrl;
      }
      }
      catch(Exception e){
      System.out.println("SKINURL:Bad Url.");
      }
      return String.format("http://skins.minecraft.net/Minecraft"+ part + "/%s.png", new Object[] {StringUtils.stripControlCodes(par0Str)});
      }
      
      public static String getURLSkinCustom(String par0Str)
      {
      String adress=String.format("http://www.warfurypvp.com/skins/skins/%s.png", new Object[] {StringUtils.stripControlCodes(par0Str)});
      return connexion(adress, par0Str, "Skins");
      }
      
      public static String getURLCapeCustom(String par0Str)
      {
      String adress=String.format("http://www.warfurypvp.com/skins//capes/%s.png", new Object[] {StringUtils.stripControlCodes(par0Str)});
      return connexion(adress, par0Str, "Cloaks");
      }
      
      }
      
      

      ma class SkinClassTransformer

      
      package fr.fruitkit.robotykh.warfury.common;
      
      import static org.objectweb.asm.Opcodes.ARETURN;
      import static org.objectweb.asm.Opcodes.ALOAD;
      import static org.objectweb.asm.Opcodes.INVOKESTATIC;
      import java.util.Iterator;
      import org.objectweb.asm.ClassReader;
      import org.objectweb.asm.ClassWriter;
      import org.objectweb.asm.tree.ClassNode;
      import org.objectweb.asm.tree.InsnList;
      import org.objectweb.asm.tree.InsnNode;
      import org.objectweb.asm.tree.MethodInsnNode;
      import org.objectweb.asm.tree.MethodNode;
      import org.objectweb.asm.tree.VarInsnNode;
      
      public class SkinClassTransformer implements net.minecraft.launchwrapper.IClassTransformer {
      
      @Override
      public byte[] transform(String arg0, String arg1, byte[] arg2) {
      if (arg0.equals("beu")) {
      System.out.println("********* INSIDE OBFUSCATED AbstractClientPlayer TRANSFORMER ABOUT TO PATCH: " + arg0);
      return patchClassASM(arg0, arg2, true);
      }
      
      if (arg0.equals("net.minecraft.client.entity.AbstractClientPlayer")) {
      System.out.println("********* INSIDE AbstractClientPlayer TRANSFORMER ABOUT TO PATCH: " + arg0);
      return patchClassASM(arg0, arg2, false);
      }
      return arg2;
      }
      
      public byte[] patchClassASM(String name, byte[] bytes, boolean obfuscated) {
      
      String targetMethod1Name = "", targetMethod2Name = "";
      boolean ok1 = false, ok2 = false;
      
      if(obfuscated == true) {
      targetMethod1Name ="d";
      targetMethod2Name = "e";
      }
      else {
      targetMethod1Name ="getSkinUrl";
      targetMethod2Name = "getCapeUrl";
      }
      
      ClassNode classNode = new ClassNode();
      ClassReader classReader = new ClassReader(bytes);
      classReader.accept(classNode, 0);
      
      Iterator <methodnode>methods = classNode.methods.iterator();
      while(methods.hasNext())
      {
      MethodNode m = methods.next();
      System.out.println("********* Method Name: "+m.name + " Desc:" + m.desc);
      
      if ((m.name.equals(targetMethod1Name) && m.desc.equals("(Ljava/lang/String;)Ljava/lang/String;")))
      {
      System.out.println("********* Inside target method1!");
      
      InsnList toInject = new InsnList();
      toInject.add(new VarInsnNode(ALOAD, 0));
      toInject.add(new MethodInsnNode(INVOKESTATIC, "fr/fruitkit/robotykh/warfury/common/PlayerCustom", "getURLSkinCustom", "(Ljava/lang/String;)Ljava/lang/String;"));
      toInject.add(new InsnNode(ARETURN));
      
      m.instructions = toInject;
      ok1 = true;
      System.out.println("Patching Method1 Complete!");
      }
      else if ((m.name.equals(targetMethod2Name) && m.desc.equals("(Ljava/lang/String;)Ljava/lang/String;")))
      {
      System.out.println("********* Inside target2 method!");
      InsnList toInject = new InsnList();
      
      toInject.add(new VarInsnNode(ALOAD, 0));
      toInject.add(new MethodInsnNode(INVOKESTATIC, "fr/fruitkit/robotykh/warfury/common/PlayerCustom", "getURLCapeCustom", "(Ljava/lang/String;)Ljava/lang/String;"));
      toInject.add(new InsnNode(ARETURN));
      m.instructions = toInject;
      ok2 = true;
      System.out.println("Patching Method2 Complete!");
      }
      
      if(ok1 && ok2)
      break;
      }
      
      ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
      classNode.accept(writer);
      return writer.toByteArray();
      }
      }
      
      

      ma class SkinDummyContainer

      
      package fr.fruitkit.robotykh.warfury.common;
      
      import java.util.Arrays;
      
      import com.google.common.eventbus.EventBus;
      
      import cpw.mods.fml.common.DummyModContainer;
      import cpw.mods.fml.common.LoadController;
      import cpw.mods.fml.common.Mod.EventHandler;
      import cpw.mods.fml.common.ModMetadata;
      import cpw.mods.fml.common.event.FMLConstructionEvent;
      import cpw.mods.fml.common.event.FMLInitializationEvent;
      import cpw.mods.fml.common.event.FMLPostInitializationEvent;
      import cpw.mods.fml.common.event.FMLPreInitializationEvent;
      
      public class SkinDummyContainer extends DummyModContainer {
      
      public SkinDummyContainer() {
      super(new ModMetadata());
      ModMetadata meta = getMetadata();
      meta.modId = "warfuryskins";
      meta.name = "WarFury Skins";
      meta.version = "1.0"; //String.format("%d.%d.%d.%d", majorVersion, minorVersion, revisionVersion, buildVersion);
      meta.credits = "RobotykH & Mathmatboy";
      meta.authorList = Arrays.asList("RobotykH");
      meta.description = "Faite votre skin et uploader le ici: http://www.warfurypvp.com/skins/";
      meta.url = "http://www.warfurypvp.com/skins/";
      meta.updateUrl = "";
      meta.screenshots = new String[0];
      meta.logoFile = "";
      
      }
      
      @EventHandler
      public boolean registerBus(EventBus bus, LoadController controller) {
      bus.register(this);
      return true;
      }
      
      @EventHandler
      public void modConstruction(FMLConstructionEvent event){
      
      }
      
      @EventHandler
      public void init(FMLInitializationEvent evt) {
      
      }
      
      @EventHandler
      public void preInit(FMLPreInitializationEvent event) {
      
      }
      
      @EventHandler
      public void postInit(FMLPostInitializationEvent evt) {
      
      }
      
      }
      
      

      ma class SkinFMLLoadingPlugin

      
      package fr.fruitkit.robotykh.warfury.common;
      
      import java.io.File;
      import java.util.Map;
      
      import cpw.mods.fml.relauncher.IFMLLoadingPlugin;
      
      public class SkinFMLLoadingPlugin implements IFMLLoadingPlugin {
      
      public String[] getLibraryRequestClass() {
      return null;
      }
      
      @Override
      public String[] getASMTransformerClass() {
      return new String[]{SkinClassTransformer.class.getName()};
      }
      
      @Override
      public String getModContainerClass() {
      return SkinDummyContainer.class.getName();
      }
      
      @Override
      public String getSetupClass() {
      return null;
      }
      
      @Override
      public void injectData(Map <string, object="">data) {
      
      }
      
      @Override
      public String getAccessTransformerClass() {
      return new String(SkinClassTransformer.class.getName());
      }
      
      }
      
      

      Bref, merci de donner un coup de main ! car la je galère un peu :P</string,></methodnode>

      1 réponse Dernière réponse Répondre Citer 0
      • robin4002R Hors-ligne
        robin4002 Moddeurs confirmés Rédacteurs Administrateurs
        dernière édition par

        toInject.add(new MethodInsnNode(INVOKESTATIC, “fr/fruitkit/robotykh/warfury/common/PlayerCustom”, “getURLCapeCustom”, “(Ljava/lang/String;)Ljava/lang/String;”));
        Tu es sûr que c’est bon ça ?
        Tu as pas mit tes packages donc je ne sais pas.

        1 réponse Dernière réponse Répondre Citer 0
        • mathmatboyM Hors-ligne
          mathmatboy
          dernière édition par

          Bon je vais toute réedit les chose afin que vous aurez tout

          Mais oui c’est supposer d’être bon mon package s’appel vraiment comme sa


          EDIT : Voila tout est rédit

          1 réponse Dernière réponse Répondre Citer 0
          • robin4002R Hors-ligne
            robin4002 Moddeurs confirmés Rédacteurs Administrateurs
            dernière édition par

            Je ne pas t’aider, je ne maîtrise pas l’asm 😕 (faudrait vraiment que j’apprenne ça quand j’aurai le temps)

            1 réponse Dernière réponse Répondre Citer 0
            • mathmatboyM Hors-ligne
              mathmatboy
              dernière édition par

              Ok pas grave mais quelqu’un s’aurait sa serait quoi mon erreur ?

              1 réponse Dernière réponse Répondre Citer 0
              • mathmatboyM Hors-ligne
                mathmatboy
                dernière édition par

                Pas personnes c’est quoi mon erreur ?

                1 réponse Dernière réponse Répondre Citer 0
                • 1 / 1
                • Premier message
                  Dernier message
                Design by Woryk
                ContactMentions Légales

                MINECRAFT FORGE FRANCE © 2024

                Powered by NodeBB