diff --git a/src/nodedef.cpp b/src/nodedef.cpp index 39ea1a60e2b6734e20233b9067584aff442a1a58..ccbb42c667e4de507e70bc352e94f861f0b7a113 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -482,6 +482,7 @@ void ContentFeatures::deSerialize(std::istream &is) liquid_viscosity = readU8(is); liquid_renewable = readU8(is); light_source = readU8(is); + light_source = MYMIN(light_source, LIGHT_MAX); damage_per_second = readU32(is); node_box.deSerialize(is); selection_box.deSerialize(is); @@ -1442,6 +1443,7 @@ void ContentFeatures::deSerializeOld(std::istream &is, int version) liquid_alternative_source = deSerializeString(is); liquid_viscosity = readU8(is); light_source = readU8(is); + light_source = MYMIN(light_source, LIGHT_MAX); damage_per_second = readU32(is); node_box.deSerialize(is); selection_box.deSerialize(is); diff --git a/src/script/common/c_content.cpp b/src/script/common/c_content.cpp index f20a65903c5015f1d40cd7a129ea773e1e02ef6f..5417448953056e04a612931eb76ba7e2b9ac4800 100644 --- a/src/script/common/c_content.cpp +++ b/src/script/common/c_content.cpp @@ -526,6 +526,12 @@ ContentFeatures read_content_features(lua_State *L, int index) // Amount of light the node emits f.light_source = getintfield_default(L, index, "light_source", f.light_source); + if (f.light_source > LIGHT_MAX) { + warningstream << "Node " << f.name.c_str() + << " had greater light_source than " << LIGHT_MAX + << ", it was reduced." << std::endl; + f.light_source = LIGHT_MAX; + } f.damage_per_second = getintfield_default(L, index, "damage_per_second", f.damage_per_second); diff --git a/src/voxelalgorithms.cpp b/src/voxelalgorithms.cpp index 55f0d1c986d820a9184b2b5d48b2c6117f0d912b..93cc33acc0a5cf7bcf57b8a5f9100f198ebf92a9 100644 --- a/src/voxelalgorithms.cpp +++ b/src/voxelalgorithms.cpp @@ -264,6 +264,7 @@ struct LightQueue { const mapblock_v3 &block_pos, MapBlock *block, direction source_dir) { + assert(light <= LIGHT_SUN); lights[light].push_back( ChangingLight(rel_pos, block_pos, block, source_dir)); }