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ší Most Voted
Inline Feedbacks
Zobrazit všechny komentáře
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í.

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.