Afficher l’inventaire d’un autre joueur sur Minecraft avec l’API Sponge
Bonjour.
Je recommence à coder en Java des plugin avec l’api Sponge.
Je n’ai pas énormément de connaissances en Java, mais je me débrouille, le PHP m’aide bien^^.
J’ai juste galéré pendant plusieurs jours à faire les mise a jours et faire fonctionner Eclipse.
C’était un truck de dingue. J’ai eu toute les erreurs imaginable, maintenant ça fonctionne!!!
Dans ce tuto on va voir comment afficher l’inventaire d’un autre joueur.
Ce qui est encore plus incroyable c’est qu’on peut interagir avec l’inventaire de l’autre joueur comme déplacer des items ou même lui en prendre ou lui en donner.
Je sais pas si on peut le faire de base sans plugin, mais c’est vraiment top!!! On peut donc le « contrôler » ou faire des blagues, mais ce que je trouve pratique c’est de pouvoir donner des items facilement surtout si on est pas a coté de lui.
Comment fonctionne cette commande ultra simple ?
Notre commande attend comme argument le nom d’un joueur et elle doit être exécuté par un joueur. Quand ces conditions sont réunis on donne au joueur qui a tapé la commande l’inventaire du joueur qui a été passé en paramètre.
On ne peut pas faire plus simple.
Voila le code:
import javax.annotation.Nonnull; import org.spongepowered.api.command.CommandException; import org.spongepowered.api.command.CommandResult; import org.spongepowered.api.command.CommandSource; import org.spongepowered.api.command.args.CommandContext; import org.spongepowered.api.command.args.GenericArguments; import org.spongepowered.api.command.spec.CommandSpec; import org.spongepowered.api.entity.living.player.Player; import org.spongepowered.api.text.Text; import org.spongepowered.api.text.format.TextColors; import fr.simonbhb.admintoolv2.main.Sponge; import fr.simonbhb.admintoolv2.main.commandloader.CommandExecutorBase; public class CommandOpenInventaire extends CommandExecutorBase { @Override public CommandResult execute(CommandSource sender, CommandContext args) throws CommandException { // On test Si c'est un joueur qui à lancé la commande: if(sender instanceof Player) { // On caste le joueur qui lance la commande: Player player = (Player) sender; // On récupère le joueur passé en paramètre: Player target = args.<Player>getOne("player").get(); // On regarde si on ouvre pas notre propre inventaire: if(!player.getName().equals(target.getName())) { // On ouvre mainenant l'inventaire du joueur passé en paramètre sur le joueur qui tape la commande et pas le contraire^^: player.openInventory(target.getInventory()); } else { player.sendMessage(Text.of(TextColors.DARK_RED, "Error! ", TextColors.RED, "Vous ne pouvez pas ouvrir votre propre inventaire.")); } } else { sender.sendMessage(Text.of(TextColors.DARK_RED, "Error! ", TextColors.RED, "Vous devez être un joueur pour exécuter cette commande.")); } return CommandResult.success(); } @Override @Nonnull public String[] getAliases() { return new String[] { "openinventory", "ouvririnventaire" }; } @Override @Nonnull public CommandSpec getSpec() { return CommandSpec.builder() .description(Text.of("Ouvre l'inventaire d'un joueur")) .permission("admintool.openinventory.use") .arguments(GenericArguments.onlyOne(GenericArguments.player(Text.of("player")))) .executor(this) .build(); } }
Tous les codes sont testés et sont fonctionnels, si il arrive qu'un de ces codes ne fonctionne pas chez vous, merci de me le signaler.