${p.name}
ID: ${p.id.substring(0, 8)}...
@@ -106,13 +114,6 @@ function updateCurrentProfileUI(profile) {
}
}
-window.toggleProfileDropdown = () => {
- const dropdown = document.getElementById('profileDropdown');
- if (dropdown) {
- dropdown.classList.toggle('show');
- }
-};
-
window.openProfileManager = () => {
const modal = document.getElementById('profileManagerModal');
if (modal) {
@@ -146,7 +147,7 @@ window.createNewProfile = async () => {
};
window.deleteProfile = async (id) => {
- if (!confirm('Are you sure you want to delete this profile? parameters and mods configuration will be lost.')) return;
+ if (!confirm('Are you sure you want to delete this configuration? Mod settings will be lost.')) return;
try {
await window.electronAPI.profile.delete(id);
@@ -160,7 +161,7 @@ window.deleteProfile = async (id) => {
window.switchProfile = async (id) => {
try {
if (window.LauncherUI) window.LauncherUI.showProgress();
- const switchingMsg = window.i18n ? window.i18n.t('progress.switchingProfile') : 'Switching Profile...';
+ const switchingMsg = window.i18n ? window.i18n.t('progress.switchingProfile') : 'Switching configuration...';
if (window.LauncherUI) window.LauncherUI.updateProgress({ message: switchingMsg });
await window.electronAPI.profile.activate(id);
@@ -179,7 +180,7 @@ window.switchProfile = async (id) => {
if (dropdown) dropdown.classList.remove('show');
if (window.LauncherUI) {
- const switchedMsg = window.i18n ? window.i18n.t('progress.profileSwitched') : 'Profile Switched!';
+ const switchedMsg = window.i18n ? window.i18n.t('progress.profileSwitched') : 'Configuration switched!';
window.LauncherUI.updateProgress({ message: switchedMsg });
setTimeout(() => window.LauncherUI.hideProgress(), 1000);
}
@@ -676,6 +677,121 @@ async function loadCustomJavaPath() {
}
}
+// ==========================================
+// IDENTITY SWITCHER
+// ==========================================
+
+function escapeHtml(text) {
+ const div = document.createElement('div');
+ div.textContent = text;
+ return div.innerHTML;
+}
+
+async function loadIdentities() {
+ try {
+ if (!window.electronAPI) return;
+
+ const nameEl = document.getElementById('currentIdentityName');
+
+ // Load current username
+ let currentUsername = 'Player';
+ if (window.electronAPI.loadUsername) {
+ const name = await window.electronAPI.loadUsername();
+ if (name) currentUsername = name;
+ }
+ if (nameEl) nameEl.textContent = currentUsername;
+
+ // Load all identities for dropdown
+ const list = document.getElementById('identityList');
+ if (!list || !window.electronAPI.getAllUuidMappings) return;
+
+ const mappings = await window.electronAPI.getAllUuidMappings();
+ renderIdentityList(mappings, currentUsername);
+ } catch (error) {
+ console.error('Failed to load identities:', error);
+ }
+}
+
+function renderIdentityList(mappings, currentUsername) {
+ const list = document.getElementById('identityList');
+ if (!list) return;
+
+ if (!mappings || mappings.length === 0) {
+ list.innerHTML = '
No identities
';
+ return;
+ }
+
+ list.innerHTML = mappings.map(m => {
+ const safe = escapeHtml(m.username);
+ return `
+
+ ${safe}
+ ${m.username === currentUsername ? '' : ''}
+
+ `;
+ }).join('');
+}
+
+window.toggleIdentityDropdown = () => {
+ const dropdown = document.getElementById('identityDropdown');
+ if (dropdown) {
+ dropdown.classList.toggle('show');
+ // Close profile dropdown
+ const profileDropdown = document.getElementById('profileDropdown');
+ if (profileDropdown) profileDropdown.classList.remove('show');
+ }
+};
+
+window.openIdentityManager = () => {
+ // Close dropdown
+ const dropdown = document.getElementById('identityDropdown');
+ if (dropdown) dropdown.classList.remove('show');
+ // Open UUID modal from settings
+ if (window.openUuidModal) {
+ window.openUuidModal();
+ }
+};
+
+window.switchIdentity = async (username) => {
+ try {
+ if (!window.electronAPI || !window.electronAPI.saveUsername) return;
+
+ const result = await window.electronAPI.saveUsername(username);
+ if (result && result.success === false) {
+ throw new Error(result.error || 'Failed to switch identity');
+ }
+
+ // Refresh identity dropdown
+ await loadIdentities();
+
+ // Close dropdown
+ const dropdown = document.getElementById('identityDropdown');
+ if (dropdown) dropdown.classList.remove('show');
+
+ // Update settings page username field and UUID display
+ const settingsInput = document.getElementById('settingsPlayerName');
+ if (settingsInput) settingsInput.value = username;
+ if (window.loadCurrentUuid) window.loadCurrentUuid();
+
+ } catch (error) {
+ console.error('Failed to switch identity:', error);
+ }
+};
+
+// Make loadIdentities available globally for settings.js to call
+window.loadIdentities = loadIdentities;
+
+window.toggleProfileDropdown = () => {
+ const dropdown = document.getElementById('profileDropdown');
+ if (dropdown) {
+ dropdown.classList.toggle('show');
+ // Close identity dropdown
+ const identityDropdown = document.getElementById('identityDropdown');
+ if (identityDropdown) identityDropdown.classList.remove('show');
+ }
+};
+
window.launch = launch;
window.uninstallGame = uninstallGame;
window.repairGame = repairGame;
diff --git a/GUI/js/settings.js b/GUI/js/settings.js
index cada7f0..d22370a 100644
--- a/GUI/js/settings.js
+++ b/GUI/js/settings.js
@@ -18,10 +18,15 @@ let regenerateUuidBtn;
let manageUuidsBtn;
let uuidModal;
let uuidModalClose;
-let modalCurrentUuid;
-let modalCopyUuidBtn;
-let modalRegenerateUuidBtn;
-let generateNewUuidBtn;
+let addIdentityBtn;
+let uuidAddForm;
+let addIdentityUsername;
+let addIdentityUuid;
+let addIdentityRegenerateBtn;
+let addIdentityConfirmBtn;
+let addIdentityCancelBtn;
+let uuidAdvancedToggle;
+let uuidAdvancedContent;
let uuidList;
let customUuidInput;
let setCustomUuidBtn;
@@ -180,10 +185,15 @@ function setupSettingsElements() {
manageUuidsBtn = document.getElementById('manageUuidsBtn');
uuidModal = document.getElementById('uuidModal');
uuidModalClose = document.getElementById('uuidModalClose');
- modalCurrentUuid = document.getElementById('modalCurrentUuid');
- modalCopyUuidBtn = document.getElementById('modalCopyUuidBtn');
- modalRegenerateUuidBtn = document.getElementById('modalRegenerateUuidBtn');
- generateNewUuidBtn = document.getElementById('generateNewUuidBtn');
+ addIdentityBtn = document.getElementById('addIdentityBtn');
+ uuidAddForm = document.getElementById('uuidAddForm');
+ addIdentityUsername = document.getElementById('addIdentityUsername');
+ addIdentityUuid = document.getElementById('addIdentityUuid');
+ addIdentityRegenerateBtn = document.getElementById('addIdentityRegenerateBtn');
+ addIdentityConfirmBtn = document.getElementById('addIdentityConfirmBtn');
+ addIdentityCancelBtn = document.getElementById('addIdentityCancelBtn');
+ uuidAdvancedToggle = document.getElementById('uuidAdvancedToggle');
+ uuidAdvancedContent = document.getElementById('uuidAdvancedContent');
uuidList = document.getElementById('uuidList');
customUuidInput = document.getElementById('customUuidInput');
setCustomUuidBtn = document.getElementById('setCustomUuidBtn');
@@ -230,16 +240,24 @@ function setupSettingsElements() {
uuidModalClose.addEventListener('click', closeUuidModal);
}
- if (modalCopyUuidBtn) {
- modalCopyUuidBtn.addEventListener('click', copyCurrentUuid);
+ if (addIdentityBtn) {
+ addIdentityBtn.addEventListener('click', showAddIdentityForm);
}
- if (modalRegenerateUuidBtn) {
- modalRegenerateUuidBtn.addEventListener('click', regenerateCurrentUuid);
+ if (addIdentityRegenerateBtn) {
+ addIdentityRegenerateBtn.addEventListener('click', regenerateAddIdentityUuid);
}
- if (generateNewUuidBtn) {
- generateNewUuidBtn.addEventListener('click', generateNewUuid);
+ if (addIdentityConfirmBtn) {
+ addIdentityConfirmBtn.addEventListener('click', confirmAddIdentity);
+ }
+
+ if (addIdentityCancelBtn) {
+ addIdentityCancelBtn.addEventListener('click', hideAddIdentityForm);
+ }
+
+ if (uuidAdvancedToggle) {
+ uuidAdvancedToggle.addEventListener('click', toggleAdvancedSection);
}
if (setCustomUuidBtn) {
@@ -467,6 +485,9 @@ async function savePlayerName() {
// Also refresh the UUID list to update which entry is marked as current
await loadAllUuids();
+ // Refresh header identity dropdown
+ if (window.loadIdentities) window.loadIdentities();
+
} catch (error) {
console.error('Error saving player name:', error);
const errorMsg = window.i18n ? window.i18n.t('notifications.playerNameSaveFailed') : 'Failed to save player name';
@@ -630,7 +651,6 @@ async function loadCurrentUuid() {
const uuid = await window.electronAPI.getCurrentUuid();
if (uuid) {
if (currentUuidDisplay) currentUuidDisplay.value = uuid;
- if (modalCurrentUuid) modalCurrentUuid.value = uuid;
}
}
} catch (error) {
@@ -640,7 +660,7 @@ async function loadCurrentUuid() {
async function copyCurrentUuid() {
try {
- const uuid = currentUuidDisplay ? currentUuidDisplay.value : modalCurrentUuid?.value;
+ const uuid = currentUuidDisplay ? currentUuidDisplay.value : null;
if (uuid && navigator.clipboard) {
await navigator.clipboard.writeText(uuid);
const msg = window.i18n ? window.i18n.t('notifications.uuidCopied') : 'UUID copied to clipboard!';
@@ -688,13 +708,13 @@ async function performRegenerateUuid() {
const result = await window.electronAPI.resetCurrentUserUuid();
if (result.success && result.uuid) {
if (currentUuidDisplay) currentUuidDisplay.value = result.uuid;
- if (modalCurrentUuid) modalCurrentUuid.value = result.uuid;
const msg = window.i18n ? window.i18n.t('notifications.uuidGenerated') : 'New UUID generated successfully!';
showNotification(msg, 'success');
if (uuidModal && uuidModal.style.display !== 'none') {
await loadAllUuids();
}
+ if (window.loadIdentities) window.loadIdentities();
} else {
throw new Error(result.error || 'Failed to generate new UUID');
}
@@ -717,6 +737,10 @@ async function openUuidModal() {
}
}
+// Expose globally so identity dropdown and Escape handler can use them
+window.openUuidModal = openUuidModal;
+window.loadCurrentUuid = loadCurrentUuid;
+
function closeUuidModal() {
if (uuidModal) {
uuidModal.classList.remove('active');
@@ -725,6 +749,7 @@ function closeUuidModal() {
}, 300);
}
}
+window.closeUuidModal = closeUuidModal;
async function loadAllUuids() {
try {
@@ -769,6 +794,9 @@ async function loadAllUuids() {
+ ${mapping.isCurrent ? `
` : ''}
${!mapping.isCurrent ? `
` : ''}
@@ -791,23 +819,119 @@ async function loadAllUuids() {
}
}
-async function generateNewUuid() {
+async function showAddIdentityForm() {
+ if (!uuidAddForm) return;
+ uuidAddForm.style.display = 'block';
+ if (addIdentityUsername) {
+ addIdentityUsername.value = '';
+ addIdentityUsername.focus();
+ }
+ if (addIdentityUuid) {
+ try {
+ if (window.electronAPI && window.electronAPI.generateNewUuid) {
+ const newUuid = await window.electronAPI.generateNewUuid();
+ if (newUuid) addIdentityUuid.value = newUuid;
+ }
+ } catch (e) {
+ console.error('Error pre-generating UUID:', e);
+ }
+ }
+ if (addIdentityBtn) addIdentityBtn.style.display = 'none';
+}
+
+function hideAddIdentityForm() {
+ if (uuidAddForm) uuidAddForm.style.display = 'none';
+ if (addIdentityBtn) addIdentityBtn.style.display = '';
+}
+
+async function regenerateAddIdentityUuid() {
try {
if (window.electronAPI && window.electronAPI.generateNewUuid) {
const newUuid = await window.electronAPI.generateNewUuid();
- if (newUuid) {
- if (customUuidInput) customUuidInput.value = newUuid;
- const msg = window.i18n ? window.i18n.t('notifications.uuidGeneratedShort') : 'New UUID generated!';
- showNotification(msg, 'success');
+ if (newUuid && addIdentityUuid) {
+ addIdentityUuid.value = newUuid;
}
}
} catch (error) {
- console.error('Error generating new UUID:', error);
- const msg = window.i18n ? window.i18n.t('notifications.uuidGenerateFailed') : 'Failed to generate new UUID';
+ console.error('Error generating UUID:', error);
+ }
+}
+
+async function confirmAddIdentity() {
+ try {
+ const username = addIdentityUsername ? addIdentityUsername.value.trim() : '';
+ const uuid = addIdentityUuid ? addIdentityUuid.value.trim() : '';
+
+ if (!username) {
+ const msg = window.i18n ? window.i18n.t('notifications.playerNameRequired') : 'Please enter a username';
+ showNotification(msg, 'error');
+ return;
+ }
+
+ if (username.length > 16) {
+ const msg = window.i18n ? window.i18n.t('notifications.playerNameTooLong') : 'Username must be 16 characters or less';
+ showNotification(msg, 'error');
+ return;
+ }
+
+ const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
+ if (!uuid || !uuidRegex.test(uuid)) {
+ const msg = window.i18n ? window.i18n.t('notifications.uuidInvalidFormat') : 'Invalid UUID format';
+ showNotification(msg, 'error');
+ return;
+ }
+
+ if (window.electronAPI && window.electronAPI.setUuidForUser) {
+ const result = await window.electronAPI.setUuidForUser(username, uuid);
+ if (result.success) {
+ const msg = window.i18n ? window.i18n.t('notifications.identityAdded') : 'Identity added successfully!';
+ showNotification(msg, 'success');
+ hideAddIdentityForm();
+ await loadAllUuids();
+ if (window.loadIdentities) window.loadIdentities();
+ } else {
+ throw new Error(result.error || 'Failed to add identity');
+ }
+ }
+ } catch (error) {
+ console.error('Error adding identity:', error);
+ const msg = window.i18n ? window.i18n.t('notifications.identityAddFailed') : 'Failed to add identity';
showNotification(msg, 'error');
}
}
+function toggleAdvancedSection() {
+ if (!uuidAdvancedContent || !uuidAdvancedToggle) return;
+ const isOpen = uuidAdvancedContent.style.display !== 'none';
+ uuidAdvancedContent.style.display = isOpen ? 'none' : 'block';
+ const chevron = uuidAdvancedToggle.querySelector('.uuid-advanced-chevron');
+ if (chevron) {
+ chevron.classList.toggle('open', !isOpen);
+ }
+}
+
+window.regenerateUuidForUser = async function (username) {
+ try {
+ const message = window.i18n ? window.i18n.t('confirm.regenerateUuidMessage') : 'Are you sure you want to generate a new UUID? This will change your player identity.';
+ const title = window.i18n ? window.i18n.t('confirm.regenerateUuidTitle') : 'Generate New UUID';
+ const confirmBtn = window.i18n ? window.i18n.t('confirm.regenerateUuidButton') : 'Generate';
+ const cancelBtn = window.i18n ? window.i18n.t('common.cancel') : 'Cancel';
+
+ showCustomConfirm(
+ message,
+ title,
+ async () => {
+ await performRegenerateUuid();
+ },
+ null,
+ confirmBtn,
+ cancelBtn
+ );
+ } catch (error) {
+ console.error('Error regenerating UUID:', error);
+ }
+};
+
async function setCustomUuid() {
try {
if (!customUuidInput || !customUuidInput.value.trim()) {
@@ -865,13 +989,13 @@ async function performSetCustomUuid(uuid) {
if (result.success) {
if (currentUuidDisplay) currentUuidDisplay.value = uuid;
- if (modalCurrentUuid) modalCurrentUuid.value = uuid;
if (customUuidInput) customUuidInput.value = '';
const msg = window.i18n ? window.i18n.t('notifications.uuidSetSuccess') : 'Custom UUID set successfully!';
showNotification(msg, 'success');
await loadAllUuids();
+ if (window.loadIdentities) window.loadIdentities();
} else {
throw new Error(result.error || 'Failed to set custom UUID');
}
@@ -950,6 +1074,9 @@ async function performSwitchToUsername(username) {
// Refresh the UUID list to show new "Current" badge
await loadAllUuids();
+ // Refresh header identity dropdown
+ if (window.loadIdentities) window.loadIdentities();
+
const msg = window.i18n
? window.i18n.t('notifications.switchUsernameSuccess').replace('{username}', username)
: `Switched to "${username}" successfully!`;
@@ -997,6 +1124,7 @@ async function performDeleteUuid(username) {
const msg = window.i18n ? window.i18n.t('notifications.uuidDeleteSuccess') : 'UUID deleted successfully!';
showNotification(msg, 'success');
await loadAllUuids();
+ if (window.loadIdentities) window.loadIdentities();
} else {
throw new Error(result.error || 'Failed to delete UUID');
}
diff --git a/GUI/js/ui.js b/GUI/js/ui.js
index 5eee948..9230e05 100644
--- a/GUI/js/ui.js
+++ b/GUI/js/ui.js
@@ -79,12 +79,18 @@ function setupWindowControls() {
const header = document.querySelector('.header');
const profileSelector = document.querySelector('.profile-selector');
+ const identitySelector = document.querySelector('.identity-selector');
if (profileSelector) {
profileSelector.style.pointerEvents = 'auto';
profileSelector.style.zIndex = '10000';
}
+ if (identitySelector) {
+ identitySelector.style.pointerEvents = 'auto';
+ identitySelector.style.zIndex = '10000';
+ }
+
if (windowControls) {
windowControls.style.pointerEvents = 'auto';
windowControls.style.zIndex = '10000';
@@ -98,6 +104,9 @@ function setupWindowControls() {
if (profileSelector) {
profileSelector.style.webkitAppRegion = 'no-drag';
}
+ if (identitySelector) {
+ identitySelector.style.webkitAppRegion = 'no-drag';
+ }
}
if (window.electronAPI) {
@@ -1109,4 +1118,50 @@ window.openDiscordExternal = function() {
window.toggleMaximize = toggleMaximize;
+// Global Escape key handler for closing popups/modals/dropdowns
+document.addEventListener('keydown', (e) => {
+ if (e.key !== 'Escape') return;
+
+ // Custom confirm dialogs handle their own Escape — skip if one is open
+ if (document.querySelector('.custom-confirm-modal')) return;
+
+ // Close modals (highest priority)
+ const profileModal = document.getElementById('profileManagerModal');
+ if (profileModal && profileModal.style.display !== 'none') {
+ if (window.closeProfileManager) window.closeProfileManager();
+ return;
+ }
+
+ const uuidModal = document.getElementById('uuidModal');
+ if (uuidModal && uuidModal.style.display !== 'none') {
+ if (window.closeUuidModal) window.closeUuidModal();
+ return;
+ }
+
+ const discordModal = document.getElementById('discordPopupModal');
+ if (discordModal && discordModal.style.display !== 'none') {
+ discordModal.style.display = 'none';
+ return;
+ }
+
+ const versionModal = document.getElementById('versionSelectModal');
+ if (versionModal && versionModal.style.display !== 'none') {
+ versionModal.style.display = 'none';
+ return;
+ }
+
+ // Close dropdowns (lower priority)
+ const identityDropdown = document.getElementById('identityDropdown');
+ if (identityDropdown && identityDropdown.classList.contains('show')) {
+ identityDropdown.classList.remove('show');
+ return;
+ }
+
+ const profileDropdown = document.getElementById('profileDropdown');
+ if (profileDropdown && profileDropdown.classList.contains('show')) {
+ profileDropdown.classList.remove('show');
+ return;
+ }
+});
+
document.addEventListener('DOMContentLoaded', setupUI);
diff --git a/GUI/locales/ar-SA.json b/GUI/locales/ar-SA.json
index 256bd02..a57d87a 100644
--- a/GUI/locales/ar-SA.json
+++ b/GUI/locales/ar-SA.json
@@ -8,7 +8,10 @@
},
"header": {
"playersLabel": "اللاعبون:",
- "manageProfiles": "إدارة الملفات الشخصية",
+ "manageProfiles": "إدارة",
+ "manageIdentities": "إدارة",
+ "identityTooltip": "اسم اللاعب ومعرّف UUID المستخدمان في اللعبة",
+ "configTooltip": "إعدادات اللعبة: المودات، Java والذاكرة",
"defaultProfile": "الافتراضي"
},
"install": {
@@ -151,9 +154,12 @@
},
"uuid": {
"modalTitle": "إدارة UUID",
- "currentUserUUID": "UUID المستخدم الحالي",
"allPlayerUUIDs": "جميع معرفات UUID للاعبين",
- "generateNew": "إنشاء UUID جديد",
+ "addIdentity": "إضافة هوية",
+ "usernamePlaceholder": "اسم المستخدم",
+ "add": "إضافة",
+ "cancel": "إلغاء",
+ "advanced": "متقدم",
"loadingUUIDs": "جاري تحميل الـ UUIDs...",
"setCustomUUID": "تعيين UUID مخصص",
"customPlaceholder": "أدخل UUID مخصص (الصيغة: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)",
@@ -162,10 +168,10 @@
"copyTooltip": "نسخ UUID",
"regenerateTooltip": "إنشاء UUID جديد"
},
- "profiles": {
- "modalTitle": "إدارة الملفات الشخصية",
- "newProfilePlaceholder": "اسم الملف الشخصي الجديد",
- "createProfile": "إنشاء ملف شخصي"
+ "configurations": {
+ "modalTitle": "إدارة التكوينات",
+ "newProfilePlaceholder": "اسم التكوين الجديد",
+ "createProfile": "إنشاء تكوين"
},
"discord": {
"notificationText": "انضم إلى مجتمعنا على ديسكورد!",
@@ -219,6 +225,8 @@
"hwAccelSaved": "تم حفظ إعداد تسريع الأجهزة",
"hwAccelSaveFailed": "فشل حفظ إعداد تسريع الأجهزة",
"noUsername": "لم يتم تهيئة اسم مستخدم. يرجى حفظ اسم المستخدم أولاً.",
+ "identityAdded": "تمت إضافة الهوية بنجاح!",
+ "identityAddFailed": "فشل في إضافة الهوية",
"switchUsernameSuccess": "تم التبديل إلى المستخدم \"{username}\" بنجاح!",
"switchUsernameFailed": "فشل تبديل اسم المستخدم",
"playerNameTooLong": "يجب أن يكون اسم اللاعب 16 حرفاً أو أقل"
@@ -247,8 +255,8 @@
"installing": "جاري التثبيت...",
"extracting": "جاري الاستخراج...",
"verifying": "جاري التحقق...",
- "switchingProfile": "جاري تبديل الملف الشخصي...",
- "profileSwitched": "تم تبديل الملف الشخصي!",
+ "switchingProfile": "جاري تبديل التكوين...",
+ "profileSwitched": "تم تبديل التكوين!",
"startingGame": "جاري بدء اللعبة...",
"launching": "جاري التشغيل...",
"uninstallingGame": "جاري إلغاء تثبيت اللعبة...",
diff --git a/GUI/locales/de-DE.json b/GUI/locales/de-DE.json
index 4fe4eb5..530dd1c 100644
--- a/GUI/locales/de-DE.json
+++ b/GUI/locales/de-DE.json
@@ -8,7 +8,10 @@
},
"header": {
"playersLabel": "Spieler:",
- "manageProfiles": "Profile verwalten",
+ "manageProfiles": "Verwalten",
+ "manageIdentities": "Verwalten",
+ "identityTooltip": "Dein Spielername und UUID im Spiel",
+ "configTooltip": "Spielkonfiguration: Mods, Java- und Speichereinstellungen",
"defaultProfile": "Standard"
},
"install": {
@@ -151,9 +154,12 @@
},
"uuid": {
"modalTitle": "UUID-Verwaltung",
- "currentUserUUID": "Aktuelle Benutzer-UUID",
"allPlayerUUIDs": "Alle Spieler-UUIDs",
- "generateNew": "Neue UUID generieren",
+ "addIdentity": "Identität hinzufügen",
+ "usernamePlaceholder": "Benutzername",
+ "add": "Hinzufügen",
+ "cancel": "Abbrechen",
+ "advanced": "Erweitert",
"loadingUUIDs": "UUIDs werden geladen...",
"setCustomUUID": "Benutzerdefinierte UUID festlegen",
"customPlaceholder": "Benutzerdefinierte UUID eingeben (Format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)",
@@ -162,10 +168,10 @@
"copyTooltip": "UUID kopieren",
"regenerateTooltip": "Neue UUID generieren"
},
- "profiles": {
- "modalTitle": "Profile verwalten",
- "newProfilePlaceholder": "Neuer Profilname",
- "createProfile": "Profil erstellen"
+ "configurations": {
+ "modalTitle": "Konfigurationen verwalten",
+ "newProfilePlaceholder": "Neuer Konfigurationsname",
+ "createProfile": "Konfiguration erstellen"
},
"discord": {
"notificationText": "Tritt unserer Discord-Community bei!",
@@ -219,6 +225,8 @@
"hwAccelSaved": "Hardware-Beschleunigungseinstellung gespeichert",
"hwAccelSaveFailed": "Hardware-Beschleunigungseinstellung konnte nicht gespeichert werden",
"noUsername": "Kein Benutzername konfiguriert. Bitte speichere zuerst deinen Benutzernamen.",
+ "identityAdded": "Identität erfolgreich hinzugefügt!",
+ "identityAddFailed": "Fehler beim Hinzufügen der Identität",
"switchUsernameSuccess": "Erfolgreich zu \"{username}\" gewechselt!",
"switchUsernameFailed": "Benutzername konnte nicht gewechselt werden",
"playerNameTooLong": "Spielername darf maximal 16 Zeichen haben"
@@ -247,8 +255,8 @@
"installing": "Installiere...",
"extracting": "Entpacke...",
"verifying": "Überprüfe...",
- "switchingProfile": "Profil wird gewechselt...",
- "profileSwitched": "Profil gewechselt!",
+ "switchingProfile": "Konfiguration wird gewechselt...",
+ "profileSwitched": "Konfiguration gewechselt!",
"startingGame": "Spiel wird gestartet...",
"launching": "STARTET...",
"uninstallingGame": "Spiel wird deinstalliert...",
diff --git a/GUI/locales/en.json b/GUI/locales/en.json
index 3387fdd..d2da396 100644
--- a/GUI/locales/en.json
+++ b/GUI/locales/en.json
@@ -8,7 +8,10 @@
},
"header": {
"playersLabel": "Players:",
- "manageProfiles": "Manage Profiles",
+ "manageProfiles": "Manage",
+ "manageIdentities": "Manage",
+ "identityTooltip": "Your player name & UUID used in-game",
+ "configTooltip": "Game config: mods, Java & memory settings",
"defaultProfile": "Default"
},
"install": {
@@ -162,21 +165,24 @@
},
"uuid": {
"modalTitle": "UUID Management",
- "currentUserUUID": "Current User UUID",
"allPlayerUUIDs": "All Player UUIDs",
- "generateNew": "Generate New UUID",
+ "addIdentity": "Add Identity",
+ "usernamePlaceholder": "Username",
+ "add": "Add",
+ "cancel": "Cancel",
+ "advanced": "Advanced",
"loadingUUIDs": "Loading UUIDs...",
- "setCustomUUID": "Set Custom UUID",
+ "setCustomUUID": "Set Custom UUID for Current User",
"customPlaceholder": "Enter custom UUID (format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)",
"setUUID": "Set UUID",
"warning": "Warning: Setting a custom UUID will change your current player identity",
"copyTooltip": "Copy UUID",
"regenerateTooltip": "Generate New UUID"
},
- "profiles": {
- "modalTitle": "Manage Profiles",
- "newProfilePlaceholder": "New Profile Name",
- "createProfile": "Create Profile"
+ "configurations": {
+ "modalTitle": "Manage Configurations",
+ "newProfilePlaceholder": "New Configuration Name",
+ "createProfile": "Create Configuration"
},
"discord": {
"notificationText": "Join our Discord community!",
@@ -230,6 +236,8 @@
"hwAccelSaved": "Hardware acceleration setting saved",
"hwAccelSaveFailed": "Failed to save hardware acceleration setting",
"noUsername": "No username configured. Please save your username first.",
+ "identityAdded": "Identity added successfully!",
+ "identityAddFailed": "Failed to add identity",
"switchUsernameSuccess": "Switched to \"{username}\" successfully!",
"switchUsernameFailed": "Failed to switch username",
"playerNameTooLong": "Player name must be 16 characters or less",
@@ -266,8 +274,8 @@
"installing": "Installing...",
"extracting": "Extracting...",
"verifying": "Verifying...",
- "switchingProfile": "Switching profile...",
- "profileSwitched": "Profile switched!",
+ "switchingProfile": "Switching configuration...",
+ "profileSwitched": "Configuration switched!",
"startingGame": "Starting game...",
"launching": "LAUNCHING...",
"uninstallingGame": "Uninstalling game...",
diff --git a/GUI/locales/es-ES.json b/GUI/locales/es-ES.json
index a12825f..d8fccdd 100644
--- a/GUI/locales/es-ES.json
+++ b/GUI/locales/es-ES.json
@@ -8,7 +8,10 @@
},
"header": {
"playersLabel": "Jugadores:",
- "manageProfiles": "Gestionar Perfiles",
+ "manageProfiles": "Gestionar",
+ "manageIdentities": "Gestionar",
+ "identityTooltip": "Tu nombre de jugador y UUID usados en el juego",
+ "configTooltip": "Configuración del juego: mods, Java y memoria",
"defaultProfile": "Predeterminado"
},
"install": {
@@ -151,9 +154,12 @@
},
"uuid": {
"modalTitle": "Gestión de UUID",
- "currentUserUUID": "UUID del usuario actual",
"allPlayerUUIDs": "Todos los UUIDs de jugadores",
- "generateNew": "Generar nuevo UUID",
+ "addIdentity": "Añadir identidad",
+ "usernamePlaceholder": "Nombre de usuario",
+ "add": "Añadir",
+ "cancel": "Cancelar",
+ "advanced": "Avanzado",
"loadingUUIDs": "Cargando UUIDs...",
"setCustomUUID": "Establecer UUID personalizado",
"customPlaceholder": "Ingresa un UUID personalizado (formato: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)",
@@ -162,10 +168,10 @@
"copyTooltip": "Copiar UUID",
"regenerateTooltip": "Generar nuevo UUID"
},
- "profiles": {
- "modalTitle": "Gestionar perfiles",
- "newProfilePlaceholder": "Nombre del nuevo perfil",
- "createProfile": "Crear perfil"
+ "configurations": {
+ "modalTitle": "Gestionar Configuraciones",
+ "newProfilePlaceholder": "Nombre de la nueva configuración",
+ "createProfile": "Crear Configuración"
},
"discord": {
"notificationText": "¡Únete a nuestra comunidad de Discord!",
@@ -219,6 +225,8 @@
"hwAccelSaved": "Configuración de aceleración por hardware guardada",
"hwAccelSaveFailed": "Error al guardar la configuración de aceleración por hardware",
"noUsername": "No hay nombre de usuario configurado. Por favor, guarda tu nombre de usuario primero.",
+ "identityAdded": "¡Identidad añadida con éxito!",
+ "identityAddFailed": "Error al añadir identidad",
"switchUsernameSuccess": "¡Cambiado a \"{username}\" con éxito!",
"switchUsernameFailed": "Error al cambiar nombre de usuario",
"playerNameTooLong": "El nombre del jugador debe tener 16 caracteres o menos"
@@ -247,8 +255,8 @@
"installing": "Instalando...",
"extracting": "Extrayendo...",
"verifying": "Verificando...",
- "switchingProfile": "Cambiando perfil...",
- "profileSwitched": "¡Perfil cambiado!",
+ "switchingProfile": "Cambiando configuración...",
+ "profileSwitched": "¡Configuración cambiada!",
"startingGame": "Iniciando juego...",
"launching": "INICIANDO...",
"uninstallingGame": "Desinstalando juego...",
diff --git a/GUI/locales/fr-FR.json b/GUI/locales/fr-FR.json
index 20abc43..3186551 100644
--- a/GUI/locales/fr-FR.json
+++ b/GUI/locales/fr-FR.json
@@ -8,7 +8,10 @@
},
"header": {
"playersLabel": "Joueurs:",
- "manageProfiles": "Gérer les Profils",
+ "manageProfiles": "Gérer",
+ "manageIdentities": "Gérer",
+ "identityTooltip": "Votre nom de joueur et UUID utilisés en jeu",
+ "configTooltip": "Configuration du jeu : mods, Java et mémoire",
"defaultProfile": "Par défaut"
},
"install": {
@@ -151,9 +154,12 @@
},
"uuid": {
"modalTitle": "Gestion UUID",
- "currentUserUUID": "UUID Utilisateur Actuel",
"allPlayerUUIDs": "Tous les UUIDs Joueurs",
- "generateNew": "Générer Nouvel UUID",
+ "addIdentity": "Ajouter une identité",
+ "usernamePlaceholder": "Nom d'utilisateur",
+ "add": "Ajouter",
+ "cancel": "Annuler",
+ "advanced": "Avancé",
"loadingUUIDs": "Chargement des UUIDs...",
"setCustomUUID": "Définir UUID Personnalisé",
"customPlaceholder": "Entrez UUID personnalisé (format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)",
@@ -162,10 +168,10 @@
"copyTooltip": "Copier UUID",
"regenerateTooltip": "Générer Nouvel UUID"
},
- "profiles": {
- "modalTitle": "Gérer les Profils",
- "newProfilePlaceholder": "Nom du Nouveau Profil",
- "createProfile": "Créer un Profil"
+ "configurations": {
+ "modalTitle": "Gérer les Configurations",
+ "newProfilePlaceholder": "Nom de la Nouvelle Configuration",
+ "createProfile": "Créer une Configuration"
},
"discord": {
"notificationText": "Rejoignez notre communauté Discord!",
@@ -219,6 +225,8 @@
"hwAccelSaved": "Paramètre d'accélération matérielle sauvegardé",
"hwAccelSaveFailed": "Échec de la sauvegarde du paramètre d'accélération matérielle",
"noUsername": "Aucun nom d'utilisateur configuré. Veuillez d'abord enregistrer votre nom d'utilisateur.",
+ "identityAdded": "Identité ajoutée avec succès !",
+ "identityAddFailed": "Échec de l'ajout de l'identité",
"switchUsernameSuccess": "Basculé vers \"{username}\" avec succès!",
"switchUsernameFailed": "Échec du changement de nom d'utilisateur",
"playerNameTooLong": "Le nom du joueur doit comporter 16 caractères ou moins"
@@ -247,8 +255,8 @@
"installing": "Installation...",
"extracting": "Extraction...",
"verifying": "Vérification...",
- "switchingProfile": "Changement de profil...",
- "profileSwitched": "Profil changé!",
+ "switchingProfile": "Changement de configuration...",
+ "profileSwitched": "Configuration changée !",
"startingGame": "Démarrage du jeu...",
"launching": "LANCEMENT...",
"uninstallingGame": "Désinstallation du jeu...",
diff --git a/GUI/locales/id-ID.json b/GUI/locales/id-ID.json
index 7b661b4..87187a8 100644
--- a/GUI/locales/id-ID.json
+++ b/GUI/locales/id-ID.json
@@ -8,7 +8,10 @@
},
"header": {
"playersLabel": "Pemain:",
- "manageProfiles": "Kelola Profil",
+ "manageProfiles": "Kelola",
+ "manageIdentities": "Kelola",
+ "identityTooltip": "Nama pemain & UUID yang digunakan dalam game",
+ "configTooltip": "Konfigurasi game: mod, Java & pengaturan memori",
"defaultProfile": "Default"
},
"install": {
@@ -151,9 +154,12 @@
},
"uuid": {
"modalTitle": "Manajemen UUID",
- "currentUserUUID": "UUID Pengguna Saat Ini",
"allPlayerUUIDs": "Semua UUID Pemain",
- "generateNew": "Hasilkan UUID Baru",
+ "addIdentity": "Tambah Identitas",
+ "usernamePlaceholder": "Nama Pengguna",
+ "add": "Tambah",
+ "cancel": "Batal",
+ "advanced": "Lanjutan",
"loadingUUIDs": "Memuat UUID...",
"setCustomUUID": "Setel UUID Kustom",
"customPlaceholder": "Masukkan UUID kustom (format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)",
@@ -162,10 +168,10 @@
"copyTooltip": "Salin UUID",
"regenerateTooltip": "Hasilkan UUID Baru"
},
- "profiles": {
- "modalTitle": "Kelola Profil",
- "newProfilePlaceholder": "Nama Profil Baru",
- "createProfile": "Buat Profil"
+ "configurations": {
+ "modalTitle": "Kelola Konfigurasi",
+ "newProfilePlaceholder": "Nama Konfigurasi Baru",
+ "createProfile": "Buat Konfigurasi"
},
"discord": {
"notificationText": "Gabung komunitas Discord kami!",
@@ -219,6 +225,8 @@
"hwAccelSaved": "Pengaturan akselerasi perangkat keras disimpan",
"hwAccelSaveFailed": "Gagal menyimpan pengaturan akselerasi perangkat keras",
"noUsername": "Nama pengguna belum dikonfigurasi. Silakan simpan nama pengguna terlebih dahulu.",
+ "identityAdded": "Identitas berhasil ditambahkan!",
+ "identityAddFailed": "Gagal menambahkan identitas",
"switchUsernameSuccess": "Berhasil beralih ke \"{username}\"!",
"switchUsernameFailed": "Gagal beralih nama pengguna",
"playerNameTooLong": "Nama pemain harus 16 karakter atau kurang"
@@ -247,8 +255,8 @@
"installing": "Menginstal...",
"extracting": "Mengekstrak...",
"verifying": "Memverifikasi...",
- "switchingProfile": "Beralih profil...",
- "profileSwitched": "Profil dialihkan!",
+ "switchingProfile": "Beralih konfigurasi...",
+ "profileSwitched": "Konfigurasi dialihkan!",
"startingGame": "Memulai game...",
"launching": "MELUNCURKAN...",
"uninstallingGame": "Menghapus instalasi game...",
diff --git a/GUI/locales/pl-PL.json b/GUI/locales/pl-PL.json
index 14bfaef..46e7673 100644
--- a/GUI/locales/pl-PL.json
+++ b/GUI/locales/pl-PL.json
@@ -8,7 +8,10 @@
},
"header": {
"playersLabel": "Graczy:",
- "manageProfiles": "Zarządzaj Profilami",
+ "manageProfiles": "Zarządzaj",
+ "manageIdentities": "Zarządzaj",
+ "identityTooltip": "Twoja nazwa gracza i UUID używane w grze",
+ "configTooltip": "Konfiguracja gry: mody, Java i ustawienia pamięci",
"defaultProfile": "Domyślny"
},
"install": {
@@ -151,9 +154,12 @@
},
"uuid": {
"modalTitle": "Zarządzanie UUID",
- "currentUserUUID": "Aktualny UUID użytkownika",
"allPlayerUUIDs": "Wszystkie identyfikatory UUID graczy",
- "generateNew": "Wygeneruj nowy UUID",
+ "addIdentity": "Dodaj tożsamość",
+ "usernamePlaceholder": "Nazwa użytkownika",
+ "add": "Dodaj",
+ "cancel": "Anuluj",
+ "advanced": "Zaawansowane",
"loadingUUIDs": "Ładowanie UUID...",
"setCustomUUID": "Ustaw niestandardowy UUID",
"customPlaceholder": "Wprowadź niestandardowy UUID (format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)",
@@ -162,10 +168,10 @@
"copyTooltip": "Kopiuj UUID",
"regenerateTooltip": "Wygeneruj nowy UUID"
},
- "profiles": {
- "modalTitle": "Zarządzaj Profilami",
- "newProfilePlaceholder": "Nowa Nazwa Profilu",
- "createProfile": "Utwórz Profil"
+ "configurations": {
+ "modalTitle": "Zarządzaj Konfiguracjami",
+ "newProfilePlaceholder": "Nazwa Nowej Konfiguracji",
+ "createProfile": "Utwórz Konfigurację"
},
"discord": {
"notificationText": "Dołącz do naszej społeczności Discord!",
@@ -219,6 +225,8 @@
"hwAccelSaved": "Zapisano ustawienie przyspieszenia sprzętowego",
"hwAccelSaveFailed": "Nie udało się zapisać ustawienia przyspieszenia sprzętowego",
"noUsername": "Nie skonfigurowano nazwy użytkownika. Najpierw zapisz swoją nazwę użytkownika.",
+ "identityAdded": "Tożsamość dodana pomyślnie!",
+ "identityAddFailed": "Nie udało się dodać tożsamości",
"switchUsernameSuccess": "Pomyślnie przełączono na \"{username}\"!",
"switchUsernameFailed": "Nie udało się przełączyć nazwy użytkownika",
"playerNameTooLong": "Nazwa gracza musi mieć 16 znaków lub mniej"
@@ -247,8 +255,8 @@
"installing": "Instalowanie...",
"extracting": "Ekstraktowanie...",
"verifying": "Weryfikowanie...",
- "switchingProfile": "Przełączanie profilu...",
- "profileSwitched": "Profil zmieniony!",
+ "switchingProfile": "Przełączanie konfiguracji...",
+ "profileSwitched": "Konfiguracja zmieniona!",
"startingGame": "Uruchamianie gry...",
"launching": "URUCHAMIANIE...",
"uninstallingGame": "Odinstalowywanie gry...",
diff --git a/GUI/locales/pt-BR.json b/GUI/locales/pt-BR.json
index 247bf4e..12f6df1 100644
--- a/GUI/locales/pt-BR.json
+++ b/GUI/locales/pt-BR.json
@@ -8,7 +8,10 @@
},
"header": {
"playersLabel": "Jogadores:",
- "manageProfiles": "Gerenciar Perfis",
+ "manageProfiles": "Gerenciar",
+ "manageIdentities": "Gerenciar",
+ "identityTooltip": "Seu nome de jogador e UUID usados no jogo",
+ "configTooltip": "Configuração do jogo: mods, Java e memória",
"defaultProfile": "Padrão"
},
"install": {
@@ -151,9 +154,12 @@
},
"uuid": {
"modalTitle": "Gerenciamento de UUID",
- "currentUserUUID": "UUID do usuário atual",
"allPlayerUUIDs": "Todos os UUIDs de jogadores",
- "generateNew": "Gerar novo UUID",
+ "addIdentity": "Adicionar identidade",
+ "usernamePlaceholder": "Nome de usuário",
+ "add": "Adicionar",
+ "cancel": "Cancelar",
+ "advanced": "Avançado",
"loadingUUIDs": "Carregando UUIDs...",
"setCustomUUID": "Definir UUID personalizado",
"customPlaceholder": "Digite um UUID personalizado (formato: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)",
@@ -162,10 +168,10 @@
"copyTooltip": "Copiar UUID",
"regenerateTooltip": "Gerar novo UUID"
},
- "profiles": {
- "modalTitle": "Gerenciar perfis",
- "newProfilePlaceholder": "Nome do novo perfil",
- "createProfile": "Criar perfil"
+ "configurations": {
+ "modalTitle": "Gerenciar Configurações",
+ "newProfilePlaceholder": "Nome da Nova Configuração",
+ "createProfile": "Criar Configuração"
},
"discord": {
"notificationText": "Junte-se à nossa comunidade do Discord!",
@@ -219,6 +225,8 @@
"hwAccelSaved": "Configuração de aceleração de hardware salva",
"hwAccelSaveFailed": "Falha ao salvar configuração de aceleração de hardware",
"noUsername": "Nenhum nome de usuário configurado. Por favor, salve seu nome de usuário primeiro.",
+ "identityAdded": "Identidade adicionada com sucesso!",
+ "identityAddFailed": "Falha ao adicionar identidade",
"switchUsernameSuccess": "Alterado para \"{username}\" com sucesso!",
"switchUsernameFailed": "Falha ao trocar nome de usuário",
"playerNameTooLong": "O nome do jogador deve ter 16 caracteres ou menos"
@@ -247,8 +255,8 @@
"installing": "Instalando...",
"extracting": "Extraindo...",
"verifying": "Verificando...",
- "switchingProfile": "Alternando perfil...",
- "profileSwitched": "Perfil alternado!",
+ "switchingProfile": "Alternando configuração...",
+ "profileSwitched": "Configuração alternada!",
"startingGame": "Iniciando jogo...",
"launching": "INICIANDO...",
"uninstallingGame": "Desinstalando jogo...",
diff --git a/GUI/locales/ru-RU.json b/GUI/locales/ru-RU.json
index 5d2bd61..2e82e12 100644
--- a/GUI/locales/ru-RU.json
+++ b/GUI/locales/ru-RU.json
@@ -8,7 +8,10 @@
},
"header": {
"playersLabel": "Игроки:",
- "manageProfiles": "Управлять профилями:",
+ "manageProfiles": "Управление",
+ "manageIdentities": "Управление",
+ "identityTooltip": "Ваш игровой ник и UUID, используемые в игре",
+ "configTooltip": "Конфигурация игры: моды, Java и настройки памяти",
"defaultProfile": "По умолчанию"
},
"install": {
@@ -151,9 +154,12 @@
},
"uuid": {
"modalTitle": "Управление UUID",
- "currentUserUUID": "UUID текущего пользователя",
"allPlayerUUIDs": "UUID всех игроков",
- "generateNew": "Сгенерировать новый UUID",
+ "addIdentity": "Добавить личность",
+ "usernamePlaceholder": "Имя пользователя",
+ "add": "Добавить",
+ "cancel": "Отмена",
+ "advanced": "Дополнительно",
"loadingUUIDs": "Загрузка UUID...",
"setCustomUUID": "Установить кастомный UUID",
"customPlaceholder": "Ввести кастомный UUID (форматы: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)",
@@ -162,10 +168,10 @@
"copyTooltip": "Скопировать UUID",
"regenerateTooltip": "Сгенерировать новый UUID"
},
- "profiles": {
- "modalTitle": "Управление профилями",
- "newProfilePlaceholder": "Новое имя профиля",
- "createProfile": "Создать профиль"
+ "configurations": {
+ "modalTitle": "Управление конфигурациями",
+ "newProfilePlaceholder": "Название новой конфигурации",
+ "createProfile": "Создать конфигурацию"
},
"discord": {
"notificationText": "Присоединитесь к нашему сообществу в Discord!",
@@ -219,6 +225,8 @@
"hwAccelSaved": "Настройка аппаратного ускорения сохранена!",
"hwAccelSaveFailed": "Не удалось сохранить настройку аппаратного ускорения",
"noUsername": "Имя пользователя не настроено. Пожалуйста, сначала сохраните имя пользователя.",
+ "identityAdded": "Личность успешно добавлена!",
+ "identityAddFailed": "Не удалось добавить личность",
"switchUsernameSuccess": "Успешно переключено на \"{username}\"!",
"switchUsernameFailed": "Не удалось переключить имя пользователя",
"playerNameTooLong": "Имя игрока должно быть не более 16 символов"
@@ -247,8 +255,8 @@
"installing": "Установка...",
"extracting": "Извлечение...",
"verifying": "Проверка...",
- "switchingProfile": "Смена профиля...",
- "profileSwitched": "Профиль сменён!",
+ "switchingProfile": "Смена конфигурации...",
+ "profileSwitched": "Конфигурация изменена!",
"startingGame": "Запуск игры...",
"launching": "ЗАПУСК...",
"uninstallingGame": "Удаление игры...",
diff --git a/GUI/locales/sv-SE.json b/GUI/locales/sv-SE.json
index f7c199e..c6fb7ad 100644
--- a/GUI/locales/sv-SE.json
+++ b/GUI/locales/sv-SE.json
@@ -8,7 +8,10 @@
},
"header": {
"playersLabel": "Spelare:",
- "manageProfiles": "Hantera profiler",
+ "manageProfiles": "Hantera",
+ "manageIdentities": "Hantera",
+ "identityTooltip": "Ditt spelarnamn och UUID som används i spelet",
+ "configTooltip": "Spelkonfiguration: moddar, Java- och minnesinställningar",
"defaultProfile": "Standard"
},
"install": {
@@ -151,9 +154,12 @@
},
"uuid": {
"modalTitle": "UUID-hantering",
- "currentUserUUID": "Nuvarande användar-UUID",
"allPlayerUUIDs": "Alla spelare-UUID:er",
- "generateNew": "Generera ny UUID",
+ "addIdentity": "Lägg till identitet",
+ "usernamePlaceholder": "Användarnamn",
+ "add": "Lägg till",
+ "cancel": "Avbryt",
+ "advanced": "Avancerat",
"loadingUUIDs": "Laddar UUID:er...",
"setCustomUUID": "Ange anpassad UUID",
"customPlaceholder": "Ange anpassad UUID (format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)",
@@ -162,10 +168,10 @@
"copyTooltip": "Kopiera UUID",
"regenerateTooltip": "Generera ny UUID"
},
- "profiles": {
- "modalTitle": "Hantera profiler",
- "newProfilePlaceholder": "Nytt profilnamn",
- "createProfile": "Skapa profil"
+ "configurations": {
+ "modalTitle": "Hantera konfigurationer",
+ "newProfilePlaceholder": "Nytt konfigurationsnamn",
+ "createProfile": "Skapa konfiguration"
},
"discord": {
"notificationText": "Gå med i vår Discord-gemenskap!",
@@ -219,6 +225,8 @@
"hwAccelSaved": "Hårdvaruaccelerationsinställning sparad",
"hwAccelSaveFailed": "Misslyckades med att spara hårdvaruaccelerationsinställning",
"noUsername": "Inget användarnamn konfigurerat. Vänligen spara ditt användarnamn först.",
+ "identityAdded": "Identitet tillagd!",
+ "identityAddFailed": "Kunde inte lägga till identitet",
"switchUsernameSuccess": "Bytte till \"{username}\" framgångsrikt!",
"switchUsernameFailed": "Misslyckades med att byta användarnamn",
"playerNameTooLong": "Spelarnamnet måste vara 16 tecken eller mindre"
@@ -247,8 +255,8 @@
"installing": "Installerar...",
"extracting": "Extraherar...",
"verifying": "Verifierar...",
- "switchingProfile": "Byter profil...",
- "profileSwitched": "Profil bytt!",
+ "switchingProfile": "Byter konfiguration...",
+ "profileSwitched": "Konfiguration bytt!",
"startingGame": "Startar spel...",
"launching": "STARTAR...",
"uninstallingGame": "Avinstallerar spel...",
diff --git a/GUI/locales/tr-TR.json b/GUI/locales/tr-TR.json
index f0210cd..09c4ab8 100644
--- a/GUI/locales/tr-TR.json
+++ b/GUI/locales/tr-TR.json
@@ -8,7 +8,10 @@
},
"header": {
"playersLabel": "Oyuncular:",
- "manageProfiles": "Profilleri Yönet",
+ "manageProfiles": "Yönet",
+ "manageIdentities": "Yönet",
+ "identityTooltip": "Oyun içinde kullanılan oyuncu adınız ve UUID'niz",
+ "configTooltip": "Oyun yapılandırması: modlar, Java ve bellek ayarları",
"defaultProfile": "Varsayılan"
},
"install": {
@@ -151,9 +154,12 @@
},
"uuid": {
"modalTitle": "UUID Yönetimi",
- "currentUserUUID": "Geçerli Kullanıcı UUID",
"allPlayerUUIDs": "Tüm Oyuncu UUID'leri",
- "generateNew": "Yeni UUID Oluştur",
+ "addIdentity": "Kimlik Ekle",
+ "usernamePlaceholder": "Kullanıcı Adı",
+ "add": "Ekle",
+ "cancel": "İptal",
+ "advanced": "Gelişmiş",
"loadingUUIDs": "UUID'ler yükleniyor...",
"setCustomUUID": "Özel UUID Ayarla",
"customPlaceholder": "Özel UUID girin (format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)",
@@ -162,10 +168,10 @@
"copyTooltip": "UUID'yi Kopyala",
"regenerateTooltip": "Yeni UUID Oluştur"
},
- "profiles": {
- "modalTitle": "Profilleri Yönet",
- "newProfilePlaceholder": "Yeni Profil Adı",
- "createProfile": "Profil Oluştur"
+ "configurations": {
+ "modalTitle": "Yapılandırmaları Yönet",
+ "newProfilePlaceholder": "Yeni Yapılandırma Adı",
+ "createProfile": "Yapılandırma Oluştur"
},
"discord": {
"notificationText": "Discord topluluğumuza katılın!",
@@ -219,6 +225,8 @@
"hwAccelSaved": "Donanım hızlandırma ayarı kaydedildi",
"hwAccelSaveFailed": "Donanım hızlandırma ayarı kaydedilemedi",
"noUsername": "Kullanıcı adı yapılandırılmadı. Lütfen önce kullanıcı adınızı kaydedin.",
+ "identityAdded": "Kimlik başarıyla eklendi!",
+ "identityAddFailed": "Kimlik eklenemedi",
"switchUsernameSuccess": "\"{username}\" adına başarıyla geçildi!",
"switchUsernameFailed": "Kullanıcı adı değiştirilemedi",
"playerNameTooLong": "Oyuncu adı 16 karakter veya daha az olmalıdır"
@@ -247,8 +255,8 @@
"installing": "Kuruluyur...",
"extracting": "Ayıklanıyor...",
"verifying": "Doğrulanıyor...",
- "switchingProfile": "Profil değiştiriliyor...",
- "profileSwitched": "Profil değiştirildi!",
+ "switchingProfile": "Yapılandırma değiştiriliyor...",
+ "profileSwitched": "Yapılandırma değiştirildi!",
"startingGame": "Oyun başlatılıyor...",
"launching": "BAŞLATILIYOR...",
"uninstallingGame": "Oyun kaldırılıyor...",
diff --git a/GUI/style.css b/GUI/style.css
index fecfea0..5e7e569 100644
--- a/GUI/style.css
+++ b/GUI/style.css
@@ -5575,9 +5575,8 @@ input[type="text"].uuid-input,
font-family: 'Space Grotesk', sans-serif;
}
-.uuid-current-section,
.uuid-list-section,
-.uuid-custom-section {
+.uuid-advanced-section {
background: rgba(255, 255, 255, 0.03);
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 12px;
@@ -5824,6 +5823,96 @@ input[type="text"].uuid-input,
color: #3b82f6;
}
+.uuid-item-btn.regenerate:hover {
+ background: rgba(249, 115, 22, 0.2);
+ border-color: rgba(249, 115, 22, 0.4);
+ color: #f97316;
+}
+
+/* Add Identity Form */
+.uuid-add-form {
+ background: rgba(147, 51, 234, 0.05);
+ border: 1px dashed rgba(147, 51, 234, 0.3);
+ border-radius: 8px;
+ padding: 1rem;
+ margin-bottom: 0.75rem;
+ display: flex;
+ flex-direction: column;
+ gap: 0.5rem;
+}
+
+.uuid-add-form-row {
+ display: flex;
+ align-items: stretch;
+ gap: 0.5rem;
+}
+
+.uuid-add-form-row .uuid-input {
+ flex: 1;
+ padding: 0.75rem 1rem;
+ border-radius: 8px;
+}
+
+.uuid-add-form-actions {
+ display: flex;
+ gap: 0.5rem;
+ justify-content: flex-end;
+}
+
+.uuid-cancel-btn {
+ padding: 0.75rem 1.25rem;
+ background: rgba(255, 255, 255, 0.05);
+ border: 1px solid rgba(255, 255, 255, 0.2);
+ border-radius: 8px;
+ color: rgba(255, 255, 255, 0.7);
+ font-size: 0.875rem;
+ font-weight: 600;
+ cursor: pointer;
+ transition: all 0.3s ease;
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+}
+
+.uuid-cancel-btn:hover {
+ background: rgba(239, 68, 68, 0.15);
+ border-color: rgba(239, 68, 68, 0.3);
+ color: #ef4444;
+}
+
+/* Advanced Section */
+.uuid-advanced-toggle {
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+ background: none;
+ border: none;
+ color: rgba(255, 255, 255, 0.6);
+ font-size: 0.9rem;
+ font-weight: 600;
+ cursor: pointer;
+ padding: 0.5rem 0;
+ transition: color 0.3s ease;
+ font-family: 'Space Grotesk', sans-serif;
+}
+
+.uuid-advanced-toggle:hover {
+ color: rgba(255, 255, 255, 0.9);
+}
+
+.uuid-advanced-chevron {
+ font-size: 0.75rem;
+ transition: transform 0.3s ease;
+}
+
+.uuid-advanced-chevron.open {
+ transform: rotate(90deg);
+}
+
+.uuid-advanced-content {
+ margin-top: 1rem;
+}
+
@media (max-width: 600px) {
.uuid-modal-content {
width: 95vw;
@@ -5835,8 +5924,8 @@ input[type="text"].uuid-input,
gap: 1.5rem;
}
- .uuid-current-display,
- .uuid-custom-form {
+ .uuid-custom-form,
+ .uuid-add-form-row {
flex-direction: column;
}
@@ -6213,6 +6302,155 @@ input[type="text"].uuid-input,
box-shadow: 0 0 10px rgba(255, 255, 255, 0.5);
}
+/* Header Tooltip Styles */
+.header-tooltip {
+ position: absolute;
+ top: 100%;
+ left: 50%;
+ transform: translateX(-50%) translateY(4px);
+ font-size: 0.65rem;
+ font-weight: 500;
+ letter-spacing: 0.03em;
+ color: #9ca3af;
+ opacity: 0;
+ transition: opacity 0.2s ease;
+ pointer-events: none;
+ white-space: nowrap;
+ background: rgba(0, 0, 0, 0.85);
+ padding: 0.3rem 0.6rem;
+ border-radius: 6px;
+ border: 1px solid rgba(255, 255, 255, 0.08);
+ z-index: 1;
+}
+
+.identity-selector:hover .header-tooltip,
+.profile-selector:hover .header-tooltip {
+ opacity: 1;
+}
+
+.identity-dropdown.show ~ .header-tooltip,
+.profile-dropdown.show ~ .header-tooltip {
+ opacity: 0 !important;
+}
+
+/* Identity Selector Styles */
+.identity-selector {
+ position: relative;
+ pointer-events: auto;
+ margin-left: 1rem;
+ z-index: 9999 !important;
+}
+
+.identity-btn {
+ display: flex;
+ align-items: center;
+ gap: 0.75rem;
+ padding: 0.5rem 1rem;
+ background: rgba(0, 0, 0, 0.4);
+ backdrop-filter: blur(20px);
+ border: 1px solid rgba(255, 255, 255, 0.1);
+ border-radius: 12px;
+ color: white;
+ cursor: pointer;
+ font-family: 'Space Grotesk', sans-serif;
+ font-weight: 600;
+ transition: all 0.2s ease;
+ z-index: 100000 !important;
+ pointer-events: auto !important;
+}
+
+.identity-btn:hover {
+ background: rgba(255, 255, 255, 0.1);
+ border-color: rgba(34, 197, 94, 0.4);
+}
+
+.identity-btn i {
+ color: #22c55e;
+}
+
+.identity-dropdown {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ margin-top: 0.5rem;
+ width: 200px;
+ background: rgba(20, 20, 20, 0.95);
+ backdrop-filter: blur(20px);
+ border: 1px solid rgba(255, 255, 255, 0.1);
+ border-radius: 12px;
+ padding: 0.5rem;
+ display: none;
+ flex-direction: column;
+ z-index: 2000;
+ box-shadow: 0 10px 40px rgba(0, 0, 0, 0.5);
+ animation: fadeIn 0.1s ease;
+}
+
+.identity-dropdown.show {
+ display: flex;
+}
+
+.identity-list {
+ max-height: 200px;
+ overflow-y: auto;
+}
+
+.identity-item {
+ padding: 0.6rem 0.8rem;
+ border-radius: 8px;
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+ color: #ccc;
+ transition: all 0.2s;
+}
+
+.identity-item:hover {
+ background: rgba(255, 255, 255, 0.1);
+ color: white;
+}
+
+.identity-item.active {
+ background: rgba(34, 197, 94, 0.2);
+ color: white;
+ font-weight: bold;
+}
+
+.identity-item.active::before {
+ content: '\2022';
+ color: #22c55e;
+ font-size: 1.2rem;
+}
+
+.identity-divider {
+ height: 1px;
+ background: rgba(255, 255, 255, 0.1);
+ margin: 0.5rem 0;
+}
+
+.identity-action {
+ padding: 0.6rem 0.8rem;
+ border-radius: 8px;
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+ color: #22c55e;
+ font-weight: 600;
+}
+
+.identity-action:hover {
+ background: rgba(34, 197, 94, 0.1);
+}
+
+.identity-empty {
+ padding: 0.6rem 0.8rem;
+ color: #666;
+ font-size: 0.85rem;
+ text-align: center;
+}
+
/* Profile Selector Styles */
.profile-selector {
position: relative;
diff --git a/package.json b/package.json
index f9d9a1c..8eab73e 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "hytale-f2p-launcher",
- "version": "2.4.3",
+ "version": "2.4.4",
"description": "A modern, cross-platform launcher for Hytale with automatic updates and multi-client support",
"homepage": "https://git.sanhost.net/sanasol/hytale-f2p",
"main": "main.js",