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

[Problem] Tworzenie pluginu


Gość animekkk

Rekomendowane odpowiedzi

Opublikowano

Witam stworzyłem plugin na losowanie lecz mam kilka problemów , gdy klikam diamentowym blokiem na piston to pisze "Losowanie" i nic nie dostaje .

 

 

I jak zrobić że jak będę losować to wylosuje tylko 1 rzecz ?

 

 

 

KOD:

 

http://www.pastebin.pl/view/3dee55dc
Opublikowano

 

 

import java.util.Random;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
 
public class Main extends JavaPlugin implements Listener {
 
        public static Main plugin;
 
        @Override
        public void onEnable() {
                Bukkit.getPluginManager().registerEvents(this, this);
        }
 
        public int getRadomPercent() {
            return new Random().nextInt(99); // wygeneruje nową pełną liczbę od 0 do 100. Aby tego użyć zrób
//            losuje od 0-99  mysle ze tak powinno byc lepiej 
}
       
        @EventHandler
        public void onInteract(PlayerInteractEvent e) {
                Player p = e.getPlayer();
                Action a = e.getAction();
                Inventory inv = p.getInventory();
                Block bl = e.getClickedBlock();
                ItemStack diax = new ItemStack(Material.DIAMOND_BLOCK, 1);
                if (a.equals(Action.RIGHT_CLICK_BLOCK)) {
                        if (bl !=null && bl.getType().equals(Material.PISTON_BASE)) {
                                if (p.getItemInHand().getType().equals(Material.DIAMOND_BLOCK)) {
                                                p.sendMessage(ChatColor.LIGHT_PURPLE + "Losowanie...");
                                                inv.remove(diax);
                                                if (this.getRadomPercent() < 10) {
//                                                	 czyli jesli liczba bedzie 0-9 (10%) wykona instrukcje
                                                        ItemStack miecz = new ItemStack(Material.DIAMOND_SWORD);
                                                        miecz.addEnchantment(Enchantment.DAMAGE_ALL, 4);
                                                        miecz.addEnchantment(Enchantment.FIRE_ASPECT, 1);
                                                        inv.addItem(miecz);
                                                        return;
//                                                        jesli x<10 to i x<15 tak więc musisz zakonczyc instrukcje aby program nie lecial dalej
                                                  
}
                                                if (this.getRadomPercent() < 15) {
//                                                	 nie wiem jak to sie spisze takie mutli %% ja bym dla kazdej "szansy losowal kolejna liczbe
                                                        ItemStack luk = new ItemStack(Material.BOW);
                                                        luk.addEnchantment(Enchantment.ARROW_KNOCKBACK, 2);
                                                        luk.addEnchantment(Enchantment.ARROW_INFINITE, 1);
                                                        luk.addEnchantment(Enchantment.DURABILITY, 2);
                                                        inv.addItem(luk);
                                                        return;
}
                                                if (this.getRadomPercent() < 25) {
                                                        ItemStack klata = new ItemStack(Material.DIAMOND_CHESTPLATE);
                                                        ItemStack spodnie = new ItemStack(Material.DIAMOND_LEGGINGS);
                                                        klata.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 4);
                                                        klata.addEnchantment(Enchantment.DURABILITY, 3);
                                                        spodnie.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 4);
                                                        spodnie.addEnchantment(Enchantment.DURABILITY, 4);
                                                        inv.addItem(klata);
                                                        inv.addItem(spodnie);
                                                        return;
}
                                                if (this.getRadomPercent() < 50) {
                                                        ItemStack kox = new ItemStack(Material.GOLDEN_APPLE, 5, (byte) 1);
                                                        inv.addItem(kox);
                                                        return;
                                                }
                                                else {
                                                	p.sendMessage("  nie udalo ci się ale masz pecha ");
                                                }
//                                                 w momentcie w ktorym gracz wylosuje liczbe wiekszą od 49 
}
                                else{
                                        p.sendMessage(ChatColor.DARK_RED + "Blad:" + ChatColor.RED + " Musisz trzymac w reku blok diamentu zeby zaczac losowanie!");
}
}
}
}
}

 

 

