Přejít k navigační liště

Zdroják » Různé » Vývoj pluginu do Minecraftu – bukkit server

Vývoj pluginu do Minecraftu – bukkit server

Články Různé

Minecraft se stal fenoménem. Malé hranaté kostičky si získaly nejedno hráčské srdce. Podívejme se společně, jak je možné pro tuto hru vytvořit jednoduchý plugin a nainstalovat jej na server.

Nálepky:

Snad každý z vás se již alespoň okrajově setkal s jedním z herních fenoménů dnešní doby – sandboxovou hrou Minecraft od švédské firmy Mojang. V tomto článku bych rád ukázal úplné základy pluginu – serverového rozšíření – pro nejznámější a nejpoužívanější serverovou implementaci – bukkit.

Bukkit je vlastně neoficiální implementace minecraft serveru, neboť i přes několikaleté sliby doposud Mojang nezveřejnil žádné API. Přitom právě množství pluginů a módů (o těch třeba někdy příště) ukazuje na ohromný potenciál této hry a mnoho vývojářů tuto hru bere spíše jako engine.

Pomocí pluginů lze upravovat mechaniku hry, díky zachytávání událostí ve hře (event) lze vytvářet různé reakce na podněty a podobně. Existuje řada sofistikovaných pluginů, které vytvoří různé zábavné minihry, jako například koulovaná, podkopávačka a další. Vše se dá pomocí pluginu zautomatizovat – rozdělení hráčů na týmy, určení výchozí pozice a nakonec samotná hra.

Jako ukázku pro začátek ale zvolím něco jednoduššího. Osobně používám pro vývoj Eclipse, následující postup bude tedy právě pro toto vývojové prostředí. Založíme si nový Java projekt, v něm package a nakonec první class. V našem případě jsem projekt pojmenoval ClanekZdrojak, package cz.zdrojak.NovyPlugin a první class bude MujPlugin.java. Dále je potřeba do Build Path libraries přidat jar soubor s bukkit serverem, v našem případě spigot-1.7.10-R0.1-SNAPSHOT.jar

Jdeme na věc

Nyní již k samotnému kódu pluginu. Jako ukázkové zadání jsem zvolil jednoduchý příklad – chceme na serveru globálně zabránit pomocí dispenseru vylévat lávu a dále při vykopání diamantové rudy do globálního chatu napsat, že daný hráč našel diamanty.

Hráč HunterzCZ právě našel diamanty

Ještě než začneme psát samotný plugin, nesmíme zapomenout na vytvoření souboru plugin.yml v našem projektu. Tento soubor bude v našem případě obsahovat následující informace:

name: NovyPlugin
author: HunterzCZ
version: '1.0.0'
description: Example plugin for website zdrojak.cz
main: cz.zdrojak.NovyPlugin.MujPlugin

Většina je samopopisující, za zmínku stojí snad jen položka main, kterou určujete, která class je hlavní, kterou má spustit server.

