Как мне вызвать itemStack из другого класса? - PullRequest
0 голосов
/ 07 ноября 2018

Я делаю плагин Custom Horse, и это первый настоящий плагин, который я делаю, поэтому прошу прощения за мой грязный код.

В одном классе (HorseSaddles) я создал 4 разных седла:

package io.github.bxnie.Items;

import java.util.ArrayList;
import org.bukkit.Material;
import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

import net.md_5.bungee.api.ChatColor;

public class HorseSaddles implements Listener {
    public void DonkeyHorse() {
        ItemStack dhorse = new ItemStack(Material.SADDLE);
        ItemMeta dhorsemeta = dhorse.getItemMeta();

        dhorsemeta.setDisplayName(ChatColor.RED + "Donkey");
        ArrayList<String> dhorselore = new ArrayList<String>();
        dhorselore.add(ChatColor.DARK_GRAY + "1/4");
        dhorselore.add(ChatColor.DARK_GRAY + "Right click to spawn your Donkey!");
        dhorsemeta.setLore(dhorselore);
        dhorse.setItemMeta(dhorsemeta);
    }

    public void BrownHorse() {
        ItemStack brhorse = new ItemStack(Material.SADDLE);
        ItemMeta brhorsemeta = brhorse.getItemMeta();

        brhorsemeta.setDisplayName(ChatColor.RED + "Brown Horse");
        ArrayList<String> brhorselore = new ArrayList<String>();
        brhorselore.add(ChatColor.DARK_GRAY + "2/4");
        brhorselore.add(ChatColor.DARK_GRAY + "Right click to spawn your Horse!");
        brhorsemeta.setLore(brhorselore);
        brhorse.setItemMeta(brhorsemeta);
    }

    public void BlackHorse() {
        ItemStack blhorse = new ItemStack(Material.SADDLE);
        ItemMeta blhorsemeta = blhorse.getItemMeta();

        blhorsemeta.setDisplayName(ChatColor.BLACK + "Black" + ChatColor.RED + "Horse");
        ArrayList<String> blhorselore = new ArrayList<String>();
        blhorselore.add(ChatColor.DARK_GRAY + "3/4");
        blhorselore.add(ChatColor.DARK_GRAY + "Right click to spawn your Horse!");
        blhorsemeta.setLore(blhorselore);
        blhorse.setItemMeta(blhorsemeta);
    }

    public void WhiteHorse() {
        ItemStack whorse = new ItemStack(Material.SADDLE);
        ItemMeta whorsemeta = whorse.getItemMeta();

        whorsemeta.setDisplayName(ChatColor.WHITE + "White" + ChatColor.RED + "Horse");
        ArrayList<String> whorselore = new ArrayList<String>();
        whorselore.add(ChatColor.DARK_GRAY + "4/4");
        whorselore.add(ChatColor.DARK_GRAY + "Right click to spawn your Horse!");
        whorsemeta.setLore(whorselore);
        whorse.setItemMeta(whorsemeta);
    }
}

И в другом классе (SaddleCommands) я пытаюсь создать команду, которая даст пользователю этот элемент, если у него есть правильные разрешения

package io.github.bxnie.commands;

import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack;

import net.minecraft.server.v1_12_R1.CommandExecute;

public class SaddleCommands extends CommandExecute implements Listener, CommandExecutor{

    public String cmd1 = "fhdonkey";

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] arg3) {
        if (!(sender instanceof Player)) {
            sender.sendMessage("Only players may execute this command!");
            return true;
        }

        Player p = (Player) sender;
        if(cmd.getName().equalsIgnoreCase(cmd1)) {
            if (p.hasPermission("fh.donkey")) {
                p.sendMessage("You Have Purchased a Donkey");
                p.getInventory().addItem(...);
                return true;
            } else {
                p.sendMessage("§cInsufficient Permission!");
                return false;
            }
        }
        return false;
    }
}

, где написано p.getInventory().addItem(...); Я добавил 3 точки в качестве заполнителя, так как не знаю, как получить элемент из другого класса.

1 Ответ

0 голосов
/ 07 ноября 2018

Добро пожаловать на форум:)

Вы создали класс HorseSaddles. Там у вас есть 3 функции, которые создают ItemStack, ничего не делая с объектом. Просто верните объект ItemStack.

я создал минималистичное решение:

public class Horse {
// we create an function which returns an ItemStack
    public ItemStack getBrownHorseItemStack() {
        // Create the ItemStack Object
        ItemStack horseItem = new Itemstack(Material.SADDLE);
        // return our ItemStack Object
        return horseItem;
    }
}

class Saddle {

    private Horse horse = new Horse();

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        // an CommandSender object is NOT always an Player Object. Normally we would check if sender is a Player Object
        // We cast the CommandSender to an player
        Player player = (Player) sender;
        // check the command received
        if (cmd.getName().equalsIgnoreCase("fhdonkey")) {
            // horse.getBrownHorseItemStack() will return an ItemStack Object
            player.getInventory().addItem(horse.getBrownHorseItemStack());
        }
        return false;
    }
}

для получения дополнительной информации: Возвращение значения из метода

...