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

Co sądzicie o pluginie?


pixel1335

Rekomendowane odpowiedzi

Opublikowano
public class cmd implements CommandExecutor{

    Configuration cfg = Main.getInst().getConfig();

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String lab, String[] args) {
        if(lab.equalsIgnoreCase("drop")){
            if(args.length == 2){
                if(args[0].equalsIgnoreCase("raty")){
                    if(args[1].equalsIgnoreCase("on")){
                        sender.sendMessage("Wlaczyles raty");
                        cfg.set("ratySerwera", true);
                    }
                    if(args[1].equalsIgnoreCase("off")){
                        sender.sendMessage("Wylaczyles raty");
                        cfg.set("ratySerwera", false);
                    }
                }
            }
        }
        return false;
    }
}

chociażby po tym, moge stwierdzić ,że to raczej nie twój plugin.

Komende po prostu dopisałeś, kilka wiadomości, nazwe package, klas pozmieniałeś.

    private static final FileConfiguration cfg = Main.getInst().getConfig();

 

 

dalej nie chce mi sie nawet sprawdzać, wiekszość zmiennych powinny być finalne, widać ,że jedyny kod z którego sie uczyłeś to ten z jd-gui i kguildsów.

 

                p.sendMessage(config.getString("message-blocked-ore").replaceAll("&","ยง"));

ten piekny replace, z jakimś dziwnym znakiem <3, dekomplikator zepsuł?

 

 

Aktualnie interesuję się javą, powoli ogarniam java swing i awt, czasem bawię się HTML.

Opublikowano

Pewnie mi nie uwierzysz, no ale cóż w nocy pisałem a że trochę bylem zaspany i przy zmienianiu projektów na qDrop aby sobie popatrzeć jak jest on napisany przypadkiem usunąłem ten projekt a że miałem go już skompilowany i go testowałem więc sobie go zdekompilowałem i tego nie zmieniłem bo nie zauważyłem. Jak nie chcesz to nie wierz. A co do klasy cmd to chciałem na szybko ztestować czy mi działają "raty serwerowe". Nie chcesz mi pomóc to nie pisz ale i tak dziękuje za twoją opinie. 

Ps. Jak coś jest podobne to jedynie nazwy niektórych zmiennych brałem z qDrop autorstwa Grzegorza.

Ps2. Czemu większość zmiennych ma być final ?

Opublikowano
26 minut temu, pixel1335 napisał:

Pewnie mi nie uwierzysz, no ale cóż w nocy pisałem a że trochę bylem zaspany i przy zmienianiu projektów na qDrop aby sobie popatrzeć jak jest on napisany przypadkiem usunąłem ten projekt a że miałem go już skompilowany i go testowałem więc sobie go zdekompilowałem i tego nie zmieniłem bo nie zauważyłem. Jak nie chcesz to nie wierz. A co do klasy cmd to chciałem na szybko ztestować czy mi działają "raty serwerowe". Nie chcesz mi pomóc to nie pisz ale i tak dziękuje za twoją opinie. 

Ps. Jak coś jest podobne to jedynie nazwy niektórych zmiennych brałem z qDrop autorstwa Grzegorza.

Ps2. Czemu większość zmiennych ma być final ?

o wszystko jasne, wszystko wziete z pluginu qdrop, i cos tam dodane.

Cytat

Ps2. Czemu większość zmiennych ma być final ?

jak nie wiesz czym sie rozni zmienna finalna od normalnej to nawet nie bierz sie za jave

 

Aktualnie interesuję się javą, powoli ogarniam java swing i awt, czasem bawię się HTML.

Opublikowano

Jesteś osobą irytująca jak dla mnie ale jest to moja prywatna opinia. Podaj mi podobieństwa pomiędzy tymi dwoma pluginami. Chcę się nauczyć javy a ty mi piszesz nie bierz sie za jave to tak jak bym tobie powiedział nie bierz się za gotowanie bo nie wiesz jak to robić ...

