MİNECRAFT SUNUCUNUZ İÇİN ÖZEL BİR MİNECRAFT LAUNCHERI TASARLAYIN
Minecraft Launcher Part 3
Eğer siz de Minecraft hayranıysanız ve özelleştirilmiş bir launcher’ın nasıl yapılacağını merak ediyorsanız, doğru yerdesiniz! Bu yazıda size, C# dilini kullanarak WinForm üzerinde bir Minecraft Launcher uygulaması nasıl yapılabileceğini göstereceğiz.
Uygulama, internet bağlantısını kontrol ederek yüklenme ekranı gösteriyor. Ardından kullanıcının Minecraft hesabı ile giriş yapabileceği bir login ekranı açılıyor. Kullanıcı girişi başarılı olursa, Main formuna geçiş yapılıyor ve Minecraft istemcisi başlatılıyor.
Bu uygulama, CmlLib.Core ve CmlLib.Core.Auth kütüphaneleri kullanılarak oluşturuluyor. Bu kütüphaneler, Minecraft hesap bilgilerini tutmamıza ve Minecraft istemcisini başlatmamıza olanak sağlıyor.
Artık kendi özelleştirilmiş Minecraft Launcher’ınızı yapmak için gereken temel bilgilere sahipsiniz. Hadi başlayalım!
SplashScreen.cs C#
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net.NetworkInformation;
using System.Text;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
using System.Windows.Forms;
namespace RL_RoseLone
{
public partial class splashscreen : Form
{
public splashscreen()
{
InitializeComponent();
}
private int counter = 0;
private void splashscreen_Load(object sender, EventArgs e)
{
Timer t = new Timer();
t.Interval = 1000;
t.Tick += new EventHandler(CheckInternet);
t.Start();
}
private void CheckInternet(object sender, EventArgs e)
{
// İnternet bağlantısını kontrol edin
if (NetworkInterface.GetIsNetworkAvailable())
{
// İnternet bağlantısı varsa, loadingtxt'ye Bağlantı kuruldu yazın
loadingtxt.Text = "Bağlantı kuruldu";
// Timer'ı durdurun
(sender as Timer).Stop();
// Yeni Timer oluşturun ve her 2000 milisaniye (2 saniye) çalışması için ayarlayın
Timer t = new Timer();
t.Interval = 100;
t.Tick += new EventHandler(UpdateUI);
t.Start();
}
else
{
// İnternet bağlantısı yoksa, loadingtxt'ye Bağlantı kurulamadı yazın
loadingtxt.Text = "Bağlantı kurulamadı. Yeniden deneniyor...";
}
}
private void UpdateUI(object sender, EventArgs e)
{
// Loadingbarı 10 arttırın
loadingBar.Value = Math.Min(loadingBar.Value + 10, 100);
// Her 2 saniye, loadingtxt'nin metnini değiştirin
counter++;
if (counter == 2 || counter == 4 || counter == 6 || counter == 8)
{
switch (counter)
{
case 2:
loadingtxt.Text = "Kontrol Ediliyor...";
break;
case 4:
loadingtxt.Text = "Kontrol Edildi";
break;
case 6:
loadingtxt.Text = "Kontrol Başarılı";
break;
case 8:
loadingtxt.Text = "Başlatılıyor...";
break;
}
}
// Loadingbar 100 olduğunda Login formuna geçiş yapın
if (loadingBar.Value == 100)
{
Login loginForm = new Login();
loginForm.Show();
(sender as Timer).Stop();
Hide();
}
}
}
}
Bu C# kodları, bir Minecraft launcher’ı yapmak için bir splash screen formunu kontrol etmek ve yüklemek için kullanılır.
splashscreen
sınıfı, Winform’da bir splash screen formu oluşturur ve form yüklendiğinde CheckInternet
metodunu çalıştırır. Bu metod, kullanıcının internet bağlantısını kontrol eder ve bağlantı varsa loadingtxt
adlı bir metin kutusunda “Bağlantı kuruldu” yazısını gösterir.
Ardından, yeni bir Timer
nesnesi oluşturulur ve 100 milisaniye boyunca çalışacak şekilde ayarlanır. Bu Timer
‘ın UpdateUI
metodunu çağırarak loadingBar
adlı bir ilerleme çubuğunu güncelleyeceği belirtilir.
UpdateUI
metodunda, ilerleme çubuğunun değeri her 2 saniyede bir artırılır ve loadingtxt
metin kutusu bu süre zarfında farklı yazılarla güncellenir. Son olarak, ilerleme çubuğu 100 olduğunda, bir Login
formu oluşturulur, bu form gösterilir, splash screen formu gizlenir ve Timer
durdurulur.
Login.cs C#
using CmlLib.Core.Auth;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace RL_RoseLone
{
public partial class Login : Form
{
public Login()
{
InitializeComponent();
Init_Data();
}
private void CloseBox_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void UpdateSession(MSession session)
{
var mainForm = new Main(session);
mainForm.FormClosed += (s, e) => this.Close();
mainForm.Show();
this.Hide();
}
private void TimerEventProcessor(object sender, EventArgs e)
{
UpdateSession(MSession.GetOfflineSession(txtUsername.Text));
Timer1.Stop();
}
private void Init_Data()
{
if (Properties.Settings.Default.Username != string.Empty)
{
if (Properties.Settings.Default.RememberMe == true)
{
txtUsername.Text = Properties.Settings.Default.Username;
Remember.Checked = true;
}
else
{
txtUsername.Text = Properties.Settings.Default.Username;
}
}
}
private void Save_Data()
{
if (Remember.Checked)
{
Properties.Settings.Default.Username = txtUsername.Text.Trim();
Properties.Settings.Default.RememberMe = true;
Properties.Settings.Default.Save();
}
else
{
Properties.Settings.Default.Username = "";
Properties.Settings.Default.RememberMe = false;
Properties.Settings.Default.Save();
}
}
private void txtUsername_TextChanged(object sender, EventArgs e)
{
girisbtn.Enabled = txtUsername.Text.Length >= 2;
}
private void girisbtn_Click(object sender, EventArgs e)
{
if (txtUsername.Text == "")
{
hatatxt.Text = "Kullanıcı adı boş olamaz!";
}
else
{
txtUsername.Visible = false;
guna2HtmlLabel2.Visible = false;
Remember.Visible = false;
girisbtn.Visible = false;
hatatxt.Visible = false;
Timer1.Tick += new EventHandler(TimerEventProcessor);
Timer1.Start();
loadingbar.Visible = true;
Save_Data();
}
}
}
}
Bu kod bloğu, C# ile Winform kullanarak Minecraft Launcher uygulaması geliştiren bir proje için Login formunu içermektedir. Kod, kullanıcının Minecraft hesap bilgilerini girip giriş yapmasına olanak tanır.
using CmlLib.Core.Auth
: CmlLib kütüphanesindeki MSession sınıfına erişmek için kullanılan bir import.
public Login()
: Login formunun yapıcı fonksiyonudur. InitializeComponent () ve Init_Data() fonksiyonlarını çağırır.
private void CloseBox_Click(object sender, EventArgs e)
: Kapatma butonuna tıklanıldığında formun kapatılmasını sağlar.
private void UpdateSession(MSession session)
: Minecraft oturumunu güncelleyen bir fonksiyondur. Ana formu oluşturur, bu form kapatıldığında Login formunu kapatır ve Ana formu gösterir.
private void TimerEventProcessor(object sender, EventArgs e)
: Timer1’in Tick olayını işleyen bir fonksiyondur. GetOfflineSession () fonksiyonu, çevrimdışı bir Minecraft oturumu döndürür ve UpdateSession () fonksiyonunu çağırarak Ana formu gösterir.
private void Init_Data()
: Kullanıcının daha önce hatırladığı bir kullanıcı adı varsa, hatırlama seçeneği etkinleştirilmişse otomatik olarak doldurulur.
private void Save_Data()
: Kullanıcının hatırlama seçeneğini etkinleştirmesi durumunda, kullanıcı adını ve hatırlama seçeneğini kaydeder.
private void txtUsername_TextChanged(object sender, EventArgs e)
: Kullanıcının kullanıcı adı kutusuna bir şeyler girdiğinde, giriş butonunun etkinleştirilmesini sağlar.
private void girisbtn_Click(object sender, EventArgs e)
: Kullanıcının “Giriş” butonuna tıklaması durumunda çalışan bir fonksiyondur. Kullanıcı adının boş olup olmadığını kontrol eder. Eğer kullanıcı adı kutusu boşsa, bir hata mesajı görüntülenir. Aksi takdirde, kullanıcı adı kutusu, hatırlama seçeneği kutusu, giriş butonu ve hata mesajı kutusu gizlenir. Timer1 başlatılır ve kaydetme fonksiyonu çağrılır.
Main.cs
using CmlLib.Core.Auth;
using CmlLib.Core;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using CmlLib.Core.Version;
using Guna.UI2.WinForms;
namespace RL_RoseLone
{
public partial class Main : Form
{
public Main(MSession session)
{
this.session = session;
InitializeComponent();
}
CMLauncher launcher;
readonly MSession session;
private async void Main_Shown(object sender, EventArgs e)
{
var defaultPath = new MinecraftPath(MinecraftPath.GetOSDefaultPath());
await initializeLauncher(defaultPath);
}
private async Task initializeLauncher(MinecraftPath path)
{
lbUsername.Text = session.Username;
launcher = new CMLauncher(path);
}
private void Main_Load(object sender, EventArgs e)
{
path();
var request = WebRequest.Create("https://minotar.net/helm/" + session.Username + "/100.png");
using (var response = request.GetResponse())
using (var stream = response.GetResponseStream())
{
userskinpicture.Image = Bitmap.FromStream(stream);
}
}
private void path()
{
MinecraftPath path = new MinecraftPath();
var launcher = new CMLauncher(path);
foreach (var item in launcher.GetAllVersions())
{
if (item.MType != MVersionType.Snapshot && item.MType != MVersionType.OldAlpha && item.MType != MVersionType.OldBeta)
{
versionBox.Items.Add(item.Name);
versionBox.SelectedIndex = 0;
}
}
}
private void logoutBtn_Click(object sender, EventArgs e)
{
var f = new Login();
f.Show();
Hide();
}
private void showSnapshots_CheckedChanged(object sender, EventArgs e)
{
if (showSnapshots.Checked)
{
versionBox.Items.Clear();
foreach (var item in launcher.GetAllVersions())
{
versionBox.Items.Add(item.Name);
versionBox.SelectedIndex = 0;
}
}
else
{
versionBox.Items.Clear();
path();
}
}
}
}
Bu kodlar C# Winform uygulaması içerisinde Minecraft oyununun sürümünü seçme, kullanıcı adını ve profil resmini görüntüleme, oturumu kapatma gibi işlemleri yapmak için kullanılır.
Main
sınıfı Minecraft oyununun ana formunu temsil eder. MSession
sınıfı kullanıcının Minecraft hesabıyla ilgili bilgileri (kullanıcı adı, şifre vb.) tutar. CMLauncher
sınıfı Minecraft oyununu başlatmak için gerekli olan işlemleri yürütür.
Main_Shown
metodu form yüklendiğinde çalışır ve initializeLauncher
metodunu çağırarak CMLauncher
sınıfını başlatır. initializeLauncher
metodu MinecraftPath
sınıfı ile Minecraft oyununun kurulu olduğu dizini belirler ve CMLauncher
sınıfını bu dizinde başlatır.
Main_Load
metodu form yüklendiğinde çalışır ve kullanıcının Minecraft hesabına ait profil resmini görüntüler. WebRequest
sınıfı ile minotar.net
sitesinden kullanıcının profil resmi alınır ve userskinpicture
adlı Guna.UI2.WinForms
kütüphanesi tarafından sunulan PictureBox
nesnesine yüklenir.
path
metodu, CMLauncher
sınıfını kullanarak kurulu olan Minecraft sürümlerini versionBox
adlı ComboBox
nesnesine yükler ve showSnapshots
adlı CheckBox
nesnesi seçili olduğunda snapshot sürümleri de dahil edilir.
logoutBtn_Click
metodu, Login
formunu açarak kullanıcının oturumunu kapatır.
Bu kodlar, Winform uygulaması geliştirmeye yeni başlayanların veya C# programlamayla yeni tanışanların Minecraft launcher uygulaması geliştirme konusunda fikir sahibi olmalarına yardımcı olabilir.
Bilgilendirme C# Minecraft Launcher Eğitim Kodlama Launcher Minecraft Launcher Nasıl Yapılır WinForm Minecraft Launcher Yeni