Disable placement prediction for nodes that use on_rightclick
parent
214a8b4597
commit
365c169b43
|
@ -2531,7 +2531,8 @@ void the_game(
|
||||||
// make that happen
|
// make that happen
|
||||||
const ItemDefinition &def =
|
const ItemDefinition &def =
|
||||||
playeritem.getDefinition(itemdef);
|
playeritem.getDefinition(itemdef);
|
||||||
if(def.node_placement_prediction != "")
|
if(def.node_placement_prediction != ""
|
||||||
|
&& !nodedef->get(map.getNode(nodepos)).rightclickable)
|
||||||
do{ // breakable
|
do{ // breakable
|
||||||
verbosestream<<"Node placement prediction for "
|
verbosestream<<"Node placement prediction for "
|
||||||
<<playeritem.name<<" is "
|
<<playeritem.name<<" is "
|
||||||
|
|
|
@ -100,6 +100,7 @@ void ItemDefinition::reset()
|
||||||
wield_scale = v3f(1.0, 1.0, 1.0);
|
wield_scale = v3f(1.0, 1.0, 1.0);
|
||||||
stack_max = 99;
|
stack_max = 99;
|
||||||
usable = false;
|
usable = false;
|
||||||
|
rightclickable = false;
|
||||||
liquids_pointable = false;
|
liquids_pointable = false;
|
||||||
if(tool_capabilities)
|
if(tool_capabilities)
|
||||||
{
|
{
|
||||||
|
|
|
@ -62,6 +62,8 @@ struct ItemDefinition
|
||||||
*/
|
*/
|
||||||
s16 stack_max;
|
s16 stack_max;
|
||||||
bool usable;
|
bool usable;
|
||||||
|
// If true, don't use node placement prediction
|
||||||
|
bool rightclickable;
|
||||||
bool liquids_pointable;
|
bool liquids_pointable;
|
||||||
// May be NULL. If non-NULL, deleted by destructor
|
// May be NULL. If non-NULL, deleted by destructor
|
||||||
ToolCapabilities *tool_capabilities;
|
ToolCapabilities *tool_capabilities;
|
||||||
|
|
|
@ -199,6 +199,7 @@ void ContentFeatures::reset()
|
||||||
diggable = true;
|
diggable = true;
|
||||||
climbable = false;
|
climbable = false;
|
||||||
buildable_to = false;
|
buildable_to = false;
|
||||||
|
rightclickable = true;
|
||||||
liquid_type = LIQUID_NONE;
|
liquid_type = LIQUID_NONE;
|
||||||
liquid_alternative_flowing = "";
|
liquid_alternative_flowing = "";
|
||||||
liquid_alternative_source = "";
|
liquid_alternative_source = "";
|
||||||
|
@ -271,6 +272,7 @@ void ContentFeatures::serialize(std::ostream &os, u16 protocol_version)
|
||||||
serializeSimpleSoundSpec(sound_dug, os);
|
serializeSimpleSoundSpec(sound_dug, os);
|
||||||
// Stuff below should be moved to correct place in a version that otherwise changes
|
// Stuff below should be moved to correct place in a version that otherwise changes
|
||||||
// the protocol version
|
// the protocol version
|
||||||
|
writeU8(os, rightclickable);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ContentFeatures::deSerialize(std::istream &is)
|
void ContentFeatures::deSerialize(std::istream &is)
|
||||||
|
@ -334,6 +336,7 @@ void ContentFeatures::deSerialize(std::istream &is)
|
||||||
try{
|
try{
|
||||||
// Stuff below should be moved to correct place in a version that
|
// Stuff below should be moved to correct place in a version that
|
||||||
// otherwise changes the protocol version
|
// otherwise changes the protocol version
|
||||||
|
rightclickable = readU8(is);
|
||||||
}catch(SerializationError &e) {};
|
}catch(SerializationError &e) {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -199,6 +199,8 @@ struct ContentFeatures
|
||||||
bool climbable;
|
bool climbable;
|
||||||
// Player can build on these
|
// Player can build on these
|
||||||
bool buildable_to;
|
bool buildable_to;
|
||||||
|
// Player cannot build to these (placement prediction disabled)
|
||||||
|
bool rightclickable;
|
||||||
// Whether the node is non-liquid, source liquid or flowing liquid
|
// Whether the node is non-liquid, source liquid or flowing liquid
|
||||||
enum LiquidType liquid_type;
|
enum LiquidType liquid_type;
|
||||||
// If the content is liquid, this is the flowing version of the liquid.
|
// If the content is liquid, this is the flowing version of the liquid.
|
||||||
|
|
|
@ -1063,6 +1063,10 @@ static ItemDefinition read_item_definition(lua_State *L, int index,
|
||||||
def.usable = lua_isfunction(L, -1);
|
def.usable = lua_isfunction(L, -1);
|
||||||
lua_pop(L, 1);
|
lua_pop(L, 1);
|
||||||
|
|
||||||
|
lua_getfield(L, index, "on_rightclick");
|
||||||
|
def.rightclickable = lua_isfunction(L, -1);
|
||||||
|
lua_pop(L, 1);
|
||||||
|
|
||||||
getboolfield(L, index, "liquids_pointable", def.liquids_pointable);
|
getboolfield(L, index, "liquids_pointable", def.liquids_pointable);
|
||||||
|
|
||||||
warn_if_field_exists(L, index, "tool_digging_properties",
|
warn_if_field_exists(L, index, "tool_digging_properties",
|
||||||
|
@ -4746,7 +4750,7 @@ static int l_register_item_raw(lua_State *L)
|
||||||
// Default to having client-side placement prediction for nodes
|
// Default to having client-side placement prediction for nodes
|
||||||
// ("" in item definition sets it off)
|
// ("" in item definition sets it off)
|
||||||
if(def.node_placement_prediction == "__default"){
|
if(def.node_placement_prediction == "__default"){
|
||||||
if(def.type == ITEM_NODE)
|
if(def.type == ITEM_NODE && !def.rightclickable)
|
||||||
def.node_placement_prediction = name;
|
def.node_placement_prediction = name;
|
||||||
else
|
else
|
||||||
def.node_placement_prediction = "";
|
def.node_placement_prediction = "";
|
||||||
|
|
Loading…
Reference in New Issue