Files
Barış Keser 83be058d23 feat: Athena v2 — Discord auth, AthenaCore mod, cross-platform launcher, CI
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.
2026-06-13 23:45:21 +03:00

111 lines
7.6 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<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>