Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

ozaiithejava/MinigamesLib-Framework

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

3 Commits

Repository files navigation

MinigamesLib Framework

MinigamesLib Banner Minecraft Version Built With

MinigamesLib, Minecraft Spigot/Bukkit sunucuları için modern, modüler ve son derece güçlü bir mini oyun geliştirme kütüphanesidir. Bu framework, boilerplate (tekrar eden) kodları ortadan kaldırır ve tamamen oyun mantığına odaklanmanızı sağlar.


🚀 Özellikler

  • 🔥 Annotation-Driven Architecture: Manager, Listener ve Komutlarınızı sadece birer satır anotasyon ekleyerek otomatik olarak kaydedin.
  • 🎮 Tam Donanımlı Oyun Yaşam Döngüsü: LOBBY, STARTING, PLAYING, RESULTS gibi hazır fazlar ve state yönetimi.
  • 💰 Entegre Ekonomi & Ödül Sistemi: Hazır EconomyAPI ve RewardManager.
  • ✨ Dynamic Hologram API: Tek satırla 3D hologram oluşturma ve silme yeteneği.
  • 🗣️ Çoklu Dil Desteği (Localization): Türkçe/İngilizce varsayılan, dinamik genişletilebilir dil sistemi.
  • 📊 Gelişmiş Logger & Analytics: Renkli konsol çıktıları, section loglama ve dosya kaydı.

⚙️ Kurulum

1. Projenize Dahil Etme (Maven)

Öncelikle kütüphaneyi yerel maven deponuza kurun (mvn clean install). Ardından projenizin pom.xml dosyasına bağımlılık olarak ekleyin. Kütüphanenin hosting plugin içinde çalışabilmesi için maven-shade-plugin ile paketinize gömmeniz (shade) tavsiye edilir:

<dependency>
 <groupId>org.ozaii</groupId>
 <artifactId>MinigamesLib</artifactId>
 <version>1.0-SNAPSHOT</version>
 <scope>compile</scope>
</dependency>

2. Framework'ü Başlatma (onEnable)

Bu proje artık tek başına bir eklenti (plugin.yml içermez) değildir; ana eklentinizin bir parçası olarak çalışır. Eklentinizin onEnable ve onDisable metotlarında kütüphaneyi başlatmanız ve kapatmanız gerekir:

package com.example.myminigame;
import org.bukkit.plugin.java.JavaPlugin;
import org.ozaii.minigameslib.MinigamesLib;
public class MyMainClass extends JavaPlugin {
 @Override
 public void onEnable() {
 // Framework'ü başlatır, otomatik olarak tüm Manager, Event ve Komutlarınızı tarar.
 MinigamesLib.initialize(this);
 
 getLogger().info("Mini oyun eklentisi başarıyla yüklendi!");
 }
 @Override
 public void onDisable() {
 // Framework'ü temiz şekilde kapatır
 MinigamesLib.shutdown();
 }
}

Artık her şey hazır! MinigamesLib eklentinizin klasörü içerisinde kendi logs ve dil dosyalarını yönetecektir, ekstra bir klasör oluşturmaz.


🛠️ Mimarî Kullanım Kılavuzu

MinigamesLib, Reflection (Yansıma) teknolojisini kullanarak eklentinizi tarar ve bileşenleri otomatik ayağa kaldırır. Manuel olarak getServer().getPluginManager().registerEvents(...) veya getCommand("x").setExecutor(...) yazmanıza gerek yoktur.

🟢 1. Manager Oluşturma (@Manager)

Arka planda çalışacak, veri depolayacak veya sistemi yönetecek sınıflarınızı @Manager ile işaretleyin.

package com.example.myminigame.managers;
import org.ozaii.minigameslib.annotations.Manager;
import org.ozaii.minigameslib.loaders.BaseManager;
import org.ozaii.minigameslib.logging.LoggerManager;
@Manager // <-- Bu anotasyon sayesinde otomatik algılanır ve YÜKLENİR.
public class ArenaManager implements BaseManager {
 @Override
 public void onEnable() {
 LoggerManager.info("Arenalar dosyadan yükleniyor...");
 // Yükleme mantığınız
 }
 @Override
 public void onDisable() {
 LoggerManager.info("Tüm arenalar kaydedildi.");
 // Kapatma mantığınız
 }
}

🔵 2. Dinamik Komut Sistemi (@SubCommand)

MinigamesLib, komutları gruplama ve kök komut (root command) oluşturma işini inanılmaz basitleştirir. plugin.yml dosyasına hiçbir şey eklemenize gerek yoktur. Kütüphane, komutları Bukkit'e direkt olarak enjekte eder.

Tek Adım: Alt komutu @SubCommand ile tanımlayın

package com.example.myminigame.commands;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.ozaii.minigameslib.annotations.SubCommand;
import org.ozaii.minigameslib.commands.manager.BaseSubCommand;
// "parent" kısmına yazdığınız isim otomatik olarak root komut olarak sunucuya kaydedilir.
// Örneğin aşağıdaki komut "oyun baslat" şeklinde çalışacaktır.
@SubCommand(parent = "oyun", name = "baslat", permission = "myminigame.admin", description = "Oyunu Başlatır")
public class StartCommand extends BaseSubCommand {
 @Override
 public void execute(CommandSender sender, String[] args) {
 Player player = (Player) sender;
 player.sendMessage("§aOyun başlatılıyor...");
 
 // Logic buraya
 }
}

Eğer /oyun yazılırsa otomatik bir Yardım Menüsü oluşturulur. Birden fazla farklı parent kullansanız dahi sistem hepsini bağımsız root komutlar olarak sisteme kaydeder.

