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] Plugin dziala, ale nie tworzy Folderu w plugins - To normalne?


Zientez

Rekomendowane odpowiedzi

Opublikowano

Elo to normalne, ze jak wgram plugin i zrestartuje serwer dziala /drop (na razie tylko komenda), plugin dziala, ale nie tworzy Folderu w plugins. Plugin napisalem bez configu tylko 1 klasa i plugin.yml. U was tez tak jest?

Opublikowano


Pewnie nie dałeś saveConfig();
 

getConfig().options().saveDefaults(true);
saveConfig();
Opublikowano

Elo to normalne, ze jak wgram plugin i zrestartuje serwer dziala /drop (na razie tylko komenda), plugin dziala, ale nie tworzy Folderu w plugins. Plugin napisalem bez configu tylko 1 klasa i plugin.yml. U was tez tak jest?

 

No jeśli nie tworzyłeś żadnego configu to po uj miałby tworzyć się folder? :P

Opublikowano

Jak mam plugin yml  to musze cos do niego dodac aby dropily itemy ze stone? Jak tak to co musze dodac bo mi drop nie dziala... :(

 

name: Drop
main: me.Test.Main
description: Plugin na drop
version: 1.0
 
commands:
 
  drop:
    description: Informacje o dropie

Klasa Drop wywala blad przy "    public void onBreak(BlockBreakEvent e){" nie wiecie czemu?
 
package me.Test;
 
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.inventory.ItemStack;
 
public class Drop implements Listener{
 
public Drop(Main instance){}
 
public boolean getChance(double chance){
return (chance <=100);
 
 
@EventHandler
    public void onBreak(BlockBreakEvent e){
Player p = e.getPlayer();
Block b = e.getBlock();
 
if(b.getType() == Material.STONE){
if(p.getGameMode() == GameMode.SURVIVAL){
if(getChance(50)){
                    b.getWorld().dropItemNaturally(b.getLocation(), new ItemStack(Material.IRON_INGOT, 1));
                    p.sendMessage(ChatColor.GRAY + "Znalazles Zelazo");
}
}
 
}
}
}
}
Opublikowano

1. Jak Ci może tworzyć folder jak nie tworzysz w nim żadnego pliku?! o_0

2. Zapodaj logi, tam gdzie Ci błąd wywala. ;)

@Edit:

Jak to jest plugin na drop to gdzie masz, random?!

N0thing! :: = ;; :.>

Opublikowano

@Zientez

Co mam tam widzieć, denny kod? :)

 

@Edit:

 

Błąd Ci wywala w getChance, iż jak coś może być booleanem jak wyciągasz z tego double?

N0thing! :: = ;; :.>

Opublikowano

nie wyciąga z tego double, ale... 

WTF

