mirror of
https://github.com/minetest/minetest.git
synced 2024-11-27 18:13:46 +01:00
Node definition aliases
This commit is contained in:
parent
6a5829788e
commit
4b00d4d9d2
@ -107,10 +107,19 @@
|
|||||||
-- minetest.chat_send_all(text)
|
-- minetest.chat_send_all(text)
|
||||||
-- minetest.chat_send_player(name, text)
|
-- minetest.chat_send_player(name, text)
|
||||||
-- minetest.get_player_privs(name) -> set of privs
|
-- minetest.get_player_privs(name) -> set of privs
|
||||||
|
--
|
||||||
-- stackstring_take_item(stackstring) -> stackstring, item
|
-- stackstring_take_item(stackstring) -> stackstring, item
|
||||||
-- stackstring_put_item(stackstring, item) -> stackstring, success
|
-- stackstring_put_item(stackstring, item) -> stackstring, success
|
||||||
-- stackstring_put_stackstring(stackstring, stackstring) -> stackstring, success
|
-- stackstring_put_stackstring(stackstring, stackstring) -> stackstring, success
|
||||||
--
|
--
|
||||||
|
-- minetest.digprop_constanttime(time)
|
||||||
|
-- minetest.digprop_stonelike(toughness)
|
||||||
|
-- minetest.digprop_dirtlike(toughness)
|
||||||
|
-- minetest.digprop_gravellike(toughness)
|
||||||
|
-- minetest.digprop_woodlike(toughness)
|
||||||
|
-- minetest.digprop_leaveslike(toughness)
|
||||||
|
-- minetest.digprop_glasslike(toughness)
|
||||||
|
--
|
||||||
-- Global objects:
|
-- Global objects:
|
||||||
-- minetest.env - environment reference
|
-- minetest.env - environment reference
|
||||||
--
|
--
|
||||||
|
@ -1,6 +1,46 @@
|
|||||||
-- legacy (Minetest 0.4 mod)
|
-- legacy (Minetest 0.4 mod)
|
||||||
-- Provides as much backwards-compatibility as feasible
|
-- Provides as much backwards-compatibility as feasible
|
||||||
|
|
||||||
|
minetest.alias_node("stone", "default:stone")
|
||||||
|
minetest.alias_node("dirt_with_grass", "default:dirt_with_grass")
|
||||||
|
minetest.alias_node("dirt_with_grass_footsteps", "default:dirt_with_grass_footsteps")
|
||||||
|
minetest.alias_node("dirt", "default:dirt")
|
||||||
|
minetest.alias_node("sand", "default:sand")
|
||||||
|
minetest.alias_node("gravel", "default:gravel")
|
||||||
|
minetest.alias_node("sandstone", "default:sandstone")
|
||||||
|
minetest.alias_node("clay", "default:clay")
|
||||||
|
minetest.alias_node("brick", "default:brick")
|
||||||
|
minetest.alias_node("tree", "default:tree")
|
||||||
|
minetest.alias_node("jungletree", "default:jungletree")
|
||||||
|
minetest.alias_node("junglegrass", "default:junglegrass")
|
||||||
|
minetest.alias_node("leaves", "default:leaves")
|
||||||
|
minetest.alias_node("cactus", "default:cactus")
|
||||||
|
minetest.alias_node("papyrus", "default:papyrus")
|
||||||
|
minetest.alias_node("bookshelf", "default:bookshelf")
|
||||||
|
minetest.alias_node("glass", "default:glass")
|
||||||
|
minetest.alias_node("wooden_fence", "default:fence_wood")
|
||||||
|
minetest.alias_node("rail", "default:rail")
|
||||||
|
minetest.alias_node("ladder", "default:ladder")
|
||||||
|
minetest.alias_node("wood", "default:wood")
|
||||||
|
minetest.alias_node("mese", "default:mese")
|
||||||
|
minetest.alias_node("cloud", "default:cloud")
|
||||||
|
minetest.alias_node("water_flowing", "default:water_flowing")
|
||||||
|
minetest.alias_node("water_source", "default:water_source")
|
||||||
|
minetest.alias_node("lava_flowing", "default:lava_flowing")
|
||||||
|
minetest.alias_node("lava_source", "default:lava_source")
|
||||||
|
minetest.alias_node("torch", "default:torch")
|
||||||
|
minetest.alias_node("sign_wall", "default:sign_wall")
|
||||||
|
minetest.alias_node("chest", "default:chest")
|
||||||
|
minetest.alias_node("locked_chest", "default:chest_locked")
|
||||||
|
minetest.alias_node("cobble", "default:cobble")
|
||||||
|
minetest.alias_node("mossycobble", "default:mossycobble")
|
||||||
|
minetest.alias_node("steelblock", "default:steelblock")
|
||||||
|
minetest.alias_node("nyancat", "default:nyancat")
|
||||||
|
minetest.alias_node("nyancat_rainbow", "default:nyancat_rainbow")
|
||||||
|
minetest.alias_node("sapling", "default:sapling")
|
||||||
|
minetest.alias_node("apple", "default:apple")
|
||||||
|
|
||||||
|
--[[
|
||||||
WATER_ALPHA = 160
|
WATER_ALPHA = 160
|
||||||
WATER_VISC = 1
|
WATER_VISC = 1
|
||||||
LAVA_VISC = 7
|
LAVA_VISC = 7
|
||||||
@ -1016,5 +1056,5 @@ function on_dignode(p, node)
|
|||||||
nodeupdate(p)
|
nodeupdate(p)
|
||||||
end
|
end
|
||||||
minetest.register_on_dignode(on_dignode)
|
minetest.register_on_dignode(on_dignode)
|
||||||
|
--]]
|
||||||
-- END
|
-- END
|
||||||
|
@ -398,8 +398,18 @@ public:
|
|||||||
{
|
{
|
||||||
return get(n.getContent());
|
return get(n.getContent());
|
||||||
}
|
}
|
||||||
virtual bool getId(const std::string &name, content_t &result) const
|
virtual bool getId(const std::string &name_, content_t &result) const
|
||||||
{
|
{
|
||||||
|
std::string name = name_;
|
||||||
|
// Convert name according to possible alias
|
||||||
|
std::map<std::string, std::string>::const_iterator i;
|
||||||
|
i = m_aliases.find(name);
|
||||||
|
if(i != m_aliases.end()){
|
||||||
|
/*infostream<<"ndef: alias active: "<<name<<" -> "<<i->second
|
||||||
|
<<std::endl;*/
|
||||||
|
name = i->second;
|
||||||
|
}
|
||||||
|
// Get id
|
||||||
return m_name_id_mapping.getId(name, result);
|
return m_name_id_mapping.getId(name, result);
|
||||||
}
|
}
|
||||||
virtual content_t getId(const std::string &name) const
|
virtual content_t getId(const std::string &name) const
|
||||||
@ -438,6 +448,12 @@ public:
|
|||||||
m_content_features[c] = def;
|
m_content_features[c] = def;
|
||||||
if(def.name != "")
|
if(def.name != "")
|
||||||
m_name_id_mapping.set(c, def.name);
|
m_name_id_mapping.set(c, def.name);
|
||||||
|
|
||||||
|
// Remove conflicting alias if it exists
|
||||||
|
bool alias_removed = (m_aliases.erase(def.name) != 0);
|
||||||
|
if(alias_removed)
|
||||||
|
infostream<<"ndef: erased alias "<<def.name
|
||||||
|
<<" because node was defined"<<std::endl;
|
||||||
}
|
}
|
||||||
virtual content_t set(const std::string &name,
|
virtual content_t set(const std::string &name,
|
||||||
const ContentFeatures &def)
|
const ContentFeatures &def)
|
||||||
@ -476,6 +492,19 @@ public:
|
|||||||
f.material.diggability = DIGGABLE_NORMAL;
|
f.material.diggability = DIGGABLE_NORMAL;
|
||||||
return set(name, f);
|
return set(name, f);
|
||||||
}
|
}
|
||||||
|
virtual void setAlias(const std::string &name,
|
||||||
|
const std::string &convert_to)
|
||||||
|
{
|
||||||
|
content_t id;
|
||||||
|
if(getId(name, id)){
|
||||||
|
infostream<<"ndef: not setting alias "<<name<<" -> "<<convert_to
|
||||||
|
<<": "<<name<<" is already defined"<<std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
infostream<<"ndef: setting alias "<<name<<" -> "<<convert_to
|
||||||
|
<<std::endl;
|
||||||
|
m_aliases[name] = convert_to;
|
||||||
|
}
|
||||||
virtual void updateTextures(ITextureSource *tsrc)
|
virtual void updateTextures(ITextureSource *tsrc)
|
||||||
{
|
{
|
||||||
#ifndef SERVER
|
#ifndef SERVER
|
||||||
@ -639,8 +668,12 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
|
// Features indexed by id
|
||||||
ContentFeatures m_content_features[MAX_CONTENT+1];
|
ContentFeatures m_content_features[MAX_CONTENT+1];
|
||||||
|
// A mapping for fast converting back and forth between names and ids
|
||||||
NameIdMapping m_name_id_mapping;
|
NameIdMapping m_name_id_mapping;
|
||||||
|
// Aliases for loading legacy crap
|
||||||
|
std::map<std::string, std::string> m_aliases;
|
||||||
};
|
};
|
||||||
|
|
||||||
IWritableNodeDefManager* createNodeDefManager()
|
IWritableNodeDefManager* createNodeDefManager()
|
||||||
|
@ -279,6 +279,11 @@ public:
|
|||||||
const ContentFeatures &def)=0;
|
const ContentFeatures &def)=0;
|
||||||
// If returns CONTENT_IGNORE, could not allocate id
|
// If returns CONTENT_IGNORE, could not allocate id
|
||||||
virtual content_t allocateDummy(const std::string &name)=0;
|
virtual content_t allocateDummy(const std::string &name)=0;
|
||||||
|
// Set an alias so that nodes named <name> will load as <convert_to>.
|
||||||
|
// Alias is not set if <name> has already been defined.
|
||||||
|
// Alias will be removed if <name> is defined at a later point of time.
|
||||||
|
virtual void setAlias(const std::string &name,
|
||||||
|
const std::string &convert_to)=0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Update tile textures to latest return values of TextueSource.
|
Update tile textures to latest return values of TextueSource.
|
||||||
|
@ -1122,6 +1122,24 @@ static int l_register_node(lua_State *L)
|
|||||||
return 0; /* number of results */
|
return 0; /* number of results */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// alias_node(name, convert_to_name)
|
||||||
|
static int l_alias_node(lua_State *L)
|
||||||
|
{
|
||||||
|
std::string name = luaL_checkstring(L, 1);
|
||||||
|
std::string convert_to = luaL_checkstring(L, 2);
|
||||||
|
|
||||||
|
// Get server from registry
|
||||||
|
lua_getfield(L, LUA_REGISTRYINDEX, "minetest_server");
|
||||||
|
Server *server = (Server*)lua_touserdata(L, -1);
|
||||||
|
// And get the writable node definition manager from the server
|
||||||
|
IWritableNodeDefManager *nodedef =
|
||||||
|
server->getWritableNodeDefManager();
|
||||||
|
|
||||||
|
nodedef->setAlias(name, convert_to);
|
||||||
|
|
||||||
|
return 0; /* number of results */
|
||||||
|
}
|
||||||
|
|
||||||
// register_craft({output=item, recipe={{item00,item10},{item01,item11}})
|
// register_craft({output=item, recipe={{item00,item10},{item01,item11}})
|
||||||
static int l_register_craft(lua_State *L)
|
static int l_register_craft(lua_State *L)
|
||||||
{
|
{
|
||||||
@ -1274,6 +1292,7 @@ static const struct luaL_Reg minetest_f [] = {
|
|||||||
{"register_node", l_register_node},
|
{"register_node", l_register_node},
|
||||||
{"register_craft", l_register_craft},
|
{"register_craft", l_register_craft},
|
||||||
{"register_abm", l_register_abm},
|
{"register_abm", l_register_abm},
|
||||||
|
{"alias_node", l_alias_node},
|
||||||
{"setting_get", l_setting_get},
|
{"setting_get", l_setting_get},
|
||||||
{"setting_getbool", l_setting_getbool},
|
{"setting_getbool", l_setting_getbool},
|
||||||
{"chat_send_all", l_chat_send_all},
|
{"chat_send_all", l_chat_send_all},
|
||||||
|
Loading…
Reference in New Issue
Block a user