ArceniaKlan

Bu eklenti, Box

schedule
01

📋 İçindekiler

02

🌟 Özellikler

Modül Açıklama
Klan Yönetimi Oluşturma, davet, katılma, ayrılma, at, dağıt, isim değiştir
Rol Hiyerarşisi Lider → Subay → Güvenilir → Üye (terfi/düşürme)
Puan Sistemi Öldürme ödülü, ölüm cezası, admin puan verme/alma
İttifak Sistemi Klanlar arası ittifak, müttefik PvP koruması
Sohbet Sistemi Klan sohbeti, ittifak sohbeti, admin spy modu
Hologram Sıralaması FancyHolograms ile Top 10 klan leaderboard
Klan Savaşı Admin kontrollü arena savaşları, raunt sistemi
POV İzleyici Savaşçılara birinci şahıs izleme modu
Üye Limit Yükseltme Puan harcayarak üye limiti artırma
Küfür Filtresi Klan ismi oluşturmada otomatik filtre
PlaceholderAPI 7 farklı placeholder desteği
Geliştirici API Diğer eklentiler için tam ClanAPI arayüzü

03

📦 Gereksinimler

Bileşen Versiyon Zorunlu
Paper Server 1.21+
Java 21+
PlaceholderAPI 2.11+ ❌ (isteğe bağlı)
FancyHolograms 2.4+ ❌ (isteğe bağlı)

04

🔧 Kurulum

  1. KlanSistemi-1.0.0.jar dosyasını plugins/ klasörüne koyun
  2. Sunucuyu başlatın — config.yml, messages.yml ve klanlar.db otomatik oluşacaktır
  3. İsteğe bağlı: config.yml ayarlarını düzenleyin ve /reload confirm yapın
  4. Arena kurmak için: /klanadmin arena oluştur <isim> komutunu kullanın

05

📝 Komutlar

Oyuncu Komutları — /klan

Komut Açıklama İzin
/klan Ana klan menüsünü (GUI) açar klan.use
/klan kabul Savaş davetini kabul eder klan.use
/klan izle Savaş izleme menüsünü açar / izlemeden çıkar klan.war.spectate

Not: Klan oluşturma, davet, terfi, dağıtma gibi tüm işlemler GUI üzerinden yapılır.

Admin Komutları — /klanadmin

Komut Açıklama İzin
/klanadmin Admin paneli GUI'sini açar klan.admin
/klanadmin spy Sohbet izleme modunu aç/kapat klan.admin
/klanadmin puan ver <oyuncu> <miktar> Oyuncunun klanına puan ver klan.admin
/klanadmin puan al <oyuncu> <miktar> Oyuncunun klanından puan al klan.admin
/klanadmin savaş Savaş kurulum GUI'sini açar klan.admin

Arena Yönetimi — /klanadmin arena

Komut Açıklama
/klanadmin arena oluştur <isim> Bulunduğun konumda arena oluştur (20 blok yarıçap)
/klanadmin arena sil <isim> Arena sil
/klanadmin arena liste Tüm arenaları listele
/klanadmin arena spawn <isim> a Takım A spawn noktasını ayarla
/klanadmin arena spawn <isim> b Takım B spawn noktasını ayarla

Hologram Yönetimi — /klanadmin siralama

Komut Açıklama
/klanadmin siralama oluştur Bulunduğun konumda sıralama hologramı oluştur
/klanadmin siralama yenile Tüm hologramları yenile
/klanadmin siralama liste Hologramları listele
/klanadmin siralama sil <id> Hologram sil

06

🔐 İzinler (Permissions)

İzin Açıklama Varsayılan
klan.use Klan sistemini kullanma true (herkes)
klan.admin Admin komutları ve paneli op
klan.chat.spy Sohbet izleme op
klan.war.spectate Savaş izleme true (herkes)

07

⚙️ Yapılandırma (config.yml)

# Veritabanı
database:
  filename: "klanlar.db"

# Klan Ayarları
clan:
  name:
    min-length: 3          # Minimum klan ismi uzunluğu
    max-length: 16         # Maksimum klan ismi uzunluğu
    allowed-pattern: "^[a-zA-ZçÇğĞıİöÖşŞüÜ0-9 ]+$"  # İzin verilen karakterler (regex)
  starting-points: 0      # Başlangıç puanı
  profanity-filter:        # Yasaklı kelimeler
    - "küfür1"
    - "küfür2"

# Üye Limiti
member-limit:
  start: 5                 # Başlangıç üye limiti
  max: 20                  # Maksimum üye limiti
  base-cost: 1000          # Yükseltme taban maliyeti (puan)
  multiplier: 1.5          # Her seviye maliyet çarpanı

