mirror of
https://github.com/minetest/minetest.git
synced 2024-11-27 10:03:45 +01:00
Fix some textures not being sent correctly to older clients
Since b2eb44afc50976dc0954c868977b5829f3ff8a19, a texture defined as `[combine:16x512:0,0=some_file.png;etc` will not be sent correctly from a 5.5 server to a 5.4 client due to the overeager detection of unsupported base modifier `[` introducing a spurious `blank.png^` before the modifier. Fix this by whitelisting which base modifiers can be passed through unchanged to the client, and prefix `blank.png` for the others (which at the moment is just [png:, but the list may grow larger as new base modifiers are added.)
This commit is contained in:
parent
48d1bca9b8
commit
23f981c458
@ -33,6 +33,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||||||
#include "nameidmapping.h"
|
#include "nameidmapping.h"
|
||||||
#include "util/numeric.h"
|
#include "util/numeric.h"
|
||||||
#include "util/serialize.h"
|
#include "util/serialize.h"
|
||||||
|
#include "util/string.h"
|
||||||
#include "exceptions.h"
|
#include "exceptions.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "gamedef.h"
|
#include "gamedef.h"
|
||||||
@ -213,10 +214,21 @@ void TileDef::serialize(std::ostream &os, u16 protocol_version) const
|
|||||||
// Before f018737, TextureSource::getTextureAverageColor did not handle
|
// Before f018737, TextureSource::getTextureAverageColor did not handle
|
||||||
// missing textures. "[png" can be used as base texture, but is not known
|
// missing textures. "[png" can be used as base texture, but is not known
|
||||||
// on older clients. Hence use "blank.png" to avoid this problem.
|
// on older clients. Hence use "blank.png" to avoid this problem.
|
||||||
if (!name.empty() && name[0] == '[')
|
// To be forward-compatible with future base textures/modifiers,
|
||||||
os << serializeString16("blank.png^" + name);
|
// we apply the same prefix to any texture beginning with [,
|
||||||
else
|
// except for the ones that are supported on older clients.
|
||||||
|
bool pass_through = true;
|
||||||
|
|
||||||
|
if (!name.empty() && name[0] == '[') {
|
||||||
|
pass_through = str_starts_with(name, "[combine:") ||
|
||||||
|
str_starts_with(name, "[inventorycube{") ||
|
||||||
|
str_starts_with(name, "[lowpart:");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pass_through)
|
||||||
os << serializeString16(name);
|
os << serializeString16(name);
|
||||||
|
else
|
||||||
|
os << serializeString16("blank.png^" + name);
|
||||||
}
|
}
|
||||||
animation.serialize(os, version);
|
animation.serialize(os, version);
|
||||||
bool has_scale = scale > 0;
|
bool has_scale = scale > 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user