mirror of
https://github.com/RoyalnetworkTR/simple-launcher.git
synced 2026-09-25 00:19:50 +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.
111 lines
7.6 KiB
XML
111 lines
7.6 KiB
XML
<Window x:Class="OfflineMinecraftLauncher.MainWindow"
|
||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||
xmlns:shell="clr-namespace:System.Windows.Shell;assembly=PresentationFramework"
|
||
Title="Athena Studios Launcher"
|
||
Height="640" Width="1040" MinHeight="560" MinWidth="900"
|
||
WindowStartupLocation="CenterScreen"
|
||
WindowStyle="None"
|
||
Background="{StaticResource BgBrush}"
|
||
Icon="pack://application:,,,/minecraft.ico"
|
||
Opacity="0">
|
||
|
||
<shell:WindowChrome.WindowChrome>
|
||
<shell:WindowChrome CaptionHeight="44" ResizeBorderThickness="6" CornerRadius="0" GlassFrameThickness="0"/>
|
||
</shell:WindowChrome.WindowChrome>
|
||
|
||
<Border Background="{StaticResource BgBrush}" BorderBrush="{StaticResource BorderBrush}" BorderThickness="1">
|
||
<Grid>
|
||
<Grid.RowDefinitions>
|
||
<RowDefinition Height="44"/>
|
||
<RowDefinition Height="*"/>
|
||
</Grid.RowDefinitions>
|
||
|
||
<!-- ===== Title bar ===== -->
|
||
<Grid Grid.Row="0" Background="#FF0B0E13">
|
||
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" Margin="14,0">
|
||
<Image Source="pack://application:,,,/images/athlogonoback.png" Width="22" Height="22" Margin="0,0,10,0"/>
|
||
<TextBlock Text="ATHENA STUDIOS" FontWeight="Bold" FontSize="13" VerticalAlignment="Center" Foreground="{StaticResource TextBrush}"/>
|
||
<TextBlock Text="LAUNCHER" FontWeight="Bold" FontSize="13" VerticalAlignment="Center" Margin="6,0,0,0" Foreground="{StaticResource AccentGlowBrush}"/>
|
||
</StackPanel>
|
||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" shell:WindowChrome.IsHitTestVisibleInChrome="True">
|
||
<Button x:Name="BtnMinimize" Style="{StaticResource CaptionButton}" Click="BtnMinimize_Click" ToolTip="Küçült">
|
||
<Rectangle Width="11" Height="1" Fill="{Binding Foreground, RelativeSource={RelativeSource AncestorType=Button}}"/>
|
||
</Button>
|
||
<Button x:Name="BtnClose" Style="{StaticResource CloseButton}" Click="BtnClose_Click" ToolTip="Kapat">
|
||
<Path Data="M0,0 L10,10 M0,10 L10,0" Width="10" Height="10" Stretch="None"
|
||
Stroke="{Binding Foreground, RelativeSource={RelativeSource AncestorType=Button}}" StrokeThickness="1.3"/>
|
||
</Button>
|
||
</StackPanel>
|
||
</Grid>
|
||
|
||
<!-- ===== Body ===== -->
|
||
<Grid Grid.Row="1">
|
||
<Grid.ColumnDefinitions>
|
||
<ColumnDefinition Width="224"/>
|
||
<ColumnDefinition Width="*"/>
|
||
</Grid.ColumnDefinitions>
|
||
|
||
<!-- Sidebar -->
|
||
<Border Grid.Column="0" Background="{StaticResource SidebarGradient}" BorderBrush="{StaticResource BorderBrush}" BorderThickness="0,0,1,0">
|
||
<Grid>
|
||
<Grid.RowDefinitions>
|
||
<RowDefinition Height="Auto"/>
|
||
<RowDefinition Height="*"/>
|
||
<RowDefinition Height="Auto"/>
|
||
</Grid.RowDefinitions>
|
||
|
||
<StackPanel Grid.Row="0" Margin="0,22,0,18" HorizontalAlignment="Center">
|
||
<Image Source="pack://application:,,,/images/athlogonoback.png" Width="76" Height="76"/>
|
||
<TextBlock Text="ATHENA STUDIOS" FontWeight="Bold" FontSize="14" HorizontalAlignment="Center" Margin="0,8,0,0"/>
|
||
<TextBlock Text="1.12.2 Forge" FontSize="11" Foreground="{StaticResource TextMutedBrush}" HorizontalAlignment="Center" Margin="0,2,0,0"/>
|
||
</StackPanel>
|
||
|
||
<StackPanel Grid.Row="1" Margin="0,8,0,0">
|
||
<RadioButton x:Name="NavHome" Style="{StaticResource NavButton}" Content="🏠 Ana Sayfa" IsChecked="True" Checked="Nav_Checked" Tag="home"/>
|
||
<RadioButton x:Name="NavMods" Style="{StaticResource NavButton}" Content="🧩 Modlar" Checked="Nav_Checked" Tag="mods"/>
|
||
<RadioButton x:Name="NavNews" Style="{StaticResource NavButton}" Content="📰 Haberler" Checked="Nav_Checked" Tag="news"/>
|
||
<RadioButton x:Name="NavSettings" Style="{StaticResource NavButton}" Content="⚙️ Ayarlar" Checked="Nav_Checked" Tag="settings"/>
|
||
</StackPanel>
|
||
|
||
<StackPanel Grid.Row="2" Margin="16,0,16,16">
|
||
<Border Height="1" Background="{StaticResource BorderBrush}" Margin="0,0,0,12"/>
|
||
<Grid Margin="0,0,0,12">
|
||
<Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions>
|
||
<Button Grid.Column="0" Content="💬 Discord" Style="{StaticResource GhostButton}" FontSize="12" Padding="6,7" Margin="0,0,4,0" Click="Discord_Click"/>
|
||
<Button Grid.Column="1" Content="🌐 Web" Style="{StaticResource GhostButton}" FontSize="12" Padding="6,7" Margin="4,0,0,0" Click="Website_Click"/>
|
||
</Grid>
|
||
<TextBlock x:Name="SidebarStatus" Text="Sunucu durumu yükleniyor…" FontSize="11" Foreground="{StaticResource TextMutedBrush}" TextWrapping="Wrap"/>
|
||
<TextBlock x:Name="SidebarVersion" Text="Launcher v2.0.0" FontSize="10" Foreground="{StaticResource TextMutedBrush}" Margin="0,8,0,0"/>
|
||
</StackPanel>
|
||
</Grid>
|
||
</Border>
|
||
|
||
<!-- Page host -->
|
||
<Grid Grid.Column="1" Background="{StaticResource HeroGradient}">
|
||
<ContentControl x:Name="PageHost"/>
|
||
|
||
<!-- Loading overlay -->
|
||
<Grid x:Name="LoadingOverlay" Background="#CC0E1116" Visibility="Visible">
|
||
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
|
||
<Image Source="pack://application:,,,/images/logogif.gif" Width="96" Height="96"/>
|
||
<TextBlock Text="Athena Studios" FontSize="20" FontWeight="Bold" HorizontalAlignment="Center" Margin="0,12,0,0"/>
|
||
<TextBlock x:Name="LoadingText" Text="Başlatılıyor…" Foreground="{StaticResource TextMutedBrush}" HorizontalAlignment="Center" Margin="0,6,0,0"/>
|
||
</StackPanel>
|
||
</Grid>
|
||
|
||
<!-- Ban overlay -->
|
||
<Grid x:Name="BanOverlay" Background="#F20E1116" Visibility="Collapsed">
|
||
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" MaxWidth="440">
|
||
<TextBlock Text="⛔" FontSize="56" HorizontalAlignment="Center"/>
|
||
<TextBlock Text="Erişim Engellendi" FontSize="24" FontWeight="Bold" Foreground="{StaticResource DangerBrush}" HorizontalAlignment="Center" Margin="0,10,0,0"/>
|
||
<TextBlock x:Name="BanReason" Text="" Foreground="{StaticResource TextBrush}" TextAlignment="Center" TextWrapping="Wrap" Margin="0,12,0,0"/>
|
||
<Button Content="Kapat" Style="{StaticResource GhostButton}" Width="120" Margin="0,22,0,0" Click="BtnClose_Click"/>
|
||
</StackPanel>
|
||
</Grid>
|
||
</Grid>
|
||
</Grid>
|
||
</Grid>
|
||
</Border>
|
||
</Window>
|