From fb32571a3cfe59cc963f1324ab57b561547f40d4 Mon Sep 17 00:00:00 2001 From: Julian Date: Fri, 9 Feb 2024 13:24:32 +0100 Subject: [PATCH] Add NeoForge support --- lang/en.json | 1 + src/Analyser/NeoForgeAnalyser.php | 19 + .../NeoForge/NeoForgeInformation.php | 10 + .../NeoForgeJavaVersionInformation.php | 21 + .../NeoForgeVanillaVersionInformation.php | 16 + .../NeoForge/NeoForgeVersionInformation.php | 32 + src/Detective/Detective.php | 4 + .../Vanilla/Forge/ForgeClientLog.php | 2 +- .../Vanilla/NeoForge/NeoForgeClientLog.php | 20 + .../Vanilla/NeoForge/NeoForgeLog.php | 52 + .../Vanilla/NeoForge/NeoForgeServerLog.php | 10 + .../NeoForge/neoforge-1-20-4-client.json | 670 ++++++++ .../NeoForge/neoforge-1-20-4-client.log | 55 + .../NeoForge/neoforge-1-20-4-server.json | 1396 +++++++++++++++++ .../NeoForge/neoforge-1-20-4-server.log | 121 ++ test/tests/Logs/AutoLogsTest.php | 20 + 16 files changed, 2448 insertions(+), 1 deletion(-) create mode 100644 src/Analyser/NeoForgeAnalyser.php create mode 100644 src/Analysis/Information/NeoForge/NeoForgeInformation.php create mode 100644 src/Analysis/Information/NeoForge/NeoForgeJavaVersionInformation.php create mode 100644 src/Analysis/Information/NeoForge/NeoForgeVanillaVersionInformation.php create mode 100644 src/Analysis/Information/NeoForge/NeoForgeVersionInformation.php create mode 100644 src/Log/Minecraft/Vanilla/NeoForge/NeoForgeClientLog.php create mode 100644 src/Log/Minecraft/Vanilla/NeoForge/NeoForgeLog.php create mode 100644 src/Log/Minecraft/Vanilla/NeoForge/NeoForgeServerLog.php create mode 100644 test/data/Vanilla/NeoForge/neoforge-1-20-4-client.json create mode 100644 test/data/Vanilla/NeoForge/neoforge-1-20-4-client.log create mode 100644 test/data/Vanilla/NeoForge/neoforge-1-20-4-server.json create mode 100644 test/data/Vanilla/NeoForge/neoforge-1-20-4-server.log diff --git a/lang/en.json b/lang/en.json index 03cc7eaa..cbc05b14 100644 --- a/lang/en.json +++ b/lang/en.json @@ -7,6 +7,7 @@ "pocketmine-version": "Pocketmine version", "bedrock-version": "Bedrock version", "forge-version": "Forge version", + "neoforge-version": "NeoForge version", "magma-version": "Magma version", "mohist-version": "Mohist version", "arclight-version": "Arclight version", diff --git a/src/Analyser/NeoForgeAnalyser.php b/src/Analyser/NeoForgeAnalyser.php new file mode 100644 index 00000000..6eca196f --- /dev/null +++ b/src/Analyser/NeoForgeAnalyser.php @@ -0,0 +1,19 @@ +addPossibleInsightClass(NeoForgeVersionInformation::class); + $this->overridePossibleInsightClass(VanillaVersionInformation::class, NeoForgeVanillaVersionInformation::class); + $this->addPossibleInsightClass(NeoForgeJavaVersionInformation::class); + } +} \ No newline at end of file diff --git a/src/Analysis/Information/NeoForge/NeoForgeInformation.php b/src/Analysis/Information/NeoForge/NeoForgeInformation.php new file mode 100644 index 00000000..ec09fcd3 --- /dev/null +++ b/src/Analysis/Information/NeoForge/NeoForgeInformation.php @@ -0,0 +1,10 @@ +label = Translator::getInstance()->getTranslation("java-version"); + } + + /** + * @inheritDoc + */ + public static function getPatterns(): array + { + return ['/\[cpw\.mods\.modlauncher\.Launcher\/MODLAUNCHER\]: ModLauncher(?: [\w\.+]+)? starting: java version ([0-9\._]+) by Oracle Corporation/']; + } +} \ No newline at end of file diff --git a/src/Analysis/Information/NeoForge/NeoForgeVanillaVersionInformation.php b/src/Analysis/Information/NeoForge/NeoForgeVanillaVersionInformation.php new file mode 100644 index 00000000..5b042ad0 --- /dev/null +++ b/src/Analysis/Information/NeoForge/NeoForgeVanillaVersionInformation.php @@ -0,0 +1,16 @@ +label = Translator::getInstance()->getTranslation("neoforge-version"); + } + + public static function getPatterns(): array + { + return [ + '/NeoForge mod loading, version ('. static::$versionPattern .'),/', + '/--fml\.neoForgeVersion, ('. static::$versionPattern .')/' + ]; + } + + /** + * Get the NeoForge version pattern + * @return string + */ + public static function getVersionPattern(): string + { + return static::$versionPattern; + } +} \ No newline at end of file diff --git a/src/Detective/Detective.php b/src/Detective/Detective.php index 0376ccd6..cd4289f5 100644 --- a/src/Detective/Detective.php +++ b/src/Detective/Detective.php @@ -33,6 +33,8 @@ use Aternos\Codex\Minecraft\Log\Minecraft\Vanilla\Forge\Magma\MagmaServerLog; use Aternos\Codex\Minecraft\Log\Minecraft\Vanilla\Forge\Mohist\MohistCrashReportLog; use Aternos\Codex\Minecraft\Log\Minecraft\Vanilla\Forge\Mohist\MohistServerLog; +use Aternos\Codex\Minecraft\Log\Minecraft\Vanilla\NeoForge\NeoForgeClientLog; +use Aternos\Codex\Minecraft\Log\Minecraft\Vanilla\NeoForge\NeoForgeServerLog; use Aternos\Codex\Minecraft\Log\Minecraft\Vanilla\OldVanillaServerLog; use Aternos\Codex\Minecraft\Log\Minecraft\Vanilla\Quilt\QuiltClientLog; use Aternos\Codex\Minecraft\Log\Minecraft\Vanilla\Quilt\QuiltServerLog; @@ -53,6 +55,7 @@ class Detective extends \Aternos\Codex\Detective\Detective FabricClientLog::class, QuiltClientLog::class, ForgeClientLog::class, + NeoForgeClientLog::class, VanillaClientLog::class, VanillaServerLog::class, @@ -68,6 +71,7 @@ class Detective extends \Aternos\Codex\Detective\Detective ArclightServerLog::class, MagmaServerLog::class, ForgeServerLog::class, + NeoForgeServerLog::class, PocketmineServerLog::class, BedrockServerLog::class, BedrockContentLog::class, diff --git a/src/Log/Minecraft/Vanilla/Forge/ForgeClientLog.php b/src/Log/Minecraft/Vanilla/Forge/ForgeClientLog.php index 7c9c29f8..84a87ade 100644 --- a/src/Log/Minecraft/Vanilla/Forge/ForgeClientLog.php +++ b/src/Log/Minecraft/Vanilla/Forge/ForgeClientLog.php @@ -19,7 +19,7 @@ class ForgeClientLog extends ForgeLog implements ClientLogTypeInterface public static function getDetectors(): array { return [ - (new SinglePatternDetector())->setPattern('/^\[[^\]]+\] \[main\/INFO\]( \[[^\]]+\])?: Launching target \'(fml|forge)client\' with arguments.*$/m') + (new SinglePatternDetector())->setPattern('/^\[[^\]]+\] \[main\/INFO\]( \[[^\]]+\])?: ModLauncher running: .*--fml.forgeVersion.*(\n.*)*\n\[[^\]]+\] \[main\/INFO\]( \[[^\]]+\])?: Launching target \'(fml|forge)client\' with arguments.*$/m') ]; } } \ No newline at end of file diff --git a/src/Log/Minecraft/Vanilla/NeoForge/NeoForgeClientLog.php b/src/Log/Minecraft/Vanilla/NeoForge/NeoForgeClientLog.php new file mode 100644 index 00000000..8aee8832 --- /dev/null +++ b/src/Log/Minecraft/Vanilla/NeoForge/NeoForgeClientLog.php @@ -0,0 +1,20 @@ +setPattern('/^\[[^\]]+\] \[main\/INFO\]( \[[^\]]+\])?: ModLauncher running: .*--fml.neoForgeVersion.*(\n.*)*\n\[[^\]]+\] \[main\/INFO\]( \[[^\]]+\])?: Launching target \'(fml|forge)client\' with arguments.*$/m') + ]; + } +} \ No newline at end of file diff --git a/src/Log/Minecraft/Vanilla/NeoForge/NeoForgeLog.php b/src/Log/Minecraft/Vanilla/NeoForge/NeoForgeLog.php new file mode 100644 index 00000000..c1cb9a6f --- /dev/null +++ b/src/Log/Minecraft/Vanilla/NeoForge/NeoForgeLog.php @@ -0,0 +1,52 @@ +setPattern('/NeoForge mod loading/') + ]); + } + + /** + * @return AnalyserInterface + */ + public static function getDefaultAnalyser(): AnalyserInterface + { + return new NeoForgeAnalyser(); + } + + /** + * @return ParserInterface + */ + public static function getDefaultParser(): ParserInterface + { + return (new ForgeParser()) + ->setPattern(static::$pattern) + ->setMatches([ForgeParser::PREFIX, ForgeParser::LEVEL, ForgeParser::CHANNEL]); + } + + /** + * @return string + */ + public function getName(): string + { + return "NeoForge"; + } +} \ No newline at end of file diff --git a/src/Log/Minecraft/Vanilla/NeoForge/NeoForgeServerLog.php b/src/Log/Minecraft/Vanilla/NeoForge/NeoForgeServerLog.php new file mode 100644 index 00000000..7b5f68e1 --- /dev/null +++ b/src/Log/Minecraft/Vanilla/NeoForge/NeoForgeServerLog.php @@ -0,0 +1,10 @@ +assertStringEqualsFile($log->getExpectedPath(), $log->getOutput(), $log->getLogPath()); } + /** + * @return void + * @throws Exception + */ + public function test_neoforge_1_20_4_client(): void + { + $log = new TestLog('Vanilla/NeoForge/neoforge-1-20-4-client.log'); + $this->assertStringEqualsFile($log->getExpectedPath(), $log->getOutput(), $log->getLogPath()); + } + + /** + * @return void + * @throws Exception + */ + public function test_neoforge_1_20_4_server(): void + { + $log = new TestLog('Vanilla/NeoForge/neoforge-1-20-4-server.log'); + $this->assertStringEqualsFile($log->getExpectedPath(), $log->getOutput(), $log->getLogPath()); + } + /** * @return void * @throws Exception