public boolean getChance(double chance){
return (chance <=100);

to będzie zawsze zwracać to samo, skąd ty masz ten kod...?

 

Ta metoda tylko sprawdza czy liczba jest mniejsza lub równa 100....

1438614356923701010629.png

 

Opublikowano

Nawet klasa Drop od Kamlikmine nie wywala bledow, ale itemy nie dropia nic nie dziala.

przeczytaj mój post  wyżej...

 

nie wyciąga z tego double, ale... 

WTF

public boolean getChance(double chance){
return (chance <=100);

to będzie zawsze zwracać to samo, skąd ty masz ten kod...?

 

Ta metoda tylko sprawdza czy liczba jest mniejsza lub równa 100....

 

Skad masz ten kod, bo on nie ma sensu... 50 jest mniejsze od 100 więc zawsze bedzie zwracało true, skąd ty to masz.... czytałeś ten kod zanim go użyłeś?

A do tego nie zamykasz klamerki w metodzie, dlatego wywala error.

 

EDIT: drobna poprawka, nie wiem czemu napisałem false :D i dodane o klamerce...

1438614356923701010629.png

 

Opublikowano

@1361622928-U485574.pngGotoFinal OK, ale na filmiku jest pokazane, ze ta klasa dziala a mi nie dziala...

 

 

public class Drop implements Listener{
 
public Drop(Main instance){}
 
Random rand = new Random();
 
public double getRandomDouble(double min, double max) throws IllegalArgumentException{
Validate.isTrue(max > min, "Max nie moze byc mniejszy niz min");
return (rand.nextDouble() * (max - min) + min);
}
 
public boolean getChance(double chance){
return (chance >= 100 || (chance >= getRandomDouble(0, 100)));
}
 
@EventHandler
public void onBreak(BlockBreakEvent e){
Player p = e.getPlayer();
Block b = e.getBlock();
 
if(b.getType() == Material.STONE){
if(b.getLocation().getBlockY() <= 64){
if(p.getGameMode() == GameMode.SURVIVAL){
if(getChance(50)){
b.getWorld().dropItemNaturally(b.getLocation(), new ItemStack(Material.IRON_INGOT, 1));
p.sendMessage(ChatColor.GRAY + "Znalazles zelazo :D");
}
}
}
if(b.getLocation().getBlockY() <= 24){
if(getChance(25)){
b.getWorld().dropItemNaturally(b.getLocation(), new ItemStack(Material.DIAMOND, 1));
p.sendMessage(ChatColor.AQUA + "Znalazles diament :D");
}
}
if(b.getLocation().getBlockY() <= 30){
if(p.getItemInHand().getType() == Material.DIAMOND_PICKAXE){
if(p.getItemInHand().getItemMeta().getEnchants().containsKey(Enchantment.LOOT_BONUS_BLOCKS)){
if(p.getItemInHand().getItemMeta().getEnchantLevel(Enchantment.LOOT_BONUS_BLOCKS) == 3){
if(getChance(50)){
int goldAmount = rand.nextInt(3) + 1;
 
b.getWorld().dropItemNaturally(b.getLocation(), new ItemStack(Material.GOLD_INGOT, goldAmount));
}
}
}
}
}
}
if(b.getType() == Material.IRON_ORE || b.getType() == Material.DIAMOND_ORE){
b.setType(Material.AIR);
p.sendMessage(ChatColor.GOLD + "Jest drop ze stone :D");
}
}
}

GoToFinal moze przerobisz klase, aby dziala 100% poprawnie?

Opublikowano

@1361622928-U485574.pngGotoFinal OK, ale na filmiku jest pokazane, ze ta klasa dziala a mi nie dziala...

public class Drop implements Listener{
 
public Drop(Main instance){}
 
Random rand = new Random();
 
public double getRandomDouble(double min, double max) throws IllegalArgumentException{
Validate.isTrue(max > min, "Max nie moze byc mniejszy niz min");
return (rand.nextDouble() * (max - min) + min);
}
 
public boolean getChance(double chance){
return (chance >= 100 || (chance >= getRandomDouble(0, 100)));
}
 
@EventHandler
public void onBreak(BlockBreakEvent e){
Player p = e.getPlayer();
Block b = e.getBlock();
 
if(b.getType() == Material.STONE){
if(b.getLocation().getBlockY() <= 64){
if(p.getGameMode() == GameMode.SURVIVAL){
if(getChance(50)){
b.getWorld().dropItemNaturally(b.getLocation(), new ItemStack(Material.IRON_INGOT, 1));
p.sendMessage(ChatColor.GRAY + "Znalazles zelazo :D");
}
}
}
if(b.getLocation().getBlockY() <= 24){
if(getChance(25)){
b.getWorld().dropItemNaturally(b.getLocation(), new ItemStack(Material.DIAMOND, 1));
p.sendMessage(ChatColor.AQUA + "Znalazles diament :D");
}
}
if(b.getLocation().getBlockY() <= 30){
if(p.getItemInHand().getType() == Material.DIAMOND_PICKAXE){
if(p.getItemInHand().getItemMeta().getEnchants().containsKey(Enchantment.LOOT_BONUS_BLOCKS)){
if(p.getItemInHand().getItemMeta().getEnchantLevel(Enchantment.LOOT_BONUS_BLOCKS) == 3){
if(getChance(50)){
int goldAmount = rand.nextInt(3) + 1;
 
b.getWorld().dropItemNaturally(b.getLocation(), new ItemStack(Material.GOLD_INGOT, goldAmount));
}
}
}
}
}
}
if(b.getType() == Material.IRON_ORE || b.getType() == Material.DIAMOND_ORE){
b.setType(Material.AIR);
p.sendMessage(ChatColor.GOLD + "Jest drop ze stone :D");
}
}
}

GoToFinal moze przerobisz klase, aby dziala 100% poprawnie?

to teraz się zdecyduj która klasa jest twoja... ta z pierwszego postu, czy ta z tego?

 

I pytanie brzmi czy zarejestrowałeś event?

1438614356923701010629.png

 

Opublikowano

@1361622928-U485574.pngGotoFinal

Otóż wyciąga znawco, bo podaje wartość double i ją sprawdzza więc wyciąga "wielki znawco JAVY ..."

@topic

Chodź na PW to Ci to wytłumaczę :)

ty serio tak piszesz?

public boolean getChance(double chance){
return (chance <=100);
}

to oznacza dokładnie to samo co

public boolean getChance(double chance){
  if (chance <= 100)
  {
    return true;
  }
  else
  {
    return false;
  }
}

więc niby w jakim miejscu, to zwraca double "znawco javy"?

Gratuluje @SloowPL obrazić kogoś nie mając racji :D szczyt głupoty.

 

EDIT: jak byś jednak był zbyt mało sprytny by to ogarnąć: http://ideone.com/haZpMs

 

 

@1361622928-U485574.pngGotoFinal Wzorowalem sie na klasie Kamilmine. Eventu nie rejestrowalem co musze dopisac do klasy Main?

event rejestrujesz tak:

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

zakładając że jesteś w głównej klasie, w np onEnable, bo jak nie to musisz zastąpić "this" instancją głównej klasy, ale chyba wygodniej dać w onEnable ;)