🟣 3. Event Listener'lar (@MiniGameListener)

Event sınıflarını kaydetmek için artık ana class'da kalabalık yapmaya son! Sadece annotasyonu ekleyin ve Listener implements edin.

package com.example.myminigame.listeners;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.ozaii.minigameslib.annotations.MiniGameListener;
@MiniGameListener // <-- Otomatik kayıt!
public class ConnectionListener implements Listener {
 @EventHandler
 public void onJoin(PlayerJoinEvent event) {
 event.setJoinMessage("§eHoş geldin " + event.getPlayer().getName());
 }
}

🏆 Minigame Yapımı (Core Framework)

Bir mini oyun (örneğin SurvivalGames, BedWars vb.) oluşturmak için AbstractMinigame sınıfını genişletmelisiniz.

1. Oyun Sınıfını Tasarlamak

public class SurvivalGames extends AbstractMinigame {
 public SurvivalGames(String gameId, GameConfig config) {
 super(gameId, config);
 }
 @Override
 public void onGameInitialize() {
 // Sandıkları doldur, map sıfırla
 LoggerManager.info("[SG] Başlatılmaya hazırlanıyor...");
 }
 @Override
 public void onGameStart() {
 // Pvp aç, oyuncuları serbest bırak
 getBukkitPlayers().forEach(p -> p.sendMessage("§c§lBAŞLADI! KİLİTLER AÇILDI!"));
 }
 @Override
 public void onGameTick() {
 // Saniyede bir kez çalışır (Opsiyonel iç döngüden çağırırsanız)
 // Daralma mantığı vb.
 }
 @Override
 public void onGameEnd() {
 // Kazananı duyur
 LoggerManager.info("[SG] Oyun sona erdi.");
 }
 @Override
 public void onGameShutdown() {
 // Cleanup, hologramları silme
 cleanupHolograms();
 }
 @Override
 protected void applyReward(Player player, Reward reward) {
 // Özel ödül lojiği gerekirse override et
 }
}

2. Bir Oyunu Yönetmek (API Kullanımı)

Kullanıma hazır statik MinigameAPI ile oyun durumunu manipüle edebilirsiniz.

// Oyuncuyu bir oyuna kat
MinigameAPI.joinGame(player, "arena_1");
// Oyuncunun mevcut oyununu getir
AbstractMinigame game = MinigameAPI.getPlayerGame(player);
// Oyun durumu kontrolü
if (game.getState() == GameState.RUNNING) {
 // İşlemler
}

🛠️ Dahili API'ler

💰 Ekonomi API (EconomyAPI)

Bağımsız bir ekonomi veritabanı tutar. Projelerinizde token, coin, puan yönetmek için idealdir.

// Para Ekle
EconomyAPI.giveMoney(player, 500.0);
// Para Al
EconomyAPI.takeMoney(player, 100.0);
// Bakiye Çek
double bakiye = EconomyAPI.getBalance(player);

✨ Hologram API (HologramAPI)

Hiçbir ekstra eklenti (HolographicDisplays vb.) gerektirmeden tamamen paketsel (packet-based) veya Entity tabanlı (kütüphane implementasyonuna göre) hologram oluşturur.

// Hologram Yarat (Minigame context'i içinde otomatik tracking yapılır)
HologramAPI.createHologram("liderlik_tablosu", loc, Arrays.asList(
 "§6§lLİDERLİK TABLOSU",
 "§e1. Oyuncu - 50 Galibiyet",
 "§7www.sunucun.com"
));
// Satır Güncelle
HologramAPI.updateLine("liderlik_tablosu", 1, "§e1. " + name + " - " + wins);
// Sil
HologramAPI.removeHologram("liderlik_tablosu");

📝 Logger Manager (LoggerManager)

Okunabilirliği ve hata ayıklamayı en üst seviyeye çıkaran gelişmiş log sistemi.

LoggerManager.info("Veriler yüklendi.");
LoggerManager.warn("Dosya bulunamadı, yenisi oluşturuluyor!");
LoggerManager.error("Veritabanı hatası!", exception);
// Büyük başlık atmak için
LoggerManager.logSection("OYUN DÖNGÜSÜ BAŞLADI");
LoggerManager.info("Mod: Solo");
LoggerManager.info("Harita: Jungle");
LoggerManager.logSectionEnd();

📚 En İyi Uygulamalar (Best Practices)

  1. Dosya Yapısı: Kodlarınızın düzenli olması için paketleri commands, listeners, managers ve minigames şeklinde ayırın. Framework bu dizinleri otomatik tarayacaktır.
  2. GameConfig Kullanımı: Statik limitler belirlemek yerine GameConfig sınıfını kullanarak minimum oyuncu sayısı, maksimum oyuncu sayısı ve harita adını dinamik yapın.
  3. Team Kullanımı: AbstractMinigame sınıfının içinde hazır Team (Takım) yapısı vardır. createTeam("Kırmızı", "RED") diyerek anında takım savaşlı oyunlar yapabilirsiniz.
  4. Clean Up: Oyun bittiğinde veya iptal edildiğinde cleanupHolograms() metodunu çağırmayı veya Listener'ları deregister etmeyi unutmayın.

💡 Bu framework @ozaii tarafından Minecraft oyun geliştirme deneyimini profesyonelleştirmek ve hızlandırmak amacıyla oluşturulmuştur.

About

Minecraft Spigot/Bukkit sunucuları için modern, modüler ve son derece güçlü bir mini oyun geliştirme kütüphanesidir. Bu framework, boilerplate (tekrar eden) kodları ortadan kaldırır ve tamamen oyun mantığına odaklanmanızı sağlar.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

Languages

AltStyle によって変換されたページ (->オリジナル) /