PlayerInteractEvent appelé que en client ?!



  • Hey 🙂

    Mon event PlayerInteractEvent ne s'éxécute que dans la partie client, c'est assez étrange, je vous envoie le code en question :

    public abstract class Handler {
    public Handler() {
    registerEvent();
    }
    
    public abstract void registerEvent();
    }
    
    
    public class CommonSettlementHandler extends Handler{
    
    @Override
    public void registerEvent() {
    MinecraftForge.EVENT_BUS.register(this);
    }
    
    …
    
    @SubscribeEvent
    public void onPlayerInterract(PlayerInteractEvent event) {
    if(event.action == PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK) {
    if(event.entityPlayer.getHeldItem() != null && event.entityPlayer.getHeldItem().getItem() == Item.getItemFromBlock(SettlementsModBlocks.settlementBlock)) {
    event.setCanceled(!playerUseSettlementBlock(event));
    }
    }
    }
    
    protected boolean playerUseSettlementBlock(PlayerInteractEvent event) {
    SettlementZone zone = settlementsManager.getSettlementZone(event.world.provider.dimensionId, event.x/16, event.z/16);
    
    if(zone == null) return false;
    
    Settlement s = settlementsManager.getSettlement(zone);
    
    if(s.isOutflow() && s.isLeader(event.entityPlayer)) {
    s.setOutflow(false);
    return true;
    }
    
    event.entityPlayer.addChatMessage(new ChatComponentText(StatCollector.translateToLocal("chat.player.event.createSettlement.tooNear")));
    return false;
    }
    }
    
    public class ClientSettlementHandler extends CommonSettlementHandler {
    
    @Override
    protected boolean playerUseSettlementBlock(PlayerInteractEvent event) {
    if(event.world.isRemote) {
    System.out.println("[CLIENT] : playerUseSettlementBlock");
    return false;
    }else {
    System.out.println("[SERVER] : playerUseSettlementBlock");
    return super.playerUseSettlementBlock(event);
    }
    }
    }
    

    Voila ça ne m'affiche que "[CLIENT] : playerUseSettlementBlock" alors que normalement ça devrait aussi m'afficher "[SERVER] : playerUseSettlementBlock". Avez vous une idée du pourquoi du comment ? Merci 🙂

    J'ai essayé de mettre le moins de code possible, si il en faut plus pas de soucis.



  • Je n'ai pas vraiment d'explication, mais essaye peut-être de séparer ta condition finale en deux, histoire de voir si ton isRemote raconte pas de la merde. Et essaye aussi de mettre un log hors de la condition pour être sûr que le serveur passe bien par playerUseSettlementBlock.



  • j'ai placer un syso(event.world.isRemote) juste après :
    if(event.action == PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK)

    Pareil, il n'y a que true qui s'affiche 😕



  • J'ai du nouveau :
    Lorsqu'on fait un event.setCancelled(true), les syso (même précédents) ne s'affichent pas coté serveur. En revanche les packets sont bel et bien envoyés. Etrange …