Opublikowano
7 minut temu, pixel1335 napisał:

Jesteś osobą irytująca jak dla mnie ale jest to moja prywatna opinia. Podaj mi podobieństwa pomiędzy tymi dwoma pluginami. Chcę się nauczyć javy a ty mi piszesz nie bierz sie za jave to tak jak bym tobie powiedział nie bierz się za gotowanie bo nie wiesz jak to robić ...

To po co próbujesz nam wkrecic, ze jest to TWÓJ plugin?

Cytat

Chcę się nauczyć javy a ty mi piszesz nie bierz sie za jave to tak jak bym tobie powiedział nie bierz się za gotowanie bo nie wiesz jak to robić ...

bardziej chodziło mi o to ,abyś wrócił do postaw, bo ja ci na pewno nie uwierze ,że zrobiłeś taki plugin jak nie wiesz czym sie różni zmienna finalna od normalnej, lub chociaz po tym jak piszesz:

2 godziny temu, pixel1335 napisał:

Witam pojawiam się tutaj nie bez powodu. Powodem jest to abyście podali mi błędy, rady na temat samego pisania i ocenili mój plugin na drop. Dziękuje za wszystkiego wypowiedzi ;)

dl https://www.mediafire.com/?kygqfnu68wgucgn
scan https://www.virustotal.com/pl/file/e59fe1516b29ba7c83ca812d252f5ed1e34654fc762248d7243c8ccb5d9a1ccc/analysis/

nie więcej niż 12-13 lat

 

Aktualnie interesuję się javą, powoli ogarniam java swing i awt, czasem bawię się HTML.

Opublikowano
56 minut temu, pixel1335 napisał:

Pewnie mi nie uwierzysz, no ale cóż w nocy pisałem a że trochę bylem zaspany i przy zmienianiu projektów na qDrop aby sobie popatrzeć jak jest on napisany przypadkiem usunąłem ten projekt a że miałem go już skompilowany i go testowałem więc sobie go zdekompilowałem i tego nie zmieniłem bo nie zauważyłem. Jak nie chcesz to nie wierz. A co do klasy cmd to chciałem na szybko ztestować czy mi działają "raty serwerowe". Nie chcesz mi pomóc to nie pisz ale i tak dziękuje za twoją opinie. 

Ps. Jak coś jest podobne to jedynie nazwy niektórych zmiennych brałem z qDrop autorstwa Grzegorza.

Ps2. Czemu większość zmiennych ma być final ?

W tym kodzie co zacytowal yoonkis sa podstawowe bledy. Po pierwsze nazwy klas zaczyna sie z wielkiej litery, po drugie z tego co pamietam w bukkicie lancuch komendy porownuje sie z obiektem Command, a nie String, ktory sluzy do tworzenia aliasow (moze cos sie zmienilo, kupe czasu w tym nie siedze).

Zmienne finalne sa przydatne w przypadku jednorazowej inicjalizacji zmiennej jakas wartoscia moze to byc referencja do obiektu lub wartosc typu podstawowego. Jak przypadkiem przypiszesz nowa wartosc to kompilator zglosi blad.

 

PS. Nie ucz sie Javy pisaniem pluginow, bo to mozna o kant dupy rozbic, niczego sensownego sie nie nauczysz tymbardziej zagladajac w jakies inne pluginy - nie umiesz Javy wiec skad wiesz, ze ow ta osoba nie jebla jakiegos zlego nawyku w kodzie i pozniej bedziesz powtarzal to w swoich projektach. Wez sobie przeczytaj jakas ksiazke polecam m.in. Java podstawy.

Opublikowano

yooniks Mam 16 lat i nie mów że to 'plagiat' skoro nawet 10% nie jest takie same. A tu masz formułkę Plagiatu: Pojęcie z zakresu prawa autorskiego oznaczające skopiowanie cudzego utworu (lub jego części) wraz z przypisaniem sobie prawa do autorstwa poprzez ukrycie pochodzenia splagiatowanego utworu. Nie odpisuj nawet jeżeli chcesz się dalej kłócić bez podstawnie, no chyba że chcesz napisać mi jakieś błędy związane z tym .

