-
Notifications
You must be signed in to change notification settings - Fork 105
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Initial player target argument implementation
- Loading branch information
Showing
8 changed files
with
209 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
24 changes: 24 additions & 0 deletions
24
src/main/java/com/sk89q/commandbook/command/argument/MultiPlayerTarget.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,24 @@ | |||
package com.sk89q.commandbook.command.argument; | |||
|
|||
import com.google.common.collect.ImmutableList; | |||
import org.bukkit.entity.Player; | |||
|
|||
import java.util.Collection; | |||
import java.util.Iterator; | |||
|
|||
public class MultiPlayerTarget implements PlayerTarget { | |||
private Collection<Player> players; | |||
|
|||
public MultiPlayerTarget(Player player) { | |||
this.players = ImmutableList.of(player); | |||
} | |||
|
|||
public MultiPlayerTarget(Collection<Player> player) { | |||
this.players = player; | |||
} | |||
|
|||
@Override | |||
public Iterator<Player> iterator() { | |||
return players.iterator(); | |||
} | |||
} |
61 changes: 61 additions & 0 deletions
61
src/main/java/com/sk89q/commandbook/command/argument/MultiPlayerTargetConverter.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,61 @@ | |||
package com.sk89q.commandbook.command.argument; | |||
|
|||
import com.sk89q.commandbook.util.InputUtil; | |||
import com.sk89q.minecraft.util.commands.CommandException; | |||
import com.sk89q.worldedit.util.formatting.text.Component; | |||
import com.sk89q.worldedit.util.formatting.text.TextComponent; | |||
import org.bukkit.command.CommandSender; | |||
import org.bukkit.entity.Player; | |||
import org.enginehub.piston.CommandManager; | |||
import org.enginehub.piston.converter.ConversionResult; | |||
import org.enginehub.piston.converter.FailedConversion; | |||
import org.enginehub.piston.converter.SuccessfulConversion; | |||
import org.enginehub.piston.inject.InjectedValueAccess; | |||
import org.enginehub.piston.inject.Key; | |||
|
|||
import java.util.ArrayList; | |||
import java.util.List; | |||
import java.util.Optional; | |||
|
|||
public class MultiPlayerTargetConverter extends PlayerTargetConverter<MultiPlayerTarget> { | |||
public static void register(CommandManager commandManager) { | |||
commandManager.registerConverter(Key.of(MultiPlayerTarget.class), new MultiPlayerTargetConverter()); | |||
} | |||
|
|||
@Override | |||
public Component describeAcceptableArguments() { | |||
return TextComponent.of("any number of online players, or a player matching pattern"); | |||
} | |||
|
|||
@Override | |||
public ConversionResult<MultiPlayerTarget> convert(String argument, InjectedValueAccess context) { | |||
Optional<CommandSender> optSender = context.injectedValue(Key.of(CommandSender.class)); | |||
if (!optSender.isPresent()) { | |||
return FailedConversion.from(new IllegalStateException("No command sender present")); | |||
} | |||
|
|||
CommandSender sender = optSender.get(); | |||
try { | |||
List<Player> results = InputUtil.PlayerParser.matchPlayers(sender, argument); | |||
return SuccessfulConversion.fromSingle(new MultiPlayerTarget(results)); | |||
} catch (CommandException e) { | |||
return FailedConversion.from(new IllegalArgumentException(e.getMessage())); | |||
} | |||
} | |||
|
|||
@Override | |||
public List<String> getSuggestions(String input) { | |||
List<String> suggestions = new ArrayList<>(); | |||
|
|||
suggestions.add(input); | |||
trialAddSuggestion(suggestions, "*"); | |||
trialAddSuggestion(suggestions, "#world"); | |||
trialAddSuggestion(suggestions, "#near"); | |||
trialAddSuggestion(suggestions, input + "*"); | |||
trialAddSuggestion(suggestions, "*" + input); | |||
|
|||
addPlayerNameSuggestions(suggestions); | |||
|
|||
return suggestions; | |||
} | |||
} |
6 changes: 6 additions & 0 deletions
6
src/main/java/com/sk89q/commandbook/command/argument/PlayerTarget.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,6 @@ | |||
package com.sk89q.commandbook.command.argument; | |||
|
|||
import org.bukkit.entity.Player; | |||
|
|||
public interface PlayerTarget extends Iterable<Player> { | |||
} |
35 changes: 35 additions & 0 deletions
35
src/main/java/com/sk89q/commandbook/command/argument/PlayerTargetConverter.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,35 @@ | |||
package com.sk89q.commandbook.command.argument; | |||
|
|||
import com.sk89q.commandbook.CommandBook; | |||
import com.sk89q.commandbook.util.InputUtil; | |||
import com.sk89q.minecraft.util.commands.CommandException; | |||
import org.bukkit.ChatColor; | |||
import org.bukkit.entity.Player; | |||
import org.enginehub.piston.converter.ArgumentConverter; | |||
|
|||
import java.util.Collection; | |||
import java.util.List; | |||
|
|||
public abstract class PlayerTargetConverter<T> implements ArgumentConverter<T> { | |||
protected void trialAddSuggestion(List<String> suggestions, String trailText) { | |||
try { | |||
InputUtil.PlayerParser.matchPlayers(CommandBook.server().getConsoleSender(), trailText); | |||
suggestions.add(trailText); | |||
} catch (CommandException ignored) { } | |||
} | |||
|
|||
protected void addPlayerNameSuggestions(List<String> suggestions) { | |||
Collection<? extends Player> players = CommandBook.server().getOnlinePlayers(); | |||
boolean useDisplayNames = CommandBook.inst().lookupWithDisplayNames; | |||
|
|||
for (Player player : players) { | |||
String playerName = player.getName(); | |||
String displayName = ChatColor.stripColor(player.getDisplayName()); | |||
|
|||
suggestions.add(playerName); | |||
if (useDisplayNames && !playerName.equals(displayName)) { | |||
suggestions.add(displayName); | |||
} | |||
} | |||
} | |||
} |
23 changes: 23 additions & 0 deletions
23
src/main/java/com/sk89q/commandbook/command/argument/SinglePlayerTarget.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,23 @@ | |||
package com.sk89q.commandbook.command.argument; | |||
|
|||
import com.google.common.collect.ImmutableList; | |||
import org.bukkit.entity.Player; | |||
|
|||
import java.util.Iterator; | |||
|
|||
public class SinglePlayerTarget implements PlayerTarget { | |||
private Player player; | |||
|
|||
public SinglePlayerTarget(Player player) { | |||
this.player = player; | |||
} | |||
|
|||
public Player get() { | |||
return player; | |||
} | |||
|
|||
@Override | |||
public Iterator<Player> iterator() { | |||
return ImmutableList.of(player).iterator(); | |||
} | |||
} |
54 changes: 54 additions & 0 deletions
54
src/main/java/com/sk89q/commandbook/command/argument/SinglePlayerTargetConverter.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,54 @@ | |||
package com.sk89q.commandbook.command.argument; | |||
|
|||
import com.sk89q.commandbook.util.InputUtil; | |||
import com.sk89q.minecraft.util.commands.CommandException; | |||
import com.sk89q.worldedit.util.formatting.text.Component; | |||
import com.sk89q.worldedit.util.formatting.text.TextComponent; | |||
import org.bukkit.command.CommandSender; | |||
import org.bukkit.entity.Player; | |||
import org.enginehub.piston.CommandManager; | |||
import org.enginehub.piston.converter.ConversionResult; | |||
import org.enginehub.piston.converter.FailedConversion; | |||
import org.enginehub.piston.converter.SuccessfulConversion; | |||
import org.enginehub.piston.inject.InjectedValueAccess; | |||
import org.enginehub.piston.inject.Key; | |||
|
|||
import java.util.ArrayList; | |||
import java.util.List; | |||
import java.util.Optional; | |||
|
|||
public class SinglePlayerTargetConverter extends PlayerTargetConverter<SinglePlayerTarget> { | |||
public static void register(CommandManager commandManager) { | |||
commandManager.registerConverter(Key.of(SinglePlayerTarget.class), new SinglePlayerTargetConverter()); | |||
} | |||
|
|||
@Override | |||
public Component describeAcceptableArguments() { | |||
return TextComponent.of("any single online player"); | |||
} | |||
|
|||
@Override | |||
public ConversionResult<SinglePlayerTarget> convert(String argument, InjectedValueAccess context) { | |||
Optional<CommandSender> optSender = context.injectedValue(Key.of(CommandSender.class)); | |||
if (!optSender.isPresent()){ | |||
return FailedConversion.from(new IllegalStateException("No command sender present")); | |||
} | |||
|
|||
CommandSender sender = optSender.get(); | |||
try { | |||
Player result = InputUtil.PlayerParser.matchSinglePlayer(sender, argument); | |||
return SuccessfulConversion.fromSingle(new SinglePlayerTarget(result)); | |||
} catch (CommandException e) { | |||
return FailedConversion.from(new IllegalArgumentException(e.getMessage())); | |||
} | |||
} | |||
|
|||
@Override | |||
public List<String> getSuggestions(String input) { | |||
List<String> suggestions = new ArrayList<>(); | |||
|
|||
addPlayerNameSuggestions(suggestions); | |||
|
|||
return suggestions; | |||
} | |||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters