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

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

Vývoj pluginu do Minecraftu – Sponge server

Články Různé

Minecraft se stále drží na výsluní sandboxových her, i když jeho sláva pomalu pohasíná. Cílem tohoto článku je stručný úvod, jak napsat jednoduchý plugin pro nový Sponge server.

Nálepky:

Když byl v září roku 2014 ukončen vývoj bukkitu, začal vznikat nový projekt – Sponge. Tento server je psán úplně odzačátku a jeho módovaná verze – SpongeForge plně spolupracuje s Minecraft Forge. Také existuje nemódovaná verze – SpongeVanilla. Obě verze mají společné API. Plugin, který napíšete, bude tedy fungovat na obou verzích bez problémů. Bohužel ani dnes stále není k dispozici léta slibované oficiální modding API od Mojangu. Místo toho se tato firma v roce 2014 koupená Microsoftem začala orientovat na změny v EULA – postupnými změnami bere možnosti majitelům serverů jak financovat provoz.

V tomto článku si ukážeme, jak jednoduchý plugin pro bukkit popsaný v článku „Vývoj pluginu do Minecraftu – bukkit server“ přepsat, aby fungoval i pro Sponge API. Nejdříve je ale potřeba uvést několik odkazů na zdroje Sponge projektu, dokumentaci a další příklady.

Poslední z odkazů využijeme i při tvorbě našeho vlastního pluginu. Vytvoříme si nějaký adresář pro náš nový plugin. Někam vedle si naklonujeme repozitář s ukázkovými pluginy pomocí

git clone https://github.com/SpongePowered/Cookbook.git

Pro sestavování pluginů je doporučený a také nejčastěji používaný nástroj Gradle (podobně jako módů využívajících Minecraft Forge), použijeme jej tedy také. Alternativou může být použití nástrojů maven či ant. Do našeho adresáře tedy zkopírujeme z ukázkového pluginu WorldsTest adresář gradle, soubory build.gradle, gradlew a gradlew.bat. Dále vytvoříme adresář src/main/java, ve kterém se budou nacházet zdrojové kódy našeho pluginu. Dále bude potřeba chmod +x gradlew (používám linux). Tím máme hotovu základní adresářovou strukturu pro náš nový plugin (projekt).

Nyní připravený prázdný projekt naimportujeme do IDE – Pokud používáte Eclipse, nainstalujte si z marketplace gradle plugin, pak pomocí File>Import proveďte import gradle projektu. Po vybrání adresáře je třeba kliknout na „Build Model“, poté zaškrtnout (vybrat) náš projekt. Nyní můžeme klasicky vytvořit nejdříve např. java package cz.zdrojak.ukazka a poté třídu UkazkaPluginu.

Ukázka pluginu pro Sponge vychází z ukázky pluginu pro Bukkit, kterou jsem publikoval zde na zdrojáku před delší dobou. Zdrojový kód vypadá tedy takto:

package cz.zdrojak.ukazka;

import org.spongepowered.api.entity.living.player.Player;
import org.spongepowered.api.event.Listener;
import org.spongepowered.api.event.block.ChangeBlockEvent;
import org.spongepowered.api.event.game.state.GameStartingServerEvent;
import org.spongepowered.api.plugin.Plugin;
import org.spongepowered.api.text.Text;
import org.spongepowered.api.text.channel.MessageChannel;
import org.spongepowered.api.text.format.TextColors;

@Plugin(id = "ukazkapluginu", name = "UkazkaPluginu", version = "1.0", description = "example code of sponge plugin")
public class UkazkaPluginu {
    
    @Listener
    public void onEnable(GameStartingServerEvent event) {
         //Sponge.getEventManager().registerListeners(this, UkazkaListener(this));
         
    }
    
    @Listener
    public void onBlockBreak(ChangeBlockEvent.Break event) {
        
        final Player player = event.getCause().first(Player.class).orElse(null);
        if (player == null) {
            return;
        }
        
        String minedblock = event.getTransactions().get(0).getOriginal().getState().getName();
        
        if (minedblock.contains("minecraft:diamond_ore")) {
            
            Text broadcast = Text.of(TextColors.AQUA, "Hrac ", TextColors.GOLD, player.getName() , TextColors.AQUA, " prave nasel diamanty!");
            MessageChannel.TO_ALL.send(broadcast);
            
        }
        
    }

}

V době psaní článku SpongeAPI neobsahovalo event pro dispenzer, proto byla oproti bukkit verzi tato část vypuštěna.