Tylko oczywiście ten pierwszy kod co dawałeś jest zły, ten z:

 

@1361622928-U485574.pngGotoFinal OK, ale na filmiku jest pokazane, ze ta klasa dziala a mi nie dziala...

public class Drop implements Listener{
 
public Drop(Main instance){}
 
Random rand = new Random();
 
public double getRandomDouble(double min, double max) throws IllegalArgumentException{
Validate.isTrue(max > min, "Max nie moze byc mniejszy niz min");
return (rand.nextDouble() * (max - min) + min);
}
 
public boolean getChance(double chance){
return (chance >= 100 || (chance >= getRandomDouble(0, 100)));
}
 
@EventHandler
public void onBreak(BlockBreakEvent e){
Player p = e.getPlayer();
Block b = e.getBlock();
 
if(b.getType() == Material.STONE){
if(b.getLocation().getBlockY() <= 64){
if(p.getGameMode() == GameMode.SURVIVAL){
if(getChance(50)){
b.getWorld().dropItemNaturally(b.getLocation(), new ItemStack(Material.IRON_INGOT, 1));
p.sendMessage(ChatColor.GRAY + "Znalazles zelazo :D");
}
}
}
if(b.getLocation().getBlockY() <= 24){
if(getChance(25)){
b.getWorld().dropItemNaturally(b.getLocation(), new ItemStack(Material.DIAMOND, 1));
p.sendMessage(ChatColor.AQUA + "Znalazles diament :D");
}
}
if(b.getLocation().getBlockY() <= 30){
if(p.getItemInHand().getType() == Material.DIAMOND_PICKAXE){
if(p.getItemInHand().getItemMeta().getEnchants().containsKey(Enchantment.LOOT_BONUS_BLOCKS)){
if(p.getItemInHand().getItemMeta().getEnchantLevel(Enchantment.LOOT_BONUS_BLOCKS) == 3){
if(getChance(50)){
int goldAmount = rand.nextInt(3) + 1;
 
b.getWorld().dropItemNaturally(b.getLocation(), new ItemStack(Material.GOLD_INGOT, goldAmount));
}
}
}
}
}
}
if(b.getType() == Material.IRON_ORE || b.getType() == Material.DIAMOND_ORE){
b.setType(Material.AIR);
p.sendMessage(ChatColor.GOLD + "Jest drop ze stone :D");
}
}
}

GoToFinal moze przerobisz klase, aby dziala 100% poprawnie?

już powinien działać

1438614356923701010629.png

 

Opublikowano

@1361622928-U485574.pngGotoFinal

Zwracasz boolean, a jeżeli on nie tylko do dropu będzie to potrzebował? To co wtedy? Dlatego, on mógł to zrobić metodą double, i ją by po ludzku zwracał no nie logiczne? Tam by sprawdzał, i by to mnożył, czyli by wymuszał to żeby to było mniejsze od 100%, chciałem mu to trochę innaczej wytłumaczyć, ale jak ty mu to tłumaczysz. To się nie wpierdalam :-)