Etaku Wstawiłem ten plugin abyście mi pokazali błędy i abym je poprawił i ich więcej już nie popełniał. Powiem Ci jeszcze, że czytanie książek i zapomnienie ponad połowy z tego to marnotractwo czasu. Jeżeli masz inne zdanie chętnie go wysłucham.

  • Biter. zmienił(a) tytuł na Co sądzicie o pluginie?
Opublikowano
13 godzin temu, pixel1335 napisał:

yooniks Mam 16 lat i nie mów że to 'plagiat' skoro nawet 10% nie jest takie same. A tu masz formułkę Plagiatu: Pojęcie z zakresu prawa autorskiego oznaczające skopiowanie cudzego utworu (lub jego części) wraz z przypisaniem sobie prawa do autorstwa poprzez ukrycie pochodzenia splagiatowanego utworu. Nie odpisuj nawet jeżeli chcesz się dalej kłócić bez podstawnie, no chyba że chcesz napisać mi jakieś błędy związane z tym .

Etaku Wstawiłem ten plugin abyście mi pokazali błędy i abym je poprawił i ich więcej już nie popełniał. Powiem Ci jeszcze, że czytanie książek i zapomnienie ponad połowy z tego to marnotractwo czasu. Jeżeli masz inne zdanie chętnie go wysłucham.

