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

Pisanie pluginów oraz działający plugin na stoniarki


us3rn0tf0und

Rekomendowane odpowiedzi

Opublikowano

KUVA !

 

KukuStone , EastStone , JaszczuStone nie działa .

 

Testowane na :

 

SPIGOT 1.7.10

SPIGOT 1.7.9

PAPERSPIGOT 1.7.10

 

Jakiś plugin jeszcze istnieje ?

 

@ref

Opublikowano

@mate1337 Nw xD

Na jakich jar'ach piszesz bo u mnie na 1.7.10 r01 nie działa pobieranie Player'a

 

@dominik148 Z tego co się orientuję eaststone to stoniarki jak na skkafie , mi chodzi o takie na end block .

wat? xD

 

Niezależnie od wersji pod jaką coś tworzysz, to ni ma opcji że nie da się pobrać plejera... może złego jar'a po prostu pobrałeś? xD

Opublikowano

@mate1337

 

bukkit 1.7.10 r01 i cb 1.7.10 r01 

bukkit pierwszy cb drugi

 

@1361622928-U485574.png__AHA__

Ale ku*wa śmieszne .....

to inaczej, nie pobiera w IDE czy bezpośrednio w grze? xD

Opublikowano

@mate1337 podeślesz mi twoje jar'y ?

 

Wszystko jest ok , tylko mam błędy przy pobieraniu .

teraz działa?

Opublikowano

// pobieranie player'a później ogarnę , @up Dzięki za pomoc

 

 

Da ktoś spis pluginów na stoniarki oprócz

 

eaststone

kukustone

 

?

Opublikowano

Pisząc pluginy używasz Bukkita czyli API. Wersja Craftbukkita ma mniejsze znaczenie. Wystarczy pamiętać o dużych zmianach w interfejsach entity w okolicach 1.7.X, zmianie Player[] na Collection w getOnlinePlayers (1.8 jeśli się nie mylę). Dodana została jedna fajna metoda od Inventory gdzieś w okolicy 1.8.3. Przy 1.9 pojawił się dual wielding i nowe metody do pobierania itemu w łapce. Eventy się łatwo wykrywa bo nie sypią wyjątkami ale pokazują komunikat w konsoli, ale pamiętaj, że bez nich nie rejestruje Ci się cały listener. Biorąc to wszystko pod uwagę możesz śmiało zacząć pisać od 1.7.6 do 1.11.2 (chyba) bo wcześniej się robią problemy z UUID i z tym co wymieniłem pierwsze.

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

newlogo.png

Opublikowano

Pisząc pluginy używasz Bukkita czyli API. Wersja Craftbukkita ma mniejsze znaczenie. Wystarczy pamiętać o dużych zmianach w interfejsach entity w okolicach 1.7.X, zmianie Player[] na Collection w getOnlinePlayers (1.8 jeśli się nie mylę). Dodana została jedna fajna metoda od Inventory gdzieś w okolicy 1.8.3. Przy 1.9 pojawił się dual wielding i nowe metody do pobierania itemu w łapce. Eventy się łatwo wykrywa bo nie sypią wyjątkami ale pokazują komunikat w konsoli, ale pamiętaj, że bez nich nie rejestruje Ci się cały listener. Biorąc to wszystko pod uwagę możesz śmiało zacząć pisać od 1.7.6 do 1.11.2 (chyba) bo wcześniej się robią problemy z UUID i z tym co wymieniłem pierwsze.

Warto zaznaczyć, że używając samego bukkit-api nie dostaniemy tam również dependency bukkita czy NMS. Warto to zaznaczyć, bo ktoś może nie ogarnąć. Jak chcesz używać NMS musisz importować całego craftbukkita, polecam buildtoolsy.

Moja oficjalna strona! :)

http://socketbyte.pl/ 

Opublikowano

No właśnie bukkita dostajemy a nie craftbukkita. Nie jestem złośliwy, po prostu trzeba ludzi uczyć jaka jest różnica :p

Polecam Mavena do zarządzania zależnościami, mamy spigota (w odróżnieniu od spigot-api jest to wersja z CB), bukkita, craftbukkita gotowe do zaimportowania jeśli zbudujemy to buildtoolsami.

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

newlogo.png

Opublikowano

Z tego co widziałem wrzucałeś superowe plugin na mpc więc podesle tylko kod do stoniarek

    @EventHandler
    public void onBreak(BlockBreakEvent e) {
        if (e.getPlayer() == null) {
            return;
        }
 
        Block b = e.getBlock();
        Block relative = b.getRelative(BlockFace.DOWN);
        if (relative != null && relative.getType() == unlimitedBlock.getType()) {
            map.add(e.getBlock(),System.currentTimeMillis() + 5000);
        }
    }
i teraz map jest to HashMapa Key: Block Value: Long
i w onEnable robisz taska który co 1 sekunde iteruje po tej hashmapie i jesli Value jest > od currentTime to usuwasz z mapy i ustawiasz tam block i tyle
w skrócie ale napewno dasz sobie rade napisać to :) 