# Puan Sistemi
points:
  kill-reward: 10          # Oyuncu öldürme ödülü
  death-penalty: 0         # Ölüm cezası
  min-points: 0            # Minimum puan (negatif olmaz)

# Sohbet Formatları (MiniMessage)
chat:
  clan-format: "<dark_green>[Klan] <green>{role} {player}: <white>{message}"
  alliance-format: "<dark_purple>[İttifak] <light_purple>{clan} {player}: <white>{message}"
  spy-clan-format: "<gray>[SPY-Klan] [{clan}] {player}: {message}"
  spy-alliance-format: "<gray>[SPY-İttifak] [{clan}] {player}: {message}"

# Hologram Ayarları
hologram:
  title: "<gold><bold>⚔ En İyi Klanlar ⚔"
  line-format: "<yellow>#{rank} <white>{clan} <gray>- <green>{points} puan"
  top-count: 10            # Gösterilecek klan sayısı
  refresh-interval: 300    # Otomatik yenileme (saniye)

# Roller
roles:
  leader:
    display: "<red>Lider"
    prefix: "★"
  officer:
    display: "<gold>Subay"
    prefix: "◆"
  trusted:
    display: "<green>Güvenilir"
    prefix: "●"
  member:
    display: "<gray>Üye"
    prefix: "○"

# Savaş Sistemi
war:
  min-players: 1           # Takım başına minimum oyuncu
  max-players: 10          # Takım başına maksimum oyuncu
  accept-timeout: 30       # Davet kabul süresi (saniye)
  pvp-delay: 5             # Savaş başlamadan PvP koruması (saniye)
  reconnect-timeout: 30    # Bağlantı kopması toleransı (saniye)
  block-ender-pearl: true  # Ender pearl engelleme
  max-viewers: 20          # Maksimum izleyici sayısı
  war-points-reward: 100   # Savaş kazanma puan ödülü

08

💬 Mesajlar (messages.yml)

Tüm mesajlar MiniMessage formatında yazılır ve messages.yml içinden düzenlenebilir.

Kullanılabilir Placeholder'lar

Mesaj Bölümü Placeholder'lar
general.cooldown {seconds}
create.success {name}
create.name-too-short {min}
create.name-too-long {max}
member.invited {player}
member.invite-received {clan}
member.joined {clan}
member.join-broadcast {player}
member.kicked {player}
member.left-broadcast {player}
member.promoted {player}, {role}
member.demoted {player}, {role}
member.trusted {player}
clan.renamed {name}
clan.points-added {amount}, {total}
clan.points-removed {amount}, {total}
upgrade.success {limit}, {cost}
upgrade.not-enough-points {cost}
admin.points-given {player}, {amount}
admin.points-taken {player}, {amount}
hologram.list-entry {id}, {world}, {x}, {y}, {z}
war.invited {seconds}
war.eliminated {player}
war.round-won {clan}, {scoreA}, {scoreB}
war.war-won {clan}, {scoreA}, {scoreB}
war.reconnect-warning {player}, {seconds}

MiniMessage Formatı

<!-- Renkler -->
<red>Kırmızı metin
<green>Yeşil metin
<gold>Altın metin
<gray>Gri metin

<!-- Stiller -->
<bold>Kalın
<italic>İtalik
<underlined>Altı çizili

<!-- Gradyan -->
<gradient:red:blue>Gradyan metin</gradient>

<!-- Sıfırlama -->
<reset>Normal metin

09

📊 PlaceholderAPI Placeholders

Gereksinim: PlaceholderAPI eklentisi yüklü olmalıdır.

Placeholder Açıklama Klansız Değer
%klan_name% Oyuncunun klan adı Yok
%klan_name_2% Klan adı köşeli parantezli: [KlanAdı] (boş)
%klan_points% Klanın toplam puanı 0
%klan_role% Oyuncunun klan rolü (Lider, Subay, Güvenilir, Üye) Yok
%klan_members% Klandaki üye sayısı 0
%klan_limit% Klanın üye limiti 0
%klan_allies% Müttefik klan sayısı 0
%klan_has_clan% Klana sahip mi? (true/false) false

Kullanım Örneği (Scoreboard / TAB)

&6Klan: %klan_name%
&ePuan: %klan_points%
&7Rol: %klan_role%
&7Üyeler: %klan_members%/%klan_limit%

10

🧩 Geliştirici API'si

Diğer eklentiler, KlanAPIProvider sınıfı üzerinden klan sistemine erişebilir.

API'ye Erişim

import com.arcenia.klan.api.ClanAPI;
import com.arcenia.klan.api.KlanAPIProvider;

