2017-09-09 2 views
0

J'ai donc créé une classe qui implémente ICommand et l'a enregistrée dans mon événement ServerStarting. Lorsque j'essaie d'exécuter la commande dans Minecraft, j'obtiens une erreur sans permission. Voici ma classe implémentée ICommand:Ma commande personnalisée dans Forge 1.12.1 ne fonctionne pas

List aliases; 

public CMinecraftStoryMod() { 
    aliases = new ArrayList(); 
    aliases.add("msm"); 
} 

@Override 
public String getName() { 
    return "minecraftstorymod"; 
} 

@Override 
public String getUsage(ICommandSender sender) { 
    if (sender.getEntityWorld().isRemote) { 
     return "/minecraftstorymod"; 
    } else { 
     return "/minecraftstorymod"; 
    } 
} 

@Override 
public List<String> getAliases() { 
    return aliases; 
} 

@Override 
public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException { 
    if (!MinecraftStoryMod.gameInProgress) { 
     MinecraftStoryMod.gameInProgress = true; 

     if (sender.getEntityWorld().isRemote) { 
      sender.sendMessage(new TextComponentString("[CMinecraftStoryMod] Attempting to start game in a multiplayer world...")); 
      sender.sendMessage(new TextComponentString("[CMinecraftStoryMod] Checking out the number of players in this world...")); 
      if (server.getPlayerList().getCurrentPlayerCount() > 0) { 
       sender.sendMessage(new TextComponentString("[CMinecraftStoryMod] There are " + server.getPlayerList().getCurrentPlayerCount() + " players in the server! Generating fun...")); 
       MinecraftStoryMod.gameHandler.startGame(server.getPlayerList()); 
      } else { 
       sender.sendMessage(new TextComponentString("[CMinecraftStoryMod] The server has 0 players!")); 
       MinecraftStoryMod.gameInProgress = false; 
       return; 
      } 
     } else { 
      sender.sendMessage(new TextComponentString("[CMinecraftStoryMod] Singleplayer mode for this mod is still under construction. We're sowwy :)")); 
      return; 
     } 
    } else { 
     sender.sendMessage(new TextComponentString("[CMinecraftStoryMod] Another game is in progress! Wait for it ._.")); 
    } 
} 

@Override 
public boolean checkPermission(MinecraftServer server, ICommandSender sender) { 
    return false; 
} 

@Override 
public List<String> getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) { 
    return null; 
} 

@Override 
public boolean isUsernameIndex(String[] args, int index) { 
    return false; 
} 

@Override 
public int compareTo(ICommand o) { 
    return 0; 
} 

Je sais que j'inscrit ma commande correctement parce que je peux taper/minecraftstorymod dans le jeu. J'utilise Forge 1.12.1 14.22.0.2469

Répondre

1

Vous renvoyez toujours false à partir de la méthode checkPermission, ce qui signifie que personne n'a l'autorisation d'exécuter la commande. Vous pouvez toujours renvoyer true si vous souhaitez que quelqu'un puisse exécuter la commande ou renvoyer une valeur différente en fonction de l'expéditeur.

+0

Existe-t-il un moyen de vérifier si le joueur est Op ou a un nœud de permission? –

+0

Utilisez ICommandSender.canUseCommand avec le niveau d'autorisation 4 pour Ops et le nom de la commande. De quel système d'autorisation parlez-vous? Ni Minecraft ni Forge n'en ont construit un. – Shadowfacts