Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 80 additions & 7 deletions .github/workflows/release-datacenter-coreclr.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
name: Release Data Center CoreCLR

on:
push:
tags:
- "v*"
workflow_dispatch:
inputs:
tag:
Expand All @@ -25,6 +28,29 @@ jobs:
- name: Checkout
uses: actions/checkout@v4

- name: Guard release tag
shell: pwsh
env:
GH_TOKEN: ${{ github.token }}
run: |
$eventName = '${{ github.event_name }}'
$tag = if ($eventName -eq 'push') { '${{ github.ref_name }}' } else { '${{ inputs.tag }}' }
if ([string]::IsNullOrWhiteSpace($tag)) {
throw "Release tag is required."
}

gh release view $tag *> $null
if ($LASTEXITCODE -eq 0) {
throw "Release $tag already exists."
}

if ($eventName -ne 'push') {
git rev-parse "refs/tags/$tag" *> $null
if ($LASTEXITCODE -eq 0) {
throw "Tag $tag already exists."
}
}

- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
Expand All @@ -36,20 +62,61 @@ jobs:
shell: pwsh
run: .\build-datacenter.ps1

- name: Validate release package
shell: pwsh
run: |
$zip = 'Release\UnityExplorer.MelonLoader.IL2CPP.CoreCLR.zip'
$checksums = 'Release\CHECKSUMS_SHA256.txt'
if (!(Test-Path -LiteralPath $zip)) {
throw "Release ZIP missing: $zip"
}
if (!(Test-Path -LiteralPath $checksums)) {
throw "Checksum file missing: $checksums"
}

$extractDir = Join-Path $env:RUNNER_TEMP 'datacenter-release-check'
Remove-Item -LiteralPath $extractDir -Recurse -Force -ErrorAction SilentlyContinue
New-Item -ItemType Directory -Force -Path $extractDir | Out-Null
Expand-Archive -LiteralPath $zip -DestinationPath $extractDir -Force

$expectedFiles = @(
'Mods\UnityExplorer.ML.IL2CPP.CoreCLR.dll',
'UserLibs\UniverseLib.ML.IL2CPP.Interop.dll'
)

foreach ($relativePath in $expectedFiles) {
$fullPath = Join-Path $extractDir $relativePath
if (!(Test-Path -LiteralPath $fullPath)) {
throw "Release ZIP is missing $relativePath."
}
}

- name: Prepare release notes
shell: pwsh
run: |
$tag = '${{ inputs.tag }}'
$title = '${{ inputs.title }}'
$eventName = '${{ github.event_name }}'
$tag = if ($eventName -eq 'push') { '${{ github.ref_name }}' } else { '${{ inputs.tag }}' }
$title = if ($eventName -eq 'push') { "" } else { '${{ inputs.title }}' }
if ([string]::IsNullOrWhiteSpace($title)) {
$title = "UnityExplorer Data Center Safe Fork $tag"
}

$changelog = Get-Content -Raw -LiteralPath 'CHANGELOG.md'
$unreleased = ""
$match = [regex]::Match($changelog, "(?ms)^## Unreleased\s*(?<body>.*?)(?=^##\s|\z)")
if ($match.Success) {
$unreleased = $match.Groups['body'].Value.Trim()
}

$notes = @(
"# $title",
"",
"Data Center CoreCLR build for Unity 6000.x / IL2CPP / MelonLoader Open-Beta.",
"",
"## Changes",
"",
($(if ([string]::IsNullOrWhiteSpace($unreleased)) { "See CHANGELOG.md for the current changes." } else { $unreleased })),
"",
"## Install",
"",
"Copy the included folders into your Data Center game directory:",
Expand All @@ -69,8 +136,9 @@ jobs:
env:
GH_TOKEN: ${{ github.token }}
run: |
$tag = '${{ inputs.tag }}'
$title = '${{ inputs.title }}'
$eventName = '${{ github.event_name }}'
$tag = if ($eventName -eq 'push') { '${{ github.ref_name }}' } else { '${{ inputs.tag }}' }
$title = if ($eventName -eq 'push') { "" } else { '${{ inputs.title }}' }
if ([string]::IsNullOrWhiteSpace($title)) {
$title = "UnityExplorer Data Center Safe Fork $tag"
}
Expand All @@ -80,11 +148,16 @@ jobs:
'Release\UnityExplorer.MelonLoader.IL2CPP.CoreCLR.zip',
'Release\CHECKSUMS_SHA256.txt',
'--title', $title,
'--notes-file', 'release-notes.md',
'--target', '${{ github.sha }}'
'--notes-file', 'release-notes.md'
)

