From 994e3a48196fcbd80f086a7ffde5bd8329f3bb1b Mon Sep 17 00:00:00 2001 From: NOTPIES Date: Mon, 16 Mar 2026 18:02:39 -0300 Subject: [PATCH] fix: fix ded server crash because colour table is null --- Minecraft.World/PotionBrewing.cpp | 33 +++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/Minecraft.World/PotionBrewing.cpp b/Minecraft.World/PotionBrewing.cpp index 72a29bb..b81888b 100644 --- a/Minecraft.World/PotionBrewing.cpp +++ b/Minecraft.World/PotionBrewing.cpp @@ -180,11 +180,39 @@ int PotionBrewing::getAppearanceValue(int brew) return valueOf(brew, 5, 4, 3, 2, 1); } +static unsigned int GetFallbackPotionColour(eMinecraftColour id) +{ + switch (id) + { + case eMinecraftColour_Potion_BaseColour: return 0x385DC6; + case eMinecraftColour_Effect_MovementSpeed: return 0x7CAFC6; + case eMinecraftColour_Effect_MovementSlowDown: return 0x5A6C81; + case eMinecraftColour_Effect_DigSpeed: return 0xD9C043; + case eMinecraftColour_Effect_DigSlowdown: return 0x4A4217; + case eMinecraftColour_Effect_DamageBoost: return 0x932423; + case eMinecraftColour_Effect_Heal: return 0xF82423; + case eMinecraftColour_Effect_Harm: return 0x430A09; + case eMinecraftColour_Effect_Jump: return 0x786297; + case eMinecraftColour_Effect_Confusion: return 0x551D4A; + case eMinecraftColour_Effect_Regeneration: return 0xCD5CAB; + case eMinecraftColour_Effect_DamageResistance: return 0x99453A; + case eMinecraftColour_Effect_FireResistance: return 0xE49A3A; + case eMinecraftColour_Effect_WaterBreathing: return 0x2E5299; + case eMinecraftColour_Effect_Invisiblity: return 0x7F8392; + case eMinecraftColour_Effect_Blindness: return 0x1F1F23; + case eMinecraftColour_Effect_NightVision: return 0x1F1FA1; + case eMinecraftColour_Effect_Hunger: return 0x587653; + case eMinecraftColour_Effect_Weakness: return 0x484D48; + case eMinecraftColour_Effect_Poison: return 0x4E9331; + default: return 0xFFFFFF; + } +} + int PotionBrewing::getColorValue(vector *effects) { ColourTable *colourTable = Minecraft::GetInstance()->getColourTable(); - int baseColor = colourTable->getColor( eMinecraftColour_Potion_BaseColour ); + int baseColor = colourTable != NULL ? colourTable->getColor(eMinecraftColour_Potion_BaseColour) : GetFallbackPotionColour(eMinecraftColour_Potion_BaseColour); if (effects == NULL || effects->empty()) { @@ -200,7 +228,8 @@ int PotionBrewing::getColorValue(vector *effects) for(AUTO_VAR(it, effects->begin()); it != effects->end(); ++it) { MobEffectInstance *effect = *it; - int potionColor = colourTable->getColor( MobEffect::effects[effect->getId()]->getColor() ); + eMinecraftColour effectColorId = MobEffect::effects[effect->getId()]->getColor(); + int potionColor = colourTable != NULL ? colourTable->getColor(effectColorId) : GetFallbackPotionColour(effectColorId); for (int potency = 0; potency <= effect->getAmplifier(); potency++) {