PuanSistemi
Versiyon: 1.0.0 Platform: Paper/Spigot 1.21+ Java: 21
Kısa Açıklama
PuanSistemi, Minecraft sunucuları için geliştirilmiş kapsamlı bir puan ekonomisi ve mağaza altyapısıdır. Üç bağımsız fakat entegre eklentiden oluşur: Puan (merkezi puan yönetimi ve mağaza), Afk (AFK bölgelerinde otomatik puan kazanma) ve Zirve (tepe noktası kontrol ederek puan kazanma). Oyuncular farklı aktivitelerle AfkPuan ve ZirvePuan kazanır, bu puanları ana Puan birimine dönüştürür ve GUI tabanlı mağazadan ürün satın alır.
Özellikler
Puan (Merkezi Modül)
- Üç farklı puan türü: Puan, ZirvePuan, AfkPuan
- MySQL veritabanı ile HikariCP bağlantı havuzu desteği
- GUI tabanlı mağaza sistemi (Puan, Zirve ve AFK olmak üzere üç ayrı mağaza)
- Dönen mağaza: Puan mağazası belirli aralıklarla rastgele ürünlerle yenilenir
- Sabit mağazalar: Zirve ve AFK mağazaları her zaman aynı ürünleri gösterir
- Puan dönüştürme: ZirvePuan ve AfkPuan'ı ana Puan birimine dönüştürme (yapılandırılabilir oranlar)
- Admin GUI'si: Oyun içinden ürün ekleme, düzenleme ve silme
- Ürün limiti: Her ürün için oyuncu başına alım limiti (mağaza yenilenince sıfırlanır)
- PlaceholderAPI entegrasyonu: Skorboard, tab, sohbet ve diğer eklentilerde puan gösterimi
- Geliştirici API'si: Diğer eklentilerin puan sistemine erişmesi için
PuanAPIarayüzü - Satın alma logları: Tüm alışverişler veritabanında kaydedilir
Afk (AFK Puan Modülü)
- Blok tabanlı AFK bölgesi: Wand aracı ile AFK bölgeleri belirleme
- Bölgesel seçim: İki nokta seçerek toplu bölge ekleme (
/afkbolge addregion) - Saniye bazlı puan kazanımı: Kesirli puan birikimi ile hassas hesaplama
- Streak (seri) sistemi: Bölgede uzun süre kalanlara artan çarpan bonusu (1 saat: 1.2x, 2 saat: 1.4x, 3 saat: 1.6x, 4 saat: 1.8x)
- Grace period: Bölgeden çıkınca seri korunma süresi (varsayılan 30 dakika)
- Zaman bazlı bonuslar: Gece bonusu, cuma bonusu, hafta sonu bonusu gibi zaman dilimlerine göre çarpanlar (Türkiye/İstanbul saat dilimi)
- Yetki bazlı çarpanlar: VIP (1.25x), MVP (1.5x) gibi yetki gruplarına göre ek çarpan
- Geçici admin etkinlikleri:
/afkbonus etkin <süre> <çarpan>komutu ile anlık bonus etkinlikleri - Otomatik AFK: 10 dakika hareketsiz kalan oyuncuları otomatik olarak AFK bölgesine ışınlama
- Otomatik AFK muafiyeti: Belirli oyuncuları otomatik ışınlamadan muaf tutma
- ActionBar ve Title gösterimi: Anlık puan kazancı, çarpanlar ve seri bilgisi
- Parçacık efektleri: AFK bölgelerini görsel olarak gösterme
- SQLite veritabanı: AFK süreleri yerel veritabanında saklanır
- UTF-8 mesaj desteği:
messages.ymlile tamamen özelleştirilebilir Türkçe mesajlar
Zirve (Tepe Kontrol Modülü)
- Blok tabanlı zirve bölgesi: Wand aracı ile zirve noktaları belirleme
- Ele geçirme mekanizması: Zirveye çıkınca 5-13 saniyelik rastgele ele geçirme süresi
- Tek kişilik hakimiyet: Zirvede birden fazla oyuncu varsa puan kazanılmaz, rakibi öldürmek gerekir
- Bağlı bölge tespiti: Bitişik zirve blokları otomatik olarak tek bir bölge olarak algılanır (BFS algoritması)
- Risk modu: 2x puan kazancı, ancak ölünce puanların %75'i kaybedilir (30 dakika süreli)
- Risk modu GUI onayı: Oyuncuya risk modunun avantaj ve dezavantajlarını gösteren onay ekranı
- Yetki bazlı çarpanlar: VIP (1.25x), MVP (1.5x) gibi kademeli çarpanlar
- BossBar gösterimi: Zirvenin durumunu (boş, dolu, çatışma) tüm yakındaki oyunculara gösterir
- ActionBar bilgilendirme: Ele geçirme süresi, puan kazancı ve çarpan bilgisi
- Parçacık efektleri: Zirve bloklarını görsel olarak vurgulama
- Ölüm cezası: Risk modundayken ölünce ZirvePuan'ın %75'i silinir
Gereksinimler
| Gereksinim | Detay |
|---|---|
| Minecraft Sunucu | Paper veya Spigot 1.21+ |
| Java | 21 veya üzeri |
| MySQL | Puan modülü için gerekli (veritabanı tabloları otomatik oluşturulur) |
| PlaceholderAPI | İsteğe bağlı (placeholder desteği için) |
Not: Afk ve Zirve modülleri, Puan modülüne bağımlıdır (
softdepend). Puan modülü yüklü değilse AfkPuan/ZirvePuan işlevleri devre dışı kalır ancak eklentiler çalışmaya devam eder.
Kurulum
Puan modülünü derleyin veya hazır JAR dosyasını alın:
puan/target/Puan-1.0.0.jardosyasını sunucununplugins/klasörüne koyun.
Afk modülünü kurun:
afk/build/libs/Afk-1.0.0.jardosyasını sunucununplugins/klasörüne koyun.
Zirve modülünü kurun:
zirve/build/libs/Zirve-1.0.0.jar(veya Maven çıktısı) dosyasını sunucununplugins/klasörüne koyun.
Sunucuyu başlatın. İlk çalıştırmada yapılandırma dosyaları ve veritabanı tabloları otomatik oluşturulur.
plugins/Puan/config.ymldosyasından MySQL bağlantı bilgilerini düzenleyin ve sunucuyu yeniden başlatın.(İsteğe bağlı) PlaceholderAPI yüklüyse placeholder desteği otomatik etkinleşir.
Komutlar ve İzinler
Puan Modülü
| Komut | Açıklama | İzin |
|---|---|---|
/puanmagaza |
Puan mağazası ana menüsünü açar | puan.magaza (varsayılan: herkes) |
/puanmagaza ekle |
Mağazaya yeni ürün ekler (Admin GUI) | puan.magaza.ekle (varsayılan: op) |
/puanmagaza yenile |
Mağazayı manuel yeniler | puan.admin (varsayılan: op) |
/puan ekle <oyuncu> <miktar> <tür> |
Oyuncuya puan ekler | puan.admin |
/puan çıkar <oyuncu> <miktar> <tür> |
Oyuncudan puan çıkarır | puan.admin |
/puan ayarla <oyuncu> <miktar> <tür> |
Oyuncunun puanını ayarlar | puan.admin |
/puan görüntüle <oyuncu> |
Oyuncunun puanlarını gösterir | puan.admin |
Puan türleri:
Puan,ZirvePuan,AfkPuan
Afk Modülü
| Komut | Açıklama | İzin |
|---|---|---|
/afk |
AFK bölgesine ışınlanır | arcenia.afk.use (varsayılan: herkes) |
/afk wand |
AFK wand aracını verir | arcenia.afk.admin (varsayılan: op) |
/afk puan [oyuncu] |
AfkPuan bilgilerini gösterir | arcenia.afk.use |
/afk reload |
Yapılandırmayı yeniden yükler | arcenia.afk.admin |
/afkbolge gor |
AFK bölgelerini parçacıklarla gösterir | arcenia.afk.admin |
/afkbolge git |
AFK bölgesine ışınlanır | arcenia.afk.use |
/afkbolge addregion |
Wand ile seçilen alanı AFK bölgesi yapar | arcenia.afk.admin |
/afkbonus etkin <saniye> <çarpan> |
Geçici bonus etkinliği başlatır | arcenia.afk.admin |
/afkadmin add <oyuncu> |
Oyuncuyu otomatik AFK muafiyetine ekler | arcenia.afk.admin |
/afkadmin remove <oyuncu> |
Muafiyeti kaldırır | arcenia.afk.admin |
/afkadmin list |
Muaf oyuncuları listeler | arcenia.afk.admin |
Yetki çarpanları:
| İzin | Çarpan |
|---|---|
arcenia.afk |
1.0x (varsayılan: herkes) |
arcenia.afk.vip |
1.25x |
arcenia.afk.mvp |
1.5x |
Zirve Modülü
| Komut | Açıklama | İzin |
|---|---|---|
/zirve belirle |
Zirve wand aracını verir | arcenia.zirve.admin (varsayılan: op) |
/zirve puan [oyuncu] |
ZirvePuan bilgilerini gösterir | arcenia.zirve.use (varsayılan: herkes) |
/zirve risk |
Risk modunu açar/kapatır | arcenia.zirve.use |
/zirve reload |
Yapılandırmayı yeniden yükler | arcenia.zirve.admin |
Yetki çarpanları:
| İzin | Çarpan |
|---|---|
arcenia.zirve |
1.0x (varsayılan: herkes) |
arcenia.zirve.vip |
1.25x |
arcenia.zirve.mvp |
1.5x |
PlaceholderAPI Yer Tutucuları
Puan modülü PlaceholderAPI yüklüyse aşağıdaki yer tutucuları kullanılabilir:
| Yer Tutucu | Açıklama |
|---|---|
%arcenia_puan% |
Oyuncunun Puan miktarı |
%arcenia_puan_zirve% |
ZirvePuan miktarı |
%arcenia_puan_afk% |
AfkPuan miktarı |
%arcenia_puan_toplam% |
Tüm puanların toplamı |
%arcenia_puan_formatted% |
Formatlanmış Puan (1.234.567) |
%arcenia_puan_zirve_formatted% |
Formatlanmış ZirvePuan |
%arcenia_puan_afk_formatted% |
Formatlanmış AfkPuan |
%arcenia_puan_short% |
Kısa format (1K, 1.5M) |
%arcenia_puan_zirve_short% |
Kısa format ZirvePuan |
%arcenia_puan_afk_short% |
Kısa format AfkPuan |
%arcenia_zirve_to_puan_rate% |
ZirvePuan -> Puan dönüşüm oranı |
%arcenia_afk_to_puan_rate% |
AfkPuan -> Puan dönüşüm oranı |
%arcenia_has_puan% |
Puanı var mı (true/false) |
%arcenia_has_zirve% |
ZirvePuanı var mı (true/false) |
%arcenia_has_afk% |
AfkPuanı var mı (true/false) |
Yapılandırma
Puan - config.yml
# MySQL Veritabanı Ayarları
database:
host: "localhost"
port: 3306
database: "minecraft"
username: "root"
password: ""
table-prefix: "puan_"
pool:
maximum-pool-size: 10
minimum-idle: 2
connection-timeout: 30000
idle-timeout: 600000
max-lifetime: 1800000
# Dönüşüm oranları
conversion:
zirve-to-puan: 5 # 5 ZirvePuan = 1 Puan
afk-to-puan: 60 # 60 AfkPuan = 1 Puan
# Mağaza ayarları
shop:
refresh-interval: 30 # Dakika cinsinden yenilenme süresi
max-items: 9 # Mağazada gösterilecek maksimum ürün
# Mesajlar (renk kodları & ile desteklenir)
messages:
prefix: "&6[Puan] &r"
# ... tüm mesajlar özelleştirilebilir
# GUI başlıkları ve buton isimleri
gui:
main-menu: "&6Puan Mağazası"
convert-menu: "&ePuan Dönüştür"
shop-menu: "&aMağaza"
gui-items:
convert-button: "&ePuan Dönüştür"
shop-button: "&aMağazayı Görüntüle"
back-button: "&cGeri"
confirm-button: "&aOnayla"
cancel-button: "&cİptal"
Afk - config.yml
# Puan ayarları
points:
default-per-minute: 60 # Dakikada kazanılan temel puan
streak-grace-period: 30 # Bölgeden çıkınca serinin korunma süresi (dakika)
# Streak bonusları (dakika: çarpan)
streak-bonuses:
60: 1.2 # 1 saat sonra
120: 1.4 # 2 saat sonra
180: 1.6 # 3 saat sonra
240: 1.8 # 4 saat sonra
# Zaman bazlı bonuslar (Türkiye/İstanbul saat dilimine göre)
time-bonuses:
gece-bonusu:
name: "Gece"
multiplier: 2.0
start: "00:00"
end: "08:00"
cuma-bonusu:
name: "Cuma"
multiplier: 4.0
start: "18:00"
end: "23:59"
days: [FRIDAY]
haftasonu-bonusu:
name: "Hafta Sonu"
multiplier: 1.5
start: "00:00"
end: "23:59"
days: [SATURDAY, SUNDAY]
# Yetki çarpanları
multipliers:
arcenia.afk: 1.0
arcenia.afk.vip: 1.25
arcenia.afk.mvp: 1.5
# Wand ayarları
wand:
material: GOLDEN_HOE
name: "&6&lAFK Wand"
Afk - messages.yml
Tüm mesajlar UTF-8 destekli ayrı bir dosyada tutulur. Türkçe karakterler tam desteklenir.
Zirve - config.yml
# Puan ayarları
points:
default-per-minute: 65
# Yetki çarpanları
multipliers:
arcenia.zirve: 1.0
arcenia.zirve.vip: 1.25
arcenia.zirve.mvp: 1.5
# Risk modu
risk-mode:
death-penalty: 0.75 # Ölünce kaybedilecek puan yüzdesi
multiplier: 2.0 # Risk modunda puan çarpanı
# Wand ayarları
wand:
material: BLAZE_ROD
name: "&6&lZirve Wand"
# BossBar ayarları
bossbar:
color: YELLOW
style: SOLID
# Mesajlar (risk GUI mesajları dahil)
messages:
prefix: "&6[Zirve] &r"
# ... tüm mesajlar özelleştirilebilir
Nasıl Çalışır
Puan Ekonomisi Akışı
Oyuncu AFK bölgesine girer ──> AfkPuan kazanır (saniye bazlı)
Oyuncu zirveyi kontrol eder ──> ZirvePuan kazanır (saniye bazlı)
│
┌───────────────────┘
▼
/puanmagaza > Puan Dönüştür
ZirvePuan ──(÷5)──> Puan
AfkPuan ──(÷60)──> Puan
│
▼
/puanmagaza > Mağaza
Puan/ZirvePuan/AfkPuan ile ürün satın al
AFK Puan Hesaplama
Toplam çarpan aşağıdaki formülle hesaplanır:
Toplam Çarpan = Yetki Çarpanı x Streak Çarpanı x Zaman Bonus Çarpanı x Admin Etkinlik Çarpanı
Saniye Başına Puan = (Dakikadaki Temel Puan x Toplam Çarpan) / 60
Örnek: MVP yetkisine sahip bir oyuncu, 2 saattir AFK bölgesinde, gece vakti ve admin etkinliği (2x) aktifken:
- Yetki: 1.5x (MVP)
- Streak: 1.4x (120 dakika)
- Gece bonusu: 2.0x
- Admin etkinliği: 2.0x
- Toplam: 1.5 x 1.4 x 2.0 x 2.0 = 8.4x
- Saniye başına: (60 x 8.4) / 60 = 8.4 AfkPuan/saniye
Zirve Mekanizması
- Oyuncu zirve bloklarının üzerine çıkar
- 5-13 saniye arası rastgele ele geçirme süresi başlar (ActionBar'da ilerleme çubuğu gösterilir)
- Süre tamamlanınca ZirvePuan kazanmaya başlar
- Aynı bölgede ikinci bir oyuncu varsa puan kazanımı durur, "Diğer kişiyi öldür" mesajı gösterilir
- Risk modu aktifse puan çarpanı 2 katına çıkar ancak ölünce puanların %75'i silinir
- Risk modu 30 dakika sonra otomatik kapanır
Veritabanı Mimarisi
Puan modülü MySQL kullanır ve üç tablo oluşturur:
puan_players- Oyuncu puanları (Puan, ZirvePuan, AfkPuan) ve YML formatında ek veripuan_shop_items- Mağaza ürünleripuan_purchase_log- Satın alma geçmişi
Afk modülü yerel SQLite veritabanı kullanır:
player_stats- Toplam AFK süresi ve son çıkış zamanı
Zirve modülü YML dosyaları kullanır:
points.yml- Eski puan verileri (PuanAPI varsa kullanılmaz)riskmode.yml- Risk modu durumları
Geliştirici API'si
Diğer eklentiler PuanAPI arayüzünü kullanarak puan sistemine erişebilir:
// PuanPlugin'e erişim
PuanPlugin puanPlugin = (PuanPlugin) Bukkit.getPluginManager().getPlugin("Puan");
PuanAPI api = puanPlugin.getAPI();
// Puan sorgulama
int puan = api.getPuan(playerUUID);
int zirvePuan = api.getZirvePuan(playerUUID);
int afkPuan = api.getAfkPuan(playerUUID);
// Puan ekleme/çıkarma
api.addPuan(playerUUID, 100);
api.removePuan(playerUUID, 50);
// Yeterlilik kontrolü
boolean yeterli = api.hasPuan(playerUUID, 200);
// GUI açma
api.openShopMenu(player);
api.openConvertMenu(player);
// Dönüşüm oranları
int zirveOran = api.getZirveConversionRate(); // 5
int afkOran = api.getAfkConversionRate(); // 60