hm szczerze mówiąc ja błędu nie widzę :P , choć dodał bym parę poprawek

jak błąd jest nadal :P (a pewno będzie bo dodałem jedynie kosmetyczne poprawki) to do kodu powstawiaj komentarze do konsoli (taki debug) i sprawdź gdzie o ile w ogóle się sypie kod.

 

Opublikowano

 

 

import java.util.Random;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
 
public class Main extends JavaPlugin implements Listener {
 
        public static Main plugin;
 
        @Override
        public void onEnable() {
                Bukkit.getPluginManager().registerEvents(this, this);
        }
 
        public int getRadomPercent() {
            return new Random().nextInt(99); // wygeneruje nową pełną liczbę od 0 do 100. Aby tego użyć zrób
//            losuje od 0-99  mysle ze tak powinno byc lepiej 
}
       
        @EventHandler
        public void onInteract(PlayerInteractEvent e) {
                Player p = e.getPlayer();
                Action a = e.getAction();
                Inventory inv = p.getInventory();
                Block bl = e.getClickedBlock();
                ItemStack diax = new ItemStack(Material.DIAMOND_BLOCK, 1);
                if (a.equals(Action.RIGHT_CLICK_BLOCK)) {
                        if (bl !=null && bl.getType().equals(Material.PISTON_BASE)) {
                                if (p.getItemInHand().getType().equals(Material.DIAMOND_BLOCK)) {
                                                p.sendMessage(ChatColor.LIGHT_PURPLE + "Losowanie...");
                                                inv.remove(diax);
                                                if (this.getRadomPercent() < 10) {
//                                                	 czyli jesli liczba bedzie 0-9 (10%) wykona instrukcje
                                                        ItemStack miecz = new ItemStack(Material.DIAMOND_SWORD);
                                                        miecz.addEnchantment(Enchantment.DAMAGE_ALL, 4);
                                                        miecz.addEnchantment(Enchantment.FIRE_ASPECT, 1);
                                                        inv.addItem(miecz);
                                                        return;
//                                                        jesli x<10 to i x<15 tak więc musisz zakonczyc instrukcje aby program nie lecial dalej
                                                  
}
                                                if (this.getRadomPercent() < 15) {
//                                                	 nie wiem jak to sie spisze takie mutli %% ja bym dla kazdej "szansy losowal kolejna liczbe
                                                        ItemStack luk = new ItemStack(Material.BOW);
                                                        luk.addEnchantment(Enchantment.ARROW_KNOCKBACK, 2);
                                                        luk.addEnchantment(Enchantment.ARROW_INFINITE, 1);
                                                        luk.addEnchantment(Enchantment.DURABILITY, 2);
                                                        inv.addItem(luk);
                                                        return;
}
                                                if (this.getRadomPercent() < 25) {
                                                        ItemStack klata = new ItemStack(Material.DIAMOND_CHESTPLATE);
                                                        ItemStack spodnie = new ItemStack(Material.DIAMOND_LEGGINGS);
                                                        klata.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 4);
                                                        klata.addEnchantment(Enchantment.DURABILITY, 3);
                                                        spodnie.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 4);
                                                        spodnie.addEnchantment(Enchantment.DURABILITY, 4);
                                                        inv.addItem(klata);
                                                        inv.addItem(spodnie);
                                                        return;
}
                                                if (this.getRadomPercent() < 50) {
                                                        ItemStack kox = new ItemStack(Material.GOLDEN_APPLE, 5, (byte) 1);
                                                        inv.addItem(kox);
                                                        return;
                                                }
                                                else {
                                                	p.sendMessage("  nie udalo ci się ale masz pecha ");
                                                }
//                                                 w momentcie w ktorym gracz wylosuje liczbe wiekszą od 49 
}
                                else{
                                        p.sendMessage(ChatColor.DARK_RED + "Blad:" + ChatColor.RED + " Musisz trzymac w reku blok diamentu zeby zaczac losowanie!");
}
}
}
}
}

 

 

