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

@1361622928-U485574.pngGotoFinal Dlaczego np. 0.5d a nie poprostu 0.5?

no tak właściwe to jest to bez różnicy, ale literka d/D przy liczbie informuje że jest to typ double.

To się przydaje często przy liczbach typu float, bo domyślnie kompilator pomyśli że 0.5 to double, a ty chcesz np float, to robisz 0.5F lub 0.5f

Tak samo z long, dodajesz na końcu "L" i kompilator wie że to ma być long, a nie int.

 

dla short czy byte czegoś takiego niestety nie ma :P

 

 

EDIT:

http://ideone.com/os1sAw

Taki przykład, dla lepszego zrozumienia.

1438614356923701010629.png

 

Opublikowano

@1361622928-U485574.pngGotoFinal jeszcze mam pytanie. Automatyczne tabowanie CTRL+SHIFT+F dalem ok wytabowalo ladnie, ale w klasach tabowanie zmienilo np. (Zobacz to p.sendMessage)

 

package me.Test;
 
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
 
public class Main extends JavaPlugin {
 
@Override
public void onDisable() {
System.out.print("Plugin zostal wylaczony");
}
 
@Override
public void onEnable() {
Bukkit.getPluginManager().registerEvents(new Drop(), this);
System.out.print("Plugin zostal wlaczony");
}
 
public boolean onCommand(CommandSender sender, Command mcd,
String commandLabel, String[] args) {
 
Player p = (Player) sender;
 
if (commandLabel.equalsIgnoreCase("drop")) {
p.sendMessage(ChatColor.DARK_GRAY + "==============="
+ ChatColor.GRAY + "[" + ChatColor.GOLD + "DROP"
+ ChatColor.GRAY + "]" + ChatColor.DARK_GRAY
+ "===============");
p.sendMessage(ChatColor.GREEN + "» " + ChatColor.GRAY + "Diament: "
+ ChatColor.GRAY + "0.7% " + ChatColor.DARK_AQUA + " |"
+ ChatColor.DARK_GREEN + " VIP + 0.30%");
p.sendMessage(ChatColor.GREEN + "» " + ChatColor.GRAY
+ "Szmaragd: " + ChatColor.GRAY + "0.9% "
+ ChatColor.DARK_AQUA + " |" + ChatColor.DARK_GREEN
+ " VIP + 0.30%");
p.sendMessage(ChatColor.GREEN + "» " + ChatColor.GRAY + "Zloto: "
+ ChatColor.GRAY + "0.5% " + ChatColor.DARK_AQUA + " |"
+ ChatColor.DARK_GREEN + " VIP + 0.30%");
p.sendMessage(ChatColor.GREEN + "» " + ChatColor.GRAY + "Zelazo: "
+ ChatColor.GRAY + "2.5% " + ChatColor.DARK_AQUA + " |"
+ ChatColor.DARK_GREEN + " VIP + 0.30%");
p.sendMessage(ChatColor.GREEN + "» " + ChatColor.GRAY + "Perla: "
+ ChatColor.GRAY + "0.1% " + ChatColor.DARK_AQUA + " |"
+ ChatColor.DARK_GREEN + " VIP + 0.30%");
p.sendMessage(ChatColor.DARK_GRAY + "==============="
+ ChatColor.GRAY + "[" + ChatColor.GOLD + "DROP"
+ ChatColor.GRAY + "]" + ChatColor.DARK_GRAY
+ "===============");
 
}
 
return false;
 
}
 
}
 
I klasa Drop:
 
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() {
}
 
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(0.7)) {
b.getWorld().dropItemNaturally(b.getLocation(),
new ItemStack(Material.DIAMOND, 1));
p.sendMessage(ChatColor.GRAY + "Znalazles Diament");
 
}
}
}
if (getChance(0.5)) {
b.getWorld().dropItemNaturally(b.getLocation(),
new ItemStack(Material.EMERALD, 1));
p.sendMessage(ChatColor.GRAY + "Znalazles Szmaragd");
}
}
}
 
 
To w niczym nie zaszkodzi?
Opublikowano

jakie "DoubleChance" ? o.O

 

podczas wklejania usuwa ci chyba tabowanie, bo tutaj nie ma żadnego :D

możesz spr wklejać przez pastebin.

Ale ogólnie żadna zmiana formatowania nie ma wpływu, cały program w javie można napisać w jednej linijce jak się chce.

 

I nie pisz tyle postów pod sobą bo ci jeszcze bana dadzą :D

1438614356923701010629.png

 

Opublikowano