if ('${{ inputs.prerelease }}' -eq 'true') {
if ($eventName -ne 'push') {
$args += @('--target', '${{ github.sha }}')
}

$isPrerelease = if ($eventName -eq 'push') { $tag -match '-' } else { '${{ inputs.prerelease }}' -eq 'true' }

if ($isPrerelease) {
$args += '--prerelease'
}
else {
Expand Down
18 changes: 14 additions & 4 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,13 @@ All notable changes to this Data Center-focused UnityExplorer fork are documente
### English

- Added a support package script for collecting Data Center logs, file hashes and detected runtime versions.
- Improved `install-datacenter.ps1` with dry-run, wait-for-exit, MelonLoader preflight and duplicate-file warnings.
- Added a manual GitHub Actions release workflow for Data Center CoreCLR builds.
- Improved `install-datacenter.ps1` with auto-detect, status, open-logs, uninstall, restore-backup, dry-run, wait-for-exit, MelonLoader preflight and duplicate-file warnings.
- Added in-game Data Center runtime status, log opening and support package buttons to the Options panel.
- Added configurable Unity 6000 safe-mode switches for scene, input, scroll and TimeScale fallbacks.
- Expanded Object Search with tag, layer, component and active-state filters plus recent/favorite working sets.
- Added a hover target label that shows the aimed world object's name without starting full Mouse Inspect.
- Added a manual GitHub Actions release workflow with tag guards, ZIP validation and changelog-derived release notes.
- Added a generated local Data Center known-issues/support-matrix document.
- Centralized Unity 6000 safe UI fallback helpers.
- Added clearer runtime compatibility logging.
- GitHub Actions now uploads the ready-to-use CoreCLR ZIP plus generated SHA256 checksums.
Expand All @@ -19,8 +24,13 @@ All notable changes to this Data Center-focused UnityExplorer fork are documente
### Deutsch

- Support-Paket-Skript zum Sammeln von Data-Center-Logs, Datei-Hashes und erkannten Runtime-Versionen hinzugefügt.
- `install-datacenter.ps1` mit Dry-Run, Warten auf Spielende, MelonLoader-Vorprüfung und Warnungen vor doppelten Dateien verbessert.
- Manuellen GitHub-Actions-Release-Workflow für Data-Center-CoreCLR-Builds hinzugefügt.
- `install-datacenter.ps1` mit Auto-Erkennung, Status, Logs-öffnen, Uninstall, Backup-Restore, Dry-Run, Warten auf Spielende, MelonLoader-Vorprüfung und Warnungen vor doppelten Dateien verbessert.
- Ingame Data-Center-Runtime-Status, Logs-öffnen und Support-Paket-Buttons im Options-Panel ergänzt.
- Konfigurierbare Unity-6000-Safe-Mode-Schalter für Scene-, Input-, Scroll- und TimeScale-Fallbacks hinzugefügt.
- Object Search um Tag-, Layer-, Komponenten- und Aktivitätsfilter sowie Recent/Favorites-Arbeitslisten erweitert.
- Hover-Zielanzeige ergänzt, die den Namen des anvisierten World-Objekts ohne vollständigen Mouse Inspect anzeigt.
- Manuellen GitHub-Actions-Release-Workflow mit Tag-Prüfung, ZIP-Validierung und Changelog-basierten Release Notes hinzugefügt.
- Generierte lokale Data-Center-Known-Issues-/Support-Matrix ergänzt.
- Unity-6000-Safe-UI-Fallback-Helfer zentralisiert.
- Klareres Runtime-Kompatibilitätslogging ergänzt.
- GitHub Actions lädt jetzt die fertige CoreCLR-ZIP plus erzeugte SHA256-Prüfsummen hoch.
Expand Down
24 changes: 24 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -111,8 +111,14 @@ Nützliche Installationsoptionen:
```powershell
powershell -ExecutionPolicy Bypass -File .\install-datacenter.ps1 -BuildIfMissing -DryRun
powershell -ExecutionPolicy Bypass -File .\install-datacenter.ps1 -BuildIfMissing -WaitForGameExit
powershell -ExecutionPolicy Bypass -File .\install-datacenter.ps1 -Status
powershell -ExecutionPolicy Bypass -File .\install-datacenter.ps1 -OpenLogs
powershell -ExecutionPolicy Bypass -File .\install-datacenter.ps1 -Uninstall
powershell -ExecutionPolicy Bypass -File .\install-datacenter.ps1 -RestoreBackup latest
```

Ohne `-GameDir` versucht das Skript, den Data-Center-Ordner automatisch über Steam zu finden.

Ausführliche Anleitung:

[Installationsanleitung](https://github.com/BloddyMichi/Unity-Explorer-/wiki/Installation)
Expand Down Expand Up @@ -146,8 +152,13 @@ Support-Paket für Fehlersuche erstellen:

```powershell
powershell -ExecutionPolicy Bypass -File .\collect-datacenter-logs.ps1
powershell -ExecutionPolicy Bypass -File .\update-datacenter-known-issues.ps1
```

Im Spiel enthält das Options-Panel zusätzlich einen **Data Center Runtime Status** mit Buttons zum Aktualisieren, Logs öffnen und Support-ZIP erstellen.

Das Options-Panel enthält außerdem **Show target name while aiming**. Wenn diese Option aktiv ist, zeigt UnityExplorer beim Zielen auf ein World-Objekt eine kleine nicht-interaktive Zielanzeige mit dem Objektnamen.

---

## Aus dem Source Code bauen
Expand Down Expand Up @@ -189,6 +200,7 @@ Weitere Informationen findest du im Wiki:

- [Lokale Installation / Local Installation](docs/INSTALL_DATACENTER_DE_EN.md)
- [Lokales Troubleshooting / Local Troubleshooting](docs/TROUBLESHOOTING_DATACENTER_DE.md)
- [Lokale Known Issues / Local Known Issues](docs/DATACENTER_KNOWN_ISSUES.md)
- [Home](https://github.com/BloddyMichi/Unity-Explorer-/wiki)
- [Installation](https://github.com/BloddyMichi/Unity-Explorer-/wiki/Installation)
- [Known Issues](https://github.com/BloddyMichi/Unity-Explorer-/wiki/Known-Issues)
Expand Down Expand Up @@ -368,8 +380,14 @@ Useful install options:
```powershell
powershell -ExecutionPolicy Bypass -File .\install-datacenter.ps1 -BuildIfMissing -DryRun
powershell -ExecutionPolicy Bypass -File .\install-datacenter.ps1 -BuildIfMissing -WaitForGameExit
powershell -ExecutionPolicy Bypass -File .\install-datacenter.ps1 -Status
powershell -ExecutionPolicy Bypass -File .\install-datacenter.ps1 -OpenLogs
powershell -ExecutionPolicy Bypass -File .\install-datacenter.ps1 -Uninstall
powershell -ExecutionPolicy Bypass -File .\install-datacenter.ps1 -RestoreBackup latest
```

When `-GameDir` is omitted, the script tries to auto-detect the Data Center folder from Steam.

Detailed instructions:

[Installation Guide](https://github.com/BloddyMichi/Unity-Explorer-/wiki/Installation)
Expand Down Expand Up @@ -403,8 +421,13 @@ Create a support package for troubleshooting:

```powershell
powershell -ExecutionPolicy Bypass -File .\collect-datacenter-logs.ps1
powershell -ExecutionPolicy Bypass -File .\update-datacenter-known-issues.ps1
```

In game, the Options panel also includes a **Data Center Runtime Status** block with buttons to refresh status, open logs and create a support ZIP.

The Options panel also includes **Show target name while aiming**. When enabled, UnityExplorer shows a small non-interactive target label with the object name while aiming at a world object.

---

## Build From Source
Expand Down Expand Up @@ -457,6 +480,7 @@ The wiki contains additional setup, troubleshooting and development information:

- [Local Installation](docs/INSTALL_DATACENTER_DE_EN.md)
- [Local Troubleshooting](docs/TROUBLESHOOTING_DATACENTER_DE.md)
- [Local Known Issues](docs/DATACENTER_KNOWN_ISSUES.md)
- [Home](https://github.com/BloddyMichi/Unity-Explorer-/wiki)
- [Installation](https://github.com/BloddyMichi/Unity-Explorer-/wiki/Installation)
- [Known Issues](https://github.com/BloddyMichi/Unity-Explorer-/wiki/Known-Issues)
Expand Down
3 changes: 3 additions & 0 deletions UniverseLib/src/UI/Widgets/ScrollView/ScrollPool.cs
Original file line number Diff line number Diff line change
Expand Up @@ -698,6 +698,9 @@ private void OnSliderValueChanged(float val)
if (!HasValidPoolState())
return;

if (DataSource.ItemCount <= 0 || HeightCache.Count <= 0)
return;

RefreshCellHeightsFast();

// normalize the scroll position for the scroll bounds.
Expand Down
12 changes: 12 additions & 0 deletions docs/CHANGELOG_DATACENTER_DE_EN.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,12 @@
- Support-Paket-Skript für Logs, Hashes und Runtime-Versionen ergänzt.
- Install-Skript mit Dry-Run, Warten auf Spielende und Vorabprüfungen verbessert.
- Manuellen GitHub-Actions-Release-Workflow ergänzt.
- Install-Skript um Auto-Erkennung, Status, Logs-öffnen, Uninstall und Backup-Restore erweitert.
- Options-Panel um Data-Center-Runtime-Status und Ingame-Support-Paket erweitert.
- Unity-6000-Safe-Mode-Schalter konfigurierbar gemacht.
- Object Search um Tag-, Layer-, Komponenten- und Aktivitätsfilter sowie Recent/Favorites erweitert.
- Hover-Zielanzeige für den Namen des anvisierten World-Objekts ergänzt.
- Lokalen Known-Issues-/Support-Matrix-Generator ergänzt.

## English

Expand Down Expand Up @@ -73,3 +79,9 @@
- Added a support package script for logs, hashes and runtime versions.
- Improved the install script with dry-run, wait-for-exit and preflight checks.
- Added a manual GitHub Actions release workflow.
- Extended the install script with auto-detect, status, open-logs, uninstall and backup restore.
- Added Data Center runtime status and in-game support package creation to the Options panel.
- Made Unity 6000 safe-mode fallbacks configurable.
- Expanded Object Search with tag, layer, component and active-state filters plus recent/favorites.
- Added a hover target label for the aimed world object's name.
- Added a local known-issues/support-matrix generator.
40 changes: 40 additions & 0 deletions docs/DATACENTER_KNOWN_ISSUES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Data Center Known Issues

Generated: 2026-07-10 19:08:54 +02:00

## Detected Runtime

- [18:38:23.835] Unity Version: 6000.4.12f1
- [18:38:23.562] MelonLoader v0.7.3 Open-Beta
- [18:38:23.835] Game Version: UNKNOWN
- Game directory: C:\Program Files (x86)\Steam\steamapps\common\Data Center

## Support Matrix

| Area | Status | Notes |
|---|---|---|
| Unity 6000.x / IL2CPP / CoreCLR startup | Supported | Tested with Unity 6000.4.12f1 and MelonLoader 0.7.3 Open-Beta. |
| C# Console | Supported with fallback | Uses safe multi-line input on Unity 6000. |
| Hook Manager | Supported with fallback | Uses safe editor input and generic argument container on Unity 6000. |
| Object Search | Supported | Preferred replacement for Scene Explorer in Data Center. |
| Scene Explorer | Disabled by default | Disabled because SceneManager scene access can throw AccessViolationException on Unity 6000 IL2CPP/CoreCLR. |
| TimeScale widget | Disabled by default | Can be re-enabled from options if needed, but restart is recommended. |
| UniverseLib UI AssetBundle | Disabled by default | Built-in UI resources are used on Unity 6000. |

## Known Issues

- MelonLoader can log an early `EndOfStreamException` while reading game info. If UnityExplorer initializes afterwards, this is not currently blocking.
- Some Unity UIElements generic type cache warnings can appear during UniverseLib startup. They are logged as warnings and have not blocked the Data Center flow.
- Layer name lookup is avoided in Unity 6000 safe paths; numeric layer labels may appear instead.
- If UnityExplorer does not load, run `.\install-datacenter.ps1 -Status` and check for duplicate or misplaced DLLs.

## Useful Commands

```powershell
.\install-datacenter.ps1 -Status
.\install-datacenter.ps1 -BuildIfMissing -DryRun
.\install-datacenter.ps1 -Uninstall
.\install-datacenter.ps1 -RestoreBackup latest
.\collect-datacenter-logs.ps1
.\update-datacenter-known-issues.ps1
```
18 changes: 18 additions & 0 deletions docs/INSTALL_DATACENTER_DE_EN.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,15 @@ Nützliche Optionen:
```powershell
powershell -ExecutionPolicy Bypass -File .\install-datacenter.ps1 -BuildIfMissing -DryRun
powershell -ExecutionPolicy Bypass -File .\install-datacenter.ps1 -BuildIfMissing -WaitForGameExit
powershell -ExecutionPolicy Bypass -File .\install-datacenter.ps1 -Status
powershell -ExecutionPolicy Bypass -File .\install-datacenter.ps1 -OpenLogs
powershell -ExecutionPolicy Bypass -File .\install-datacenter.ps1 -Uninstall
powershell -ExecutionPolicy Bypass -File .\install-datacenter.ps1 -RestoreBackup latest
```

`-DryRun` zeigt die geplanten Dateien und SHA256-Hashes, ohne etwas zu kopieren. `-WaitForGameExit` wartet, bis Data Center beendet wurde, bevor Dateien ersetzt werden.
`-Status` zeigt installierte Hashes, Backups, laufende Prozesse und doppelte Dateien. `-Uninstall` entfernt die installierten Dateien mit Backup. `-RestoreBackup latest` stellt das neueste Backup wieder her.
Ohne `-GameDir` versucht das Skript, den Data-Center-Ordner automatisch über Steam zu finden.

Bei einem anderen Installationspfad:

Expand Down Expand Up @@ -75,8 +81,11 @@ Bei Problemen kannst du ein Support-Paket erzeugen:

```powershell
powershell -ExecutionPolicy Bypass -File .\collect-datacenter-logs.ps1
powershell -ExecutionPolicy Bypass -File .\update-datacenter-known-issues.ps1
```

Im Spiel kann das Options-Panel ebenfalls ein Support-ZIP erstellen und Logs öffnen.

## English

### Recommended path
Expand Down Expand Up @@ -122,9 +131,15 @@ Useful options:
```powershell
powershell -ExecutionPolicy Bypass -File .\install-datacenter.ps1 -BuildIfMissing -DryRun
powershell -ExecutionPolicy Bypass -File .\install-datacenter.ps1 -BuildIfMissing -WaitForGameExit
powershell -ExecutionPolicy Bypass -File .\install-datacenter.ps1 -Status
powershell -ExecutionPolicy Bypass -File .\install-datacenter.ps1 -OpenLogs
powershell -ExecutionPolicy Bypass -File .\install-datacenter.ps1 -Uninstall
powershell -ExecutionPolicy Bypass -File .\install-datacenter.ps1 -RestoreBackup latest
```

`-DryRun` prints the planned files and SHA256 hashes without copying anything. `-WaitForGameExit` waits until Data Center has exited before replacing files.
`-Status` prints installed hashes, backups, running processes and duplicate files. `-Uninstall` removes the installed files after backing them up. `-RestoreBackup latest` restores the newest backup.
When `-GameDir` is omitted, the script tries to auto-detect the Data Center folder from Steam.

For a custom install path:

Expand Down Expand Up @@ -152,4 +167,7 @@ If something fails, create a support package:

```powershell
powershell -ExecutionPolicy Bypass -File .\collect-datacenter-logs.ps1
powershell -ExecutionPolicy Bypass -File .\update-datacenter-known-issues.ps1
```

The in-game Options panel can also create a support ZIP and open logs.
Loading
Loading