przeciez to jest najglupszy błąd jaki widziałem

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String lab, String[] args) {
        if(lab.equalsIgnoreCase("drop")){

albo to:

    Configuration cfg = Main.getInst().getConfig();
FileConfiguraton*

lub to:

                p.sendMessage(config.getString("message-blocked-ore").replaceAll("&","ยง"));

replace*, nie replaceAll.

 

robisz podstawowe błędy, wiec prosimy, nie kłam ,że to twój plugin w 100%.

 

Aktualnie interesuję się javą, powoli ogarniam java swing i awt, czasem bawię się HTML.

Opublikowano

@UP Już to poprawiłem

Ps. 90%

Ps2. Jak można odczytać coś z innego pliku, do czego mam się odwołać ? Szukałem już w google ale nic nie znalazłem.

Opublikowano
18 minut temu, pixel1335 napisał:

@UP Już to poprawiłem

Ps. 90%

Ps2. Jak można odczytać coś z innego pliku, do czego mam się odwołać ? Szukałem już w google ale nic nie znalazłem.

Z innego pliku, tzn. ?
Wyjaśnij bardziej :D

 

Chcesz przykładowo odczytać coś z testowy.txt?

 

Aktualnie interesuję się javą, powoli ogarniam java swing i awt, czasem bawię się HTML.

Opublikowano
Cytat

dalej nie chce mi sie nawet sprawdzać, wiekszość zmiennych powinny być finalne, widać ,że jedyny kod z którego sie uczyłeś to ten z jd-gui i kguildsów.

nie ucz go durnot .... final nie jest nikomu do niczego niezbędny jest opcją np masz klasę i w niej cały paciorek zmiennych nazwanych od 'a' do 'z' (co bardzo ładnie można zaobserwować w mns) ba dodatkowo wszystkie sa publiczne i np nie chcesz aby zmienna H była zmieniana to dajesz ją jako final... a jeśli lubisz final'a to z tego co sie orientuje ,przykładowo eclipse sam można je dodawać wystarczy go poprosić .

warto za to trzymać zmienne z cfg w pamięci zamiast je za każdym razem wyciągać. choć nie jest to wymagane.

2 godziny temu, pixel1335 napisał:

@UP Już to poprawiłem

Ps. 90%

Ps2. Jak można odczytać coś z innego pliku, do czego mam się odwołać ? Szukałem już w google ale nic nie znalazłem.

tzn zależy co chcesz zrobić, możesz otworzyć plik za pomocą http://www.codejava.net/java-se/file-io/how-to-read-and-write-text-file-in-java

możesz wczytać osobny cfg za pomocą api-bukkit'a https://hub.spigotmc.org/javadocs/spigot/

Java , musisz znać język (co wydaje mi się znasz) ale Java jako java to język (dość ubogi)  tydzień nauki, reszta to biblioteki których siłą rzeczy nauczysz sam z siebie piszą kod.(np pod bukkit api) książka powinna być twoją pomocą , oczywiście musisz znać podstawy JAVA ! tzn operatory zmienne klasy dziedziczenie  interfejsy wyjątki( w tym wspaniały npe)  watki bla bla bla. reszta to kwestia czytania dokumentacji i uwierz mi będziesz często korzystał z dokumentacji w języku angielskim . tak więc przykładowo List -> ArrayList - >LinkedList nie jest to java sama w sobie , ale warto je znać oraz całe drzewko Collection (może nie całe ale z pewnością mapy,listy,zbiory) i tutaj nie ma też co się uczyć na pamięć wystarczy wiedzieć czym się różnią, do czego się nadają a do czego nie <- ja na początku nauki gdy musiałem przechowywać dane wracałem do ksiązki i paczałem w czym je przechowywać .

 

co do kodu !!

Listener petla for iteruje za każdym razem przez całą listę !! !! trochę mnie boli to co tu zrobiłeś choć nie jest to złe!! !! ja bym się zastanowił nad dodatkową klasą określającą blok który będzie niszczyć gracz i w nim itemtodrop i wtedy przerywanie pętli lub hashmapa, ale to co zrobiłeś jest dobre

listener p.giveExp(config.getInt("exp-drop")); zmienna możesz wczytać do tej klasy np w konstruktorze (co jest jednak teoretycznie niebezpieczne) niby nic ale wydaje mi się że wygodniej bo gdy popełnisz bląd i będzie exp_drop będziesz miał wczytywanie cfg w jednym miejscu a nie rozwalone po całej klasie dodatkowo wygodniej sie do tej danej dostać;

listener 45 linijka , po co to wszystko możesz zrobić to w tym co już masz i np dodać jako domyślny konfiguracji gdzie szansa ze wypadnie == 0 oraz przerobił byś nieco klase item to drop tak aby to czy / oraz ile przedmiotu wypadnie pozostało po stronie klasy itemtodrop i wtedy mógłbyś np zrobić w tej klasie metody (przykład) proces(BlockBreakEvent e) najprostszy przykład , co to daje , a daje wiele bo możesz zrobić klasy rozszezające itemtodrop nadpisującą metode proces tak aby np przedmioty byly wywalana naturalnie / lub np stawiającą w miejscu rozwalonego bloku skrzynie z przedmiotami , lub otwierającą jakąś minigre no pomysłów można mieć od groma jak to wykorzystać.

mógłbyś dodać możliwość uwzględnienia mikstury szczęścia ,

 

 

Opublikowano

@damianq20Dobra wróciłem z wakacji i zrobiłem te pliki o których mówiłem, zmieniłem, że teraz trzymam zmienne w pamięci a wyciągam za każdym razem z cfg.

Mógłbyś mi wytłumaczyć o co ci chodzi z 

Dnia 26.07.2017 o 22:21, damianq20 napisał:

listener 45 linijka , po co to wszystko możesz zrobić to w tym co już masz i np dodać jako domyślny konfiguracji gdzie szansa ze wypadnie == 0 oraz przerobił byś nieco klase item to drop tak aby to czy / oraz ile przedmiotu wypadnie pozostało po stronie klasy itemtodrop i wtedy mógłbyś np zrobić w tej klasie metody (przykład) proces(BlockBreakEvent e) najprostszy przykład , co to daje , a daje wiele bo możesz zrobić klasy rozszezające itemtodrop nadpisującą metode proces tak aby np przedmioty byly wywalana naturalnie / lub np stawiającą w miejscu rozwalonego bloku skrzynie z przedmiotami , lub otwierającą jakąś minigre no pomysłów można mieć od groma jak to wykorzystać.

 

 

i jeszcze pisze to na wesje 1.7.10 (najlepsza ze wszystkim moim skromnym zdaniem :P) i nie ma tam mikstury szcześcia.

Opublikowano

na przykladzie

   for (itemToDrop i : itemToDrop.getDrops()) {
            if (i.getBlock().equals(e.getBlock().getType())) {
                if(Utils.getChance(Utils.chance(p))){
                    if (i.getTools().contains(e.getPlayer().getItemInHand().getType())) {
                        if (e.getBlock().getLocation().getBlockY() <= i.getMaxY()) {
                            ItemStack dropI = new ItemStack(i.getDrop());
                            int amount = Utils.randomInt(1, Utils.enchant(p));
                            dropI.setAmount(amount);
                            p.getInventory().addItem(dropI);
                            p.giveExp(i.getExp() + Utils.enchant(p));
                            for (String s : i.getMessages()) {
                                p.sendMessage(s.replace("{AMOUNT}", Integer.toString(amount)));

zrobiłeś tak że wszystko jest wyliczane w listener :/ co strasznie zawęża ci możliwość dodawania nowych rzeczy (utrudnia bo dodać zawszę można) a mógłbyś to zrobić w bardziej "wyrafinowany" sposób rozwiązać pozostawiając klasie ItemToDrop wolną rękę z tym co ma zrobić z całym eventem , najprostszy i najbardziej bezczelny sposób to zrobienie w klasie ItemToDrop metody która jako parametr przyjmie obiekt BlockBreakEvent i tam się z nim upora a wyglądać to mogło by tak:

public void proces(BlockBreakEvent e) {
	//TODO tutaj kod wyliczający czy ma dropnąć co ma dropnąć oraz ile lub
// coś zupełnie innego np zamiast wyliczać drop , postawi w miejscu rozwalonego bloku skrzynie z przedmiotami ..
}
a wygladalo by to tak
    @EventHandler
    public void onBlockBreakEvent(BlockBreakEvent e) {
        for (itemToDrop i : itemToDrop.getDrops()) 
			i.proces(e);
}

metoda proces powinna być zawarta w jakimś interfejsie aby było wygodniej dodawać nowe obiekty

kolejna Bardzo ważna sprawa to że nie sprawdzasz czy event nie został anulowany jak jest anulowany to pomijasz (mozna to ustawić w adnotacji) .

 

teraz jak ja bym to zrobił :

- dodał klasę która informuje o materiale nazwę ja "mat" (i po tym szukasz tak jak w itemtodrop jesli to jest blok który gracz zniszczył wykonuje metode) ; klasa przechowuje "odpowiedzi na zdarzenia" które są uruchamiana według jakiegoś algorytmu (może to być lista którą całą wykonuje , jakieś procentowe szanse cokolwiek) oraz metode np void proces(BlockBreakEvent  e);

- "odpowiedzi" było by klasą która defakto albo dropi przedmioty albo robi coś zupełnie innego NIE JEST TO KLASA ODPOWIEDZIALNA ZA DROP która zawiera bardzo ważną metodę proces:P(BlockBreakEvent  e);

co daje taka struktura:

- większa elastyczność i jeśli będzie szukał do pierwszego trafionego materiału to i szybsza (co można też rozwiązać nieco inaczej dodatkową listą)

- możesz zrobić kilka klas dziedziczących z "mat" i np jedna klasa uruchamia wszystkie "odpowiedzi" w liscie / inna losuje odpowiedzi (szanse są równe) / itp (

- możesz dodać kilka klas dziedziczących po "odpowiedzi" jedna przykładowo zawiera twoją listę ItemToDrop która w zależności od szansy dropi ileś tam przedmiotów / inna zamiast wywalać przedmioty stawia skrzynkę  itp

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...