ClanAPI api = KlanAPIProvider.getAPI();
if (api != null) {
    // API kullanıma hazır
}

Mevcut API Metodları

Metod Dönüş Tipi Açıklama
getClan(UUID playerId) Clan Oyuncunun klanını getirir (yoksa null)
getClanById(int clanId) Clan ID ile klan getirir
getClanByName(String name) Clan İsim ile klan getirir (büyük/küçük harf bağımsız)
hasClan(UUID playerId) boolean Oyuncunun klanı var mı?
getMembers(int clanId) Map<UUID, ClanMember> Klanın tüm üyelerini getirir
addPoints(int clanId, int amount, String reason) CompletableFuture<Void> Klana puan ekler (async)
removePoints(int clanId, int amount, String reason) CompletableFuture<Void> Klandan puan çıkarır (async)
areAllied(int clanId1, int clanId2) boolean İki klan müttefik mi?
arePlayersAllied(UUID player1, UUID player2) boolean İki oyuncunun klanları müttefik mi?
getAllClans() Collection<Clan> Tüm klanları getirir
getTopClans(int limit) List<Clan> Puana göre en iyi klanlar
getPlayerRole(UUID playerId) ClanRole Oyuncunun rolünü getirir (null = klansız)

Kullanım Örnekleri

ClanAPI api = KlanAPIProvider.getAPI();

// Oyuncunun klanını kontrol et
Clan clan = api.getClan(player.getUniqueId());
if (clan != null) {
    player.sendMessage("Klanın: " + clan.getName());
    player.sendMessage("Puanın: " + clan.getPoints());
}

// Puan ekle (asenkron)
api.addPoints(clan.getId(), 50, "Özel etkinlik ödülü").thenRun(() -> {
    player.sendMessage("50 puan eklendi!");
});

// İttifak kontrolü
boolean allied = api.arePlayersAllied(player1.getUniqueId(), player2.getUniqueId());

// Top 5 klan
List<Clan> top5 = api.getTopClans(5);
for (int i = 0; i < top5.size(); i++) {
    Clan c = top5.get(i);
    System.out.println("#" + (i + 1) + " " + c.getName() + " - " + c.getPoints() + " puan");
}

// Rol kontrolü
ClanRole role = api.getPlayerRole(player.getUniqueId());
if (role == ClanRole.LEADER) {
    // Lider özel işlemleri
}

Model Sınıfları

Clan

Alan/Metod Tip Açıklama
getId() int Klan ID (benzersiz)
getName() String Klan adı
getLeaderId() UUID Lider UUID
getPoints() int Toplam puan
getMemberLimit() int Üye limiti
getCreatedAt() long Oluşturulma zamanı (epoch ms)
getMembers() Map<UUID, ClanMember> Üye haritası
getAllyIds() Set<Integer> Müttefik klan ID'leri
isMember(UUID) boolean Üye kontrolü
isFull() boolean Limit doldu mu?
isAlliedWith(int) boolean Müttefik mi?

ClanMember

Alan/Metod Tip Açıklama
getPlayerId() UUID Oyuncu UUID
getClanId() int Bağlı klan ID
getRole() ClanRole Mevcut rol
getJoinedAt() long Katılım zamanı (epoch ms)
isLeader() boolean Lider mi?
isOfficerOrAbove() boolean Subay veya üstü mü?

ClanRole (Enum)

Değer Ağırlık Görünen Ad
MEMBER 0 Üye
TRUSTED 1 Güvenilir
OFFICER 2 Subay
LEADER 3 Lider

Metotlar: isHigherThan(role), isAtLeast(role), getNextRole(), getPreviousRole()

plugin.yml Bağımlılık

Diğer eklentiler plugin.yml'de KlanSistemi'yi bağımlılık olarak eklemelidir:

depend:
  - KlanSistemi    # zorunlu bağımlılık
# veya
softdepend:
  - KlanSistemi    # isteğe bağlı

11

🗄 Veritabanı Şeması

SQLite veritabanı (klanlar.db) aşağıdaki tabloları içerir:

clans

Sütun Tip Açıklama
id INTEGER PK Otomatik ID
name TEXT Klan adı (benzersiz)
leader_id TEXT Lider UUID
points INTEGER Toplam puan
member_limit INTEGER Üye limiti
created_at INTEGER Oluşturulma zamanı

clan_members

Sütun Tip Açıklama
player_id TEXT PK Oyuncu UUID
clan_id INTEGER FK Klan ID
role TEXT Rol adı
joined_at INTEGER Katılım zamanı

alliances