hm szczerze mówiąc ja błędu nie widzę :P , choć dodał bym parę poprawek

jak błąd jest nadal :P (a pewno będzie bo dodałem jedynie kosmetyczne poprawki) to do kodu powstawiaj komentarze do konsoli (taki debug) i sprawdź gdzie o ile w ogóle się sypie kod.

te miszczu

random zwroci od 0-98

 

@top

  1. Enchantment level is either too low or too high (given 4, bounds are 1 to 3)
  1.  at pl.mranimekpl.piston.Main.onInteract(Main.java:63) ~[?:?]
Opublikowano

mój błąd :) miałem pewność że jeśli do metody poda się parametr to będzie to wyglądało tak samo jak z indeksami w liście/tabeli wielkość 100 / a indeksy od 0-99

Opublikowano

mój błąd :) miałem pewność że jeśli do metody poda się parametr to będzie to wyglądało tak samo jak z indeksami w liście/tabeli wielkość 100 / a indeksy od 0-99

przecie jest tak samo jak z tabelami itd, podajesz 99 to masz "indexy" od 0 do 98

Najlepiej czytać ten parametr rand.nextInt(int) jako "z ilu liczb chcesz wygenerować", i wtedy jako że generuje od 0, to łatwo zapamiętać że np 10 da od 0 do 9

 

dlatego też @Animusek221

return new Random().nextInt(100);

to dalej jest źle, bo to wygeneruje liczbę od 0 do 99

 

Do tego w twoim kodzie, jest całkiem spora szansa że ktoś dostanie np 2 itemki na raz, a nie wiem czy tak ma być :D.

użyj if else.

 

I z tego co pamiętam mozesz dać:

inv.addItem(item1, item2, item3); itd...

 

A tak to wychodzi że masz bugi graficzne, możesz spr użyć metody player.updateInventory()

­

1438614356923701010629.png

 

Opublikowano

@GotoFinal

Bardzo mi pomagasz ale mam już ostatnie pytanie .

Zrobiłem 1 plugin który ma kilka klas jak pobierać inne klasy do Main?

Opublikowano

@GotoFinal

Bardzo mi pomagasz ale mam już ostatnie pytanie .

Zrobiłem 1 plugin który ma kilka klas jak pobierać inne klasy do Main?

po prostu użyj ich nazwy?

np 

MojaInnaKlasa.jakaśStatycznaMetoda()

czy

MojaInnaKlasa mik = new MojaInnaKlasa(argumenty...);

mik.jakaśMetoda();

­

1438614356923701010629.png

 

Opublikowano

@GotoFinal

 Ale mi chodzi bo jak np. Klikam na piston to nic się nie dzieje , w kodzie mam

public Piston(Main plugin){}

A w Main nic nie mam .

Opublikowano

@GotoFinal

 Ale mi chodzi bo jak np. Klikam na piston to nic się nie dzieje , w kodzie mam

public Piston(Main plugin){}

A w Main nic nie mam .

po co ci pusty konstruktor?

 Piston(Main plugin){} 

coś takiego nie ma sensu, usuń cały ten konstruktor jak jest pusty.

 

i w jakim sensie jak klikasz na piston? weź wklej obie klasy.

 

­

1438614356923701010629.png

 

Opublikowano

to ten konstruktor usuń:

public Piston(Main plugin){} 

nie jest ci tam potrzebny, nic nie robi.

 

a w glównej klasie dajesz

Bukkit.getPluginManager().registerEvents(new Piston(), this);

I musisz jeszcze importować tą klasę "Piston" jeśli jest w innym pakiecie, robisz to tak samo jak z każdą inną klasą, np Bukkit czy Player.

­

1438614356923701010629.png

 

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...