Pumpkin-Docs/docs/tr_TR/plugin-dev/migrating-from-bukkit/commands.md
Alexander Medvedev 5c23b676ed feat: d binding
2026-09-17 09:23:24 +02:00

172 lines
5.4 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.

# Bukkit'ten Komutları Taşıma
Bukkit'te komutlar `plugin.yml` dosyasında tanımlanır ve `CommandExecutor` sınıfları ya da Brigadier kütüphanesi aracılığıyla işlenir.
Pumpkin'da komutlar **Brigadier esintili bir komut ağacı** kullanılarak oluşturulur ve `context.register_command` üzerinden programatik olarak kaydedilir. Hiçbir YAML yapılandırma dosyası kullanılmaz.
---
## Temel Farklar
| Özellik | Bukkit / Spigot | Pumpkin |
| :--- | :--- | :--- |
| **Bildirim (Tanımlama)** | `plugin.yml` dosyasında `commands:` altında bildirilir | Kod içinde `Command::new(...)` kullanılarak oluşturulur |
| **İzinler** | `plugin.yml` içinde bağlanır veya `player.hasPermission()` ile denetlenir | `register_command()` sırasında açık bir izin düğümü bağlanır |
| **Sekme Tamamlama (Tab Completion)** | `TabCompleter` içinde manuel dize eşleştirme | İstemci tarafında otomatik ağaç tabanlı sekme tamamlama |
| **Alt Komutlar** | Manuel `if (args[0].equalsIgnoreCase("..."))` kontrolü | İçe içe yerleştirilmiş `Command` ağaç düğümleri |
---
## Kod Karşılaştırması: Basit Komut
Bukkit ve Pumpkin'da `/feed` komutunun nasıl kaydedildiğini karşılaştırın:
### 1. Bukkit Uygulaması (Java)
```java [FeedCommand.java]
// 1. Registered in plugin.yml:
// commands:
// feed:
// description: Feeds the player
// permission: myplugin.feed
public class FeedCommand implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (!(sender instanceof Player)) {
sender.sendMessage("Only players can execute this command!");
return true;
}
Player player = (Player) sender;
if (!player.hasPermission("myplugin.feed")) {
player.sendMessage("No permission!");
return true;
}
player.setFoodLevel(20);
player.sendMessage("Your hunger has been satisfied!");
return true;
}
}
```
### 2. Pumpkin Uygulamaları
::: code-group
```rust [Rust]
use pumpkin_plugin_api::{
command::{CommandHandler, CommandSender, ConsumedArgs, CommandError, Command},
permission::{Permission, PermissionDefault},
Context, Plugin, PluginMetadata, Server,
};
struct FeedExecutor;
impl CommandHandler for FeedExecutor {
fn handle(&self, sender: CommandSender, _server: Server, _args: ConsumedArgs) -> Result<i32, CommandError> {
sender.send_message("Your hunger has been satisfied!");
Ok(1)
}
}
pub struct MyPlugin;
impl Plugin for MyPlugin {
fn new() -> Self { MyPlugin }
fn metadata(&self) -> PluginMetadata {
PluginMetadata {
name: "feed_plugin".into(),
version: "1.0.0".into(),
authors: vec!["Developer".into()],
description: "Feed command plugin".into(),
}
}
fn on_load(&mut self, context: Context) -> pumpkin_plugin_api::Result<()> {
// 1. Register permission node (Replaces plugin.yml permission)
context.register_permission(&Permission {
node: "feed_plugin:feed".to_string(),
description: "Allows executing /feed".to_string(),
default: PermissionDefault::Allow,
children: Vec::new(),
})?;
// 2. Build command tree
let command = Command::new(&["feed".to_string(), "eat".to_string()], "Feeds the player")
.execute(FeedExecutor);
// 3. Register with context
context.register_command(command, "feed_plugin:feed")?;
Ok(())
}
}
```
```python [Python]
from pumpkin_api import (
Plugin, PluginMetadata, register_plugin,
permission, command, context, server
)
class FeedExecutor:
def handle(self, sender: command.CommandSender, srv: server.Server, args: command.ConsumedArgs) -> int:
sender.send_message("Your hunger has been satisfied!")
return 1
class FeedPlugin(Plugin):
def metadata(self) -> PluginMetadata:
return PluginMetadata(name="feed_plugin", version="1.0.0", authors=["Dev"], description="Feed command")
def on_load(self, ctx: context.Context) -> None:
ctx.register_permission(permission.Permission(
node="feed_plugin:feed",
description="Allows executing /feed",
default=permission.PermissionDefault.ALLOW,
children=[]
))
cmd = command.Command(["feed", "eat"], "Feeds the player")
cmd.execute(FeedExecutor())
ctx.register_command(cmd, "feed_plugin:feed")
register_plugin(FeedPlugin)
```
```kotlin [Kotlin]
package plugin
import pumpkin.plugin.context.Context
import pumpkin.plugin.command.Command
import pumpkin.plugin.command.CommandSender
import pumpkin.plugin.permission.Permission
import pumpkin.plugin.permission.PermissionDefault
class FeedPlugin {
fun onLoad(ctx: Context) {
ctx.registerPermission(
Permission(
node = "feed_plugin:feed",
description = "Allows executing /feed",
default = PermissionDefault.ALLOW,
children = emptyList()
)
)
val cmd = Command(
names = listOf("feed", "eat"),
description = "Feeds the player"
)
ctx.registerCommand(cmd, "feed_plugin:feed")
}
fun handleCommand(sender: CommandSender): Int {
sender.sendMessage("Your hunger has been satisfied!")
return 1
}
}
```
:::