Jak vytvořit mod pro Minecraft různými způsoby.

12.08.2019 Jídlo a pití

Dnes zahajujeme sérii článků pro začátečníky, jejichž cílem je pomoci jim zvládnout Minecraft modding, a co je nejdůležitější, udělat to co nejrychleji a nejužitečněji. V zásadě každý z nás může najít lekce a začít vytvářet mody, protože náhodně můžete dělat téměř cokoliv, i když to není úplně správné a krásné. Tento návod vás ochrání před šlápnutím na hrábě a pomůže vám začít co nejrychleji a nejpohodlněji.

Úvod do Minecraft Moddingu

Je třeba poznamenat, že Minecraft mody jsou napsány v Javě. Nebudou zde žádní pohodlní editoři. Požaduje se od vás alespoň minimální znalost Javy, případně zkušenost s jinými programovacími jazyky, znalost jejich základů. V krajním případě je zde velká chuť se to vše naučit. Pokud nebudete hloupě kopírovat příklady, ale pokusíte se pochopit, jak to funguje, úspěch vás určitě čeká.

Téměř každý, kdo si kdy nainstaloval modifikace Minecraft, zná modifikaci Forge, protože většina modů vyžaduje její přítomnost ve vaší hře. V tomto článku vytvoříme mody speciálně pro Forge.

Proč Forge? Představte si, že potřebujete opravit svůj televizor/počítač/iPhone/Large Hadron Collider (podtrhněte, jak je vhodné), ale jediné, co máte po ruce, je kladivo a hřebíky. Samozřejmě půjdeme a vytáhneme zaprášenou krabici s nářadím, která obsahuje kleště, pinzetu a v podstatě vše, po čem vaše srdce touží. V našem případě je Forge tím požadovaným souborem nástrojů.

Dejme se do práce

Nejprve si musíme stáhnout JDK (Java Development Kit)

Článek je exkluzivní pro web. Kopírování a dotisk informací je možný pouze s písemným souhlasem autora.


