The_Kodi 0 Opublikowano 19 czerwca 2024 Udostępnij Opublikowano 19 czerwca 2024 Skrypt na to, aby przedmiot red_dye nazwany &7test nie mógł się stackować nigdzie Cytuj Odnośnik do komentarza https://skript.pl/temat/57681-skrypt-na-to-aby-przedmiot-red_dye-nazwany-7test-nie-m%C3%B3g%C5%82-si%C4%99-stackowa%C4%87-nigdzie/ Udostępnij na innych stronach Więcej opcji udostępniania...
0 Kormic 1952 Opublikowano 20 czerwca 2024 Udostępnij Opublikowano 20 czerwca 2024 (edytowane) W dniu 19.06.2024 o 13:09, The_Kodi napisał: Skrypt na to, aby przedmiot red_dye nazwany &7test nie mógł się stackować nigdzie Najprostszy sposób jaki przychodzi mi do głowy to nadanie każdemu z tych barwników unikalnych znaczników (tagów) NBT zawierających czas w nanosekundach wyznaczony względem pewnego arbitralnie ustalonego momentu (czasu). Nie będzie to widoczne dla gracza, a i unikamy nasłuchiwania do rozmaitych wariantów zdarzenia 'on inventory click'. Proszę bardzo. Skrypt był testowany i zdaje się, że wszystko działa tak jak powinno. Do jego poprawnego działania wymagane są dodatki skript-reflect i SkBee. Rzecz jasna, niemożliwym jest uczynienie wszystkich istniejących już na serwerze barwników na serwerze niestackowalnymi. Możemy jedynie przy pewnych zdarzeniach i tworzeniu nowych czynić je takimi. Ponadto, proszę sobie wyobrazić chociażby sytuację, w której gracz posiada setki tych barwników w skrzyni. Przy takiej podmianie albo by je stracił z tej skrzyni, albo zostałyby one wyrzucone na ziemię. Jak może Pan zauważyć, podmiana przedmiotu następuje tylko przy podnoszeniu przedmiotów. Wydaje mi się, że jest to wystarczające. Zresztą, gdybym miał podmieniać te przedmioty w ekwipunkach lub skrzyniach graczy, doszłoby do czarnego scenariusza, który opisałem wyżej. import: java.lang.System options: stackableItem: red dye named "&7test" function addUnstackableNBTTag(i: item) :: item: if tag "timeID" of nbt of {_i} is set: return {_i} set {_newTimeID} to System.nanoTime() add "{timeID:%{_newTimeID}%L}" to nbt of {_i} return {_i} pick up: 1 of event-item is {@stackableItem} tag "timeID" of nbt of event-item is not set cancel event delete event-dropped item set {_amount} to item amount of event-item loop {_amount} times: drop addUnstackableNBTTag({@stackableItem}) at event-player Na koniec dodam, że mogłem również to rozwiązać za pomocą modyfikacji CustomModelData lub PersistentDataContainer, ale nie zrobiłem tego w ten sposób, bo miałem ku temu pewne powody. Nie użyłem CustomModelData, gdyż blokuje to możliwość używania jakichkolwiek paczek zasobów (resource pack). Gdyby było tego mało, nie ma gwarancji, że już jakiś inny plugin nie wykorzystuje CustomModelData jako na przykład systemu ID. Nie wprowadzałem również danych do PersistentDataContainer, ponieważ użycie NBT w tym przypadku było zwyczajnie prostsze (ten sposób zajmuje mniej linijek). Gdyby coś było nie tak ze skryptem, proszę dać znać. Pozdrawiam. Edytowane 20 czerwca 2024 przez Kormic Cytuj Odnośnik do komentarza https://skript.pl/temat/57681-skrypt-na-to-aby-przedmiot-red_dye-nazwany-7test-nie-m%C3%B3g%C5%82-si%C4%99-stackowa%C4%87-nigdzie/#findComment-343085 Udostępnij na innych stronach Więcej opcji udostępniania...
Pytanie
The_Kodi 0
Skrypt na to, aby przedmiot red_dye nazwany &7test nie mógł się stackować nigdzie
Odnośnik do komentarza
https://skript.pl/temat/57681-skrypt-na-to-aby-przedmiot-red_dye-nazwany-7test-nie-m%C3%B3g%C5%82-si%C4%99-stackowa%C4%87-nigdzie/Udostępnij na innych stronach
1 odpowiedź na to pytanie
Rekomendowane odpowiedzi
Dołącz do dyskusji
Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.