Co ja tutaj robie...

Opublikowano

 

Z tego co widziałem wrzucałeś superowe plugin na mpc więc podesle tylko kod do stoniarek

    @EventHandler
    public void onBreak(BlockBreakEvent e) {
        if (e.getPlayer() == null) {
            return;
        }
 
        Block b = e.getBlock();
        Block relative = b.getRelative(BlockFace.DOWN);
        if (relative != null && relative.getType() == unlimitedBlock.getType()) {
            map.add(e.getBlock(),System.currentTimeMillis() + 5000);
        }
    }
i teraz map jest to HashMapa Key: Block Value: Long
i w onEnable robisz taska który co 1 sekunde iteruje po tej hashmapie i jesli Value jest > od currentTime to usuwasz z mapy i ustawiasz tam block i tyle
w skrócie ale napewno dasz sobie rade napisać to :)

 

tyle, że < a nie  >

 

Na upartego możesz przy niszczeniu bloku dać runtasklater,

Block b = e.getBlock();
Block relative = b.getRelative(BlockFace.DOWN);
Bukkit.getScheduler().runTaskLater(Main.getInstance(), ()-> {
    if (relative != null && relative.getType().equals(Material.ENDER_STONE)) {
        b.setType(Material.STONE);
    }
}, 25L);
Opublikowano

 

 

Z tego co widziałem wrzucałeś superowe plugin na mpc więc podesle tylko kod do stoniarek

    @EventHandler
    public void onBreak(BlockBreakEvent e) {
        if (e.getPlayer() == null) {
            return;
        }
 
        Block b = e.getBlock();
        Block relative = b.getRelative(BlockFace.DOWN);
        if (relative != null && relative.getType() == unlimitedBlock.getType()) {
            map.add(e.getBlock(),System.currentTimeMillis() + 5000);
        }
    }
i teraz map jest to HashMapa Key: Block Value: Long
i w onEnable robisz taska który co 1 sekunde iteruje po tej hashmapie i jesli Value jest > od currentTime to usuwasz z mapy i ustawiasz tam block i tyle
w skrócie ale napewno dasz sobie rade napisać to :)

 

tyle, że < a nie  >

 

Na upartego możesz przy niszczeniu bloku dać runtasklater,

Block b = e.getBlock();
Block relative = b.getRelative(BlockFace.DOWN);
Bukkit.getScheduler().runTaskLater(Main.getInstance(), ()-> {
    if (relative != null && relative.getType().equals(Material.ENDER_STONE)) {
        b.setType(Material.STONE);
    }
}, 25L);

 

1. masz racje,  Value < current, zawsze sie z tym jebne

2. robienie nowych tasków przy każdym wykopaniu bloków jest naprawda chujowym pomysłem, każdy task bierze zasoby, a tysiące tasków weźnie więcej zasobów, dlatego lepiej zrobić jeden task :)

@topic

pamietaj by nie robić for-each bo ci conrurreda zrobić przy hashmapie tylko użyj iteratora po keyach i pętle while() :) 

Co ja tutaj robie...

Opublikowano

 

 

 

Z tego co widziałem wrzucałeś superowe plugin na mpc więc podesle tylko kod do stoniarek

    @EventHandler
    public void onBreak(BlockBreakEvent e) {
        if (e.getPlayer() == null) {
            return;
        }
 
        Block b = e.getBlock();
        Block relative = b.getRelative(BlockFace.DOWN);
        if (relative != null && relative.getType() == unlimitedBlock.getType()) {
            map.add(e.getBlock(),System.currentTimeMillis() + 5000);
        }
    }
i teraz map jest to HashMapa Key: Block Value: Long
i w onEnable robisz taska który co 1 sekunde iteruje po tej hashmapie i jesli Value jest > od currentTime to usuwasz z mapy i ustawiasz tam block i tyle
w skrócie ale napewno dasz sobie rade napisać to :)

 

tyle, że < a nie  >

 

Na upartego możesz przy niszczeniu bloku dać runtasklater,

Block b = e.getBlock();
Block relative = b.getRelative(BlockFace.DOWN);
Bukkit.getScheduler().runTaskLater(Main.getInstance(), ()-> {
    if (relative != null && relative.getType().equals(Material.ENDER_STONE)) {
        b.setType(Material.STONE);
    }
}, 25L);

 

1. masz racje,  Value < current, zawsze sie z tym jebne

2. robienie nowych tasków przy każdym wykopaniu bloków jest naprawda chujowym pomysłem, każdy task bierze zasoby, a tysiące tasków weźnie więcej zasobów, dlatego lepiej zrobić jeden task :)

@topic

pamietaj by nie robić for-each bo ci conrurreda zrobić przy hashmapie tylko użyj iteratora po keyach i pętle while() :)

 

 

 

To tylko słaba alternatywa ;d.. 

 

Zrobiłem twoją metodą i task co 1 sekundę sztywno generuje tego stone lepiej co 0.5

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...