Není třeba mazat META-INF v minecraft.jar a minecraft_server.jar
1. Vytvořte složku (například: MCP Forge) a rozbalte tam obsah archivu s MCP.
2. Zkopírujte složku bin a resources z klienta do složky ../MCP Forge/jars/, ze serveru potřebujeme pouze minecraft_server.jar.
3. Rozbalte archiv pomocí Forge-src do složky MCP Forge
4. Otevřete složku ../MCP Forge/forge/ a spusťte soubor install.cmd. Čekáme na dokončení dekompilace..
(P.S. Pokud chcete, abyste již měli hotový MCP s Forge, například pokud jste jej omylem smazali nebo něco jiného, ​​pak: Až bude dekompilace dokončena, spusťte hru a nechte ji stáhnout lib, a poté přidejte tento MCP Forge do archivu, například takto (mcp Forge 1.5.1)
5. „Nainstalujte“ a spusťte Eclipse, při spouštění budete „dotázáni“ na složku s projektem, zadejte cestu: ../MCP Forge/eclipse/
6. Otevřeli jsme tedy projekt, nyní (obvykle vlevo je Průzkumník balíčků) se podíváme, jakou knihovnu „žere“ (v okně Průzkumník balíčků „otevřít projekt Minecraft“ a pokud je tam řádek „Systémová knihovna JRE“, pak je vše v pořádku, ale pokud je řádek „Systémová knihovna JRE“, klepněte pravým tlačítkem (pravým tlačítkem), vyberte Vlastnosti, poté se otevře okno, ve kterém je vybráno Prováděcí prostředí, vyberte JavaSE-1.7 v něm a klepněte na tlačítko OK.
7. Přípravy jsou tedy připraveny.

Jak začít psát mod?

Nejprve si musíme vytvořit „základnu“, tedy hlavní „složku“, do které bude naše „základna“ a vše ostatní uloženo.
1. Přejděte do Eclipse, podívejte se do složky Minecraft v Průzkumníku balíčků, otevřete ji a klikněte pravým tlačítkem na složku src, vyberte Nový->Balík. V otevřeném okně v řádku Název označíme název složky, ve které bude vše uloženo (například: mods.testmod.src) a klikněte na OK.
2. Klikněte pravým tlačítkem na naši složku (mods.testmod.src), poté na Nový -> Třída. V řádku Název uveďte název našeho souboru (Například: TestModBase) a klikněte na Dokončit.
3. Změňte cestu, ale neodstraňujte mody, jako je tento, například mods.NewItemMod.src.
4. V nových verzích musíte importovat „Hodně“ všeho, abyste to udělali rychleji v Eclipse, stiskněte „ctrl + shift + o“ a vše rychle importuje, a pokud se objeví okno, vyberte import, který potřebujete.
5. Pokud v Eclipse nepracujete, bude to pro vás mnohem obtížnější, takže je lepší na něj přejít, ukáže vám, kde je chyba a jaké importy jsou potřeba, a nebudete se muset ptát hloupé otázky v komentářích.

balíček mods.testmod.src;

import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.Init;
import cpw.mods.fml.common.Mod.Instance;
import cpw.mods.fml.common.Mod.PostInit;
import cpw.mods.fml.common.Mod.PreInit;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.network.NetworkMod;
import cpw.mods.fml.common.network.NetworkRegistry;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.registry.LanguageRegistry;
import cpw.mods.fml.common.network.NetworkMod.SidedPacketHandler;
import cpw.mods.fml.common.SidedProxy;
@Mod (modid = "TestMod", název = "Test Mod", verze = "0.0.1")
@NetworkMod(clientSideRequired = true, serverSideRequired = false, versionBounds = "1.0.0")

veřejná třída TestModBase (

@Instance("TestModID")
veřejná statická instance TestModBase;

@Init

{
}

@PreInit
public void preLoad (událost FMLPreInitializationEvent)
{
}

@PostInit
public void postLoad (událost FMLPostInitializationEvent)
{
}
}


V našem souboru TestModBase
Po nápisu:
veřejná třída TestModBase (
Zadejte tento řádek:
public static final Block testBlock = new TestBlock(2020).setUnlocalizedName("testBlock");
Analýza:
public static final Blok "testBlock" - testBlock název našeho bloku v kódu (ne ve hře)
nový TestBlock (2020) - TestBlock název našeho bloku v kódu (ne ve hře), ID bloku 2020
setUnlocalizedName("testBlock") - ("testBlock") název našeho bloku v kódu (ne ve hře)
Po nápisu:
@Init
public void load (událost FMLInitializationEvent)
{

Zadejte tento řádek:
GameRegistry.registerBlock(testBlock);
LanguageRegistry.addName(testBlock, "Testovací blok");

Analýza:
(testBlock) - název našeho bloku v kódu (ne ve hře)
(testBlock, "Test Block") - testBlock je název našeho bloku v kódu (ne ve hře), "Test Block" je název našeho bloku ve hře.
Vytvořte soubor testBlock a zadejte do něj následující kód:
balíček mods.testmod.src;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;

veřejná třída TestBlock rozšiřuje blok (

public TestBlock (int par1)
{
super(par1, Material.ground);//Materiál
this.setCreativeTab(CreativeTabs.tabTools);//Přidat do kreativy
}
//Zaregistrujte texturu
@Přepsat

{
}
}


V našem souboru TestModBase
Po nápisu:
veřejná třída TestModBase (
Zadejte tento řádek:
public static Item testItem = new TestItem(2021).setUnlocalizedName("testItem");
Analýza:
public static final Item "testItem" - testItem je název naší položky v kódu (ne ve hře)
nový TestItem(2021) - TestItem název naší položky v kódu (ne ve hře), ID položky 2021
setUnlocalizedName("testItem") - ("testItem") název naší položky v kódu (ne ve hře)
Po nápisu:
@Init
public void load (událost FMLInitializationEvent)
{

Zadejte tento řádek:
LanguageRegistry.addName(testItem, "Test Item");
Analýza:
(testItem, "Test Item") - testItem je název naší položky v kódu (ne ve hře), "Test Item" je název naší položky ve hře.
Vytvořte soubor testItem a zadejte do něj následující kód:
balíček mods.testmod.src;

import net.minecraft.item.Item;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;

public class TestItem rozšiřuje položku
{
public TestItem(int par1)
{
super(par1);
setCreativeTab(CreativeTabs.tabTools);
}

//Registrace textury pro položku se mírně liší od bloku
@Přepsat
public void registerIcons (IconRegister par1IconRegister)
{
}
}


@Přepsat
public void registerIcons (IconRegister par1IconRegister)
{
this.blockIcon = par1IconRegister.registerIcon("testmod:testBlock");
}

("testmod:testBlock"), testmod je "název složky", ve které bude "složka s texturou", testBlock je název naší textury. Toto je naše umístění textury:

\Výukový program Forge 1.5.1\mcp744\src\minecraft\mods\testmod\textures\blocks\testBlock.png


@Přepsat
public void registerIcons (IconRegister par1IconRegister)
{
this.itemIcon = par1IconRegister.registerIcon("testmod:testItem");
}

("testmod:testItem"), testmod je "název složky", ve které bude "složka s texturou", testItem je název naší textury. Toto je naše umístění textury.

Takže máme uvnitř složku s následujícími soubory:

  • build.gradle
  • gradlew (.bat a .sh)
  • složka gradle

Nyní musíte spustit příkaz gradlew eclipse. Pokud máte Windows, můžete na prázdné místo kliknout pravým tlačítkem uvnitř tuto složku a zároveň podržte klávesu Shift. Poté v kontextové nabídce, která se objeví, bude položka „Otevřít příkazové okno“. Vyberte tuto položku a konzole se okamžitě otevře.

V konzole zadejte gradlew eclipse.

Nyní otevřete Eclipse. Nezáleží na tom, kde se pracovní prostor nachází. V horní části obrazovky otevřete nabídku „Soubor“ a vyberte „Importovat“. Ze seznamu, který se zobrazí, vyberte „Gradle > Gradle Project“.

Přeskočte úvodní okno Gradle kliknutím na tlačítko „Další >“, pokud se objeví.

V dalším okně zadejte složku s rozbalenými soubory. Klikněte na "Dokončit".

Gradle úkoly

Otevřete nabídku „Okno“ v horní části obrazovky a vyberte „Zobrazit zobrazení > Jiné...“.

V okně, které se zobrazí, vyberte „Gradle > Gradle Tasks“.

Otevře se okno s úkoly Gradle. Gradle je populární systém automatického sestavení, který sestavuje hotové programy ze zdrojového kódu a dělá mnoho dalších potřebných věcí, ale rutina podnikání Právě těmto věcem se říká úkoly/úkoly/úkoly - úkoly. Právě jsme otevřeli okno úkolu.

Vypadá to nějak takto:

Zkušební provoz

Pro zkušební provoz otevřete nabídku „Spustit“ v horní části obrazovky a vyberte „Spustit konfigurace“. V okně, které se zobrazí vlevo, otevřete kartu „Java Application“ a vyberte klienta nebo server. Poté klikněte na tlačítko "Spustit".


Dnes tentokrát znovu otevírám sérii článků. Nevzdám se toho a dokonce odpovím na vaše komentáře. No, od slov k činům. Jít!
Příprava

K napsání našich pluginů budeme potřebovat:
  • Vývojové prostředí aplikací Eclipse Java;
  • Spigot Api: https://hub.spigotmc.org/nexus/content/groups/public/org/spigotmc/spigot-api/.
Budete také potřebovat základní znalost Javy. Pokud žádné nejsou, zde jsou odkazy na „zvyšování dovedností“:
  • Základy Java pro začátečníky
    Stránka je určena pro ty, kteří se právě začínají učit Javu.
  • Výukové programy programování v Javě (začátečník).
    Videonávod na Javě, určený pro začátečníky (začínal jsem s ním).
  • Java reference
    Nazval bych to Java cheat sheet
  • expert na Java
    A nenechte se tím jménem vyděsit. Zde můžete najít mnoho příkladů řešení těchto popř
    jiné úkoly.
Instalace a konfigurace Eclipse
Pokud již Eclipse znáte nebo máte jiné IDE, pak tuto část přeskočte.

Při instalaci Eclipse by neměly být žádné problémy: stačí jej rozbalit do libovolné složky a spustit. Ihned poté vás Eclipse požádá, abyste uvedli, který pracovní prostor se má nyní otevřít. Toto je složka, do které se budou ukládat všechny vytvořené projekty a kam ji umístit, je vaše osobní rozhodnutí. Pokud je vám to jedno, nechte vše tak, jak je. Pokud náhle chcete změnit pracovní prostor, nemějte obavy: pokaždé, když jej spustíte, Eclipse se vás znovu zeptá na pracovní prostor. Těchto prostorů můžete vytvořit, kolik chcete, a každý může být nakonfigurován jinak pro konkrétní účely. Například mám 2 pracovní plochy: pro psaní běžných java aplikací a pro psaní bucket pluginů. Pokud vás tato zpráva náhle omrzí, je zde zaškrtávací políčko „Použít toto jako výchozí a již se neptat“, které vám umožní nastavit pracovní prostor jako výchozí.+

Jakmile se rozhodnete pro volbu umístění a načtení Eclipse, zobrazí se nám záložka pozvánky... kterou okamžitě zavřeme. Nepotřebujeme ji.

Nyní vidíme pracovní prostor samotného Eclipse. Z toho všeho potřebujeme pouze následující panely:

  • Průzkumník balíčků
    Zde se zobrazí vaše projekty, balíčky (více o nich později) a nejrůznější soubory pro naše budoucí pluginy.
  • Problémy
    Tento panel budeme používat jen zřídka (pokud se k němu někdy dostaneme), ale stojí za to o tom mluvit. Zde se zobrazí chyby provedené v kódu a také varovné zprávy o možných chybách nebo nepřesnostech.
  • Obrys
    Zde se zobrazí navigace přímo přes open source java kód.
Poslední 2 popsané panely lze zcela sbalit, protože Budeme je používat jen zřídka.

Pracoviště je téměř připraveno. Zbývá pouze zaškrtnout v nastavení 2 další políčka.

Přejděte do nabídky Okno -> Předvolby, poté ve stromu Obecné -> Editor -> Textové editory a zaškrtnutím políčka „Zobrazit čísla řádků“ povolte zobrazení číslování řádků. Nyní přejděte na Obecné -> Pracovní plocha a ve skupině „Kódování textového souboru“ nastavte kódování na UTF-8, čímž nastavíte výchozí kódování.

Instalace a konfigurace je hotová. Nyní vysvětlím, jak vytvořit nový projekt pro plugin. To lze provést jedním ze 3 způsobů:

Otevře se před námi okno New Java Project. V Název projektu uvádíme název našeho projektu

Klepněte na tlačítko Další.
V okně, které se objeví, přejděte na kartu Knihovny, klikněte na tlačítko Přidat externí JAR a vyberte stažené Bukkit API

Klepněte na tlačítko Dokončit.

Vlevo se v Průzkumníku balíčků objeví náš projekt se složkou src, ve které budou uloženy naše zdrojové kódy. Nyní pojďme tvořit nová třída. To se provádí úplně stejným způsobem jako u projektu Java.

V okně Nová třída Java potřebujeme pouze následující sloupce:

  • Balík
    označuje balíček, ve kterém bude naše třída uložena. Formát názvu by měl být asi tento: ru.dmitriymx.bukkit.tutorial.
    Stručně řečeno, balíčky v Javě jsou jmenný prostor nebo „virtuální složky“, do kterých jsou umístěny třídy. Více si o tom můžete přečíst zde: , , .
  • název
    uveďte název třídy (pro mě je to DmxFirstPlugin)
Ponechte všechny ostatní položky tak, jak jsou, a klepněte na tlačítko Dokončit.

Nyní přejdeme přímo ke kódu.
Psaní jednoduchého pluginu
Jakmile vytvoříme novou třídu, objeví se nám před očima hotová prázdná šablona

Zatím je to jen prázdná třída, která je v běžném životě naprosto nepoužitelná. My to napravíme. Pojďme to změnit

Na toto

Eclipse nám zvýrazní JavaPlugin, což znamená chybu v kódu. Pokud na takto podtržený kód najedete myší, otevře se okno s popisem chyby a jejím řešením. V v tomto případě potřebujeme importovat třídu z Bukkit API, pro kterou vybereme položku „Import ‘JavaPlugin’(org.bukkit.plugin.java)“

Okamžitě si všimneme, jak je řádek napsán nad veškerým naším kódem

Trochu teoretický materiál. Pluginy mají 3 hlavní metody: onEnable(), onDisable() a onLoad(). První dva jsou zodpovědné za povolení a zakázání pluginu a poslední se spouští, když je plugin přímo načten do paměti serveru. Z toho vyplývá, že nejprve se provede onLoad, ale samotný plugin začne fungovat až po zavolání onEnable ze strany serveru. Když je server vypnutý nebo restartován, je volána metoda onDisable.

Vyřešili jsme „místa vstupu a výstupu“. Pojďme si nyní napsat něco více či méně funkčního. Zredukujeme obecný kód třídy do následující podoby:

kdo neviděl druhý díl:
To, o čem jsme právě psali, je již hotový plugin. Jediné, co udělá, je napsat do chatu o příchodu a odchodu hráče na server. Pochopíme jeho dílo v pořádku (jak jinak?).
Nejprve mi dovolte věnovat pozornost řádku deklarace třídy. Jak můžete vidět, do naší třídy bylo přidáno rozšíření Listener. Aniž bych se ponořil do džungle Javy, řeknu to jednodušeji: zadáním tohoto rozšíření tak rozšiřujeme rozsah třídy nejen jako plugin (JavaPlugin), ale také jako obsluhu události (Listener). Ale právě v metodě onEnable() registrujeme naši třídu na serveru jako obslužnou rutinu události (toto je odkaz na ni samotnou, pro případ, že by někdo zapomněl).

Další jsou naše 2 obslužné rutiny událostí onJoin() a onQuit(). První je zodpovědný za případ vstupu hráče na server a druhý je zodpovědný za odchod. Pomocí metody event.getPlayer().sendMessage() můžeme poslat zprávu hráči, který tuto událost způsobil (v našem případě hráči, který se přihlásil). Statická třída ChatColor ukládá barevné konstanty pro barvení. Myslím, že jak to použít, je vidět již z příkladu. Oba naši zpracovatelé také informují ostatní hráče na serveru o událostech, které nastaly, ale dělají to různými způsoby. V onJoin() pomocí metody event.setJoinMessage() změníme obvyklou zprávu „Hráč se připojil ke hře“ na jakoukoli jinou. A v onQuit() jsme udělali něco jiného (například pro účely): odstranili jsme výstup výstupní zprávy a nahlásili to pomocí metody getServer().broadcastMessage(), která jednoduše odešle zadanou zprávu všem hráčům na serveru. +

Zbývá už jen napsat důležitý soubor plugin.yml a vše zabalit do jar souboru.

Plugin.yml je soubor s popisem pluginu. Specifikuje název pluginu, hlavní třídu, popis a jaké příkazy pro pluginy zaregistrovat (o tom později) atd. V našem případě by soubor měl vypadat takto:

Oh, zapomněl jsem vám říct, kde by měl být tento soubor umístěn. Klepněte pravým tlačítkem myši na složku src v PackageExplorer a vyberte Soubor z nabídky Nový. Do pole Název souboru napište plugin.yml a klikněte na Dokončit. V textovém editoru, který se otevře, napište, co jsem uvedl výše. Vše uložíme a přejdeme k poslední fázi: balení.

Klikněte pravým tlačítkem na složku src -> Export. Ve stromu složek otevřete Java a vyberte soubor JAR a klikněte na Další. Z drobností ponecháme pouze „Exportovat vygenerované soubory tříd a prostředky“ a „Komprimovat obsah souboru JAR“. V poli JAR file uvedeme, kam uložíme výsledný plugin. Po kliknutí na tlačítko Dokončit můžete plugin umístit do složky plugins, spustit server a zkontrolovat jeho provoz.

Vidíš? Je to docela jednoduché. Cvičením získáte více zkušeností a budete schopni dělat cool pluginy, a to i tak legendární jako WorldEdit a WorldGuard.
Zdroj