123 lines
3.7 KiB
Markdown
123 lines
3.7 KiB
Markdown
# Hızlı Başlangıç
|
||
|
||
Bu kılavuz, [Zig programlama dilini](https://ziglang.org/) kullanarak Pumpkin sunucu eklentileri yazmaya başlamanıza yardımcı olacaktır.
|
||
|
||
Pumpkin için Zig eklentileri, resmi [`pumpkin-api-zig`](https://github.com/Pumpkin-MC/pumpkin-api-zig) bağlamaları kullanılarak WebAssembly (Wasm) bileşenleri olarak derlenir.
|
||
|
||
---
|
||
|
||
## Ön Koşullar
|
||
|
||
Başlamadan önce aşağıdaki araçların kurulu olduğundan emin olun:
|
||
|
||
- **[Zig](https://ziglang.org/download/)**: Sürüm 0.16.0 veya üzeri.
|
||
- **[`wasm-tools`](https://github.com/bytecodealliance/wasm-tools)**: `PATH` ortam değişkeninde mevcut olmalıdır (derleme betiği tarafından WIT meta verilerini gömmek ve WebAssembly bileşenini oluşturmak için kullanılır).
|
||
|
||
---
|
||
|
||
## 1. Projeyi Kurma
|
||
|
||
Eklenti projeniz için yeni bir dizin oluşturun:
|
||
|
||
```bash
|
||
mkdir my-zig-plugin
|
||
cd my-zig-plugin
|
||
```
|
||
|
||
`pumpkin-api-zig` paketini bağımlılık olarak ekleyin:
|
||
|
||
```bash
|
||
zig fetch --save git+https://github.com/Pumpkin-MC/pumpkin-api-zig
|
||
```
|
||
|
||
Proje kökünde `build.zig` dosyasını oluşturun:
|
||
|
||
```zig [build.zig]
|
||
const std = @import("std");
|
||
const pumpkin_api = @import("pumpkin_api_zig");
|
||
|
||
pub fn build(b: *std.Build) void {
|
||
_ = pumpkin_api.addPlugin(b, b.dependency("pumpkin_api_zig", .{}), .{
|
||
.name = "my-zig-plugin",
|
||
.root_source_file = b.path("src/main.zig"),
|
||
});
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 2. Eklentiyi Yazma
|
||
|
||
`src` dizinini oluşturun ve kodunuzu `src/main.zig` içine ekleyin:
|
||
|
||
```zig [src/main.zig]
|
||
const std = @import("std");
|
||
const pumpkin = @import("pumpkin");
|
||
|
||
pub const std_options: std.Options = .{ .logFn = pumpkin.logFn };
|
||
|
||
const MyPlugin = struct {
|
||
pub const metadata: pumpkin.Metadata = .{
|
||
.name = "my-zig-plugin",
|
||
.version = "0.1.0",
|
||
.authors = &.{"Adınız"},
|
||
.description = "Zig dilinde örnek bir eklenti.",
|
||
};
|
||
|
||
pub const events = .{
|
||
.player_join_event = onJoin,
|
||
};
|
||
|
||
pub fn onLoad(_: pumpkin.Context) !void {
|
||
std.log.info("Zig eklentisinden merhaba!", .{});
|
||
}
|
||
|
||
fn onJoin(_: pumpkin.Server, ev: *pumpkin.EventData(.player_join_event)) void {
|
||
std.log.info("{s} katıldı", .{ev.player.getName()});
|
||
}
|
||
};
|
||
|
||
comptime {
|
||
pumpkin.register(MyPlugin);
|
||
}
|
||
```
|
||
|
||
### Önemli Bileşenler:
|
||
- **`std_options`**: `pumpkin.logFn` aracılığıyla standart Zig günlüklerini (`std.log`) Pumpkin günlük sistemine yönlendirir.
|
||
- **`pub const metadata`**: Bileşen yüklendiğinde Pumpkin tarafından gerekli görülen eklenti bilgilerini (ad, sürüm, yazarlar, açıklama) tanımlar.
|
||
- **`pub const events`**: Eklenti tarafından kaydedilen olay işleyicilerini (örneğin `.player_join_event`) tanımlar.
|
||
- **`pub fn onLoad`**: Pumpkin eklentiyi başlattığında çağrılan giriş noktasıdır.
|
||
- **`pumpkin.register(MyPlugin)`**: Derleme sırasında gerekli WebAssembly bileşeni dışa aktarımlarını ve giriş noktalarını üretir.
|
||
|
||
> [!NOTE]
|
||
> API tarafından döndürülen her şey (tanıtıcılar/handles dahil), yalnızca geçerli geri arama (callback) dönene kadar geçerlidir. Bir tanıtıcıyı korumak için `keep()` işlevini çağırın ve işiniz bittiğinde `deinit()` ile serbest bırakın.
|
||
|
||
---
|
||
|
||
## 3. Eklentiyi Derleme
|
||
|
||
Eklentinizi bir WebAssembly bileşeni olarak derleyin:
|
||
|
||
```bash
|
||
zig build
|
||
```
|
||
|
||
Bu komut proje kök dizininizde `zig-out/my-zig-plugin.wasm` dosyasını oluşturacaktır.
|
||
|
||
---
|
||
|
||
## 4. Eklentiyi Çalıştırma
|
||
|
||
1. Derlenen `.wasm` dosyasını Pumpkin sunucunuzun `plugins/` dizinine kopyalayın:
|
||
```bash
|
||
cp zig-out/my-zig-plugin.wasm /yol/pumpkin/plugins/
|
||
```
|
||
2. Pumpkin sunucusunu başlatın veya yeniden başlatın:
|
||
```bash
|
||
./pumpkin
|
||
```
|
||
3. Eklentinin yüklendiğini doğrulamak için sunucu günlüklerini kontrol edin:
|
||
```text
|
||
[INFO] Zig eklentisinden merhaba!
|
||
```
|