From 335fcc8ed1ba8ea24c49f85d43d0dc203de6cafd Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Tue, 7 Oct 2025 17:49:12 +0100 Subject: [PATCH 1/2] Trident: do not allow using if damage is too high fixes #6828 --- src/item/Trident.php | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/item/Trident.php b/src/item/Trident.php index 991f45b1d..7efd68d9f 100644 --- a/src/item/Trident.php +++ b/src/item/Trident.php @@ -33,6 +33,7 @@ use pocketmine\world\sound\TridentThrowSound; use function min; class Trident extends Tool implements Releasable{ + private const DAMAGE_ON_THROW = 1; public function getMaxDurability() : int{ return 251; @@ -48,7 +49,12 @@ class Trident extends Tool implements Releasable{ $item = $this->pop(); if($player->hasFiniteResources()){ - $item->applyDamage(1); + $item->applyDamage(self::DAMAGE_ON_THROW); + } + if($item->isNull()){ + //canStartUsingItem() will normally prevent this, but it's possible the item might've been modified between + //the start action and the release, so it's best to account for this anyway + return ItemUseResult::FAIL; } $entity = new TridentEntity(Location::fromObject( $player->getEyePos(), @@ -77,7 +83,7 @@ class Trident extends Tool implements Releasable{ } public function canStartUsingItem(Player $player) : bool{ - return $this->damage < $this->getMaxDurability(); + return $this->damage < $this->getMaxDurability() - self::DAMAGE_ON_THROW; } public function onAttackEntity(Entity $victim, array &$returnedItems) : bool{ From 6da3935abca7f7d9134860d134b6119d3cca1300 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Tue, 7 Oct 2025 18:34:20 +0100 Subject: [PATCH 2/2] Splash some URLs on the console at the end of startup Maybe this will be useful for people whose first encounter with PM is on a server host. --- composer.json | 2 +- composer.lock | 14 +++++----- src/Server.php | 20 +++++++++++-- src/VersionInfo.php | 1 + src/lang/KnownTranslationFactory.php | 42 ++++++++++++++++++++++++++++ src/lang/KnownTranslationKeys.php | 7 +++++ 6 files changed, 76 insertions(+), 10 deletions(-) diff --git a/composer.json b/composer.json index b8aecb734..87dddf5e8 100644 --- a/composer.json +++ b/composer.json @@ -42,7 +42,7 @@ "pocketmine/callback-validator": "^1.0.2", "pocketmine/color": "^0.3.0", "pocketmine/errorhandler": "^0.7.0", - "pocketmine/locale-data": "~2.25.0", + "pocketmine/locale-data": "~2.26.0", "pocketmine/log": "^0.4.0", "pocketmine/math": "~1.0.0", "pocketmine/nbt": "~1.2.0", diff --git a/composer.lock b/composer.lock index 0eb2f6d66..d4cbdb82f 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "85d9a1b0bed8a5b1fff320d396bdeb4f", + "content-hash": "ad9a8e8069598ae5ec679f069461623f", "packages": [ { "name": "adhocore/json-comment", @@ -472,16 +472,16 @@ }, { "name": "pocketmine/locale-data", - "version": "2.25.2", + "version": "2.26.0", "source": { "type": "git", "url": "https://github.com/pmmp/Language.git", - "reference": "44727765ad43df5e2e24a54ae70a70607ec7d488" + "reference": "f791369ae082fc5cdf0f2b0bd683e611ff7f90f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pmmp/Language/zipball/44727765ad43df5e2e24a54ae70a70607ec7d488", - "reference": "44727765ad43df5e2e24a54ae70a70607ec7d488", + "url": "https://api.github.com/repos/pmmp/Language/zipball/f791369ae082fc5cdf0f2b0bd683e611ff7f90f6", + "reference": "f791369ae082fc5cdf0f2b0bd683e611ff7f90f6", "shasum": "" }, "type": "library", @@ -489,9 +489,9 @@ "description": "Language resources used by PocketMine-MP", "support": { "issues": "https://github.com/pmmp/Language/issues", - "source": "https://github.com/pmmp/Language/tree/2.25.2" + "source": "https://github.com/pmmp/Language/tree/2.26.0" }, - "time": "2025-10-03T22:34:06+00:00" + "time": "2025-10-07T17:26:32+00:00" }, { "name": "pocketmine/log", diff --git a/src/Server.php b/src/Server.php index af9cbeda7..9f12dec07 100644 --- a/src/Server.php +++ b/src/Server.php @@ -872,7 +872,7 @@ class Server{ $this->logger->emergency($this->language->translate(KnownTranslationFactory::pocketmine_server_devBuild_error2())); $this->logger->emergency($this->language->translate(KnownTranslationFactory::pocketmine_server_devBuild_error3())); $this->logger->emergency($this->language->translate(KnownTranslationFactory::pocketmine_server_devBuild_error4(Yml::SETTINGS_ENABLE_DEV_BUILDS))); - $this->logger->emergency($this->language->translate(KnownTranslationFactory::pocketmine_server_devBuild_error5("https://github.com/pmmp/PocketMine-MP/releases"))); + $this->logger->emergency($this->language->translate(KnownTranslationFactory::pocketmine_server_devBuild_error5(VersionInfo::GITHUB_URL . "/releases"))); $this->forceShutdownExit(); return; @@ -1093,7 +1093,23 @@ class Server{ $this->configGroup->save(); $this->logger->info($this->language->translate(KnownTranslationFactory::pocketmine_server_defaultGameMode($this->getGamemode()->getTranslatableName()))); - $this->logger->info($this->language->translate(KnownTranslationFactory::pocketmine_server_donate(TextFormat::AQUA . "https://patreon.com/pocketminemp" . TextFormat::RESET))); + $highlight = TextFormat::AQUA; + $reset = TextFormat::RESET; + $github = VersionInfo::GITHUB_URL; + $splash = "\n\n"; + foreach([ + KnownTranslationFactory::pocketmine_server_url_discord("{$highlight}https://discord.pmmp.io{$reset}"), + KnownTranslationFactory::pocketmine_server_url_docs("{$highlight}https://doc.pmmp.io{$reset}"), + KnownTranslationFactory::pocketmine_server_url_sourceCode("{$highlight}{$github}{$reset}"), + KnownTranslationFactory::pocketmine_server_url_freePlugins("{$highlight}https://poggit.pmmp.io/plugins{$reset}"), + KnownTranslationFactory::pocketmine_server_url_donations("{$highlight}https://patreon.com/pocketminemp{$reset}"), + KnownTranslationFactory::pocketmine_server_url_translations("{$highlight}https://translate.pocketmine.net{$reset}"), + KnownTranslationFactory::pocketmine_server_url_bugReporting("{$highlight}{$github}/issues{$reset}") + ] as $link){ + $splash .= "- " . $this->language->translate($link) . "\n"; + } + $this->logger->info($splash); + $this->logger->info($this->language->translate(KnownTranslationFactory::pocketmine_server_startFinished(strval(round(microtime(true) - $this->startTime, 3))))); $forwarder = new BroadcastLoggerForwarder($this, $this->logger, $this->language); diff --git a/src/VersionInfo.php b/src/VersionInfo.php index 2f2f7e66c..8c68b4e13 100644 --- a/src/VersionInfo.php +++ b/src/VersionInfo.php @@ -34,6 +34,7 @@ final class VersionInfo{ public const BASE_VERSION = "5.35.1"; public const IS_DEVELOPMENT_BUILD = true; public const BUILD_CHANNEL = "stable"; + public const GITHUB_URL = "https://github.com/pmmp/PocketMine-MP"; /** * PocketMine-MP-specific version ID for world data. Used to determine what fixes need to be applied to old world diff --git a/src/lang/KnownTranslationFactory.php b/src/lang/KnownTranslationFactory.php index eadd74f32..cfd8d378e 100644 --- a/src/lang/KnownTranslationFactory.php +++ b/src/lang/KnownTranslationFactory.php @@ -2863,6 +2863,48 @@ final class KnownTranslationFactory{ return new Translatable(KnownTranslationKeys::POCKETMINE_SERVER_TICKOVERLOAD, []); } + public static function pocketmine_server_url_bugReporting(Translatable|string $bugReportingUrl) : Translatable{ + return new Translatable(KnownTranslationKeys::POCKETMINE_SERVER_URL_BUGREPORTING, [ + "bugReportingUrl" => $bugReportingUrl, + ]); + } + + public static function pocketmine_server_url_discord(Translatable|string $discordUrl) : Translatable{ + return new Translatable(KnownTranslationKeys::POCKETMINE_SERVER_URL_DISCORD, [ + "discordUrl" => $discordUrl, + ]); + } + + public static function pocketmine_server_url_docs(Translatable|string $docsUrl) : Translatable{ + return new Translatable(KnownTranslationKeys::POCKETMINE_SERVER_URL_DOCS, [ + "docsUrl" => $docsUrl, + ]); + } + + public static function pocketmine_server_url_donations(Translatable|string $donationsUrl) : Translatable{ + return new Translatable(KnownTranslationKeys::POCKETMINE_SERVER_URL_DONATIONS, [ + "donationsUrl" => $donationsUrl, + ]); + } + + public static function pocketmine_server_url_freePlugins(Translatable|string $pluginsUrl) : Translatable{ + return new Translatable(KnownTranslationKeys::POCKETMINE_SERVER_URL_FREEPLUGINS, [ + "pluginsUrl" => $pluginsUrl, + ]); + } + + public static function pocketmine_server_url_sourceCode(Translatable|string $sourceUrl) : Translatable{ + return new Translatable(KnownTranslationKeys::POCKETMINE_SERVER_URL_SOURCECODE, [ + "sourceUrl" => $sourceUrl, + ]); + } + + public static function pocketmine_server_url_translations(Translatable|string $translationsUrl) : Translatable{ + return new Translatable(KnownTranslationKeys::POCKETMINE_SERVER_URL_TRANSLATIONS, [ + "translationsUrl" => $translationsUrl, + ]); + } + public static function pocketmine_plugins() : Translatable{ return new Translatable(KnownTranslationKeys::POCKETMINE_PLUGINS, []); } diff --git a/src/lang/KnownTranslationKeys.php b/src/lang/KnownTranslationKeys.php index 44a64c489..d0e2c1a68 100644 --- a/src/lang/KnownTranslationKeys.php +++ b/src/lang/KnownTranslationKeys.php @@ -616,6 +616,13 @@ final class KnownTranslationKeys{ public const POCKETMINE_SERVER_START = "pocketmine.server.start"; public const POCKETMINE_SERVER_STARTFINISHED = "pocketmine.server.startFinished"; public const POCKETMINE_SERVER_TICKOVERLOAD = "pocketmine.server.tickOverload"; + public const POCKETMINE_SERVER_URL_BUGREPORTING = "pocketmine.server.url.bugReporting"; + public const POCKETMINE_SERVER_URL_DISCORD = "pocketmine.server.url.discord"; + public const POCKETMINE_SERVER_URL_DOCS = "pocketmine.server.url.docs"; + public const POCKETMINE_SERVER_URL_DONATIONS = "pocketmine.server.url.donations"; + public const POCKETMINE_SERVER_URL_FREEPLUGINS = "pocketmine.server.url.freePlugins"; + public const POCKETMINE_SERVER_URL_SOURCECODE = "pocketmine.server.url.sourceCode"; + public const POCKETMINE_SERVER_URL_TRANSLATIONS = "pocketmine.server.url.translations"; public const POCKETMINE_PLUGINS = "pocketmine_plugins"; public const POCKETMINE_WILL_START = "pocketmine_will_start"; public const PORT_WARNING = "port_warning";