@1361622928-U485574.pngGotoFinal ugrzeslem i siedze w miejscu nie wiem jak dodac + 0.30% wiekszy dla vipa... W skryptach jest if player has permissions (vip z permissia moze cos) i else (bez uprawnien gracz moze cos). Jak jest w pluginach? Przerobisz to jak znajdziesz czas? Prosze ;S

 

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() {
}
 
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(0.7)) {
                    b.getWorld().dropItemNaturally(b.getLocation(), new ItemStack(Material.DIAMOND, 1));
p.sendMessage(ChatColor.GRAY + "Znalazles Diament");
 
}
}
}
if (getChance(0.5)) {
b.getWorld().dropItemNaturally(b.getLocation(), new ItemStack(Material.EMERALD, 1));
p.sendMessage(ChatColor.GRAY + "Znalazles Szmaragd");
}
}
}
Opublikowano

zależy jak to robisz... bo możliwości masz setki

double chance;
if(player.hasPermission("foo.bar"))
{
  chance = 0.2;
}
else
{
  chance = 0.1;
}

i potem używasz tej zmiennej w getChance

możesz nawet mniej-czytelnie ale wszystko w 1 linijkę rypnąć

if (getChance((player.hasPermission("foo.bar") ? 0.2 : 0.1)))
{
  //drop
}

ale jak będziesz robić tak dla każdego dropu, to dużo wolnego kodu ci wyjdzie, naucz się obiektowo programować.

1438614356923701010629.png

 

Opublikowano
@1361622928-U485574.pngGotoFinal Dlaczego mi fortunka nie dziala gdzie mam blad?

 



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.enchantments.Enchantment;
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() {
}
 
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(0.7)) {
                    b.getWorld().dropItemNaturally(b.getLocation(), new ItemStack(Material.DIAMOND, 1));
p.sendMessage(ChatColor.GREEN + "» " + ChatColor.GRAY + "Znalazles " + ChatColor.AQUA + "Diament");
 
}
 
if (getChance(0.4)) {
b.getWorld().dropItemNaturally(b.getLocation(), new ItemStack(Material.EMERALD, 1));
p.sendMessage(ChatColor.GREEN + "» " + ChatColor.GRAY + "Znalazles " + ChatColor.GREEN + "Szmaragd");
}
 
if (getChance(0.5)) {
b.getWorld().dropItemNaturally(b.getLocation(), new ItemStack(Material.GOLD_INGOT, 1));
p.sendMessage(ChatColor.GREEN + "» " + ChatColor.GRAY + "Znalazles " + ChatColor.GOLD + "Zloto");
}
 
if (getChance(2.1)) {
b.getWorld().dropItemNaturally(b.getLocation(), new ItemStack(Material.IRON_INGOT, 1));
p.sendMessage(ChatColor.GREEN + "» " + ChatColor.GRAY + "Znalazles " + "Zelazo");
}
 
if (getChance(2.9)) {
b.getWorld().dropItemNaturally(b.getLocation(), new ItemStack(Material.COAL, 1));
p.sendMessage(ChatColor.GREEN + "» " + ChatColor.GRAY + "Znalazles " + ChatColor.DARK_GRAY + "Wegiel");
}
 
if (getChance(0.1)) {
b.getWorld().dropItemNaturally(b.getLocation(), new ItemStack(Material.ENDER_PEARL, 1));
p.sendMessage(ChatColor.GREEN + "» " + ChatColor.GRAY + "Znalazles " + ChatColor.DARK_GREEN + "Perle");
 
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 ironAmount = rand.nextInt(3) + 1;
b.getWorld().dropItemNaturally(b.getLocation(), new ItemStack(Material.IRON_INGOT, ironAmount));
p.sendMessage(ChatColor.GREEN + "» " + ChatColor.RED + "(Szczescie) " + ChatColor.GRAY + "Znalazles " + "Zelazo");
}
 
}
 
}
}
}
}
}
}
}

Opublikowano

kimkoliek jest tem kamikimne to nie powinien niczego udostępniać :D

Samych złych rzeczy uczy, a potem są właśnie takie problemy.

 

Zacznij uzywać formatowania kodu, tak byś miał tabowanie... to byś zobaczył co jest źle


if (getChance(0.1)) {
b.getWorld().dropItemNaturally(b.getLocation(), new ItemStack(Material.ENDER_PEARL, 1));
p.sendMessage(ChatColor.GREEN + "» " + ChatColor.GRAY + "Znalazles " + ChatColor.DARK_GREEN + "Perle");
 

nie zamykasz tej sekcji, więc cala reszta kodu też jest w środku tego.

1438614356923701010629.png

 

Opublikowano

Aaa to przez to forutnka nie dzialala bo nie zakonczylem } dropu perly? Teraz na 100% bedzie dzialac? :) :) :)

 

