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

Pomoc przy pobieraniu itemstack z gracza dokładny item


Zethik

Rekomendowane odpowiedzi

Opublikowano

Witam chce aby pobrało mi z gracza ItemStack mianowicie slimeball próbowałem jakoś przez p.getInventory mianowicie potrzebuje wyciągnąć z ekwipunku gracza informacje ile ma slimebalii ich ilość

i podzielić to przez 64 oczywiście mój problem leży po tym zeby to był int (najlepiej) bo podzielić poprzez np: int stackslimeball = slime /64; to zaden problem. Ktoś pomoże ;3 ?

CzarnaWoda Here 

Trwa pościg za kasą, pozycją, dupami, gdzie ludzie rozminęli się z wartościami.
Tego nie wiem, ale spróbuj dać im palec, kto jest kto przekonasz się doskonale.
Hipokryci dla mnie daremnie ukryci, Ich dewizy, szydercze oczka, uśmiech Mona Lisy.

Pozdrawiam

Opublikowano

@Zethik

ItemStack[] playerInventory = player.getInventory().getContents();
Integer liczbaSlimeBalli = 0;
for(int i = 0; i < playerInventory.length ; i++)
{
    if(playerInventory[i] == null) continue;
    if(!(playerInventory[i].getType() == Material.SLIME_BALL)) continue;
    liczbaSlimeBalli += playerInventory[i].getAmount();
}

player.sendMessage("Posiadasz " + liczbaSlimeBalli + " slimeball w ekwipunku");



Proszę bardzo ;)

 

Tam liczbaSlimeBalli możesz sobie spokojnie podzielić przez 64 ;) bo pewnie chodzi ci o to ile stacków gracz ma w EQ

Pomogłem ? ;) Daj like !

Opublikowano

Witam chce aby pobrało mi z gracza ItemStack mianowicie slimeball próbowałem jakoś przez p.getInventory mianowicie potrzebuje wyciągnąć z ekwipunku gracza informacje ile ma slimebalii ich ilość

i podzielić to przez 64 oczywiście mój problem leży po tym zeby to był int (najlepiej) bo podzielić poprzez np: int stackslimeball = slime /64; to zaden problem. Ktoś pomoże ;3 ?

 

@Zethik

ItemStack[] playerInventory = player.getInventory().getContents();
Integer liczbaSlimeBalli = 0;
for(int i = 0; i < playerInventory.length ; i++)
{
    if(playerInventory[i] == null) continue;
    if(!(playerInventory[i].getType() == Material.SLIME_BALL)) continue;
    liczbaSlimeBalli += playerInventory[i].getAmount();
}

player.sendMessage("Posiadasz " + liczbaSlimeBalli + " slimeball w ekwipunku");



Proszę bardzo ;)

 

Tam liczbaSlimeBalli możesz sobie spokojnie podzielić przez 64 ;) bo pewnie chodzi ci o to ile stacków gracz ma w EQ

 

 

Pytnie do czego tego potrzebujesz? bo może da się prościej, jak chcesz po prostu zabrać 2 stacki to możesz użyć metody .containsAtLeast, a jeśli chcesz zrobić komendę która zmienia każdy stack w diament... użyj .all, .all zwraca HashMap<Integer, ? extends ItemStack>, gdzie integer to sloty, możesz wtedy łatwo policzyć ilość, albo od razu zastąpić te sloty gdzie jest 64. (tylko wtedy nie zadziała jak gracz ma w eq 2x 32 itemy)

 

Przykład z liczeniem, lepszy niż ten kod wyżej: (all ma 2 możliwości, albo podajesz Material, albo ItemStack, tutaj dam material bo nic nie piszesz by cokolwiek więcej cię interesowało)

HashMap<Integer, ? extends ItemStack> all = inv.all(Material.SLIME_BALL);
int allSlimeBalls = 0;
for (Entry<Integer, ? extends ItemStack> entry : all.entrySet())
{
    allSlimeBalls += entry.getValue().getAmount();
}

lub nowocześniej:

HashMap<Integer, ? extends ItemStack> all = inv.all(Material.SLIME_BALL);
int allSlimeBalls = all.values().stream().mapToInt(ItemStack::getAmount).sum();

 

Innym wygodnym podejściem jest użycie .removeItem, zwraca to mapkę usuniętych itemów, tak samo jak .all, usuwasz jakąś niewyobrażalnie duzą liczbę itemów, a potem zliczasz.

