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

[Pytanie] Moj kod ma poprawna skladnie? Bukkit API


xWatx

Rekomendowane odpowiedzi

Opublikowano

Każdy sobie tłumaczy jak chce.

Sprzedałem już kilka pluginów, zleceniodawcy byli zadowoleni. Nie będę się tutaj kłócił, zapraszam na pw/skype.

Main:

package me.Test;
 
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
 
public class Main extends JavaPlugin{
 
public static Main plugin;
public static Main instane;
 
TestCommandExecutor testcommand;
 
@Override
public void onEnable() {

saveConfig();
PluginManager pm = getServer().getPluginManager();
pm.registerEvents(new Join(this), this);
this.testcommand = new TestCommandExecutor(this);
 
 
 
}
 
}

TestCommandExecutor:

package me.Test;
 
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
 
public class TestCommandExecutor implements CommandExecutor{
 
Main plugin;
public TestCommandExecutor(Main instance) {
plugin = instance;
this.plugin.getCommand("test").setExecutor(this);
}
 
 
 
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label,
String[] args) {
Player p = (Player) sender;
p.sendMessage(plugin.getConfig().getString("TEST"));
return true;
}
 
}
 

Join:

package me.Test;
 
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
 
public class Join implements Listener{
 
Main plugin;
public Join(Main instance) {
plugin = instance;
}
 
@EventHandler
public void antyBot(PlayerJoinEvent e){
Player p = e.getPlayer();
if(p.hasPlayedBefore()){
p.sendMessage(plugin.getConfig().getString("JOIN"));
}
}
 

Teraz możecie mnie hejtować/pokazać gdzie zrobilem błąd.

XDDDDDD

Od Ciebie kupili plugin? To jakis chyba serwer localhost. 

public static Main plugin;
public static Main instane;

Samo za siebie mowi.

Widze, ze niezle lubisz ludzi dymac (sprzedajac gowno plugin)

Kupic plugin to nwm, np. od @gotofinal, bo sie zna na rzeczy, a nie uczy sie od jakiegos kamilkime ktory podstaw nie zna.

@topic

wywal wielkie litery z package. me.Test = me.test

Opublikowano

To wciąż ma multum debilizmu. GoToFinal, i ja pare postów przed nim pisałem co jest źle.

@Edit nie zobaczyłem że GTF pierwszy.

Hmm, nie masz prawa mnie obrażać, ale ty pewnie super pro z*******y programisto napisałbys wlasny silnik lepiej od samego Mojangu.

@filippop1 nie uczyłem się od jakiegoś kamilkime, grzegorza tylko z javastart, PogoStick itp.

Ps. to nie moj kod tylko skopiowałem z postu wyżej i pozmieniałem to co zobaczyłem i uznałem za błąd., nie moja wina, że nie dopatrzylem się takiego błędu.

Ps2.Nie wiem po co wstawiasz te swoje pluginy ktore ledwo ważą 5kb. W dodatku z 2 klas.

@AntyWarn 

@EventHandler
public void onInventoryClick(InventoryClickEvent event){
Player player = (Player) event.getWhoClicked();
ItemStack clicked = event.getCurrentItem();
Inventory inventory = event.getInventory();
if (inventory.getName().equalsIgnoreCase("Inventory"){
if (clicked.getType() == Material.DIRT){
event.setCancelled(true);
player.closeInventory();
player.getInventory().addItem(new ItemStack(Material.DIRT, 1));
}
}
}

Nie używaj myInventory.getName tylko odrazu podawac nazwe inventory.

Pisze pluginy na zamówienie ! Skype: elfusion200

Opublikowano

Hmm, nie masz prawa mnie obrażać, ale ty pewnie super pro z*******y programisto napisałbys wlasny silnik lepiej od samego Mojangu.

@filippop1 nie uczyłem się od jakiegoś kamilkime, grzegorza tylko z javastart, PogoStick itp.

Ps. to nie moj kod tylko skopiowałem z postu wyżej i pozmieniałem to co zobaczyłem i uznałem za błąd., nie moja wina, że nie dopatrzylem się takiego błędu.

Ps2.Nie wiem po co wstawiasz te swoje pluginy ktore ledwo ważą 5kb. W dodatku z 2 klas.

@AntyWarn 

@EventHandler
public void onInventoryClick(InventoryClickEvent event){
Player player = (Player) event.getWhoClicked();
ItemStack clicked = event.getCurrentItem();
Inventory inventory = event.getInventory();
if (inventory.getName().equalsIgnoreCase("Inventory"){
if (clicked.getType() == Material.DIRT){
event.setCancelled(true);
player.closeInventory();
player.getInventory().addItem(new ItemStack(Material.DIRT, 1));
}
}
}

Nie używaj myInventory.getName tylko odrazu podawac nazwe inventory.

czemu ma od razu podawać nazwę? może mieć tam, lub w innej zmiennej (finalnej, statycznej), i może sobie wtedy wygodniej zmieniać nazwę, nie musi pamiętać o tym gdzie tej nazwy używał ;)

 

powinno się sprawdzać czy clicked to null (tak na 90%, nie chce mi się dokładniej sprawdzać, ale raczej zwraca nulla jak się kliknie na puste)

 

I jak zawsze, uja potrzebne castowanie do Player

­

1438614356923701010629.png

 

Opublikowano

Mógłby mi ktoś powiedzieć o czym teraz jest mowa w tym temacie?

Zaczęło się od jakiegoś kodu, potem milion osób zaczęło dawać jakiś inny, i nie wiadomo właściwie o co chodzi...

Opublikowano

Hmm, nie masz prawa mnie obrażać, ale ty pewnie super pro z*******y programisto napisałbys wlasny silnik lepiej od samego Mojangu.

@filippop1 nie uczyłem się od jakiegoś kamilkime, grzegorza tylko z javastart, PogoStick itp.

Ps. to nie moj kod tylko skopiowałem z postu wyżej i pozmieniałem to co zobaczyłem i uznałem za błąd., nie moja wina, że nie dopatrzylem się takiego błędu.

Ps2.Nie wiem po co wstawiasz te swoje pluginy ktore ledwo ważą 5kb. W dodatku z 2 klas.

@AntyWarn 

@EventHandler
public void onInventoryClick(InventoryClickEvent event){
  Player player = (Player) event.getWhoClicked();
  ItemStack clicked = event.getCurrentItem();
  Inventory inventory = event.getInventory();
  if (inventory.getName().equalsIgnoreCase("Inventory"){
    if (clicked.getType() == Material.DIRT){
      event.setCancelled(true);
      player.closeInventory();
      player.getInventory().addItem(new ItemStack(Material.DIRT, 1));
      }
  }
}

Nie używaj myInventory.getName tylko odrazu podawac nazwe inventory.

Właściwie, nie uważam że wiem nawet jakieś 15% na temat javy. Ale to że poprawiam błędy i robię to dobrze najwidoczniej już jak to jest w polsce - BOLI TO KOGOŚ. Co do twoich podstaw javy, to powtórz tą javestart i pogosticki czy jak Im tam jest skoro już raz się od nich uczyłeś, ale najwyraźniej nie dość okej. Żeby nie było -> Sam jestem po javastart, jakiś youtubowych nienajgorszych syfach corela czy jak mu tam, 3 dość marne książki od javy.

 

 

@MakaPaka666 okay dzieki wywalilem i zero errorow. Usunalem takze "Final" z Main w onEnable i Join to dobrze? Niby wszystko dziala i teraz kod jest przejrzysty? 

 

Teraz napisalem mini plugin na inventory gui i jak wpisze /inventory ok otwiera sie, ale jak klikne na dirta nie canceluje zdarzenia i nie wylacza "Ekwipunku/Inventory", moglby ktos poprawic/powiedziec co zle robie? Prosze o pomoc.

 

Main:

package me.Test;
 
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
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 Inventory myInventory = Bukkit.createInventory(null, 9, "Inventory");
 
static{
myInventory.setItem(0, new ItemStack(Material.DIRT, 1));
myInventory.setItem(8, new ItemStack(Material.GOLD_BLOCK, 1));
 
}
 
@EventHandler
public void onInventoryClick(InventoryClickEvent event){
Player player = (Player) event.getWhoClicked();
ItemStack clicked = event.getCurrentItem();
Inventory inventory = event.getInventory();
if (inventory.getName().equals(myInventory.getName())){
if (clicked.getType() == Material.DIRT){
event.setCancelled(true);
player.closeInventory();
player.getInventory().addItem(new ItemStack(Material.DIRT, 1));
}
}
}
 
public boolean onCommand(CommandSender sender, Command command, String commandLabel, String[] args){
Player player = (Player) sender;
if(command.getName().equalsIgnoreCase("inventory")){
player.openInventory(myInventory);
}
return false;
 
}
}

Nie trzymaj cmd, i listenera w jednej klasie. Zwróc wartość jeśli wszystko dobiegło do oczekiwanego stanu. I dlaczego robisz to w klasie Main xD? Do tego do takich klas nie powinno dawać się JavaPlugin, wystarczy w Main potem do transportowania i wczytywania pod ta klase. adnotacja do oncommand. Potrzebne jest ci to inventory static? Będziesz je używał z innej klasy? możesz zrobić nie statyczną, i potem itemy dodać manualnie podczas eventu, tak samo tylko bez static{};

giphy.gif

Opublikowano

Właściwie, nie uważam że wiem nawet jakieś 15% na temat javy. Ale to że poprawiam błędy i robię to dobrze najwidoczniej już jak to jest w polsce - BOLI TO KOGOŚ. Co do twoich podstaw javy, to powtórz tą javestart i pogosticki czy jak Im tam jest skoro już raz się od nich uczyłeś, ale najwyraźniej nie dość okej. Żeby nie było -> Sam jestem po javastart, jakiś youtubowych nienajgorszych syfach corela czy jak mu tam, 3 dość marne książki od javy.

 

Nie trzymaj cmd, i listenera w jednej klasie. Zwróc wartość jeśli wszystko dobiegło do oczekiwanego stanu. I dlaczego robisz to w klasie Main xD? Do tego do takich klas nie powinno dawać się JavaPlugin, wystarczy w Main potem do transportowania i wczytywania pod ta klase. adnotacja do oncommand. Potrzebne jest ci to inventory static? Będziesz je używał z innej klasy? możesz zrobić nie statyczną, i potem itemy dodać manualnie podczas eventu, tak samo tylko bez static{};

Jak EQ ma się nie zmieniać, do przygotowania go sobie wcześniej to nic złego, szczególnie jak itemy wymagają dość sporych zmian, to czy usunie static czy zostawi, w tym wypadku nie ma żadnego znaczenia, i tak będzie tylko 1 taka zmienna, bo ta klasa (JavaPlugin) może istnieć tylko raz.

+ bez static mozna to zrobić prawie identycznie, ale:

public Inventory myInventory = Bukkit.createInventory(null, 9, "Inventory");
 
{
myInventory.setItem(0, new ItemStack(Material.DIRT, 1));
myInventory.setItem(8, new ItemStack(Material.GOLD_BLOCK, 1));
 
}
  

z tym że to nie jest coś co na prawdę powinien zrobić.

Co najwyżej, warto to zrobić by uniknąć ewentualnych błędów, bo to statyczne, wywoła się bardzo wcześnie, jest zanim pluginy zaczną być uruchamiane, i można tak coś popsuć, bez static, uruchomi się to podczas tworzenia nowej instacji, ale to dalej będzie bardzo wcześnie, dlatego najlepiej mieć to też w innych klasach, które będą ładowanie dopiero później.

Ale w tym wypadku, nie trzeba ;) Proste tworzenie EQ nie powinno powodować żadnych problemów.

 

­

1438614356923701010629.png

 

Opublikowano

Jak EQ ma się nie zmieniać, do przygotowania go sobie wcześniej to nic złego, szczególnie jak itemy wymagają dość sporych zmian, to czy usunie static czy zostawi, w tym wypadku nie ma żadnego znaczenia, i tak będzie tylko 1 taka zmienna, bo ta klasa (JavaPlugin) może istnieć tylko raz.

+ bez static mozna to zrobić prawie identycznie, ale:

public Inventory myInventory = Bukkit.createInventory(null, 9, "Inventory");
 
{
myInventory.setItem(0, new ItemStack(Material.DIRT, 1));
myInventory.setItem(8, new ItemStack(Material.GOLD_BLOCK, 1));
 
}
  

z tym że to nie jest coś co na prawdę powinien zrobić.

Co najwyżej, warto to zrobić by uniknąć ewentualnych błędów, bo to statyczne, wywoła się bardzo wcześnie, jest zanim pluginy zaczną być uruchamiane, i można tak coś popsuć, bez static, uruchomi się to podczas tworzenia nowej instacji, ale to dalej będzie bardzo wcześnie, dlatego najlepiej mieć to też w innych klasach, które będą ładowanie dopiero później.

Ale w tym wypadku, nie trzeba ;) Proste tworzenie EQ nie powinno powodować żadnych problemów.

 