Nyní si tedy rozebereme jednotlivé části tohoto jednoduchého pluginu.

Před definicí hlavní třídy pluginu je anotace obsahující informace o pluginu, myslím, že není třeba ji podrobněji rozebírat, její části jsou samovysvětlující. Listener onEnable je v kódu uveden jen jako ukázka toho, na jakém místě a jak registrovat případný hlavní EventHandler složitějšího pluginu.

Dále následuje Listener události, když je rozbit blok. Protože SpongeAPI uchovává příčiny (cause) událostí, je třeba jako první zjistit, zda příčinou rozbití bloku byl hráč. Toto zjištění dělá tato část kódu:

final Player player = event.getCause().first(Player.class).orElse(null);
if (player == null) {
    return;
}

Poté již následuje zjištění, jaký blok byl rozbit:

String minedblock = event.getTransactions().get(0).getOriginal().getState().getName();

následovaný podmínkou, zda se jednalo o diamantovou rudu:

        if (minedblock.contains("minecraft:diamond_ore")) {
            
            Text broadcast = Text.of(TextColors.AQUA, "Hrac ", TextColors.GOLD, player.getName() , TextColors.AQUA, " prave nasel diamanty!");
            MessageChannel.TO_ALL.send(broadcast);
            
        }

Tvar stringu minedblock se skládá ze dvou částí – před dvojtečkou je mód, v případě vanilla nemódovaných bloků/itemů je zde „minecraft“ a za dvojtečkou už samotný blok/item. Pokud tedy hráč najde diamantovou rudu a vykope ji, server pošle zprávu všem (broadcast) připojeným hráčům na serveru. Zprávu si barevně naformátujeme do proměnné broadcast:

Text broadcast = Text.of(TextColors.AQUA, "Hrac ", TextColors.GOLD, player.getName() , TextColors.AQUA, " prave nasel diamanty!");

a odešleme všem:

MessageChannel.TO_ALL.send(broadcast);

Plugin se sestaví pomocí ./gradlew build v adresáři pluginu. V podadresáři build/libs/ naleznete pak jar soubor, který nahrajete do adresáře mods/ na serveru. Pokud již máte nějaké zkušenosti s Bukkit pluginy, nebude vám změna na Sponge dělat moc potíže. Přeji hodně úspěchů při programování pluginů pro SpongeAPI!

Komentáře

Odebírat
Upozornit na
guest
1 Komentář
Nejstarší
Nejnovější Nejvíce hlasů
Alois Kovařík

Díky za článek a návod :) Chystá se pokračování? S Javou a sponge začínám takže nějaký ty návody a příklady se mi děsně hodí.

WP2Shell: Kritická hrozba pro samotné jádro WordPressu. Útočníci mohou získat kontrolu nad webem

Zranitelnost ve WordPressu není žádná novinka. Kdo provozuje weby postavené na této platformě, ví, že bezpečnostní záplaty chodí prakticky pořád. O to větší pozornost by měla vzbudit chyba, u které nic z toho neplatí. A přesně takový je případ zranitelnosti, která dostala přezdívku wp2shell. potřeb. Zranitelný kontaktní formulář, děravý e-shopový plugin, opomenutá kontrola oprávnění v nějaké obskurní rozšiřující knihovně – to je denní chleba každého, kdo sleduje bezpečnostní feedy. Zpráva „nová chyba ve WordPress pluginu“ má tak nízkou informační hodnotu, že ji většina lidí přejde bez mrknutí oka.

Mýtus jedné aplikace: proč PWA nenahradí vývoj pro každou platformu

PWA mohou webu přidat ikonu na ploše, fungování bez připojení, notifikace a některé systémové funkce. Nejsou ale cestou k jednomu klientu pro všechny platformy. Vyplatí se tam, kde se lidé k webu vracejí a ocení okamžitý vstup z odkazu. Jakmile aplikace musí spolehlivě běžet na pozadí nebo fungovat stejně na každém zařízení, bývá vhodnější nativní řešení.

Anthropic vydává Claude Opus 5

AI
Komentáře: 0
Anthropic vydal Claude Opus 5 — model, který se má výkonem blížit špičkovému Fable 5 za poloviční cenu a míří hlavně na agentické kódování. Cena zůstává na 5/25 USD za milion tokenů, přibývají API novinky jako mid-conversation tool changes a automatické fallbacky.