Jak dodam wiekszy drop dla danej rangi z jakims tam uprawnieniem to kod ma wygladac tak o?

 

@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((player.hasPermission("lubie.placki") ? 1 : 0.7))){
b.getWorld().dropItemNaturally(b.getLocation(), new ItemStack(Material.IRON_INGOT, 1));
p.sendMessage(ChatColor.GRAY + "Znalazles zelazo :D");
}
}
I wtedy vip bedzie ma drop 1% a gracz 0.7% co nie? Mozna dodac wiadomosc dla vipa "VIP Znalazles zelazo +0.30"? A gracz po prostu "Znalazles Diament". Przerobisz czesc tego kodu aby tak bylo pls? Nie jestem pewnt czy dobrze ten kod zlozylem (pisze na telefonie wiesz jakie tam jest kopiowanie...). Jak cos prosze napraw czesc kodu i dodaj wiadomosc dla vip i aby dzialala zwykla wiadomosc dla gracza. Dziekuje za pomoc :)
Opublikowano

nie będę za ciebie pisał, ale serio, poczytaj o obiektach i jak ich uzywać, dobrze rozplanowany obiektowy kod będzie znacznie prostrzy do zarządzania, rozbudowy czy zmian., no i java jest językiem obiektowym, tu powinno się pisać obiektowo.

A kod samego eventu ograniczy się pewnie do kilku linijek.

 

Dostałeś wszystkie potrzebne ci informacje, jak sprawdzać permissions itd, użyj ich, nikt za ciebie całe życie nie będzie robił, dostałej jeden przykład, użyj tego samego przykładu do innych rzeczy.

1438614356923701010629.png

 

Opublikowano

Ok, bez wiadomosci vip sie obejdzie ale bedzie wiekszy drop dla vipa czy wyje...... blad? A jak bede chcial z wiadomosciami to bede musial uzyc tej 1 twojej metody. Dobra na razie zwykly drop wystarczy z forunka. Dzieki za pomoc. :)

Opublikowano

Jeszcze mam maly problem. Mozna zrobic w tej linijce, aby byl kilof STONE PICKAXE, IRON PICKAXE, DIAMOND PICKAXE??? 

 

Linijka:

 

if(p.getItemInHand().getType() == Material.DIAMOND_PICKAXE){
 
Mozna to zrobic jakos? Nie chce nawalic w pluginie 3 razy wiekszy kod niz teraz mam :(. Pomoze ktos?
Opublikowano

a może tak ktoś by się wziął za naukę języka i w dodatku same początki, a dokładniej coś o nazwie 'operatory logiczne'?

Opublikowano

 

Jeszcze mam maly problem. Mozna zrobic w tej linijce, aby byl kilof STONE PICKAXE, IRON PICKAXE, DIAMOND PICKAXE??? 

 

Linijka:

if(p.getItemInHand().getType() == Material.DIAMOND_PICKAXE){
 
Mozna to zrobic jakos? Nie chce nawalic w pluginie 3 razy wiekszy kod niz teraz mam :(. Pomoze ktos?

 

w javie są takie dwa podstawowe operatory logiczne

&& - AND

|| - OR

I są jeszcze inne operatorki, ale to już trzeba by więcej tłumaczyć, tak dla ciekawostki mogę dodac jeszcze

^ - XOR

Tak by wiedzieć, że to NIE jest potęga.

 

i można robić

if (warunek1 || warunek 2)

lub znacznie więcej łączeń, ale trzeba uważać na czytelność.

Java czyta to od lewej do prawej, więc pamiętaj o nawiasach jak chcesz wymusić trochę inne sprawdzanie.

 

+ Java jest sprytna, nie wykonuje sprawdzenia, jeśli nie ma ono sensu.

if (warunek1 && warunek2)

Jak warunek1 zwraca "false" to warunek2 NIE jest sprawdzany, bo i tak nie ma szans by fałsz i prawda w AND dały prawdę :P

 

Tak samo jest z OR, jak wartość będzie prawdą, to tej drugiej już nie sprawdza, bo i tak nie zmieni to wyniku.

1438614356923701010629.png

 

Opublikowano

Tak myslalem! Predzej dodawalem || ale nie wiedzialem czy to bedzie dzialac wiec zostawilem na sam koniec. Jak to mozliwe ze plugin na drop wazy 4,5 KB a skrypt 23 KB? Duzo ludzi pisze ze pluginy wiecej waza a gowno prawda xD. Gotofinal thx za pomoc!

Opublikowano

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...