Sütun Tip Açıklama
clan_id_1 INTEGER Klan 1 ID
clan_id_2 INTEGER Klan 2 ID

holograms

Sütun Tip Açıklama
id INTEGER PK Hologram ID
world TEXT Dünya adı
x, y, z REAL Koordinatlar

war_history

Sütun Tip Açıklama
id INTEGER PK Kayıt ID
clan_a_id INTEGER Takım A klan ID
clan_a_name TEXT Takım A klan adı
clan_b_id INTEGER Takım B klan ID
clan_b_name TEXT Takım B klan adı
winner_id INTEGER Kazanan klan ID
winner_name TEXT Kazanan klan adı
players TEXT Katılan oyuncular (CSV)
score TEXT Final skor
arena TEXT Arena adı
mode TEXT Savaş modu
date INTEGER Tarih (epoch ms)

12

⚔️ Savaş Sistemi

Akış Diyagramı

Admin: /klanadmin savaş
    ↓
WarSetupMenu GUI açılır
    ↓
[1] Klan A seç → [2] Klan B seç → [3] Arena seç → [4] Mod seç
    ↓
WarPlayerSelectMenu GUI açılır
    ↓
Her klandan eşit sayıda oyuncu seç → Onayla
    ↓
Oyunculara davet gönderilir (/klan kabul — 30 saniye)
    ↓
Tüm oyuncular kabul edince → Arena'ya ışınlanma
    ↓
PvP koruması (5 saniye) + Geri sayım başlıkları
    ↓
⚔ SAVAŞ BAŞLADI! → Aktif PvP
    ↓
Ölüm → Eleme (Spectator moda geçiş)
    ↓
Raunt kazananı belirlenir → Sonraki raunt / Savaş sonu
    ↓
Kazanan belirlenir → Puan ödülü + DB kaydı + Hologram yenileme

Savaş Modları

Mod Açıklama
Son Kalan Tek raunt — son hayatta kalan takım kazanır
3'te 2 3 raunt — 2 raunt kazanan takım galip
5'te 3 5 raunt — 3 raunt kazanan takım galip

Savaş Sırasında Kısıtlamalar

Kısıtlama Açıklama
🚫 Komut engeli Savaş sırasında komut kullanılamaz
🚫 Işınlanma engeli Teleport eventleri iptal edilir
🚫 Item düşürme Ölüm anında item düşmez
🚫 Sandık açma Arena içinde sandık, fırın vb. açılamaz
🚫 Ender pearl Yapılandırılabilir (varsayılan: engelli)
🚫 Arena sınırı Oyuncular arena dışına çıkamaz
🔄 Bağlantı kopması 30 saniye yeniden bağlanma süresi, aşılırsa otomatik eleme

13

👁 POV İzleyici Sistemi

Kullanım

  1. /klan izle → Savaş İzle GUI açılır
  2. Hayatta olan bir savaşçıya tıkla → İzleme modu başlar
  3. Kontroller:
    • Sol Tık → Önceki savaşçıya geç
    • Sağ Tık → Sonraki savaşçıya geç
    • Shift → İzleme modundan çık

İzleyici Kısıtlamaları

Kısıtlama Açıklama
Spectator modu Oyuncu SPECTATOR game mode'a geçer
Görünmezlik Diğer oyuncular izleyiciyi göremez
Etkileşim yok Blok, item, entity etkileşimi engelli
Komut engeli İzleme sırasında komut kullanılamaz
Otomatik geçiş İzlenen savaşçı ölürse otomatik diğerine geçer
Savaş sonu Savaş bitince tüm izleyiciler otomatik çıkarılır
Actionbar Alt bilgi çubuğunda izlenen savaşçının adı gösterilir

14

🖥 GUI Sistemi

Tüm GUI'ler BaseGUI çerçevesi üzerine inşa edilmiştir.

GUI Listesi

GUI Açılış Açıklama
MainMenu /klan Ana menü — klan bilgileri, üyeler, sohbet, ittifak, dağıt
AdminMenu /klanadmin Admin paneli — spy toggle, hologram, puan, savaş
ClanMembersMenu MainMenu → Üyeler Üye listesi, terfi/düşürme/at
AdminClanListMenu AdminMenu → Tüm Klanlar Tüm klanları görüntüle
AdminPointsMenu AdminMenu → Puan Ver/Al Klan seçerek puan işlemi
HologramListMenu AdminMenu → Hologram Sil Hologram listesi, silme
WarSetupMenu AdminMenu → Savaş Oluştur 4 adımlı savaş kurulumu
WarPlayerSelectMenu WarSetupMenu sonrası Oyuncu seçimi (çift taraflı)
WarSpectateMenu /klan izle Savaşçı seçimi (POV izleme)

