Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Jak napisać GUI


MieciuXD1234

Rekomendowane odpowiedzi

Opublikowano

Witam chciałbym się dowiedzieć jak dodać gui np. drop bo zrobiłem coś takiego:

 

public class DropGui implements CommandExecutor {

 
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label,
String[] args) {
if (cmd.getName().equalsIgnoreCase("drop")) {
if ((sender instanceof Player)) {
}
Player player = (Player) sender;
openGUI(player);
}
 
return true;
}
 
private void openGUI(Player player) {
Inventory inv = Bukkit.createInventory(null, 9, ChatColor.RED
+ "Drop ze stone:");
inv.setItem(0, new ItemStack(Material.COBBLESTONE, 1));
inv.setItem(1, new ItemStack(Material.COBBLESTONE, 1));
inv.setItem(6, new ItemStack(Material.COBBLESTONE, 1));
inv.setItem(7, new ItemStack(Material.COBBLESTONE, 1));
 
}
 
}
 
 
Serwer tak jakby nie odczytuje tego, brak błędów w konsoli itp. komenda tak jakby działa ale nic nie wyświetla ani nic nie robi po prostu /drop i nic
Opublikowano

1.  

if ((sender instanceof Player)) {
}
Player player = (Player) sender;
openGUI(player);

masz źle zrobione warunki.   (nie musisz dodawać sprawdzenia czy komenda jest "drop", to dziwny nawyk ludzi używających eklajpse na youtube. plugin.yml się tym zajmie.)

if (sender instanceof Player) {
    Player player = (Player) sender;
    openGUI(player);
}

2. Nie twórz za każdym razem nowego itemu

inv.setItem(0, new ItemStack(Material.COBBLESTONE, 1));
inv.setItem(1, new ItemStack(Material.COBBLESTONE, 1));
inv.setItem(6, new ItemStack(Material.COBBLESTONE, 1));
inv.setItem(7, new ItemStack(Material.COBBLESTONE, 1));

zamień na

ItemStack i = new ItemStack(Material.COBBLESTONE);
inv.setItem(0, i);
inv.setItem(1, i);
inv.setItem(6, i);
inv.setItem(7, i);

A już najlepiej to jakoś inaczej rozwiązać pętlą.

 

3. Nie wyświetlasz tego inventory graczowi xD

dodaj

player.openInventory(inv);

4. Nie twórz nowego inventory za każdym razem

private static Inventory inv = Bukkit.createInventory(null, 9, ChatColor.RED + "Drop ze stone:");

public void openGUI(Player player) {
   ItemStack i = new ItemStack(Material.COBBLESTONE);
   inv.setItem(0, i);
   inv.setItem(1, i);
   inv.setItem(6, i);
   inv.setItem(7, i);

   player.openInventory(inv);
}

Moja oficjalna strona! :)

http://socketbyte.pl/ 

Opublikowano

 

1.  

if ((sender instanceof Player)) {
}
Player player = (Player) sender;
openGUI(player);

masz źle zrobione warunki.   (nie musisz dodawać sprawdzenia czy komenda jest "drop", to dziwny nawyk ludzi używających eklajpse na youtube. plugin.yml się tym zajmie.)

if (sender instanceof Player) {
    Player player = (Player) sender;
    openGUI(player);
}

2. Nie twórz za każdym razem nowego itemu

inv.setItem(0, new ItemStack(Material.COBBLESTONE, 1));
inv.setItem(1, new ItemStack(Material.COBBLESTONE, 1));
inv.setItem(6, new ItemStack(Material.COBBLESTONE, 1));
inv.setItem(7, new ItemStack(Material.COBBLESTONE, 1));

zamień na

ItemStack i = new ItemStack(Material.COBBLESTONE);
inv.setItem(0, i);
inv.setItem(1, i);
inv.setItem(6, i);
inv.setItem(7, i);

A już najlepiej to jakoś inaczej rozwiązać pętlą.

 

3. Nie wyświetlasz tego inventory graczowi xD

dodaj

player.openInventory(inv);

4. Nie twórz nowego inventory za każdym razem

private static Inventory inv = Bukkit.createInventory(null, 9, ChatColor.RED + "Drop ze stone:");

public void openGUI(Player player) {
   ItemStack i = new ItemStack(Material.COBBLESTONE);
   inv.setItem(0, i);
   inv.setItem(1, i);
   inv.setItem(6, i);
   inv.setItem(7, i);

   player.openInventory(inv);
}