int maxItems = 64 * 9 * 4; // (maksymalna ilość itemów w eq - 2304)
HashMap<Integer, ItemStack> removed = inv.removeItem(new ItemStack(Material.SLIME_BALL, maxItems));
int removedSlimeballs = removed.values().stream().mapToInt(ItemStack::getAmount).sum(); // i zliczamy tak samo jak poprzednio

Tylko wtedy nie masz kontroli by usuwać całe stacki.

 

Ogólnie polecam javadocs...

https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/inventory/Inventory.html

1438614356923701010629.png

 

Opublikowano

 

Witam chce aby pobrało mi z gracza ItemStack mianowicie slimeball próbowałem jakoś przez p.getInventory mianowicie potrzebuje wyciągnąć z ekwipunku gracza informacje ile ma slimebalii ich ilość

i podzielić to przez 64 oczywiście mój problem leży po tym zeby to był int (najlepiej) bo podzielić poprzez np: int stackslimeball = slime /64; to zaden problem. Ktoś pomoże ;3 ?

 

@Zethik

ItemStack[] playerInventory = player.getInventory().getContents();
Integer liczbaSlimeBalli = 0;
for(int i = 0; i < playerInventory.length ; i++)
{
    if(playerInventory[i] == null) continue;
    if(!(playerInventory[i].getType() == Material.SLIME_BALL)) continue;
    liczbaSlimeBalli += playerInventory[i].getAmount();
}

player.sendMessage("Posiadasz " + liczbaSlimeBalli + " slimeball w ekwipunku");



Proszę bardzo ;)

 

Tam liczbaSlimeBalli możesz sobie spokojnie podzielić przez 64 ;) bo pewnie chodzi ci o to ile stacków gracz ma w EQ

 

 

Pytnie do czego tego potrzebujesz? bo może da się prościej, jak chcesz po prostu zabrać 2 stacki to możesz użyć metody .containsAtLeast, a jeśli chcesz zrobić komendę która zmienia każdy stack w diament... użyj .all, .all zwraca HashMap<Integer, ? extends ItemStack>, gdzie integer to sloty, możesz wtedy łatwo policzyć ilość, albo od razu zastąpić te sloty gdzie jest 64. (tylko wtedy nie zadziała jak gracz ma w eq 2x 32 itemy)

 

Przykład z liczeniem, lepszy niż ten kod wyżej: (all ma 2 możliwości, albo podajesz Material, albo ItemStack, tutaj dam material bo nic nie piszesz by cokolwiek więcej cię interesowało)

HashMap<Integer, ? extends ItemStack> all = inv.all(Material.SLIME_BALL);
int allSlimeBalls = 0;
for (Entry<Integer, ? extends ItemStack> entry : all.entrySet())
{
    allSlimeBalls += entry.getValue().getAmount();
}

lub nowocześniej:

HashMap<Integer, ? extends ItemStack> all = inv.all(Material.SLIME_BALL);
int allSlimeBalls = all.values().stream().mapToInt(ItemStack::getAmount).sum();

 

Innym wygodnym podejściem jest użycie .removeItem, zwraca to mapkę usuniętych itemów, tak samo jak .all, usuwasz jakąś niewyobrażalnie duzą liczbę itemów, a potem zliczasz.

int maxItems = 64 * 9 * 4; // (maksymalna ilość itemów w eq - 2304)
HashMap<Integer, ItemStack> removed = inv.removeItem(new ItemStack(Material.SLIME_BALL, maxItems));
int removedSlimeballs = removed.values().stream().mapToInt(ItemStack::getAmount).sum(); // i zliczamy tak samo jak poprzednio

Tylko wtedy nie masz kontroli by usuwać całe stacki.

 

Ogólnie polecam javadocs...

https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/inventory/Inventory.html

 

Dzięki daje like ;) poradziłem sobie na luzaczku potrzebne mi to było do wymiany coinsow co jak co już wcześniej ogarnołem jak to zrobić najlepiej stworzyłem własną metodę w api po prostu 64 sllimeballi jako jeden obiekt dałem :) ale twoje łatwiejsze jakbyś wcześniej napisał użył bym :P

CzarnaWoda Here 

Trwa pościg za kasą, pozycją, dupami, gdzie ludzie rozminęli się z wartościami.
Tego nie wiem, ale spróbuj dać im palec, kto jest kto przekonasz się doskonale.
Hipokryci dla mnie daremnie ukryci, Ich dewizy, szydercze oczka, uśmiech Mona Lisy.

Pozdrawiam

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...