N0thing! :: = ;; :.>

Opublikowano

ty serio tak piszesz?

public boolean getChance(double chance){
return (chance <=100);
}

to oznacza dokładnie to samo co

public boolean getChance(double chance){
  if (chance <= 100)
  {
    return true;
  }
  else
  {
    return false;
  }
}

więc niby w jakim miejscu, to zwraca double "znawco javy"?

Gratuluje @SloowPL obrazić kogoś nie mając racji :D szczyt głupoty.

 

EDIT: jak byś jednak był zbyt mało sprytny by to ogarnąć: http://ideone.com/haZpMs

 

 

event rejestrujesz tak:

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

zakładając że jesteś w głównej klasie, w np onEnable, bo jak nie to musisz zastąpić "this" instancją głównej klasy, ale chyba wygodniej dać w onEnable ;)

Tylko oczywiście ten pierwszy kod co dawałeś jest zły, ten z:

 

już powinien działać

 

 

Dziala, ale po znsizczeniu stone dropi 1 diax i 1 zelazo...

Opublikowano

ZIOMALE zajebiscie dziala mi plugin! Gotofinal dzieki! I innym tez dziekuje co probowali pomoc!

 

Klasa Drop 0 errorow tylko mam pytanie czy ten kod nie jest tlusty czy nie zaszkodzi w funkcjonowaniu pluginu (usunalem wiekszosc kodu i nie wiem czy sie nie bedzie bugowac nic)

 

package me.Test;
 
import java.util.Random;
 
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.inventory.ItemStack;
 
public class Drop implements Listener{
 
public Drop(Main instance){}
 
Random rand = new Random();
 
public double getRandomDouble(double min, double max) throws IllegalArgumentException{
return (rand.nextDouble() * (max - min) + min);
}
 
public boolean getChance(double chance){
return (chance >= 100 || (chance >= getRandomDouble(0, 100)));
}
 
@EventHandler
public void onBreak(BlockBreakEvent e){
Player p = e.getPlayer();
Block b = e.getBlock();
 
if(b.getType() == Material.STONE){
if(p.getGameMode() == GameMode.SURVIVAL){
if(getChance(20)){
b.getWorld().dropItemNaturally(b.getLocation(), new ItemStack(Material.IRON_INGOT, 1));
p.sendMessage(ChatColor.GRAY + "Znalazles zelazo :D");
}
}
}
}
}
 
Aha @1361622928-U485574.pngGotoFinal ta linijke co trzeba zarejestrowac event zamienilo na
Bukkit.getPluginManager().registerEvents(new Drop(null), this);
Chodzi, ze dodalo (null) tak ma byc?
 
W kodzie DROP wszystkie nawiasy klamrowe zakonczajace funkcje sa na samym poczatku czyli:
}
}
}
}
}
 
Plugin tak samo bedzie dzialal jak przy np.:?
                }
          }
     }
     }
}
 
Jak nie bedzie wytabowane to cos sie zbuguje czy co? Czy musi byc wytabowane?

 

 

 

 

Moge ustawic w tym 0.5%? Ma to byc TAK?

  1.                                         if(getChance(0.5)){
Opublikowano

 

ZIOMALE zajebiscie dziala mi plugin! Gotofinal dzieki! I innym tez dziekuje co probowali pomoc!

 

Klasa Drop 0 errorow tylko mam pytanie czy ten kod nie jest tlusty czy nie zaszkodzi w funkcjonowaniu pluginu (usunalem wiekszosc kodu i nie wiem czy sie nie bedzie bugowac nic)

 

package me.Test;
 
import java.util.Random;
 
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.inventory.ItemStack;
 
public class Drop implements Listener{
 
public Drop(Main instance){}
 
Random rand = new Random();
 
public double getRandomDouble(double min, double max) throws IllegalArgumentException{
return (rand.nextDouble() * (max - min) + min);
}
 
public boolean getChance(double chance){
return (chance >= 100 || (chance >= getRandomDouble(0, 100)));
}
 
@EventHandler
public void onBreak(BlockBreakEvent e){
Player p = e.getPlayer();
Block b = e.getBlock();
 
if(b.getType() == Material.STONE){
if(p.getGameMode() == GameMode.SURVIVAL){
if(getChance(20)){
b.getWorld().dropItemNaturally(b.getLocation(), new ItemStack(Material.IRON_INGOT, 1));
p.sendMessage(ChatColor.GRAY + "Znalazles zelazo :D");
}
}
}
}
}
 
Aha @1361622928-U485574.pngGotoFinal ta linijke co trzeba zarejestrowac event zamienilo na
Bukkit.getPluginManager().registerEvents(new Drop(null), this);
Chodzi, ze dodalo (null) tak ma byc?
 
W kodzie DROP wszystkie nawiasy klamrowe zakonczajace funkcje sa na samym poczatku czyli:
}
}
}
}
}
 
