• Envoyer des packets pendant l'handshaking

    Déplacé Résolu 1.12.2
    4
    0 Votes
    4 Messages
    670 Vues
    ShE3pyS
    Bon au final après avoir regardé du côté des packets du FML j’ai trouvé un truc assez simple pour envoyer des packets avant que le joueur soit entièrement connecté, il m’a suffit d’enregistrer de nouveaux packets. J’envoie la classe (imparfaite) pour ceux à qui ça pourrait intéresser : package fr.she3py.mods.zeptopia.network; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Map; import io.netty.channel.Channel; import io.netty.channel.ChannelFutureListener; import net.minecraft.client.network.NetHandlerPlayClient; import net.minecraft.network.EnumConnectionState; import net.minecraft.network.EnumPacketDirection; import net.minecraft.network.INetHandler; import net.minecraft.network.NetHandlerPlayServer; import net.minecraft.network.Packet; import net.minecraftforge.fml.common.network.FMLNetworkEvent; import net.minecraftforge.fml.common.network.handshake.NetworkDispatcher; import net.minecraftforge.fml.relauncher.ReflectionHelper; import net.minecraftforge.fml.relauncher.ReflectionHelper.UnableToFindMethodException; public class DirectNetworkWrapper { private static final Method REGISTERER; static { try { REGISTERER = ReflectionHelper.findMethod(EnumConnectionState.class, "registerPacket", "a", EnumPacketDirection.class, Class.class); REGISTERER.setAccessible(true); } catch(UnableToFindMethodException | SecurityException e) { throw new RuntimeException("Unable to retrieve the method to register packets", e); } } public static void registerPacket(final EnumPacketDirection direction, final Class <? extends Packet<? >> packetClass) { try { REGISTERER.invoke(EnumConnectionState.PLAY, direction, packetClass); } catch(IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { throw new RuntimeException("Unable to register a packet", e); } } public static void sendThrough(final Channel channel, final Packet<?> packet) { channel.writeAndFlush(packet).addListener(ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE); } public static <E extends FMLNetworkEvent<? extends INetHandler>> void sendToRemote(final E event, final Packet<?> packet) { sendThrough(event.getManager().channel(), packet); } public static <H extends INetHandler> void sendToRemote(final H handler, final Packet<?> packet) { if(handler instanceof NetHandlerPlayServer) sendThrough(((NetHandlerPlayServer) handler).netManager.channel(), packet); else sendThrough(((NetHandlerPlayClient) handler).getNetworkManager().channel(), packet); } } Il faut juste enregistrer les packets customs dans le CommonProxy via registerPacket(direction, packetClass), puis dans un évènement FMLNetworkEvent faire sendToRemote(event, packet), ou sendToRemote(handler, packet) dans un packet. Cordialement, ShE3py.
  • [1.12.2] reset TileEntity en changeant le blockState

    Déplacé Résolu 1.12.2
    3
    0 Votes
    3 Messages
    497 Vues
    C
    @lebossmax2 Merci, ça fait deux heures que j’essaie de corriger ça ^_^ .
  • [1.12.2] crash paquet

    Déplacé Résolu 1.12.2
    3
    0 Votes
    3 Messages
    556 Vues
    C
    A oui, j’ai enregistré 2 fois PacketUpdateBarrel, et pour le nombre de canaux j’ai : visualAnimation pour les infos d’animation TESR network pour les paquets qui peuvent être utiliser pour plusieurs chose et après j’aurai un canal par métier et la je suis sur le métier du travailleur de cuir J’ai un nouveau crash mais je vais d’abord voir si je peux trouver moi même.
  • Texture d'un mob [1.12]

    Déplacé Résolu 1.12.x
    5
    0 Votes
    5 Messages
    864 Vues
    YorwanY
    Ca fonctionne, merci
  • Modification d'un mod/ problème d'import/ 1.12.2

    Déplacé Résolu 1.12.2
    4
    0 Votes
    4 Messages
    482 Vues
    Superloup10S
    Regarde sur le forum, tu trouveras des tutoriels qui t’expliquent comment setup un environnement de développement sous Forge.
  • Calcule Metadata

    Résolu 1.12.x
    2
    0 Votes
    2 Messages
    625 Vues
    robin4002R
    Salut, En effet ce n’est pas possible, tu ne peux pas mettre plus de 4 variantes sur ce même bloc comme tu as 4 états pour FACING. Il te faut donc deux blocs.
  • Block invisible avec ItemBlock custom

    Résolu 1.12.x
    7
    0 Votes
    7 Messages
    1k Vues
    C
    @‘robin4002’: Dans ce cas je ne sais pas d’où cela vient D’accord, merci quand même.
  • Comment utiliser getRessourceAsStream/CraftinHelper.findfile?

    Résolu 1.12.x
    3
    0 Votes
    3 Messages
    822 Vues
    PoulpoGazP
    En faite, là je peux juste le lire(quand je le lis j’obtiens juste un chiffre) ou sinon je comprend pas comment récupérer le contenue et pouvoir l’utiliser. [EDIT] Ouais bah en faite c’est bon merci.
  • Question sur les différentes version pour le modding.

    Résolu 1.12.x
    5
    0 Votes
    5 Messages
    850 Vues
    SpyManS
    si tu veut des tutos qui marche en 1.12 ya MrCrayfish qui en a fait quelque un sur ca chaine youtube et si ta besoin d’aide pour comprendre ou faire un truc envoi moi un mp discord je peut d’aider ou demande a d’autres membres du discord de MFF si ils sont dispo (moi perso j’ai toujours trouvé reponse a mes soucis avec le discord ou le forum)
  • Problème à l'enregistrement des NBT TileEntity

    Résolu 1.12.x
    9
    0 Votes
    9 Messages
    1k Vues
    C
    @‘robin4002’: à l’aide de ctx tu peux obtenir le joueur comme ceci : ctx.getServerHandler().playerEntity. Avec ça tu peux avoir son container (EntityPlayer#openContainer) depuis lequel tu peux avoir le tile entity. Autre solution, depuis le joueur tu as le world et donc tu peux envoyer dans le paquet les coordonnées x, y, z pour ensuite obtenir get le tile entity depuis player.world. Merci, ça marche nickel ! 
  • Arc Bug de Rendu

    Résolu 1.12.x
    3
    0 Votes
    3 Messages
    733 Vues
    SpyManS
    je regarde
  • Problème gradlew build avec le mods open sources de Eydamos

    Déplacé Résolu forgegradle
    6
    0 Votes
    6 Messages
    1k Vues
    Superloup10S
    En fait, ton build.gradle n’est pas bon. buildscript { repositories { mavenCentral() maven { name 'MCForge Repo' url "http://files.minecraftforge.net/maven/" } maven { name = "sonatype" url = "https://oss.sonatype.org/content/repositories/snapshots/" } maven { name 'CB Repo' url "http://chickenbones.net/maven/" } } dependencies { classpath 'net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT' } } Cette partie ne concerne que les plugins Gradle. Pour rajouter le maven d’une dépendance, il faut mettre ça : repositories { maven { name 'CB Repo' url "http://chickenbones.net/maven/" } } au dessus du bloc dependencies.
  • Cycle jour/nuit

    Résolu 1.12.x
    14
    0 Votes
    14 Messages
    2k Vues
    L
    J’ai ca mais rien pour les hp NetworkPlayerInfo element = it.next(); String life =  MC.ingameGUI.getTabList().getPlayerName(element) + " : " + " / 20"; Ceci à l’air de marcher PlayerList players = FMLClientHandler.instance().getServer().getPlayerList();         GameProfile[] playerProfiles = players.getOnlinePlayerProfiles();            if(playerProfiles != null)    {     int i = 0;     for(GameProfile playerProfile : playerProfiles)     {     String life = playerProfile.getName() + " : " + players.getPlayerByUsername(playerProfile.getName()).getHealth() + " / 20";         Gui.drawRect(width - 5 - MC.fontRenderer.getStringWidth(life), 64+i*(2 + MC.fontRenderer.FONT_HEIGHT), width - 2, 64+(i+1)*(2 + MC.fontRenderer.FONT_HEIGHT), Integer.MIN_VALUE);         MC.fontRenderer.drawString(life, width - 3 - MC.fontRenderer.getStringWidth(life), 66+i*(2 + MC.fontRenderer.FONT_HEIGHT), Color.YELLOW.getRGB());         i++;     }        }
  • Empêcher destruction block

    Résolu 1.12.x
    6
    0 Votes
    6 Messages
    1k Vues
    Izuka_I
    AH ! Oups j’suis arrivé trop tard
  • Obtenir la direction du regard d'un joueur

    Résolu 1.12.x
    7
    0 Votes
    7 Messages
    1k Vues
    DeletedD
    Il n’y a qu’une seule classe MathHelper à ce que je sache. Ca donne les integer correspondant à la direction, comme indiqués sur le topic.
  • Probleme de textures

    Résolu 1.12.x
    4
    0 Votes
    4 Messages
    790 Vues
    S
    @‘BrokenSwing’: En 1.12.2 il faut que tu appelles ModelLoader#setCustomModelLocation pendant l’event ModelRegistryEvent. Merci Beaucoup !
  • Envoyer un message sur le chat ?

    Résolu 1.12.x
    5
    0 Votes
    5 Messages
    900 Vues
    C
    @‘robin4002’: Salut, ITextComponent est une interface, elle ne peut pas être instancié. Il faut mettre une classe qui implémente cette interface (TextComponentString par exemple) Merci beaucoup robin Je  comprends mieux le message d’erreur tout de suite. Je n’avais pas fais la recherche sur la bonne partie du message d’erreur. Merci encore et bonne soirée
  • Hammer qui mine du 3x3x1

    Résolu 1.12.x
    3
    0 Votes
    3 Messages
    1k Vues
    C
    Voici la solution public RayTraceResult rayTrace(double blockReachDistance, float partialTicks, World w, EntityLivingBase e)     {         Vec3d vec3d = e.getPositionEyes(partialTicks);         Vec3d vec3d1 = e.getLook(partialTicks);         Vec3d vec3d2 = vec3d.addVector(vec3d1.x * blockReachDistance, vec3d1.y * blockReachDistance, vec3d1.z * blockReachDistance);         return w.rayTraceBlocks(vec3d, vec3d2, false, false, true);     }     @Override     public boolean onBlockDestroyed(ItemStack breaker, World w, IBlockState state, BlockPos pos, EntityLivingBase e)     {         if (e instanceof EntityPlayer && !w.isRemote)         {             EntityPlayer p = (EntityPlayer) e;             RayTraceResult r = this.rayTrace(5.0D, 0.0F, w, e);             if (r.typeOfHit == RayTraceResult.Type.BLOCK)             {                 int x = pos.getX();                 int y = pos.getY();                 int z = pos.getZ();                 EnumFacing side = r.sideHit;                 // Y                 // UP - DOWN                 if (side == EnumFacing.DOWN || side == EnumFacing.UP)                 {                     this.destroyAndDropBlock(w, p, breaker, x + 1, y, z - 1);                     this.destroyAndDropBlock(w, p, breaker, x + 1, y, z);                     this.destroyAndDropBlock(w, p, breaker, x + 1, y, z + 1);                     this.destroyAndDropBlock(w, p, breaker, x, y, z - 1);                     // Middle block                     this.destroyAndDropBlock(w, p, breaker, x, y, z + 1);                     this.destroyAndDropBlock(w, p, breaker, x - 1, y, z - 1);                     this.destroyAndDropBlock(w, p, breaker, x - 1, y, z);                     this.destroyAndDropBlock(w, p, breaker, x - 1, y, z + 1);                 }                 // Z                 // NORTH - SOUTH                 else if (side == EnumFacing.NORTH || side == EnumFacing.SOUTH)                 {                     this.destroyAndDropBlock(w, p, breaker, x + 1, y + 1, z);                     this.destroyAndDropBlock(w, p, breaker, x, y + 1, z);                     this.destroyAndDropBlock(w, p, breaker, x - 1, y + 1, z);                     this.destroyAndDropBlock(w, p, breaker, x + 1, y, z);                     // Middle block                     this.destroyAndDropBlock(w, p, breaker, x - 1, y, z);                     this.destroyAndDropBlock(w, p, breaker, x + 1, y - 1, z);                     this.destroyAndDropBlock(w, p, breaker, x, y - 1, z);                     this.destroyAndDropBlock(w, p, breaker, x - 1, y - 1, z);                 }                 // X                 // EAST - WEST                 else if (side == EnumFacing.EAST || side == EnumFacing.WEST)                 {                     this.destroyAndDropBlock(w, p, breaker, x, y + 1, z + 1);                     this.destroyAndDropBlock(w, p, breaker, x, y + 1, z);                     this.destroyAndDropBlock(w, p, breaker, x, y + 1, z - 1);                     this.destroyAndDropBlock(w, p, breaker, x, y, z + 1);                     // Middle block                     this.destroyAndDropBlock(w, p, breaker, x, y, z - 1);                     this.destroyAndDropBlock(w, p, breaker, x, y - 1, z + 1);                     this.destroyAndDropBlock(w, p, breaker, x, y - 1, z);                     this.destroyAndDropBlock(w, p, breaker, x, y - 1, z - 1);                 }                 return true;             }         }         return super.onBlockDestroyed(breaker, w, state, pos, e);     }     private void destroyAndDropBlock(World w, EntityPlayer p, ItemStack breaker, int x, int y, int z)     {         BlockPos pos = new BlockPos(x, y, z);         w.getBlockState(pos).getBlock().harvestBlock(w, p, pos, w.getBlockState(pos), w.getTileEntity(pos), breaker);         w.setBlockToAir(pos);     }
  • Problème avec mes ressources (ou mon code, ou les deux)

    Résolu 1.12.x
    10
    0 Votes
    10 Messages
    1k Vues
    robin4002R
    Ah oui, j’y avais pensé quand j’ai posté ce message @‘robin4002’: “axis=x,variant=wbreak”: {                “model”: “md:log”,                “x”: 90,                “y”: 90            }, Mais j’avais plus fait attention lors de ma dernière réponse. Je ne sais plus si les propriétés sont dans l’ordre alphabétique ou dans l’ordre dans laquelle ils sont mis dans la fonction createBlockState, mais en tout cas vu tes logs axis devait être en premier.
  • Ce sujet a été supprimé !

    Résolu
    5
    0 Votes
    5 Messages
    795 Vues