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

Potrzebuje pomocy z własnym pluginem


Refilcraft

Rekomendowane odpowiedzi

Opublikowano

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.

Opublikowano

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?

Opublikowano
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.

  • AlexsanderARG zmienił(a) tytuł na Potrzebuje pomocy z własnym pluginem
Opublikowano

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));
    }

 

Opublikowano
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));
    }
}

 

Opublikowano

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 🙂

Opublikowano
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.

 

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...