Praktek Terbaik

There are many ways to create a plugin, and many pitfalls for an unwary developer. Here we describe the plugin development practices that will make the most of SpongeAPI, setting sensible boundaries for the benefit of compatibility. This information may change and expand as the Sponge project matures.

Pedoman Pembangunan Plugin

Berikut pedoman yang telah siap untuk bantuan pengebanga Sponge plugin. Itu tidak pasti atau daftar yang meliputi banyak hal, hanya upaya untuk detail beberapa masalah yang cenderung muncul selama pengembangan plugin dan mengusulkan solusi yang terbaik.

Catatan

Kami memesan penggunaan Sponge untuk pekerja resmi SpongePowered. Mohon jangan menggunakan Sponge sebagai bagian dari nama plugin anda, kecuali (1) plugin anda terutama keprihatinan yang memblokir blok Minecraft "Sponge", atau (2) plugin anda juga mempunyai versi lain untuk APIs (dalam hal ini anda mungkin menambahkan "Sponge untuk" judulnya).

Ekonomi API

API Ekonomi digunakan untuk menautkan plugin ekonomi dengan plugin lain yang menggunakan ekonomi (yaitu toko). Anda dapat membaca mengenai API Ekonomi here, yang merinci semua yang perlu anda ketahui mengenai API.

Paket

Anything to do with intercepting packets, or introducing custom items/blocks/entities/etc., is not planned to be part of SpongeAPI. Note that using packets may be looking at the problem the wrong way, as there may be a solution achievable with the existing SpongeAPI. In some cases, it may be possible to add whatever is needed to SpongeAPI; otherwise, the alternative is to use the Forge API and create a Mod instead.

Mengginakan Tempat atau Kelas NMS

We do not recommend working with Forge or Minecraft base classes at all, unless it is to provide compatibility with a mod for SpongeAPI. Most uses of NMS (net.minecraft.server) code in plugins do not fail gracefully, making troubleshooting very difficult. Maintaining NMS modifications is also more difficult than using SpongeAPI. Mods that add to SpongeAPI using code internals will have to specifically write an API, which does not rely on underlying Minecraft code, to be usable by Sponge plugins. However, plugins can be created that load separate “compatibility” modules to interact with the underlying implementation (SpongeForge or SpongeVanilla).

Plugins menggunakan implementation-specific kode sangat mungkin untuk memecahkan antara versions, dan harus jelas dicap sebagai seperti di mana mereka yang diselenggarakan. Ini mungkin lebih tepat dicap sebagai “Mods”.

Mixin

Mixin khususnya untuk merubah kelas-kelas sebelum mod/plugin lain memulai. ForgeModLoader memanggil mod yang ini "Coremod". SpongeForge adalah sebuah Coremod, dan menyebarkan mixin pada saat memulainya. Mixin bisa jadi digunakan oleh plugin, tetapi waspadalah dari kerumitan tambahan yang terlibat.

** Modus Hybrid **

Sponge plugins yang mana mempengaruhi mixin mungkin juga dapat dianggap menjadi sebuah mod inti, yang berdasarkan pada konten.

  • Untuk menggunakan mixin dalam FML, itu pasti akan menjadi sebuah coremod. Botol itu mungkin juga berisi mengandung sebuah Sponge plugin, jadi yang paling pantas wadahnya adalah sebuah "mod hybrid".

  • Untuk mempergunakan mixin pada SpongeVanilla, tujuannya harus diumumkan dalam wujud yang nyata. SpongeVanilla lalu menyemprotkan mixin.

  • Mempunyai tipe keduanya pada sebuah botol tunggal sepenuhnya mungkin terjadi. (Memang, sebuah botol tunggal dapat dengan mudah mengandung sebuah tweaker, FML mod, coremod, bukkit plugin, sponge plugin, dan/atau litemod.)

Beberapa definisi mungkin bisa membantu di sini.

Tweak Mod (aka Tweaker)

a subsystem-level mod which hooks directly into the game using LaunchWrapper, usually used for ModSystems (e.g. LiteLoader, FML) and stand-alone mods (eg. Optifine). Can interact with any aspect of the game environment directly. Generally breaks every version.

Core Mod

mempunyai tenaga hampir sama nilainya dari sebuah Tweak Mod tetapi perlu di bootstrap oleh sebuah ModSistem. Mampu berinteraksi dengan segala aspek apapun dari lingkungan permainan secara langsung. Pada umumnya beristirahat pada semua versi Permainan terbaru.

Mod

berkomunikasi dengan permainan hanya lewat sebuah ModSistem, mod itu terbuka secara langsung pada objek permainan tetapi pada umumnya hanya keterkaitan ke dalam permainan yang disediakan oleh ModSystem. Pada umumnya istirahat setiap versi utama dari Permainan (tergantung pada fitur yang digunakan). Istilah mod juga digunakan sebagai sebuah istilah payung untuk apapun yang mengubah permainan, meski demi sebuah kejelasan kita akan menggunakan definisi ini.

Plugin

berinteraksi dengan permainan hanya melalui API, tidak berinteraksi dengan objek permainan secara langsung dengan cara apa pun, hanya memanfaatkan objek yang terpapar API. Umumnya hanya akan rusak saat API direvisi (dan terkadang tidak juga saat itu).

Penting juga membedakan wadah dari isinya. Masalah dengan terminologi cenderung muncul karena toples berisi mod cenderung disebut sebagai "mod". Setiap plugin yang tidak sepenuhnya dipisahkan melalui API menempatkan dirinya ke dalam kategori Mod. Jenis "plugin" ini mungkin lazim bila ada kekurangan dalam API.

** Keuntungan dari Modus Hybrid **

Sebuah mod hybrid memanfaatkan komponen plugin yang berinteraksi melalui API, dan mod (atau bahkan mod inti) dalam paket yang sama. Ini memiliki kelemahan mod (istirahat setiap versi) tapi juga kekuatan mod (bisa berinteraksi dengan permainan secara langsung) ditambah dengan beberapa manfaat Plugin (akses abstrak tingkat tinggi ke permainan, dan juga bisa berinteraksi dengan plugin lain sebagai teman).

Manfaat utama dari sistem ini adalah bahwa beban pemeliharaan berkurang saat memperbarui mod, karena setiap fitur yang diakses melalui API cenderung jauh lebih stabil.

This type of mod can be used to implement plugins whose needs overflow the capability of the API (in the case of a plugin which needs to leverage mixins for a particular feature); but can also be used for mods which want to leverage services afforded by the API (e.g. a mod which wants to provide direct support for permissions or chat channels).

Tidak seperti "plugin" NMS, mod hibrida membuat sifatnya jelas.