Pumpkin-Docs/docs/tr_TR/plugin-dev/rust/basic-logic.md
2026-04-14 19:13:36 +02:00

179 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Temel mantığı yazma
## Eklenti temeli
Basit bir eklentide bile perde arkasında çok şey olur, bu yüzden eklenti geliştirmeyi büyük ölçüde basitleştirmek için `pumpkin-api-macros` crate'ini kullanarak temel, boş bir eklenti oluşturacağız.
:::code-group
```rs:line-numbers [lib.rs]
use pumpkin_api_macros::plugin_impl;
#[plugin_impl]
pub struct MyPlugin {}
impl MyPlugin {
pub fn new() -> Self {
MyPlugin {}
}
}
impl Default for MyPlugin {
fn default() -> Self {
Self::new()
}
}
```
:::
Bu, boş bir eklenti oluşturur ve Pumpkin tarafından yüklenebilmesi için gerekli tüm yöntemleri uygular.
Artık eklentimizi ilk kez derlemeyi deneyebiliriz. Bunun için proje klasörünüzde şu komutu çalıştırın:
```bash
cargo build --release
```
::: tip NOTICE
Windows kullanıyorsanız **mutlaka** `--release` bayrağını kullanmalısınız; aksi halde sorun yaşarsınız. Başka bir platformdaysanız derleme süresinden tasarruf etmek için bunu kullanmak zorunda değilsiniz.
:::
İlk derleme biraz zaman alacaktır, ancak endişelenmeyin, sonraki derlemeler daha hızlı olacaktır.
Her şey yolunda gittiyse aşağıdakine benzer bir mesaj görmelisiniz:
```log
╰─ cargo build --release
Compiling hello-pumpkin v0.1.0 (/home/vypal/Dokumenty/GitHub/hello-pumpkin)
Finished `release` profile [optimized] target(s) in 0.68s
```
Artık `./target/release` klasörüne (veya `--release` kullanmadıysanız `./target/debug` klasörüne) gidip eklenti ikili dosyanızı bulabilirsiniz.
İşletim sisteminize bağlı olarak dosyanın adı üç olası isimden biri olacaktır:
- Windows için: `hello-pumpkin.dll`
- MacOS için: `libhello-pumpkin.dylib`
- Linux için: `libhello-pumpkin.so`
::: info NOTE
`Cargo.toml` dosyasında farklı bir proje adı kullandıysanız, proje adınızı içeren bir dosya arayın.
:::
Bu dosyayı istediğiniz gibi yeniden adlandırabilirsiniz; ancak dosya uzantısını (`.dll`, `.dylib` veya `.so`) aynı tutmalısınız.
## Eklentiyi test etmek
Artık eklenti ikili dosyamız olduğuna göre, Pumpkin sunucusunda test edebiliriz. Eklenti yüklemek, yeni derlediğimiz eklenti ikili dosyasını Pumpkin sunucunuzun `plugins/` klasörüne koymak kadar basittir!
`#[plugin_impl]` makrosu sayesinde eklentinin detayları (isim, yazarlar, sürüm ve açıklama gibi) ikili dosyanın içine gömülür, böylece sunucu bunları okuyabilir.
Sunucuyu başlattığınızda ve `/plugins` komutunu çalıştırdığınızda şöyle bir çıktı görmelisiniz:
```text
There is 1 plugin loaded:
hello-pumpkin
```
## Temel yöntemler
Pumpkin sunucusu, eklentiye durumunu bildirmek için şu anda iki "yöntem" kullanır. Bu yöntemler `on_load` ve `on_unload`'dur.
Bu yöntemlerin uygulanması zorunlu değildir, ancak genellikle en az `on_load` yöntemini uygularsınız. Bu yöntemde, eklentiye sunucu hakkında bilgi sağlayabilen `Context` nesnesine erişirsiniz; ayrıca eklentinin komut işleyicileri ve olayları kaydetmesine olanak tanır.
Bu yöntemleri uygulamayı kolaylaştırmak için `pumpkin-api-macros` crate'i tarafından sağlanan başka bir macro daha vardır.
:::code-group
```rs [lib.rs]
use std::sync::Arc; // [!code ++:4]
use pumpkin_api_macros::{plugin_impl, plugin_method};
use pumpkin::plugin::Context;
use pumpkin_api_macros::plugin_impl; // [!code --]
#[plugin_method] // [!code ++:4]
async fn on_load(&mut self, server: Arc<Context>) -> Result<(), String> {
Ok(())
}
#[plugin_impl]
pub struct MyPlugin {}
impl MyPlugin {
pub fn new() -> Self {
MyPlugin {}
}
}
impl Default for MyPlugin {
fn default() -> Self {
Self::new()
}
}
```
:::
::: warning IMPORTANT
Herhangi bir eklenti yöntemini `#[plugin_impl]` bloğundan önce tanımlamanız önemlidir.
:::
Bu yöntem, eklenti nesnesine (bu örnekte `MyPlugin` struct'ı) değiştirilebilir bir referans ve bir `Context` nesnesine referans alır. Bu nesne, eklentinin meta verilerine göre özellikle bu eklenti için oluşturulur.
### `Context` nesnesinde uygulanan yöntemler
```rs
fn init_log()
```
`log` crate'i üzerinden günlüklemeyi etkinleştirir.
```rs
fn get_data_folder() -> String
```
Bu eklentiye özel klasörün yolunu döndürür; kalıcı veri depolama için kullanılmalıdır
```rs
async fn get_player_by_name(player_name: String) -> Option<Arc<Player>>
```
`player_name` adlı bir oyuncu bulunursa (o anda çevrimiçi olmalıdır), bu fonksiyon ona bir referans döndürür.
```rs
async fn register_command(tree: CommandTree, permission: PermissionLvl)
```
Asgari gereken yetki seviyesiyle yeni bir komut işleyicisi kaydeder.
```rs
async fn register_event(handler: Arc<H>, priority: EventPriority, blocking: bool)
```
Belirli bir öncelik ve bloklayıcı olup olmadığıyla birlikte yeni bir olay işleyicisi kaydeder.
Bu arada `handler` bir `Arc<T>`'dir; bu, tek bir işleyicide birçok olayı uygulayıp sonra kaydedebileceğiniz anlamına gelir.
## Temel on-load yöntemi
Şimdilik, eklentinin çalıştığını görebilmek için çok basit bir `on_load` yöntemi uygulayacağız.
Burada iç Pumpkin günlükleyicisini ayarlayıp "Hello, Pumpkin!" mesajını görünür hale getireceğiz.
Bunu `on_load` yöntemine ekleyin:
:::code-group
```rs [lib.rs]
#[plugin_method]
async fn on_load(&mut self, server: Arc<Context>) -> Result<(), String> {
server.init_log(); // [!code ++:3]
log::info!("Hello, Pumpkin!");
Ok(())
}
```
:::
Eklentiyi yeniden derleyip sunucuyu başlattığınızda, loglarda "Hello, Pumpkin!" mesajını görmelisiniz.