IExtendedProperties sur Entité (hors Joueur)



  • Salut !

    J'essaye d'appliquer des IExtendedProperties à une entité seulement, à la ligne 72 par exemple je me retrouve confronter à ça,

    EntityPlayer player = Minecraft.getMinecraft().thePlayer;
    

    Simple de changer EntityPlayer en EntitySeat, seulement comment déterminer ce qu'il faut mettre de l'autre côté du =, comment prendre LE EntitySeat qu'il me faut… ?

    Bonne soirée 😉


  • Administrateurs

    Ça dépend où tu l'utilises et qu'est-ce que tu veux faire avec.



  • Je reformule, j'ai ce code :

    if (Minecraft.getMinecraft().objectMouseOver.entityHit instanceof EntitySeat) {
    if (doorKey.isPressed()) {
    Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("Bre ! " + Minecraft.getMinecraft().objectMouseOver.entityHit.getEntityId()));
    if(Minecraft.getMinecraft().thePlayer.getDisplayName().equals("Player927")) {
    EntitySeat.montable = !EntitySeat.montable;
    EntitySeat.montable2 = !EntitySeat.montable2;
    EntityVehicle.varDoor = !EntityVehicle.varDoor;
    
    Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("Yep sire"));
    }
    else {
    Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("Nop sire"));
    
    }
    }
    }
    

    Seulement mes changements de variable montable, montable2, varDoor, s'éxécutent pour tout les EntitySeat/Vehicle, et j'aimerais ciblé seulement l'entité que j'ai visé avec le ```java
    Minecraft.getMinecraft().objectMouseOver.entityHit


  • Administrateurs

    Tu check l'instance puis tu cast.

    if(Minecraft.getMinecraft().objectMouseOver.entityHit instanceof EntitySeat)
    {
       EntitySeat seat = (EntitySeat)Minecraft.getMinecraft().objectMouseOver.entityHit;
       […]
    


  • Merci exactement ce que je recherchais, seulement ça éxécute toujours le code pour toutes les EntitySeat/Vehicle, j'ai l'impression qu'il s'en fiche de savoir sur quel objet j'ai visé…

    if (Minecraft.getMinecraft().objectMouseOver.entityHit instanceof EntitySeat) {
    EntitySeat seat = (EntitySeat)Minecraft.getMinecraft().objectMouseOver.entityHit;
    if (doorKey.isPressed()) {
    Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("Bre ! " + Minecraft.getMinecraft().objectMouseOver.entityHit.getEntityId()));
    if(Minecraft.getMinecraft().thePlayer.getDisplayName().equals("Player885")) {
    seat.montable = !seat.montable;
    seat.montable2 = !seat.montable2;
    seat.driveable.varDoor = !seat.driveable.varDoor;
    
    Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("Yep sire"));
    }
    else {
    Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("Nop sire"));
    
    }
    }
    }
    

  • Administrateurs

    Tu as retirés les static dans la classe EntitySeat ?



  • C'est bon ça commence à devenir fonctionnel, j'aimerais faire un tableau de String du nom des personnes qui peuvent utiliser la touche :

    EntityVehicle :

    public class EntityVehicle extends EntityDriveable implements IExplodeable {
    
    public EntityVehicle(World world, double x, double y, double z, int placer, VehicleType type, DriveableData data,
    String player) {
    super(world, type, data);
    stepHeight = 1.0F;
    setPosition(x, y, z);
    rotateYaw(placer);
    initType(type, false);
    Proprietaires[0] = player;
    System.out.println(Proprietaires[0]);
    }
    

    Il y donc marqué le pseudo dans la console du joueur qui a posé le véhicule.

    Le tableau étant ici :

    public abstract class EntityDriveable extends Entity
    implements IControllable, IExplodeable, IEntityAdditionalSpawnData {
    public boolean syncFromServer = true;
    public boolean varDoor = false;
    public String[] Proprietaires = {""};
    
    if (Minecraft.getMinecraft().objectMouseOver.entityHit instanceof EntitySeat) {
    EntitySeat seat = (EntitySeat) Minecraft.getMinecraft().objectMouseOver.entityHit;
    if (doorKey.isPressed()) {
    Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText(
    "Bre ! " + Minecraft.getMinecraft().objectMouseOver.entityHit.getEntityId()));
    for (int i = 0; i < seat.driveable.Proprietaires.length; i++) {
    System.out.println("Proprio " + seat.driveable.Proprietaires*);
    if (Minecraft.getMinecraft().thePlayer.getDisplayName().equals(seat.driveable.Proprietaires*)) {
    seat.montable = !seat.montable;
    seat.driveable.varDoor = !seat.driveable.varDoor;
    FlansMod.getPacketHandler().sendToServer(new PacketVehicleControl(seat.driveable));
    
    Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("Yep sire"));
    } else {
    Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("Nop sire"));
    
    }
    }
    
    }
    }
    

    Et là dans la console y a juste Proprio, je ne comprends pas pourquoi le tableau est vide…


  • Administrateurs

    problème de synchro client serveur.
    Et applique la convention Java s'il te plait :
    public String[] Proprietaires = {""};
    ->
    public String[] proprietaires = {""};
    (bon normalement ça devrait même être owners mais bon, avoir les maj/minuscule comme il faut c'est déjà bien).



  • Voilà owners ^^, déjà je teste si le code marche après je fais tout beau c'est comment je procède 😛

    Sinon aucune idée pour la synchro parce que là je reste bouche bé, solo et multi ça ne marche pas…



  • @'Benjamin Loison':

    Voilà owners ^^, déjà je teste si le code marche après je fais tout beau c'est comment je procède 😛

    Sinon aucune idée pour la synchro parce que là je reste bouche bé, solo et multi ça ne marche pas…

    Le fait que tu sois en solo ou en multi ne change rien, Minecraft garde un fonctionnement client serveur dans tous les cas



  • Je sais très bien merci, mais parce que parfois des codes doivent varié en passant du solo au multi, j'ai déjà connu ça…



  • @'Benjamin Loison':

    Je sais très bien merci, mais parce que parfois des codes doivent varié en passant du solo au multi, j'ai déjà connu ça…

    Ah okay, je ne pensais pas, autant pour moi.


  • Administrateurs

    En fait le mieux serait de ne pas check le proprio côté client, envoyer le paquet dans tous les cas puis vérifier et faire l'action côté serveur.



  • J'ai tout fini robin 🙂 Juste un petit problème j'ai changé par un tableau déclaré comme ça :

    public String owners[] = {""};
    

    J'aimerais ajouter des gens via un textfield comme ceci :

    seat.driveable.owners[seat.driveable.owners.length] = textfield.getText();
    

    Mais j'ai java out bound… Comment agrandir de 1 le tableau à chaque fois ?


  • Administrateurs

    Il faut le redéfinir. Utilises une ArrayList, plus simple



  • C'est bon tout est impeccable merci à toi robin c'était mon rêve de faire ces clés de véhicules… 🙂