Skocz do zawartości

Potrzebuje pomocy z własnym pluginem

Polecane posty

Autor tematu Napisano (edytowany)

Witam, ostatnio zacząłem szkolić się w programowaniu w javie. Postanowiłem napisać prosty plugin na drop.

Chciałem przetestować czy przy każdym zniszczeniu stone'a wyleci nam diament, niestety nie działa. Kod: 

@EventHandler
public void onBreakEvent(BlockBreakEvent event) {
	Player player = event.getPlayer();
	Material material = event.getBlock().getType();
	Integer amount;

	if (material == Material.STONE) {
		amount = 1;
		player.getInventory().addItem(new ItemStack(Material.DIAMOND, amount));
		}
    }

 

Oczywiście środowisko nie wyrzuca żadnych błędów, a plugin jest poprawnie wczytywany przez konsolę serwera.

Edytowano przez Refilcraft

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Pani Kasia

1. Masz zarejestrowane wydarzenie w głównej klasie?

2. Przy dodawaniu itemów do ekwipunku aktualizuj go metodą updateInventory

3. Radziłbym chodź nie wiem czy jest bardzo duża różnica porównywania za pomocą equals a nie ==. Znakami posługuj się gdy sprawdzasz liczby.

4. A co jeśli dodasz do ekwipunku gracza diament a jego ekwipunek jest na przykład pełny?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
4 godziny temu, Dejmi1337 napisał:

1. Masz zarejestrowane wydarzenie w głównej klasie?

2. Przy dodawaniu itemów do ekwipunku aktualizuj go metodą updateInventory

3. Radziłbym chodź nie wiem czy jest bardzo duża różnica porównywania za pomocą equals a nie ==. Znakami posługuj się gdy sprawdzasz liczby.

4. A co jeśli dodasz do ekwipunku gracza diament a jego ekwipunek jest na przykład pełny?

Dodałem: " player.updateInventory(); ", lecz w tej linijce Eclipse wyświetla " updateInvetory " jako przekreślone słowo. Gdy najeżdżam na to słowo kursorem wyświetla się: 

void org.bukkit.entity.Player.updateInventory()

 

@Deprecated

Note: This element neither has attached source nor attached Javadoc and hence no Javadoc could be found

"

 

~ Pisane z konta brata.

Edytowano przez CubeStorm

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Pani Kasia

Nie używaj Eclipse, używaj IntelliJ, możliwe, że tam tego błędu nie będzie, oraz możliwe, że znajdziesz więcej podpowiedzi do kodu.


ERUUKPM.png

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Różnica między == a equals:

https://www.geeksforgeeks.org/difference-equals-method-java/

 

Poprawne zapisanie twojej metody:

    @EventHandler
    public void onBlockBreakEvent(BlockBreakEvent event) {

        Block block = event.getBlock();

        if(! block.getType().equals(Material.STONE)) return;
      
        block.setType(Material.AIR);
        block.getWorld().dropItemNaturally(block.getLocation(), new ItemStack(Material.DIAMOND, 1));
    }

 

Edytowano przez Lumenowaty

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Autor tematu Napisano (edytowany)
10 godzin temu, AlexsanderARG napisał:

Nie używaj Eclipse, używaj IntelliJ, możliwe, że tam tego błędu nie będzie, oraz możliwe, że znajdziesz więcej podpowiedzi do kodu.

To prawda co mówią ludzie: " Eclipse zawsze będzie 2 kroki za IntelliJ " ?

 

I czy pluginy mogę pisać w zwykłym Visual Studio Code z rozszerzeniem do javy?

1 godzinę temu, Lumenowaty napisał:

Różnica między == a equals:

https://www.geeksforgeeks.org/difference-equals-method-java/

 

Poprawne zapisanie twojej metody:

    @EventHandler
    public void onBlockBreakEvent(BlockBreakEvent event) {

        Block block = event.getBlock();

        if(! block.getType().equals(Material.STONE)) return;
      
        block.setType(Material.AIR);
        block.getWorld().dropItemNaturally(block.getLocation(), new ItemStack(Material.DIAMOND, 1));
    }

 

Ten kod mi nie działa, tutaj wrzucę z bibliotekami:

import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;

public final class Drop extends JavaPlugin {
	
	@EventHandler
    public void onBlockBreakEvent(BlockBreakEvent event) {

        Block block = event.getBlock();

        if(! block.getType().equals(Material.STONE)) return;
      
        block.setType(Material.AIR);
        block.getWorld().dropItemNaturally(block.getLocation(), new ItemStack(Material.DIAMOND, 1));
    }
}

 

Edytowano przez Refilcraft

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Pani Kasia

Jakby Tobie to wytłumaczyć .. 😄

Klasa główna powinna wyglądać tak:

import org.bukkit.Bukkit;
import org.bukkit.plugin.java.JavaPlugin;

public class NazwaPluginu extends JavaPlugin {
  
  	@Override
	public void onEnable() {
		Bukkit.getPluginManager().registerEvents(new EventTest(), this); //EventTest() - nazwa klasy w której jest metoda eventu.
	}
  
  	@Override
	public void onEnable(){}
}

Klasa trzymająca event:

import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.inventory.ItemStack;

public class EventTest implements Listener {

    @EventHandler
    public void onBlockBreakEvent(BlockBreakEvent event) {

        Block block = event.getBlock();

        if(! block.getType().equals(Material.STONE)) return;
        
        block.setType(Material.AIR);
        block.getWorld().dropItemNaturally(block.getLocation(), new ItemStack(Material.DIAMOND, 1));
    }
}

 

Oczywiście u góry nad kodem powinno znaleźć się: package, które samo się wygeneruje po utworzeniu pliku .java 🙂

Edytowano przez Lumenowaty

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

@Lumenowaty no i teraz wszystko działa jak należy, dzięki wielkie! Mógłbyś jeszcze powiedzieć czy pisać takie pluginy dałoby radę w VSCode czy tylko Eclipse/IntelliJ?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Pani Kasia

1 godzinę temu, Lumenowaty napisał:

Możesz pisać pluginy we wszystkich IDE umożliwiającymi pisanie w Javie, ale najwygodniej jest używać Intellij.

Ok, dzięki wielkie.

 

Temat do zamknięcia.

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

  • Kto przegląda   0 użytkowników

    Brak zalogowanych użytkowników przeglądających tę stronę.

×
Okienko zamknie się za 5 sekund...