mirror of
https://github.com/RoyalnetworkTR/simple-launcher.git
synced 2026-09-25 00:59:49 +03:00
Backend (PHP+SQLite): Discord OAuth2 + JWT, coklu hesap (1 Discord = 3-5), tek-kullanimlik join token (/api/join/prepare+verify), custom skin yukleme/sunma, hesap/Discord/HWID ban, admin paneli kartlari; deterministik offline UUID (PHP<->C# paritesi dogrulandi). 25 entegrasyon testi gecti. AthenaCore (Forge 1.12.2): tek client+server mod — join token dogrulama + kick, grace-gate, custom skin uygulama. Sunucu offline-mode kalir (UUID/dunya verisi korunur). Masaustu: WPF -> Avalonia (Windows+Linux), Discord giris/hesap/skin/oyna; WMI/DPAPI yerine cross-platform (machine-id HWID, AES-GCM secret store). Derlenir + calisir. CI: athenacore-mod.yml (JDK8), desktop-release.yml (Win+Linux self-contained). Deploy: deploy.sh (.env uretimi, php-gd, nginx Authorization gecisi) + HANDOFF.md. Android: backend hazir; entegrasyon spec'i ANDROID_INTEGRATION.md.
86 lines
6.0 KiB
XML
86 lines
6.0 KiB
XML
<UserControl x:Class="OfflineMinecraftLauncher.Pages.HomePage"
|
||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||
<Grid Margin="28,20,28,20">
|
||
<Grid.RowDefinitions>
|
||
<RowDefinition Height="*"/>
|
||
<RowDefinition Height="Auto"/>
|
||
</Grid.RowDefinitions>
|
||
|
||
<!-- Kaydırılabilir içerik (taşarsa kaydırılır, hiçbir şey kırpılmaz) -->
|
||
<ScrollViewer Grid.Row="0" VerticalScrollBarVisibility="Auto" Padding="0,0,6,0">
|
||
<StackPanel>
|
||
<!-- Hero / welcome -->
|
||
<Border Style="{StaticResource Card}" Padding="22">
|
||
<Grid>
|
||
<Grid.ColumnDefinitions>
|
||
<ColumnDefinition Width="*"/>
|
||
<ColumnDefinition Width="Auto"/>
|
||
</Grid.ColumnDefinitions>
|
||
<StackPanel Grid.Column="0" VerticalAlignment="Center">
|
||
<TextBlock Text="Tekrar hoş geldin! 👋" FontSize="22" FontWeight="Bold"/>
|
||
<TextBlock Text="Athena Studios sunucusuna bağlanmak için kullanıcı adını gir ve OYNA'ya bas." Foreground="{StaticResource TextMutedBrush}" Margin="0,4,0,14" TextWrapping="Wrap"/>
|
||
<TextBlock Text="KULLANICI ADI" FontSize="11" Foreground="{StaticResource TextMutedBrush}" Margin="2,0,0,6"/>
|
||
<TextBox x:Name="UsernameBox" Style="{StaticResource BrandTextBox}" Width="320" HorizontalAlignment="Left" MaxLength="16" TextChanged="UsernameBox_TextChanged" KeyDown="UsernameBox_KeyDown"/>
|
||
</StackPanel>
|
||
<Border Grid.Column="1" Width="110" Height="170" Background="#22000000" CornerRadius="12" Margin="20,0,0,0">
|
||
<Image x:Name="SkinImage" Stretch="Uniform" Margin="10" RenderOptions.BitmapScalingMode="HighQuality"/>
|
||
</Border>
|
||
</Grid>
|
||
</Border>
|
||
|
||
<!-- Stat cards -->
|
||
<UniformGrid Columns="3" Margin="0,16,0,0">
|
||
<Border Style="{StaticResource Card}" Margin="0,0,8,0">
|
||
<StackPanel>
|
||
<TextBlock Text="SUNUCU DURUMU" FontSize="11" Foreground="{StaticResource TextMutedBrush}"/>
|
||
<StackPanel Orientation="Horizontal" Margin="0,8,0,0">
|
||
<Ellipse x:Name="StatusDot" Width="12" Height="12" Fill="{StaticResource TextMutedBrush}" VerticalAlignment="Center"/>
|
||
<TextBlock x:Name="ServerStatusText" Text="Kontrol ediliyor…" FontSize="16" FontWeight="SemiBold" Margin="8,0,0,0" VerticalAlignment="Center"/>
|
||
</StackPanel>
|
||
<TextBlock x:Name="ServerIpText" Text="" FontSize="11" Foreground="{StaticResource TextMutedBrush}" Margin="0,6,0,0"/>
|
||
</StackPanel>
|
||
</Border>
|
||
<Border Style="{StaticResource Card}" Margin="4,0,4,0">
|
||
<StackPanel>
|
||
<TextBlock Text="OYUNCULAR" FontSize="11" Foreground="{StaticResource TextMutedBrush}"/>
|
||
<TextBlock x:Name="PlayersText" Text="—" FontSize="22" FontWeight="Bold" Margin="0,6,0,0" Foreground="{StaticResource AccentGlowBrush}"/>
|
||
<TextBlock x:Name="PingText" Text="Gecikme: —" FontSize="11" Foreground="{StaticResource TextMutedBrush}" Margin="0,2,0,0"/>
|
||
</StackPanel>
|
||
</Border>
|
||
<Border Style="{StaticResource Card}" Margin="8,0,0,0">
|
||
<StackPanel>
|
||
<TextBlock Text="SÜRÜM" FontSize="11" Foreground="{StaticResource TextMutedBrush}"/>
|
||
<TextBlock x:Name="VersionText" Text="1.12.2" FontSize="22" FontWeight="Bold" Margin="0,6,0,0"/>
|
||
<TextBlock x:Name="LoaderText" Text="Forge" FontSize="11" Foreground="{StaticResource TextMutedBrush}" Margin="0,2,0,0"/>
|
||
</StackPanel>
|
||
</Border>
|
||
</UniformGrid>
|
||
|
||
<!-- News / changelog -->
|
||
<Border Style="{StaticResource Card}" Margin="0,16,0,0">
|
||
<StackPanel>
|
||
<StackPanel Orientation="Horizontal">
|
||
<TextBlock Text="📋 SON GÜNCELLEME" FontSize="11" Foreground="{StaticResource TextMutedBrush}" VerticalAlignment="Center"/>
|
||
<Border Background="#332F81F7" CornerRadius="8" Padding="8,2" Margin="10,0,0,0">
|
||
<TextBlock x:Name="PackVersionText" Text="v0" FontSize="11" Foreground="{StaticResource AccentGlowBrush}" FontWeight="SemiBold"/>
|
||
</Border>
|
||
</StackPanel>
|
||
<TextBlock x:Name="NewsText" Text="Sürüm notları yükleniyor…" Foreground="{StaticResource TextBrush}" TextWrapping="Wrap" Margin="0,10,0,0"/>
|
||
</StackPanel>
|
||
</Border>
|
||
</StackPanel>
|
||
</ScrollViewer>
|
||
|
||
<!-- Pinned: progress + Play -->
|
||
<StackPanel Grid.Row="1" Margin="0,14,0,0">
|
||
<TextBlock x:Name="ProgressStatus" Text="Hazır" Foreground="{StaticResource TextMutedBrush}" FontSize="12" Margin="2,0,0,6"/>
|
||
<ProgressBar x:Name="FileBar" Style="{StaticResource BrandProgress}" Minimum="0" Maximum="100" Value="0" Margin="0,0,0,6"/>
|
||
<ProgressBar x:Name="ByteBar" Style="{StaticResource BrandProgress}" Minimum="0" Maximum="100" Value="0" Height="5"/>
|
||
<Button x:Name="PlayButton" Style="{StaticResource AccentButton}" Height="56" Margin="0,16,0,0" Click="PlayButton_Click">
|
||
<TextBlock Text="▶ OYNA" FontSize="20" FontWeight="Bold"/>
|
||
</Button>
|
||
</StackPanel>
|
||
</Grid>
|
||
</UserControl>
|