En iyi pratikler

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.

Eklenti geliştirme rehberi

Aşağıdaki talimatlar Sponge eklentisi geliştiricilere yardımcı olmak için hazırlanmıştır. Bu, kesin veya kapsamlı bir liste değil, yalnızca eklenti geliştirme sırasında ortaya çıkabilecek bazı sorunları ayrıntılı bir şekilde ortaya koyma girişiminde bulunmak ve en iyi çözümleri önermektir.

Not

Resmi SpongePowered eserleri için Sponge kullanımın haklarını rezerve ederiz. (1) eklentiniz öncelikli olarak Sponge minecraft bloğuyla ilgili değilse veya (2) eklentinizin diğer API’ler için de sürümleri olmadığı sürece, Sponge ‘u eklentinizin bir parçası olarak kullanmayın. (Bu durumda “for Sponge” başlıklı yazıyı okuyun).

Economy API

Economy API’si, economy eklentilerini, economy kullanan diğer eklentilerle (mağazalar gibi) ilişkilendirmek için kullanılır. Herhangi bir Economy API’si hakkında bilmeniz gereken tüm detayları ve bilgiyi burada bulabilirsiniz.

Paketler

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.

Forge veya NMS sınıflarının kullanımı

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).

Uygulamaya özel kodu kullanan eklentiler sürümler arasında kırılma ihtimalinin çok yüksektir ve barındırıldıkları her yerde açıkça etiketlenmelidir. Bunlar “Mods” olarak daha uygun etiketlenebilir.

Mixins

Mixins, diğer modların/eklentilerin başlamasından önce özel olarak sınıfları dönüştürmek içindir. ForgeModLoader bu modları “Coremods” olarak adlandırıyor. SpongeForge bir Coremod’dur ve başlangıçta mixins dağıtmaktadır. Mixins eklentiler tarafından kullanılabilir ancak, ek karmaşıklıkların olabileceğini bilin.

Hybrid Mods

Mixins’i kullanan Sponge eklentileri içeriğe dayalı olarak temel bir mod olarak düşünülebilir.

  • Mixins’i FML’de kullanmak bir coremod olmalıdır. Kavanoz ayrıca bir Sponge eklentisi içerebilir, bu yüzden en uygun konteyner “hybrid mod” dur.

  • Mixinsleri SpongeVanilla’da kullanmak için, manifestoda niyetler bildirilmelidir. SpongeVanilla, daha sonra mixinleri enjekte eder.

  • Her iki türünde de tek bir kavanozda olması tamamen mümkündür. (Gerçektende, tek bir kavanoz kolayca bir tweaker, FML modu, coremod, bukkit eklentisi, sponge eklentisi ve/veya litemod içeriyor olabilir.)

Bu noktada bazı tanımlar faydalı olabilir.

Tweak mod(Tweaker diye de biliniyor)

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.

Çekirdek mod

bir Tweak Mod’u neredeyse eşdeğer bir güce sahip olmakla birlikte bir ModSystem tarafından önyüklenmelidir. Oyun ortamının herhangi bir yönüyle doğrudan etkileşim kurabilir. Genellikle her yeni oyun sürümünde kırılır.

Eklenti

oyun ile sadece bir ModSystem vasıtasıyla etkileşime girer, mod oyun nesnelerine doğrudan maruz kalır, amma velakin, genellikle yalnızca ModSystem tarafından sağlanan kanca vasıtasıyla oyuna dahil edilir. Genel olarak Oyunun her büyük sürümünü kırar (kullanılan özelliklere bağlı olarak). Mod terimi, oyunu değiştiren herhangi bir şey için bir şemsiye terim olarak da kullanılır, ancak anlaşılırlık uğruna bu tanımı kullanacağız.

Eklenti

yalnızca bir API vasıtasıyla oyunla etkileşim kurar, oyun nesneleri ile doğrudan hiçbir şekilde etkileşim kurmaz; yalnızca API tarafından sunulan nesneleri kullanır. Genellikle, API revize edildiğinde kırılır (bazen bu bile olmaz).

Konteyneri içeriğinden ayırt etmek de önemlidir. Term içeren terimler ortaya çıkma eğilimindedir çünkü mod içeren bir kavanoz “mod” olarak adlandırılmaya eğilimlidir. API vasıtasıyla tamamen ayrıştırılmamış olan herhangi bir eklenti kendini Mod kategorisine sokar. Bu tür bir “eklenti” API’de eksikliklerin olduğu durumlarda yaygın olabilir.

Hybrid mod’ların avantajları

Bir hybrid mod, hem API ile etkileşime giren bir eklenti bileşenini hem de aynı paketten bir mod (hatta modül) kullanır. Bu bir modun dezavantajlarına sahiptir(her sürümü kırar). aynı zamanda bir modun gücü (oyunla doğrudan etkileşime girebilir) ve bir eklentinin faydaları birbiriyle birleşebilir. (oyuna üst düzey soyut erişim ve aynı zamanda diğer eklentilerle bir eş olarak etkileşimde bulunabilir).

Bu sistemin birincil yararı, modu güncellediğinizde bakım yükünün azalmasıdır, çünkü API aracılığıyla erişilen tüm özelliklerin daha kararlı olması muhtemeldir.

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).

NMS’den yararlanan “eklentiler“‘in aksine, bir hyrbid mod doğasını açıkça ortaya koymaktadır.

Eklenti ile birlikte çalışabilirliği

Diğer eklentilerle nasıl iletişim kuracağınıza ilişkin bir açıklama, TBA.