Dzięki wielkie!

Ale jeszcze mam pytanie np. jak zamiast nazwy "Cobblestone" pisało np. "szansa"

Opublikowano
meta = i.getItemMeta();
meta.setDisplayName("Szansa");
i.setItemMeta(meta);

Jeśli interesuje Cię już takie naprawdę zaawansowane API to masz tutaj:

https://github.com/MarcinWieczorek/NovaGuilds/blob/master/src/main/java/co/marcin/novaguilds/impl/util/guiinventory/GUIInventoryGuildMenu.java

Dodaj mój nick do posta jeśli potrzebujesz pomocy | Piszę pluginy na zlecenie | Pomagam z Linuxem

newlogo.png

Opublikowano
meta = i.getItemMeta();
meta.setDisplayName("Szansa");
i.setItemMeta(meta);

Jeśli interesuje Cię już takie naprawdę zaawansowane API to masz tutaj:

https://github.com/MarcinWieczorek/NovaGuilds/blob/master/src/main/java/co/marcin/novaguilds/impl/util/guiinventory/GUIInventoryGuildMenu.java

 

Słuchaj nie chce mi to działać zrobiłem tak

 

private void openGUI(Player player) {
Inventory inv = Bukkit.createInventory(null, 4 * 9,
"§4§lDrop ze stone:");
ItemStack i = new ItemStack(Material.COBBLESTONE);
inv.setItem(0, i);
ItemMeta meta = i.getItemMeta();
meta.setDisplayName("Szansa");
i.setItemMeta(meta);
 
 
player.openInventory(inv);
Opublikowano

To co masz niżej to lore które jest List<String>. Tworzysz nowy ArrayList, dodajesz tekst i robisz meta.setLore(lore)

Dodaj mój nick do posta jeśli potrzebujesz pomocy | Piszę pluginy na zlecenie | Pomagam z Linuxem

newlogo.png

Opublikowano
item.setLore(Arrays.asList("pierwsza linijka", "druga linijka", "trzecia linijka"));

I nie rób § bo to żenada.

Napisz sobie coś takiego: 

    public static String fixColors(String text) {
        return ChatColor.translateAlternateColorCodes('&', text);
    }

    public static String[] fixColors(String... texts) {
        String[] strings = new String[texts.length];
        for (int i = 0; i < strings.length; i++)
            strings[i] = fixColors(texts[i]);
        return strings;
    }

    public static List<String> fixColors(List<String> texts) {
        return texts.stream().map(Util::fixColors).collect(Collectors.toList());
    }

i rób 

item.setLore(fixColors(Arrays.asList("1", "2")));

albo

p.sendMessage(fixColors("&6Elo"));

Można by się tam spierać o szybkość takiego rozwiązania, ale przynajmniej mniej rakowe niż § a różnicę w szybkości zauważy jedynie @GotoFinal ! (bez obrazy gotuś, loffciam cię)

Moja oficjalna strona! :)

http://socketbyte.pl/ 

Opublikowano

 

    public static String[] fixColors(String... texts) {
        String[] strings = new String[texts.length];
        for (int i = 0; i < strings.length; i++)
            strings = fixColors(texts);
        return strings;

to nie działa

Opublikowano
item.setLore(Arrays.asList("pierwsza linijka", "druga linijka", "trzecia linijka"));

I nie rób § bo to żenada.

Napisz sobie coś takiego: 

    public static String fixColors(String text) {
        return ChatColor.translateAlternateColorCodes('&', text);
    }

    public static String[] fixColors(String... texts) {
        String[] strings = new String[texts.length];
        for (int i = 0; i < strings.length; i++)
            strings[i] = fixColors(texts[i]);
        return strings;
    }

    public static List<String> fixColors(List<String> texts) {
        return texts.stream().map(Util::fixColors).collect(Collectors.toList());
    }

i rób 

item.setLore(fixColors(Arrays.asList("1", "2")));

albo

p.sendMessage(fixColors("&6Elo"));

Można by się tam spierać o szybkość takiego rozwiązania, ale przynajmniej mniej rakowe niż § a różnicę w szybkości zauważy jedynie @GotoFinal ! (bez obrazy gotuś, loffciam cię)

 

+ to 

 

    public static List<String> fixColors(List<String> texts) {
        return texts.stream().map(Util::fixColors).collect(Collectors.toList());

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...