所以我正在为一个Minecraft服务器制作一个插件,我不得不从一个类到另一个类获取我的命令命令参数。在尝试了多个事情之后,我开始使用一个ArrayList,它在大多数情况下工作但它放了括号 论证。
ArrayList<String> target = Main.target;
@EventHandler
public void invClickEvent(InventoryClickEvent e) {
Inventory inv = e.getInventory();
Player player = (Player) e.getWhoClicked();
String name = inv.getName();
if ( name.equals(ChatColor.RED + "Ban Menu")) {
e.setCancelled(true);
int slot = e.getSlot();
if (slot < 0)
{
return;
}
if (slot == 0)
{
player.performCommand("kill " + target);
player.closeInventory();
return;
}
这是给我带来麻烦的代码。它从我的主类中提取数据。它是ArrayList从参数中提取文本。
public static ArrayList<String> target = new ArrayList<String>();
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (sender instanceof Player && args.length == 1)
{
Player p = (Player) sender;
if (args.length > 0) {
switch (args.length)
{
case 1:
Player player = Bukkit.getPlayer(args[0]);
if (player == null) {
sender.sendMessage("That player is not online");
} else if (player.isOnline()) {
Menus.openMenu(p);
target.add(player.getPlayerListName());
}
这就是数组拉动参数的地方。输出类似于player executed command: /kill [HoloPanio]
,我希望它输出player executed command: /kill HoloPanio
如果有其他方法导入参数请告诉我,如果没有,请告诉我如何解决这个问题。
谢谢!
答案 0 :(得分:1)
只是扩展了Titus在评论中所说的内容。
尝试使用Rscript -e "x=1;write.csv(x,'H:/this_folder/x.csv')"
作为目标类型,而不是使用Rscript -e "x=1;write.csv(x,'H:/that folder/x.csv')"
。这将允许输出为ArrayList
。
String
以下内容将作为空player executed command: /kill HoloPanio
更新为初始目标。请注意,将为此类的每个用户更新静态变量。这意味着访问此类的任何其他代码将具有相同的目标。并且,访问此类的任何其他代码都可以更改目标。
String target = Main.target;
@EventHandler
public void invClickEvent(InventoryClickEvent e) {
Inventory inv = e.getInventory();
Player player = (Player) e.getWhoClicked();
String name = inv.getName();
if ( name.equals(ChatColor.RED + "Ban Menu")) {
e.setCancelled(true);
int slot = e.getSlot();
if (slot < 0)
{
return;
}
if (slot == 0)
{
player.performCommand("kill " + target);
player.closeInventory();
return;
}
同样正如Titus所说,这不是最好的解决方案,因为作为一个静态变量,String
可能会在你不想要的时候改变(或者当你想要它时最终会变化改变)。但是,这应该解决命令问题。
答案 1 :(得分:0)
这是默认的ArrayList toString。
使用String.join删除括号
String result = String.join("", list);
答案 2 :(得分:-1)
这是因为ArrayList类的toString方法。
扩展ArryList类并覆盖toString
ArrayList<String> list = new ArrayList<String>()
{
private static final long serialVersionUID = 1L;
@Override public String toString()
{
return super.toString().substring(1,super.toString().length-1) ;
}
};
答案 3 :(得分:-1)
对于Minecraft角度来说绝对没有任何意义,如果你想要获取元素列表而不必打印集合,你可以用StringJoiner
汇总它。
String values = String.join(",", target);
System.out.println(values);