Kā dažādos veidos izveidot modifikāciju Minecraft.

Šodien mēs sākam rakstu sēriju iesācējiem, kas paredzēti, lai palīdzētu viņiem apgūt Minecraft modifikāciju un, pats galvenais, darīt to pēc iespējas ātrāk un lietderīgāk. Principā katrs no mums var atrast nodarbības un sākt veidot modifikācijas, jo nejauši jūs varat darīt gandrīz jebko, pat ja tas nav pilnīgi pareizi un skaisti. Šī apmācība pasargās jūs no uzkāpšanas uz grābekļa un palīdzēs jums sākt darbu pēc iespējas ātrāk un ērtāk.

Ievads Minecraft modifikācijā

Jāpiebilst, ka Minecraft modifikācijas ir rakstīti Java valodā. Šeit nebūs ērti redaktori. Jums ir jābūt vismaz minimālām zināšanām par Java vai pieredzei ar citām programmēšanas valodām, zināšanām par to pamatiem. Kā pēdējais līdzeklis ir liela vēlme to visu apgūt. Ja jūs muļķīgi nekopējat piemērus, bet mēģināt saprast, kā tas darbojas, tad veiksme jūs noteikti gaidīs.

Gandrīz katrs cilvēks, kurš kādreiz ir instalējis Minecraft modifikācijas, ir pazīstams ar Forge modifikāciju, jo lielākajai daļai modifikāciju ir nepieciešama tā klātbūtne jūsu spēlē. Šajā rakstā mēs izveidosim modifikācijas tieši Forge.

Kāpēc Forge? Iedomājieties, ka jums ir jāsalabo televizors/dators/iPhone/lielais hadronu paātrinātājs (vajadzīgo pasvītrot), taču pa rokai ir tikai āmurs un naglas. Protams, iesim un paņemsim noputējušu instrumentu kasti, kurā ir knaibles, pincetes un būtībā viss pārējais, ko sirds kāro. Mūsu gadījumā Forge ir vēlamais rīku komplekts.

Sāksim strādāt

Vispirms mums ir jālejupielādē JDK (Java izstrādes komplekts)

Raksts ir ekskluzīvs vietnei. Informācijas kopēšana un pārdrukāšana iespējama tikai ar autora rakstisku piekrišanu.