Plugin tak samo bedzie dzialal jak przy np.:?
                }
          }
     }
     }
}
 
Jak nie bedzie wytabowane to cos sie zbuguje czy co? Czy musi byc wytabowane?

 

zmień

public Drop(Main instance){}

na

public Drop(){}

bo nie potrzebujesz tego argumentu ;)

 

 

a tabowanie w javie nic nie zmienia, co najwyżej kod jest bardziej czytelny, ale kazde IDE ma opcje automatycznego formatowania :P Nie pamiętam już jak to było w eclipse, ale chyba CTRL + ALT + F, lub jakieś inne 2 klawisze + F, np CTRL i SHIFT i F lub ALT i SHIFT i F

 

 

 

@SloowPL

Ta metoda zadziała na wszystko, o ile zostanie poprawiona.

Czyli tak jak ma w aktualnym kodzie.

public double getRandomDouble(double min, double max) throws IllegalArgumentException{
return (rand.nextDouble() * (max - min) + min);
}
 
public boolean getChance(double chance){
return (chance >= 100 || (chance >= getRandomDouble(0, 100)));
}

Podajesz jaki chcesz mieć % szans, i masz tyle % szans że metoda getChance zwróci True.

Więc nadaje się wszędzie gdzie chce się mieć losową szanse na coś.

 

A od liczby ma  "getRandomDouble"

1438614356923701010629.png

 

Opublikowano

@1361622928-U485574.pngGotoFinal Automatyczne tabowanie w eclipse jest??? Jak nie bedzie  wytabowane to kod bedzie bardziej plantedny ta...? w getChance jak ustawie 0.5 to bedzie dropic 0.5? Wszystko w moim pluginie dobrze jest oprocz public Drop(Main instance){}?  I wszystko ok jest jak to zmienie? Co pisales z losowa szansa? Jak nie chce miec losowej szansy to msuze zedytowac cos?

Opublikowano

@1361622928-U485574.pngGotoFinal Automatyczne tabowanie w eclipse jest??? Jak nie bedzie  wytabowane to kod bedzie bardziej plantedny ta...? w getChance jak ustawie 0.5 to bedzie dropic 0.5? Wszystko w moim pluginie dobrze jest oprocz public Drop(Main instance){}?  I wszystko ok jest jak to zmienie? Co pisales z losowa szansa? Jak nie chce miec losowej szansy to msuze zedytowac cos?

getChance(50d) -> 50% że to coś zwróci true, czyli jak masz

if (getChance(50d))
{
// drop czegoś
}

to masz 50% szans że to się wykona, i dropnie.

 

mozesz dawać mniejsze liczby, jak np 0.5d , wtedy masz 0,5% czyli już dość mało, bo 1 do 200.

Więc o co ci chodzi piszać że nie chcesz mieć losowej szansy na drop? :D ma zawsze dropić czy co? to wtedy już raczej nie ma sensu, jak każdy klocek to 1 diax, zelazo itp.

 

 

@1361622928-U485574.pngGotoFinal

Otóż to teraz się z tb zgodzę, trzeba było napisać jeżeli zostanie "poprawiona" :)

od początku było pisane że poprzednia metoda jest błędna, bo poprzednia metoda tylko sprawdzała czy liczba jest mniejsza od 100, co niezbyt ma sens :D a na pewno nie opłaca się do niej wysyłać losowe liczby, bo nie po to robi się metodę, by dalej się męczyć z losowaniem.

1438614356923701010629.png

 

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...