gpt4 book ai didi

JAVA/插头 : How can I make a variable called from non static classes?

转载 作者:行者123 更新时间:2023-12-01 09:54:13 25 4
gpt4 key购买 nike

我对 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com