- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 Java 非常陌生,是通过创建 Minecraft 插件才接触到它的。我目前正在使用 Spigot,并希望通过另一个类访问变量。在这个插件中,我希望玩家能够创建一个具有一定能力的英雄。我使用的两个类如下。
package me.placerwiz;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
public class Moba extends JavaPlugin {
StompCooldown a;
@Override
public void onEnable() {
getServer().getPluginManager().registerEvents(new MenuClick(this), this);
new PlayerListener(this);
new StompAbility(this);
getLogger().info("This plugin has been enabled!");
a = new StompCooldown(this);
a.runTaskTimer(this, 20, 20);
getCommand("pearl").setExecutor(new WarpAbility());
getCommand("menu").setExecutor(this);
}
@Override
public void onDisable() {
}
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (cmd.getName().equalsIgnoreCase("Menu") && sender instanceof Player) {
Player player = (Player) sender;
player.openInventory(Menu.getMenu());
return true;
}
return false;
}
public static void sircunningham1_1(String args[]) {
SirCunningham_1_1 getLoadout = new SirCunningham_1_1();
getLoadout.heroChosen();
}
public static void sircunningham2_1(String args[]) {
SirCunningham_2_1 getLoadout = new SirCunningham_2_1();
getLoadout.heroChosen();
}
public void gotHero(String heroChoice) {
if (heroChoice == "") {
}
}
public boolean heroTest(CommandSender sender, Command cmd, String label, String[] args) {
if (cmd.getName().equalsIgnoreCase("hero") && sender instanceof Player) {
Player player = (Player) sender;
player.openInventory(Menu.getMenu());
return true;
}
return false;
}}
上面的代码是我的主类,Moba
。在此代码中,从另一个类接收名为 heroChoice
的变量。唯一的问题是我希望代码能够获取玩家选择的英雄。当它获取英雄时,我希望它获取玩家选择的英雄。无论如何,我可以在玩家点击最终库存项目后将变量发送到 Moba 类。它可能需要使用此类,让玩家为英雄“Cunningham 爵士”选择最终能力。 (见下面的代码)
package me.placerwiz;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
public class SirCunningham_2_1{
static String hero;
public static Inventory getMenu(){
Inventory inv = Bukkit.createInventory(null, 18, ChatColor.GREEN + ChatColor.BOLD.toString() + "Choose ultimate ability!");
ItemStack item = new ItemStack(Material.IRON_BOOTS);
ItemMeta meta = item.getItemMeta();
List<String> lore = new ArrayList<String>();
lore.add(" ");
lore.add(ChatColor.YELLOW + "Thoughts of glory inspire your team to");
lore.add(ChatColor.YELLOW + " win this battle! Everyone on your team");
lore.add(ChatColor.YELLOW + " gains a buff!");
meta.setLore(lore);
meta.setDisplayName(ChatColor.GOLD + ChatColor.BOLD.toString() + "Glory");
item.setItemMeta(meta);
inv.addItem(item);
return inv;
}
@EventHandler
public static void onClick(InventoryClickEvent event) {
if (!ChatColor.stripColor(event.getInventory().getName()).equalsIgnoreCase("Choose ultimate ability!"))
return;
Player player = (Player) event.getWhoClicked();
event.setCancelled(true);
if(event.getCurrentItem()==null || event.getCurrentItem().getType()==Material.AIR || !event.getCurrentItem().hasItemMeta()){
player.closeInventory();
return;
}
if(event.getCurrentItem().getType() == Material.IRON_BOOTS){
player.closeInventory();
String hero = "SirCunnigham_2_1";
player.openInventory(Customizer.getMenu());
}
else{
player.sendMessage(ChatColor.GREEN + "[" + ChatColor.YELLOW + "MOBA" + ChatColor.GREEN + "]" + ChatColor.GOLD + "-Under Construction-");
player.closeInventory();
}
}
public static void heroChosen(){
String heroChoice = hero;
Moba sendLoadout = new Moba();
sendLoadout.gotHero(heroChoice);
}
}
要让它工作,我需要做的就是让String Hero
(来自上面的if事件)等于String HeroChoice
。感谢您阅读本文,我希望这个问题能够得到解决。这对我来说意义重大!
最佳答案
不要不要“隐藏”变量!您有一个名为“hero”、String
类型的静态变量,但您创建了另一个与该静态变量具有相同类型和相同名称的变量。所以你想获得英雄的名字。
声明该变量static
,使该变量等于该类的所有实例。
如果您想了解真正的解决方案,请继续阅读。请注意,使用 OOP(面向对象编程)是执行此操作的更有效方法。
根据我对问题的理解,您希望将英雄名称与玩家关联起来。
您可以简单地使用 HashMap 来完成此操作。
public static HashMap<Player,String> playerHero = new HashMap<Player,String>();
或者如果您使用的是 Java 8
public static HashMap<Player,String> playerHero = new HashMap<>();
要添加玩家和英雄名称
MyClass.playerHero.put(player, heroName);
从玩家那里获取英雄名称:
MyClass.playerHero.get(player);
从heroName获取玩家:你可以制定一个方法:
public static List<Player> getPlayers(String heroName){
List<Player> players = new ArrayList<Player>();
for(Map.Entry<Player,String> e : MyClass.playerHero.entrySet()){
if(e.getValue().equalsIgnoreCase(heroName)){
players.add(e.getKey());
}
}
return players;
}
所有这些变量都是静态
,因此我们可以使用MyClass.variableName
访问它们所有这些方法都是静态
,因此我们可以使用MyClass.method(parameters);
希望这有帮助!
关于JAVA/插头 : How can I make a variable called from non static classes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37367887/
我是一名优秀的程序员,十分优秀!