public class MujPlugin extends JavaPlugin implements Listener {

Každá hlavní class pluginu rozšiřuje JavaPlugin, Listenery bývají u složitějších pluginů samostatně, v našem jednoduchém případě je vše v jednom.

public void onEnable()
{
  getServer().getPluginManager().registerEvents(this, this);
}

Metoda onEnable() se volá při zapínání pluginu a v našem případě provede registraci nového Listeneru pro server.

@EventHandler
public void onDispense(BlockDispenseEvent event) {
 event.getItem().getType();
 if (Material.LAVA_BUCKET != null) {
    event.setCancelled(true);
 }
}

Tento EventHandler obsluhuje událost na serveru pojmenovanou BlockDispenseEvent, v našem případě nás zajímá item, který měl být despenznutý a v případě, že se jedná o kyblík lávy, je tato událost zrušena a kyblík zůstává uvnitř dispenzeru.

@EventHandler
public void onBlockBreak(BlockBreakEvent event) {
  if (event.getBlock().getType() == Material.DIAMOND_ORE) {
    getServer().broadcastMessage(ChatColor.AQUA + "Hrac " + ChatColor.GOLD + event.getPlayer().getDisplayName() + ChatColor.AQUA + " prave nasel diamanty!");
  }
}

Tento EventHandler reaguje na událost BlockBreakEvent, tedy, když hráč rozbije (vytěží) blok. V tomto případě pokud je blokem diamantová ruda, server pošle globální zprávu o tom, že konkrétní hráč našel diamanty. Všimněte si i možností formátování textu, zde uvedenou pouze obarvování pomoci ChatColor.

Při psaní kódu Eclipse krásně navrhuje, co naimportovat, u tohoto pluginu to budou importy začínající org.bukkit.

Jak plugin zprovozníme

Kompletní class:

package cz.zdrojak.NovyPlugin;

import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockDispenseEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class MujPlugin extends JavaPlugin implements Listener
{ 
  
  public void onEnable()
  {
    getServer().getPluginManager().registerEvents(this, this);
  }

  @EventHandler
  public void onDispense(BlockDispenseEvent event) {
    event.getItem().getType();
    if (Material.LAVA_BUCKET != null) {
      event.setCancelled(true);
    }
   
  }
  
  @EventHandler
  public void onBlockBreak(BlockBreakEvent event) {
   if (event.getBlock().getType() == Material.DIAMOND_ORE) {
    getServer().broadcastMessage(ChatColor.AQUA + "Hrac " + ChatColor.GOLD + event.getPlayer().getDisplayName() + ChatColor.AQUA + " prave nasel diamanty!");
   }
  }
}

Pokud vývojové prostředí neukazuje žádnou chybu, plugin sestavíme pomocí Export… vyberete Java a pak Jar file. Nyní máte hotovo.  Zkušenější si mohou ulehčit práci pomocí nástrojů Maven či Gradle. Teď už stačí jen plugin nahrát do adresáře plugins a spustit server. Pokud se rozhodnete svůj plugin publikovat pro veřejnost, asi nejlepším místem je http://dev.bukkit.org, kde máte široký přehled kategorií. Také doporučuji pořídit si dekompilátor javy, který vám usnadní nahlížení do cizího kódu, čímž se můžete hodně naučit.

Další zdroje: Plugin_Tutorial

Komentáře

Odebírat
Upozornit na
guest
7 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
Zobrazit všechny komentáře
mefi

Neni implementace onDispense(…) blbe? ten kod co tam je nedava moc smysl.. ;)

Larry

Urcite mas pravdu, malo to asi byt if (event.getItem().getType() == Material.LAVA_BUCKET) … alebo tak nieco :). Kedysi som sa skusal hrat s Bukkitom no teraz v poslednej dobe nestiham tak sa tomu uz nevenujem, ale snad sa este niekedy k tomu vratim, kazdopadne sa tesim na dalsie casti :). Tu je nieco co som kedysi skusal robit: http://91.230.45.240/mc/index.php

jiri.benes01

jak Mojang spustil Realmy, tak zmenil pravidla a zakazuje provozovani jinych serveru pokud vybiraji penize.

Lukas

Admine HunterCz :D

Petr Švrček

Jaký je program k tomu?

Koolyc

Eclipse

Jan Zavrel

Ahoj, chtěl bych se zeptat, jak to spustit nebo co s tím udělat (jak založit java script) atd.

Děkuji

EmDash: Duchovní nástupce WordPressu, který řeší bezpečnost pluginů

Cloudflare přichází s ambiciózním projektem EmDash, který chce přepsat pravidla správy webového obsahu a nahradit dlouholetou dominanci WordPressu. Nový open source CMS, vytvořený za pouhé dva měsíce s pomocí AI, sází na moderní architekturu, důraz na bezpečnost i monetizaci a řeší klíčové problémy, které WordPress provázejí už desítky let.

Project Glasswing: Anthropic mění pravidla kybernetické bezpečnosti

AI
Komentáře: 0
Nový AI model Claude Mythos Preview dokáže autonomně nacházet bezpečnostní díry v každém hlavním operačním systému i prohlížeči – včetně zranitelností starých desítky let, které přežily miliony automatizovaných testů. Anthropic se rozhodl tuto schopnost nasadit jako nástroj obrany a svolal koalici dvanácti technologických gigantů – od Amazonu přes Microsoft až po JPMorganChase. Se závazkem 100 milionů dolarů a přístupem pro více než 40 organizací spravujících kritickou infrastrukturu je Project Glasswing závodem s časem: zajistit, aby obránci byli s těmito schopnostmi dřív než útočníci.

Git Worktree + Claude Code: paralelní vývoj a AI agenti ve více větvích najednou

Git worktree posouvá práci s větvemi na úplně jinou úroveň – místo neustálého přepínání a stashování nabízí paralelní pracovní prostředí nad jedním repozitářem. V kombinaci s nástroji jako Claude Code navíc otevírá dveře k běhu více AI agentů současně, každý izolovaně ve své větvi, bez kolizí a zbytečné režie.