Fix randomly rejected form field submits (#8091)
[oweals/minetest.git] / src / itemdef.cpp
index 3d8116bf642085b0bf6d5a8123a62961ce94fe1f..9d6068bab8e9199fd5af25fa4a2b97d01a52a2d7 100644 (file)
@@ -24,11 +24,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "tool.h"
 #include "inventory.h"
 #ifndef SERVER
-#include "mapblock_mesh.h"
-#include "mesh.h"
-#include "wieldmesh.h"
+#include "client/mapblock_mesh.h"
+#include "client/mesh.h"
+#include "client/wieldmesh.h"
 #include "client/tile.h"
-#include "client.h"
+#include "client/client.h"
 #endif
 #include "log.h"
 #include "settings.h"
@@ -128,44 +128,44 @@ void ItemDefinition::reset()
 
 void ItemDefinition::serialize(std::ostream &os, u16 protocol_version) const
 {
-       u8 version = (protocol_version >= 34) ? 4 : 3;
+       // protocol_version >= 37
+       u8 version = 6;
        writeU8(os, version);
        writeU8(os, type);
        os << serializeString(name);
        os << serializeString(description);
        os << serializeString(inventory_image);
        os << serializeString(wield_image);
-       writeV3F1000(os, wield_scale);
+       writeV3F32(os, wield_scale);
        writeS16(os, stack_max);
        writeU8(os, usable);
        writeU8(os, liquids_pointable);
+
        std::string tool_capabilities_s;
-       if(tool_capabilities){
+       if (tool_capabilities) {
                std::ostringstream tmp_os(std::ios::binary);
                tool_capabilities->serialize(tmp_os, protocol_version);
                tool_capabilities_s = tmp_os.str();
        }
        os << serializeString(tool_capabilities_s);
+
        writeU16(os, groups.size());
        for (const auto &group : groups) {
                os << serializeString(group.first);
                writeS16(os, group.second);
        }
+
        os << serializeString(node_placement_prediction);
-       os << serializeString(sound_place.name);
-       writeF1000(os, sound_place.gain);
-       writeF1000(os, range);
-       os << serializeString(sound_place_failed.name);
-       writeF1000(os, sound_place_failed.gain);
-       os << serializeString(palette_image);
-       writeU32(os, color.color);
 
-       if (version >= 4) {
-               writeF1000(os, sound_place.pitch);
-               writeF1000(os, sound_place_failed.pitch);
-               os << serializeString(inventory_overlay);
-               os << serializeString(wield_overlay);
-       }
+       // Version from ContentFeatures::serialize to keep in sync
+       sound_place.serialize(os, CONTENTFEATURES_VERSION);
+       sound_place_failed.serialize(os, CONTENTFEATURES_VERSION);
+
+       writeF32(os, range);
+       os << serializeString(palette_image);
+       writeARGB8(os, color);
+       os << serializeString(inventory_overlay);
+       os << serializeString(wield_overlay);
 }
 
 void ItemDefinition::deSerialize(std::istream &is)
@@ -175,24 +175,26 @@ void ItemDefinition::deSerialize(std::istream &is)
 
        // Deserialize
        int version = readU8(is);
-       if (version < 1 || version > 4)
+       if (version < 6)
                throw SerializationError("unsupported ItemDefinition version");
+
        type = (enum ItemType)readU8(is);
        name = deSerializeString(is);
        description = deSerializeString(is);
        inventory_image = deSerializeString(is);
        wield_image = deSerializeString(is);
-       wield_scale = readV3F1000(is);
+       wield_scale = readV3F32(is);
        stack_max = readS16(is);
        usable = readU8(is);
        liquids_pointable = readU8(is);
+
        std::string tool_capabilities_s = deSerializeString(is);
-       if(!tool_capabilities_s.empty())
-       {
+       if (!tool_capabilities_s.empty()) {
                std::istringstream tmp_is(tool_capabilities_s, std::ios::binary);
                tool_capabilities = new ToolCapabilities;
                tool_capabilities->deSerialize(tmp_is);
        }
+
        groups.clear();
        u32 groups_size = readU16(is);
        for(u32 i=0; i<groups_size; i++){
@@ -200,40 +202,26 @@ void ItemDefinition::deSerialize(std::istream &is)
                int value = readS16(is);
                groups[name] = value;
        }
-       if(version == 1){
-               // We cant be sure that node_placement_prediction is send in version 1
-               try{
-                       node_placement_prediction = deSerializeString(is);
-               }catch(SerializationError &e) {};
-               // Set the old default sound
-               sound_place.name = "default_place_node";
-               sound_place.gain = 0.5;
-       } else if(version >= 2) {
-               node_placement_prediction = deSerializeString(is);
-               //deserializeSimpleSoundSpec(sound_place, is);
-               sound_place.name = deSerializeString(is);
-               sound_place.gain = readF1000(is);
-       }
-       if(version >= 3) {
-               range = readF1000(is);
-       }
+
+       node_placement_prediction = deSerializeString(is);
+
+       // Version from ContentFeatures::serialize to keep in sync
+       sound_place.deSerialize(is, CONTENTFEATURES_VERSION);
+       sound_place_failed.deSerialize(is, CONTENTFEATURES_VERSION);
+
+       range = readF32(is);
+       palette_image = deSerializeString(is);
+       color = readARGB8(is);
+       inventory_overlay = deSerializeString(is);
+       wield_overlay = deSerializeString(is);
+
        // If you add anything here, insert it primarily inside the try-catch
        // block to not need to increase the version.
-       try {
-               sound_place_failed.name = deSerializeString(is);
-               sound_place_failed.gain = readF1000(is);
-               palette_image = deSerializeString(is);
-               color.set(readU32(is));
-
-               if (version >= 4) {
-                       sound_place.pitch = readF1000(is);
-                       sound_place_failed.pitch = readF1000(is);
-                       inventory_overlay = deSerializeString(is);
-                       wield_overlay = deSerializeString(is);
-               }
-       } catch(SerializationError &e) {};
+       //try {
+       //} catch(SerializationError &e) {};
 }
 
+
 /*
        CItemDefManager
 */