Skocz do zawartości
  • 0

Inventory


kerpson

Pytanie

Witam, czy mógłby kto mnie naprowadzić na to, jak przy ładowaniu serwera tworzyć inventory, a potem przy komendzie np. /pomoc było ono otwierane?

Próbowałem dzisiaj cały dzień coś zrobić, ale mi nie szło.

Edytowane przez stefanik11
stefanik11

Dodaję znaki diakrytyczne.

Notatka dodana przez stefanik11

bludis

Nadaję warna za §2.3 z powodu masowych braków znaków diakrytycznych w postach.

Notatka dodana przez bludis

Odnośnik do komentarza
https://skript.pl/temat/29958-inventory/
Udostępnij na innych stronach

9 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

Tworzysz sobię metodę (bardziej polecane ze względu na estetykę), lub wprowadzasz kod od razu do onEnable.

 

Samo Inventory tworzy się w ten sposób:

Inventory inventory = Bukkit.createInventory(null, <wielkość ekwipunku: x*9 (x min: 1, x max: 6)>, <tytuł>);

Potem dodajesz sobie do inventory jakieś przedmioty:

inventory.setItem(<slot>, <itemstack>);

Następnie utworzony ekwipunek musisz dodać do zmiennej, w tym celu na górze klasy dodaj:

private static Inventory inventory;

A w tworzonej metodzie (na samym końcu):

this.inventory = inventory;

Oraz stwórz getter do zmiennej. Potem owy ekwipunek otwierać możesz w ten sposób:

<player>.openInventory(<nazwa klasy>.getInventory());

Jeżeli chcesz przypisać danym przedmiotom jakieś funkcje dokonać tego musisz w listenerze InventoryClickEvent.

Odnośnik do komentarza
https://skript.pl/temat/29958-inventory/#findComment-196621
Udostępnij na innych stronach

  • 0

Dzięki, jak zadziała to się odezwę.

 

@stefanik11, tu trochę namieszałeś przy tym;

this.inventory = inventory;

Jeżeli mam coś takiego:

Inventory chat = Bukkit.getServer().createInventory(null, 9, "§6§lMenu chat");

to jak mam to wpisać?

Edytowane przez LjayPL789
stefanik11

Łączę.

Notatka dodana przez stefanik11

Odnośnik do komentarza
https://skript.pl/temat/29958-inventory/#findComment-196625
Udostępnij na innych stronach

  • 0

Po pierwsze, nie namieszałem tylko ty nadałeś inne nazwy. Po stworzeniu zmiennej Inventory o jakiejś nazwie musisz przypisać jej dany ekwipunek:

<nazwa zmiennej> = <ekwipunek/inventory -> w twoim przypadku chat>

 

Edytowane przez stefanik11
Odnośnik do komentarza
https://skript.pl/temat/29958-inventory/#findComment-196628
Udostępnij na innych stronach

  • 0
Godzinę temu, stefanik11 napisał:

Po pierwsze, nie namieszałem tylko ty nadałeś inne nazwy. Po stworzeniu zmiennej Inventory o jakiejś nazwie musisz przypisać jej dany ekwipunek:


<nazwa zmiennej> = <ekwipunek/inventory -> w twoim przypadku chat>

 

Namieszałeś, this odnosi się do instancji, nie do statycznych pól. 

Odnośnik do komentarza
https://skript.pl/temat/29958-inventory/#findComment-196645
Udostępnij na innych stronach

  • 0

Możesz użyć do tego jakiejś biblioteki np. https://www.spigotmc.org/resources/gui-api.45799/

Jeśli nie chcesz, to tutaj masz poradnik przykładowy https://www.spigotmc.org/threads/tutorial-how-to-create-a-gui.280215/, tego na necie jest pełno.

Odnośnik do komentarza
https://skript.pl/temat/29958-inventory/#findComment-196656
Udostępnij na innych stronach

  • 0

@Ixidi ok, dzięki ale jeszcze jedno pytanie, czy taka metoda wpływa na wydajność serwera ?

 

A potem w komendzie:

createItemShop(p);

Edytowane przez LjayPL789
Odnośnik do komentarza
https://skript.pl/temat/29958-inventory/#findComment-196659
Udostępnij na innych stronach

  • 0

Ogólnie to polecam do tworzenia itemstacków napisać sobie jakiegoś buildera, bo potem wychodzi takie coś i powtarzanie kodu milion razy.

No i jeszcze itemshop.setItem(0, glass); możesz po prostu zrobić pętlą zamiast kopiować i wklejać tyle razy

Odnośnik do komentarza
https://skript.pl/temat/29958-inventory/#findComment-196668
Udostępnij na innych stronach

  • 0
public class SimplePlugin extends JavaPlugin {
  
  private InventoryManager inventoryManager;
  
  @Override
  public void onEnable() {
    final Inventory shopInventory = this.getServer().createInventory(null, 9*3, "Ekwipunek sklepu");
    shopInventory.setItem(0, new ItemStack(Material.GLASS));
    
    this.inventoryManager = new InventoryManager(shopInventory);
  }
  
  public InventoryManager getInventoryManager() {
    return this.inventoryManager;
  }
  
}

public class InventoryManager {
  
  private final Inventory shopInventory;
  
  public InventoryManager(Inventory shopInventory) {
    this.shopInventory = shopInventory;
  }
  
  public void openShopInventory(Player player) {
    player.openInventory(this.shopInventory);
  }
  
}

i w komendzie wtedy tylko:

public class SimpleCommand implements CommandExecutor {

  private final InventoryManager inventoryManager;
  
  public SimpleCommand(InventoryManager inventoryManager) {
    this.inventoryManager = inventoryManager;
  }
  
  @Override
  public boolean onCommand(CommandSender sender, ....) {
    if (!(sender instanceof Player)) {
      sender.sendMessage("this command is only executable by player");
      return true;
    }
    final Player player = (Player) sender;
    this.inventoryManager.openShopInventory(player);
    player.sendMessage(ChatColor.RED + "Otworzono ekwipunek sklepu!");
  }

}

naprawde, zacznij sobie pierw od pisania malych programów, tak zeby kod ladnie wygladal i bylo to czytelne dla kazdego kto by ten kod czytał i żeby był w stanie ten twój kod zedytować i sie w nim połapać, bo jak zaczynasz od mc to później takie problemy są, że niby coś tam w bukkicie umiesz, ale nawet nie wiesz jak to działa i kod wychodzi tak jak wychodzi =/

Odnośnik do komentarza
https://skript.pl/temat/29958-inventory/#findComment-196742
Udostępnij na innych stronach

Nieaktywny
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...