ArceniaKlan
Bu eklenti, Box
📋 İçindekiler
🌟 Ö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ü |
📦 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ı) |
🔧 Kurulum
KlanSistemi-1.0.0.jardosyasınıplugins/klasörüne koyun- Sunucuyu başlatın —
config.yml,messages.ymlveklanlar.dbotomatik oluşacaktır - İsteğe bağlı:
config.ymlayarlarını düzenleyin ve/reload confirmyapın - Arena kurmak için:
/klanadmin arena oluştur <isim>komutunu kullanın
📝 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 |
🔐 İ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) |
⚙️ 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ü
💬 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
📊 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%
🧩 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ı
🗄 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) |
⚔️ 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 |
👁 POV İzleyici Sistemi
Kullanım
/klan izle→ Savaş İzle GUI açılır- Hayatta olan bir savaşçıya tıkla → İzleme modu başlar
- 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 |
🖥 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) |
🏗️ 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
└─────────────────────────────────┘
🔨 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.
📄 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.