­

Nie napisałem tez że musi to zrobić obowiązkowo, spytałem tylko. Przynajmniej jedna osoba na normalnym poziomie myślenia :) Arigato ;]

giphy.gif

Opublikowano

Sorrki, ze tutaj wstawiam kody i w ogole... Nie chce zakladac nowego watku. Znajomy @Staku napisal mi plugin na InventoryGuii dziala, kod jest przejrzysty. 

PS: Znacie jakies tuty, jak sie odwolywac komendami do metod z zewnetrznej klasy?

 

 

EDIT:

 

Chodzi o to, ze w klasie "InventoryGui" mam openInventory(inv); i chce aby w klasie "InventoryGuiCommandExecutor" mozna bylo dodac komende, aby otwierala inv gui z klasy "InventoryGui". Dodam, ze w "InventoryGui" uzywam metody "private openGui(Player player)" i inventory moze sie takze otwierac po "openGui(Player;"

 

 

 

 

InventoryGuiCommandExecutor:

package me.test;
 
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
 
public class InventoryGuiCommandExecutor implements CommandExecutor{
 
@Override
    public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
        if(commandLabel.equalsIgnoreCase("inventory")){
            openGui(player);
        }
        return false;
    }
 
}

Linijka             openGui(player); wywala blad nie wiem jak zrobic aby to sie wczytywalo z klasy "InventoryGui".

