Pomoc z kodem

xSeKaBo | 2021-02-17 10:25:57 UTC | #1

Witam, mam mały problem z kodem.

public void repeatingTask() {
task = new BukkitRunnable() {

      @SuppressWarnings("deprecation")
      @Override
      public void run() {
          int messageSize = messages.size();
          Random rand = new Random();
          int randomNumber = rand.nextInt(messageSize);

          for(messages m : messages) {
              if(m.id == randomNumber) {  
                  Player[] player = new Player[Bukkit.getOnlinePlayers().size()];
                  player = Bukkit.getOnlinePlayers().toArray(player);
                  MaterialData material = new MaterialData(Material.DIAMOND_AXE,(byte) 1504);
                  Main.getInstance().sendInformation(Colour(m.message + "                   "), "", material, player);
              }
          }
      }
  }
      .runTaskTimer(this, 20 * timer, 20 * timer);

}

Mój problem polega na tym że chce aby “material” miał NBTTag “unbreakable, durability: 9 (damage: 1552)”, tylko nie wiem jak to zrobić.
Prosiłbym o pomoc.
Z góry dziękuję ;)


luxDev | 2017-06-30 18:01:15 UTC | #2

Nigdy nie byłem nawet dobry w NBT ale to jest przykład stworzenia itemstacka z danym durability + unbreakable true, może ci się przyda nie wiem :)
Miałem tylko CB 1.8 ale możesz zmienić.

net.minecraft.server.v1_8_R3.ItemStack itemstack = CraftItemStack.asNMSCopy(new 
ItemStack(Material.DIAMOND_SWORD, 1));
NBTTagCompound tag = itemstack.hasTag() ? itemstack.getTag() : new NBTTagCompound();
tag.setInt("Durability", 1504);
tag.setBoolean("Unbreakable", true);
itemstack.setTag(tag);
ItemStack is = CraftItemStack.asCraftMirror(itemstack);
zrobCosZTymItemStackiem(is);

edit: jak nie zadziała to taguje osobe która musi sie bawić z NBT 24/7 @Marcoral.


Nieznajomy11 | 2017-06-30 18:10:08 UTC | #3

nie wiem po co kombinujecie.. D:

public ItemStack test() {

    ItemStack item = new ItemStack(Material.DIAMOND_AXE, 1);
    item.setDurability((short) 9);

    ItemMeta meta = item.getItemMeta();
    meta.setUnbreakable(true);
    meta.addItemFlags(ItemFlag.HIDE_UNBREAKABLE);
    item.setItemMeta(meta);

    return item;
}

tak się robi itemy do gui


xSeKaBo | 2017-06-30 18:22:53 UTC | #4

Niestety to nie działa. :frowning:
Zapomniałem dodać że korzystam z API (AdvancementAPI)
Kod AdvancementAPI


luxDev | 2017-06-30 21:57:54 UTC | #5

No tak od 1.8 już są wspierane te bzdurki, zapomniałem :P


xSeKaBo | 2017-07-01 09:10:53 UTC | #6

Prosiłbym o zamknięcie tematu.
Jeśli chodzi o rozwiązanie, to po prostu zamieniłem domyślną texture blokady i “material” ustawiłem jako blokadę.
Chyba było to najprostsze i najłatwiejsze rozwiązanie.
Serdecznie dziękuje za poświęcenie chwili nad tym tematem.


system | 2021-02-17 10:26:11 UTC | #7

Ten temat został automatycznie zamknięty 32 dni po ostatnim wpisie. Tworzenie nowych odpowiedzi nie jest już możliwe.