Nav nepieciešams dzēst META-INF failos minecraft.jar un minecraft_server.jar
1. Izveidojiet mapi (Piemēram: MCP Forge) un izpakojiet arhīva saturu ar MCP tur.
2. Kopējiet bin un resursu mapi no klienta uz mapi ../MCP Forge/jars/, no servera mums vajag tikai minecraft_server.jar.
3. Izsaiņojiet arhīvu ar Forge-src mapē MCP Forge
4. Atveriet mapi ../MCP Forge/forge/ un palaidiet failu install.cmd. Mēs gaidām dekompilācijas pabeigšanu.
(P.S Ja vēlaties, lai jums jau būtu gatavs MCP ar Forge, piemēram, ja nejauši to izdzēsāt vai ko citu, tad: Kad dekompilācija ir pabeigta, palaidiet spēli un ļaujiet tai lejupielādēt lib, un pēc tam pievienojiet šo MCP Forge arhīvā, piemēram, šādi (mcp Forge 1.5.1)
5. “Instalējiet” un palaidiet Eclipse, startēšanas laikā jums tiks “jautāts” mape ar projektu, norādiet ceļu: ../MCP Forge/eclipse/
6. Tātad, mēs atvērām projektu, tagad (parasti kreisajā pusē ir Package explorer) mēs skatāmies, kādu bibliotēku tas "ēd" (Package explorer logā "atveriet Minecraft projektu" un ja ir rinda “JRE System Library”, tad viss ir kārtībā, bet ja rinda ir “JRE System Library”, tad ar peles labo pogu noklikšķiniet (Right-click), izvēlieties Properties, tad atveras logs, kurā ir atlasīta Izpildes vide, izvēlieties JavaSE-1.7 tajā un noklikšķiniet uz Labi.
7. Tātad, preparāti ir gatavi.

Kā sākt rakstīt modi?

Pirmkārt, mums ir jāizveido “bāze”, tas ir, galvenā “mape”, kurā tiks glabāta mūsu “bāze” un viss pārējais.
1. Dodieties uz Eclipse, skatiet Minecraft mapi programmā Package Explorer, atveriet to un ar peles labo pogu noklikšķiniet uz mapes src, izvēlieties New->Package. Atvērtajā logā rindā Nosaukums mēs norādām tās mapes nosaukumu, kurā viss tiks saglabāts (piemēram, ņemiet: mods.testmod.src) un noklikšķiniet uz Labi.
2. Ar peles labo pogu noklikšķiniet uz mūsu mapes (mods.testmod.src), pēc tam uz New -> Class. Rindā Nosaukums norādiet mūsu faila nosaukumu (piemēram, TestModBase) un noklikšķiniet uz Pabeigt.
3. Mainiet ceļu, bet neizņemiet modifikācijas, piemēram, mods.NewItemMod.src.
4. Jaunajās versijās vajag visu importēt “Daudz”, lai ātrāk to izdarītu Eclipse spied “ctrl + shift + o”, un ātri visu importēs un ja parādīsies logs tad izvēlies vajadzīgo importu.
5. Ja nestrādājat Eclipse, tad jums būs daudz grūtāk, tāpēc labāk pāriet uz to, tas norādīs, kur ir kļūda, un kādi importi ir nepieciešami un jums nebūs jājautā stulbi jautājumi komentāros.

pakotne mods.testmod.src;

importēt cpw.mods.fml.common.Mod;
importēt cpw.mods.fml.common.Mod.Init;
importēt cpw.mods.fml.common.Mod.Instance;
importēt cpw.mods.fml.common.Mod.PostInit;
importēt cpw.mods.fml.common.Mod.PreInit;
importēt cpw.mods.fml.common.event.FMLIinitializationEvent;
importēt cpw.mods.fml.common.event.FMLPostInitializationEvent;
importēt cpw.mods.fml.common.event.FMLPreInitializationEvent;
importēt cpw.mods.fml.common.network.NetworkMod;
importēt cpw.mods.fml.common.network.NetworkRegistry;
importēt cpw.mods.fml.common.registry.GameRegistry;
importēt cpw.mods.fml.common.registry.LanguageRegistry;
importēt cpw.mods.fml.common.network.NetworkMod.SidedPacketHandler;
importēt cpw.mods.fml.common.SidedProxy;
@Mod (modid = "TestMod", nosaukums = "Test Mod", versija = "0.0.1")
@NetworkMod(clientSideRequired = patiess, serverSideRequired = nepatiess, versionBounds = "1.0.0")

publiskā klase TestModBase (

@Instance("TestModID")
publiska statiska TestModBase instance;

@Tajā

{
}

@PreInit
public void preload (FMLPreinitializationEvent notikums)
{
}

@PostInit
public void postLoad (FMLPostInitializationEvent notikums)
{
}
}


Mūsu TestModBase failā
Pēc uzraksta:
publiskā klase TestModBase (
Ievadiet šo rindiņu:
publisks statisks galīgais Bloks testBlock = new TestBlock(2020).setUnlocalizedName("testBlock");
Parsēšana:
publisks statisks galīgais Bloks "testBlock" - testBlock mūsu bloka nosaukums kodā (nevis spēlē)
jauns TestBlock(2020) - TestBlock mūsu bloka nosaukums kodā (nevis spēlē), 2020 bloka ID
setUnlocalizedName("testBlock") - ("testBlock") mūsu bloka nosaukums kodā (nevis spēlē)
Pēc uzraksta:
@Tajā
publiskā spēkā esošā slodze (FMLIinitializationEvent notikums)
{

Ievadiet šo rindiņu:
GameRegistry.registerBlock(testBlock);
LanguageRegistry.addName(testBlock, "Test Block");

Parsēšana:
(testBlock) - mūsu bloka nosaukums kodā (nevis spēlē)
(testBlock, "Test Block") - testBlock ir mūsu bloka nosaukums kodā (nevis spēlē), "Test Block" ir mūsu bloka nosaukums spēlē.
Izveidojiet failu testBlock un ievadiet tajā šādu kodu:
pakotne mods.testmod.src;

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

publiskā klase TestBlock paplašina Block (

publiskais testbloks (int par1)
{
super(par1, Material.ground);//Materiāls
this.setCreativeTab(CreativeTabs.tabTools);//Pievienot reklāmai
}
//Reģistrēt tekstūru
@Override

{
}
}


Mūsu TestModBase failā
Pēc uzraksta:
publiskā klase TestModBase (
Ievadiet šo rindiņu:
public static Item testItem = new TestItem(2021).setUnlocalizedName("testItem");
Parsēšana:
publisks statisks galīgais vienums "testItem" - testItem ir mūsu preces nosaukums kodā (nevis spēlē)
jauns TestItem(2021) - TestItem mūsu preces nosaukums kodā (nav spēlē), 2021 preces ID
setUnlocalizedName("testItem") - ("testItem") mūsu preces nosaukums kodā (nav spēlē)
Pēc uzraksta:
@Tajā
publiskā spēkā esošā slodze (FMLIinitializationEvent notikums)
{

Ievadiet šo rindiņu:
LanguageRegistry.addName(testa vienums, "pārbaudes vienums");
Parsēšana:
(testItem, "Test Item") - testItem ir mūsu preces nosaukums kodā (nevis spēlē), "Test Item" ir mūsu preces nosaukums spēlē.
Izveidojiet failu testItem un ievadiet tajā šādu kodu:
pakotne mods.testmod.src;

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

publiskā klase TestItem paplašina vienumu
{
publisks testa vienums (int par1)
{
super(par1);
setCreativeTab(CreativeTabs.tabTools);
}

//Elementa tekstūras reģistrācija nedaudz atšķiras no bloka
@Override
public Void registerIcons (IconRegister par1IconRegister)
{
}
}


@Override
public Void registerIcons (IconRegister par1IconRegister)
{
this.blockIcon = par1IconRegister.registerIcon("testmod:testBlock");
}

("testmod:testBlock"), testmod ir "mapes nosaukums", kurā atradīsies "mape ar tekstūru", testBlock ir mūsu tekstūras nosaukums. Šis ir mūsu tekstūras izvietojums:

\Tutorial Forge 1.5.1\mcp744\src\minecraft\mods\testmod\textures\blocks\testBlock.png


@Override
public Void registerIcons (IconRegister par1IconRegister)
{
this.itemIcon = par1IconRegister.registerIcon("testmod:testItem");
}

("testmod:testItem"), testmod ir "mapes nosaukums", kurā atradīsies "mape ar tekstūru", testItem ir mūsu tekstūras nosaukums. Šis ir mūsu tekstūras izvietojums.

Tātad mums ir mape ar šādiem failiem:

  • celt.gradle
  • gradlew (.bat un .sh)
  • gradle mape

Tagad jums ir jāpalaiž komanda gradlew eclipse. Ja jums ir Windows, ar peles labo pogu noklikšķiniet uz tukšās vietas iekšāšo mapi, turot nospiestu taustiņu Shift. Pēc tam parādītajā konteksta izvēlnē būs vienums “Atvērt komandu logu”. Atlasiet šo vienumu, un konsole nekavējoties tiks atvērta.

Konsolē ierakstiet gradlew eclipse.

Tagad atveriet Eclipse. Nav lielas atšķirības, kur atrodas darbvieta. Ekrāna augšdaļā atveriet izvēlni "Fails" un atlasiet "Importēt". Parādītajā sarakstā atlasiet "Gradle > Gradle Project".

Izlaidiet Gradle ievada logu, noklikšķinot uz pogas "Nākamais >", ja tā tiek parādīta.

Nākamajā logā norādiet mapi ar neizpakotajiem failiem. Noklikšķiniet uz "Pabeigt".

Gradle uzdevumi

Ekrāna augšdaļā atveriet izvēlni "Logs" un atlasiet "Rādīt skatu > Cits...".

Parādītajā logā atlasiet "Gradle > Gradle Tasks".

Tiks atvērts logs ar Gradle uzdevumiem. Gradle ir populāra automātiskās veidošanas sistēma, kas no pirmkoda saliek gatavas programmas un veic daudzas citas nepieciešamās lietas, taču rutīna Bizness Šīs pašas lietas sauc par uzdevumiem/uzdevumiem/uzdevumiem - uzdevumus. Mēs tikko atvērām uzdevumu logu.

Tas izskatās apmēram šādi:

Testa brauciens

Lai veiktu testa darbību, ekrāna augšdaļā atveriet izvēlni "Palaist" un atlasiet "Palaist konfigurācijas". Kreisajā pusē parādītajā logā atveriet cilni "Java lietojumprogramma" un atlasiet klientu vai serveri. Pēc tam noklikšķiniet uz pogas "Palaist".


Šodien es šoreiz atkal atveru rakstu sēriju. Es to nepametīšu un pat atbildēšu uz jūsu komentāriem. Nu no vārdiem pie darbiem. Aiziet!
Sagatavošana

Lai rakstītu mūsu spraudņus, mums būs nepieciešams:
  • Eclipse Java aplikāciju izstrādes vide;
  • Spigot Api: https://hub.spigotmc.org/nexus/content/groups/public/org/spigotmc/spigot-api/.
Jums būs nepieciešamas arī pamatzināšanas par Java. Ja tādu nav, tad šeit ir saites uz “savu prasmju paaugstināšanu”:
  • Java pamati iesācējiem
    Vietne ir paredzēta tiem, kas tikai sāk apgūt Java.
  • Java (iesācēju) programmēšanas apmācības
    Video pamācība par Java, paredzēta iesācējiem (es sāku ar to).
  • Java atsauce
    Es to sauktu par Java apkrāptu lapu
  • Java eksperts
    Un neļaujiet vārdam jūs biedēt. Šeit jūs varat atrast daudzus risinājumu piemērus šiem vai
    citi uzdevumi.
Eclipse instalēšana un konfigurēšana
Ja jau esat iepazinies ar Eclipse vai jums ir cits IDE, izlaidiet šo sadaļu.

Ar Eclipse instalēšanu nevajadzētu rasties problēmām: jums tas vienkārši jāizsaiņo jebkurā mapē un jāpalaiž. Tūlīt pēc tam Eclipse lūgs jums norādīt, kuru darbvietu atvērt tagad. Šī ir mape, kurā tiks saglabāti visi izveidotie projekti, un kur to ievietot, tas ir jūsu personīgais lēmums. Ja tev ir vienalga, tad atstāj visu kā ir. Ja pēkšņi vēlaties mainīt darbvietu, neuztraucieties: katru reizi, kad to palaižat, Eclipse vēlreiz jautās par darbvietu. Varat izveidot tik daudz no šīm telpām, cik vēlaties, un katru no tām var konfigurēt atšķirīgi konkrētiem mērķiem. Piemēram, man ir 2 darbvietas: parastu java lietojumprogrammu rakstīšanai un kausa spraudņu rakstīšanai. Ja jums pēkšņi apnicis šis ziņojums, ir izvēles rūtiņa “Izmantot šo kā noklusējumu un vairs nejautāt”, kas ļauj iestatīt darbvietu kā noklusējumu.+

Tiklīdz jūs izlemjat par atrašanās vietas izvēli un Eclipse ielādes, mēs redzēsim ielūgumu cilni... kuru mēs nekavējoties aizveram. Viņa mums nav vajadzīga.

Tagad mēs redzam paša Eclipse darbvietu. No tā visa mums ir nepieciešami tikai šādi paneļi:

  • Package Explorer
    Šeit tiks parādīti jūsu projekti, pakotnes (vairāk par tiem vēlāk) un visa veida faili mūsu nākotnes spraudņiem.
  • Problēmas
    Mēs reti izmantosim šo paneli (ja kādreiz pie tā nonāksim), taču par to ir vērts runāt. Šeit tiks parādītas kodā pieļautās kļūdas, kā arī brīdinājuma ziņojumi par iespējamām kļūdām vai neprecizitātēm.
  • Kontūra
    Šeit tiks parādīta navigācija tieši caur atvērtā pirmkoda Java kodu.
Pēdējos 2 aprakstītos paneļus var pilnībā sabrukt, jo Mēs tos izmantosim reti.

Darba vieta ir gandrīz gatava. Atliek tikai iestatījumos atzīmēt vēl 2 rūtiņas.

Dodieties uz izvēlni Logs -> Preferences, tālāk pa koku Vispārīgi -> Redaktors -> Teksta redaktori un atzīmējiet izvēles rūtiņu “Rādīt rindu numurus”, lai iespējotu rindu numerācijas parādīšanu. Tagad dodieties uz Vispārīgi -> Darbvieta un grupā “Teksta faila kodējums” iestatiet kodējumu uz UTF-8, tādējādi iestatot noklusējuma kodējumu.

Instalēšana un konfigurēšana ir veikta. Tagad es paskaidrošu, kā izveidot jauns projekts spraudnim. To var izdarīt vienā no 3 veidiem:

Mūsu priekšā atvērsies logs New Java Project. Projekta nosaukumā mēs norādām mūsu projekta nosaukumu

Noklikšķiniet uz Tālāk.
Parādītajā logā dodieties uz cilni Bibliotēkas, noklikšķiniet uz pogas Pievienot ārējos JAR un atlasiet lejupielādēto Bukkit API.

Noklikšķiniet uz Pabeigt.

Kreisajā pusē Package Explorer tiek parādīts mūsu projekts ar src mapi, kurā tiks saglabāti mūsu pirmkodi. Tagad veidosim jauna klase. Tas tiek darīts tieši tāpat kā ar Java projektu.

Logā New Java Class mums ir nepieciešamas tikai šādas kolonnas:

  • Iepakojums
    norāda iepakojumu, kurā tiks glabāta mūsu klase. Nosaukuma formātam vajadzētu būt apmēram šādam: ru.dmitriymx.bukkit.tutorial.
    Īsumā un īsumā, Java pakotnes ir nosaukumvieta vai “virtuālās mapes”, kurās tiek ievietotas klases. Vairāk par to varat lasīt šeit: , , .
  • Vārds
    norādiet klases nosaukumu (man tas ir DmxFirstPlugin)
Atstājiet visus pārējos vienumus tādus, kādi tie ir, un noklikšķiniet uz Pabeigt.

Tagad pāriesim tieši uz kodu.
Vienkārša spraudņa rakstīšana
Tiklīdz esam izveidojuši jaunu klasi, mūsu acu priekšā parādās jau gatava tukša veidne

Pagaidām šī ir tikai tukša klase, kas ikdienā ir absolūti nederīga. Mēs to izlabosim. Mainīsim šo

par šo

Eclipse mums izcels JavaPlugin, norādot uz kļūdu kodā. Ja virzīsiet peles kursoru virs šāda pasvītrota koda, tiks atvērts logs ar kļūdas aprakstu un to, kā to novērst. IN šajā gadījumā mums ir jāimportē klase no Bukkit API, kurai mēs atlasām vienumu “Importēt ‘JavaPlugin’(org.bukkit.plugin.java)”

Mēs uzreiz pamanām, kā rinda ir uzrakstīta virs visa mūsu koda

Mazliet teorētiskais materiāls. Spraudņiem ir 3 galvenās metodes: onEnable(), onDisable() un onLoad(). Pirmie divi ir atbildīgi par spraudņa iespējošanu un atspējošanu, un pēdējais tiek aktivizēts, kad spraudnis tiek tieši ielādēts servera atmiņā. No tā izriet, ka vispirms tiek izpildīts onLoad, bet pats spraudnis sāk darboties tikai pēc onEnable izsaukšanas no servera puses. Kad serveris tiek izslēgts vai atsāknēts, tiek izsaukta onDisable metode.

Mēs sakārtojām “ieejas-izejas punktus”. Tagad uzrakstīsim kaut ko vairāk vai mazāk praktisku. Samazināsim vispārīgo klases kodu līdz šādai formai:

kurš neredz otro daļu:
Tas, par ko mēs tikko rakstījām, ir gatavs spraudnis. Viss, ko viņš dara, ir čatā ierakstīt par spēlētāja ierašanos un aiziešanu serverī. Sapratīsim viņa darbu kārtībā (kā gan citādi?).
Pirmkārt, ļaujiet man pievērst uzmanību klases deklarācijas rindai. Kā redzat, mūsu klasei ir pievienots paplašinājums Klausītājs. Neiedziļinoties Java džungļos, es teikšu vienkāršāk: norādot šo paplašinājumu, mēs tādējādi paplašinām klases darbības jomu ne tikai kā spraudni (JavaPlugin), bet arī kā notikumu apstrādātāju (Listener). Bet ar metodi onEnable() mēs reģistrējam savu klasi serverī kā notikumu apstrādātāju (šī ir atsauce uz sevi, ja kāds ir aizmirsis).

Nākamie ir mūsu 2 notikumu apstrādātāji onJoin() un onQuit(). Pirmais ir atbildīgs par spēlētāja ienākšanu serverī, bet otrais ir atbildīgs par iziešanu. Izmantojot event.getPlayer().sendMessage() metodi, mēs varam nosūtīt ziņu spēlētājam, kurš izraisīja šo notikumu (mūsu gadījumā spēlētājam, kurš pieteicies). Statiskā klase ChatColor saglabā krāsu konstantes krāsošanai. Manuprāt, kā to izmantot, jau var redzēt no piemēra. Tāpat abi mūsu procesori informē citus servera spēlētājus par notikušajiem notikumiem, taču viņi to dara dažādi. Programmā onJoin(), izmantojot metodi event.setJoinMessage(), mēs mainām parasto ziņojumu “Spēlētājs pievienojās spēlei” uz jebkuru citu. Un programmā onQuit() mēs darījām kaut ko citu (piemēram, nolūkos): mēs noņēmām izejas ziņojuma izvadi un ziņojām par to, izmantojot metodi getServer().broadcastMessage(), kas vienkārši nosūta norādīto ziņojumu visiem servera spēlētājiem. +

Atliek tikai uzrakstīt svarīgo plugin.yml failu un iepakot to visu jar failā.

Plugin.yml ir spraudņa apraksta fails. Tas norāda spraudņa nosaukumu, galveno klasi, aprakstu un komandas, kas jāreģistrē spraudņiem (vairāk par to vēlāk) utt. Mūsu gadījumā failam vajadzētu izskatīties šādi:

Ak, es aizmirsu jums pateikt, kur šim failam jāatrodas. Ar peles labo pogu noklikšķiniet uz src mapes programmā PackageExplorer un izvēlnē Jauns atlasiet Fails. Laukā Faila nosaukums ierakstiet plugin.yml un noklikšķiniet uz Pabeigt. Atvērtajā teksta redaktorā ierakstiet to, ko norādīju iepriekš. Mēs visu saglabājam un pārejam pie pēdējās fāzes: iepakojuma.

Ar peles labo pogu noklikšķiniet uz mapes src -> Eksportēt. Mapju kokā atveriet Java un atlasiet JAR failu un noklikšķiniet uz Tālāk. No sīkumiem mēs atstājam tikai “Eksportēt ģenerētos klases failus un resursus” un “Saspiest JAR faila saturu”. JAR faila laukā mēs norādām, kur mēs saglabāsim iegūto spraudni. Noklikšķinot uz Finish, varat ievietot spraudni spraudņu mapē, startēt serveri un pārbaudīt tā darbību.

Vai tu redzi? Tas ir pavisam vienkārši. Praktizējot jūs iegūsit vairāk pieredzes un varēsiet izveidot foršākus spraudņus, pat tādus leģendārus kā WorldEdit un WorldGuard.
Avots