15

🏗️ Mimari

com.arcenia.klan
├── KlanSistemi.java          # Ana plugin sınıfı
├── api/
│   ├── ClanAPI.java          # Public API arayüzü
│   ├── ClanAPIImpl.java      # API implementasyonu
│   └── KlanAPIProvider.java  # Statik API erişim noktası
├── command/
│   ├── KlanCommand.java      # /klan komutu
│   └── KlanAdminCommand.java # /klanadmin komutu
├── database/
│   ├── DatabaseManager.java  # HikariCP bağlantı yönetimi
│   ├── ClanRepository.java   # Klan CRUD işlemleri
│   ├── AllianceRepository.java  # İttifak CRUD
│   ├── HologramRepository.java  # Hologram CRUD
│   └── WarRepository.java    # Savaş geçmişi CRUD
├── gui/
│   ├── BaseGUI.java          # Temel GUI çerçevesi
│   ├── PaginatedGUI.java     # Sayfalı GUI
│   ├── GUIButton.java        # Tıklanabilir buton
│   ├── GUIListener.java      # Inventory click handler
│   └── menu/
│       ├── MainMenu.java
│       ├── AdminMenu.java
│       ├── ClanMembersMenu.java
│       ├── AdminClanListMenu.java
│       ├── AdminPointsMenu.java
│       ├── HologramListMenu.java
│       ├── WarSetupMenu.java
│       ├── WarPlayerSelectMenu.java
│       └── WarSpectateMenu.java
├── hook/
│   └── KlanPlaceholderExpansion.java  # PAPI hook
├── listener/
│   ├── ChatListener.java     # Klan/ittifak sohbeti
│   ├── CombatListener.java   # PvP koruması (ittifak)
│   ├── PlayerListener.java   # Giriş/çıkış olayları
│   └── WarListener.java      # Savaş + POV event handler
├── manager/
│   ├── ClanManager.java      # Klan iş mantığı
│   ├── AllianceManager.java  # İttifak iş mantığı
│   ├── ChatManager.java      # Sohbet + spy yönetimi
│   ├── HologramManager.java  # FancyHolograms entegrasyonu
│   ├── PointsManager.java    # Puan yönetimi
│   ├── ArenaManager.java     # Arena CRUD (arenas.yml)
│   ├── WarManager.java       # Savaş yaşam döngüsü
│   └── POVManager.java       # İzleme oturumu yönetimi
├── model/
│   ├── Clan.java             # Klan veri modeli
│   ├── ClanMember.java       # Üye veri modeli
│   ├── ClanRole.java         # Rol enum (hiyerarşi)
│   ├── HologramData.java     # Hologram veri modeli
│   ├── Arena.java            # Arena veri modeli
│   └── WarRecord.java        # Savaş geçmişi kaydı
├── util/
│   ├── MessageUtil.java      # MiniMessage mesaj yönetimi
│   ├── ItemBuilder.java      # ItemStack builder
│   ├── ProfanityFilter.java  # Küfür filtresi
│   └── SignInputHandler.java # Tabela girişi handler
└── war/
    ├── WarSession.java       # Savaş durum makinesi
    ├── WarTeam.java          # Takım durumu
    └── ViewerSession.java    # İzleyici oturumu

Katmanlı Mimari

┌─────────────────────────────────┐
│         Commands & GUI          │  ← Kullanıcı etkileşim katmanı
├─────────────────────────────────┤
│           Managers              │  ← İş mantığı katmanı
├─────────────────────────────────┤
│         Repositories            │  ← Veri erişim katmanı
├─────────────────────────────────┤
│     DatabaseManager (HikariCP)  │  ← Bağlantı yönetimi
└─────────────────────────────────┘

16

🔨 Derleme

# Gereksinimler: JDK 21+, Maven 3.9+
mvn clean package

# Çıktı: target/KlanSistemi-1.0.0.jar

Bağımlılıklar (shade ile paketlenir)

Bağımlılık Versiyon Tür
Paper API 1.21.4-R0.1 provided
SQLite JDBC 3.47.1.0 shaded
HikariCP 6.2.1 shaded
FancyHolograms 2.4.1 provided (isteğe bağlı)
PlaceholderAPI 2.11.6 provided (isteğe bağlı)

Not: SQLite JDBC ve HikariCP, shade eklentisi ile JAR'a dahil edilir ve relocation ile çakışma önlenir.


17

📄 Lisans

Bu proje Arcenia tarafından geliştirilmiştir.


Minecraft Paper 1.21+ için tasarlanmıştır. BoxPvP sunucuları için optimize edilmiştir.