Opublikowano

Sorrki, ze tutaj wstawiam kody i w ogole... Nie chce zakladac nowego watku. Znajomy @Staku napisal mi plugin na InventoryGuii dziala, kod jest przejrzysty. 

PS: Znacie jakies tuty, jak sie odwolywac komendami do metod z zewnetrznej klasy?

 

 

EDIT:

 

Chodzi o to, ze w klasie "InventoryGui" mam openInventory(inv); i chce aby w klasie "InventoryGuiCommandExecutor" mozna bylo dodac komende, aby otwierala inv gui z klasy "InventoryGui". Dodam, ze w "InventoryGui" uzywam metody "private openGui(Player player)" i inventory moze sie takze otwierac po "openGui(Player;"

 

 

 

 

InventoryGuiCommandExecutor:

package me.test;
 
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
 
public class InventoryGuiCommandExecutor implements CommandExecutor{
 
@Override
    public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
        if(commandLabel.equalsIgnoreCase("inventory")){
            openGui(player);
        }
        return false;
    }
 
}

Linijka             openGui(player); wywala blad nie wiem jak zrobic aby to sie wczytywalo z klasy "InventoryGui".

InventoryGui.openGui(player); ? PODSTAWY JAVY? CO? A CO TO? NIE WIEM? BUKKIT API WOLE SIE UCZYC? 

Opublikowano

Mam male pytanko jak moge zrobic, aby w configu czytalo & jako kolorek? Doda mi ktos? Mam takie cos "plugin.getConfig().set("motd", Joiner.on(' ').join(args));". Wiem, ze moge w configu wpisac "§", ale ja chce zmieniac nazwe serwera komenda :D. Prosze o pomoc. Jak to dodac?

Opublikowano

Mam male pytanko jak moge zrobic, aby w configu czytalo & jako kolorek? Doda mi ktos? Mam takie cos "plugin.getConfig().set("motd", Joiner.on(' ').join(args));". Wiem, ze moge w configu wpisac "§", ale ja chce zmieniac nazwe serwera komenda :D. Prosze o pomoc. Jak to dodac?

Klasa ChatColor (org.bukkit.ChatColor), masz tam metodę.

message = "&4Hi!"

message = ChatColor.translateAlternateColorCodes('&', message);

// message to teraz: "§4Hi!"

­

1438614356923701010629.png

 

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...