forked from Mirrorlandia_minetest/minetest
Tool aliases
This commit is contained in:
parent
658d1a7235
commit
8addbc9655
@ -92,6 +92,8 @@
|
|||||||
-- minetest.register_craftitem(name, craftitem definition)
|
-- minetest.register_craftitem(name, craftitem definition)
|
||||||
-- minetest.register_craft(recipe)
|
-- minetest.register_craft(recipe)
|
||||||
-- minetest.register_abm(abm definition)
|
-- minetest.register_abm(abm definition)
|
||||||
|
-- minetest.alias_node(name, convert_to)
|
||||||
|
-- minetest.alias_tool(name, convert_to)
|
||||||
-- minetest.register_globalstep(func(dtime))
|
-- minetest.register_globalstep(func(dtime))
|
||||||
-- minetest.register_on_placenode(func(pos, newnode, placer))
|
-- minetest.register_on_placenode(func(pos, newnode, placer))
|
||||||
-- minetest.register_on_dignode(func(pos, oldnode, digger))
|
-- minetest.register_on_dignode(func(pos, oldnode, digger))
|
||||||
|
@ -40,6 +40,20 @@ minetest.alias_node("nyancat_rainbow", "default:nyancat_rainbow")
|
|||||||
minetest.alias_node("sapling", "default:sapling")
|
minetest.alias_node("sapling", "default:sapling")
|
||||||
minetest.alias_node("apple", "default:apple")
|
minetest.alias_node("apple", "default:apple")
|
||||||
|
|
||||||
|
minetest.alias_tool("WPick", "default:pick_wood")
|
||||||
|
minetest.alias_tool("STPick", "default:pick_stone")
|
||||||
|
minetest.alias_tool("SteelPick", "default:pick_steel")
|
||||||
|
minetest.alias_tool("MesePick", "default:pick_mese")
|
||||||
|
minetest.alias_tool("WShovel", "default:shovel_wood")
|
||||||
|
minetest.alias_tool("STShovel", "default:shovel_stone")
|
||||||
|
minetest.alias_tool("SteelShovel", "default:shovel_steel")
|
||||||
|
minetest.alias_tool("WAxe", "default:axe_wood")
|
||||||
|
minetest.alias_tool("STAxe", "default:axe_stone")
|
||||||
|
minetest.alias_tool("SteelAxe", "default:axe_steel")
|
||||||
|
minetest.alias_tool("WSword", "default:sword_wood")
|
||||||
|
minetest.alias_tool("STSword", "default:sword_stone")
|
||||||
|
minetest.alias_tool("SteelSword", "default:sword_steel")
|
||||||
|
|
||||||
--[[
|
--[[
|
||||||
WATER_ALPHA = 160
|
WATER_ALPHA = 160
|
||||||
WATER_VISC = 1
|
WATER_VISC = 1
|
||||||
|
@ -1140,6 +1140,24 @@ static int l_alias_node(lua_State *L)
|
|||||||
return 0; /* number of results */
|
return 0; /* number of results */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// alias_tool(name, convert_to_name)
|
||||||
|
static int l_alias_tool(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 tool definition manager from the server
|
||||||
|
IWritableToolDefManager *tooldef =
|
||||||
|
server->getWritableToolDefManager();
|
||||||
|
|
||||||
|
tooldef->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)
|
||||||
{
|
{
|
||||||
@ -1293,6 +1311,7 @@ static const struct luaL_Reg minetest_f [] = {
|
|||||||
{"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},
|
{"alias_node", l_alias_node},
|
||||||
|
{"alias_tool", l_alias_tool},
|
||||||
{"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},
|
||||||
|
@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include "utility.h"
|
#include "utility.h"
|
||||||
|
#include <map>
|
||||||
|
|
||||||
ToolDiggingProperties::ToolDiggingProperties(float full_punch_interval_,
|
ToolDiggingProperties::ToolDiggingProperties(float full_punch_interval_,
|
||||||
float a, float b, float c, float d, float e,
|
float a, float b, float c, float d, float e,
|
||||||
@ -92,8 +93,16 @@ public:
|
|||||||
{
|
{
|
||||||
clear();
|
clear();
|
||||||
}
|
}
|
||||||
virtual const ToolDefinition* getToolDefinition(const std::string &toolname) const
|
virtual const ToolDefinition* getToolDefinition(const std::string &toolname_) const
|
||||||
{
|
{
|
||||||
|
// Convert name according to possible alias
|
||||||
|
std::string toolname = toolname_;
|
||||||
|
std::map<std::string, std::string>::const_iterator i;
|
||||||
|
i = m_aliases.find(toolname);
|
||||||
|
if(i != m_aliases.end()){
|
||||||
|
toolname = i->second;
|
||||||
|
}
|
||||||
|
// Get the definition
|
||||||
core::map<std::string, ToolDefinition*>::Node *n;
|
core::map<std::string, ToolDefinition*>::Node *n;
|
||||||
n = m_tool_definitions.find(toolname);
|
n = m_tool_definitions.find(toolname);
|
||||||
if(n == NULL)
|
if(n == NULL)
|
||||||
@ -124,14 +133,14 @@ public:
|
|||||||
virtual bool registerTool(std::string toolname, const ToolDefinition &def)
|
virtual bool registerTool(std::string toolname, const ToolDefinition &def)
|
||||||
{
|
{
|
||||||
infostream<<"registerTool: registering tool \""<<toolname<<"\""<<std::endl;
|
infostream<<"registerTool: registering tool \""<<toolname<<"\""<<std::endl;
|
||||||
/*core::map<std::string, ToolDefinition*>::Node *n;
|
|
||||||
n = m_tool_definitions.find(toolname);
|
|
||||||
if(n != NULL){
|
|
||||||
errorstream<<"registerTool: registering tool \""<<toolname
|
|
||||||
<<"\" failed: name is already registered"<<std::endl;
|
|
||||||
return false;
|
|
||||||
}*/
|
|
||||||
m_tool_definitions[toolname] = new ToolDefinition(def);
|
m_tool_definitions[toolname] = new ToolDefinition(def);
|
||||||
|
|
||||||
|
// Remove conflicting alias if it exists
|
||||||
|
bool alias_removed = (m_aliases.erase(toolname) != 0);
|
||||||
|
if(alias_removed)
|
||||||
|
infostream<<"tdef: erased alias "<<toolname
|
||||||
|
<<" because node was defined"<<std::endl;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
virtual void clear()
|
virtual void clear()
|
||||||
@ -142,6 +151,19 @@ public:
|
|||||||
delete i.getNode()->getValue();
|
delete i.getNode()->getValue();
|
||||||
}
|
}
|
||||||
m_tool_definitions.clear();
|
m_tool_definitions.clear();
|
||||||
|
m_aliases.clear();
|
||||||
|
}
|
||||||
|
virtual void setAlias(const std::string &name,
|
||||||
|
const std::string &convert_to)
|
||||||
|
{
|
||||||
|
if(getToolDefinition(name) != NULL){
|
||||||
|
infostream<<"tdef: not setting alias "<<name<<" -> "<<convert_to
|
||||||
|
<<": "<<name<<" is already defined"<<std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
infostream<<"tdef: setting alias "<<name<<" -> "<<convert_to
|
||||||
|
<<std::endl;
|
||||||
|
m_aliases[name] = convert_to;
|
||||||
}
|
}
|
||||||
virtual void serialize(std::ostream &os)
|
virtual void serialize(std::ostream &os)
|
||||||
{
|
{
|
||||||
@ -160,6 +182,14 @@ public:
|
|||||||
def->serialize(tmp_os);
|
def->serialize(tmp_os);
|
||||||
os<<serializeString(tmp_os.str());
|
os<<serializeString(tmp_os.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
writeU16(os, m_aliases.size());
|
||||||
|
for(std::map<std::string, std::string>::const_iterator
|
||||||
|
i = m_aliases.begin(); i != m_aliases.end(); i++)
|
||||||
|
{
|
||||||
|
os<<serializeString(i->first);
|
||||||
|
os<<serializeString(i->second);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
virtual void deSerialize(std::istream &is)
|
virtual void deSerialize(std::istream &is)
|
||||||
{
|
{
|
||||||
@ -180,10 +210,21 @@ public:
|
|||||||
// Register
|
// Register
|
||||||
registerTool(name, def);
|
registerTool(name, def);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u16 num_aliases = readU16(is);
|
||||||
|
if(!is.eof()){
|
||||||
|
for(u16 i=0; i<num_aliases; i++){
|
||||||
|
std::string name = deSerializeString(is);
|
||||||
|
std::string convert_to = deSerializeString(is);
|
||||||
|
m_aliases[name] = convert_to;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
// Key is name
|
// Key is name
|
||||||
core::map<std::string, ToolDefinition*> m_tool_definitions;
|
core::map<std::string, ToolDefinition*> m_tool_definitions;
|
||||||
|
// Aliases for loading legacy crap
|
||||||
|
std::map<std::string, std::string> m_aliases;
|
||||||
};
|
};
|
||||||
|
|
||||||
IWritableToolDefManager* createToolDefManager()
|
IWritableToolDefManager* createToolDefManager()
|
||||||
|
@ -85,6 +85,11 @@ public:
|
|||||||
|
|
||||||
virtual bool registerTool(std::string toolname, const ToolDefinition &def)=0;
|
virtual bool registerTool(std::string toolname, const ToolDefinition &def)=0;
|
||||||
virtual void clear()=0;
|
virtual void clear()=0;
|
||||||
|
// Set an alias so that entries 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;
|
||||||
|
|
||||||
virtual void serialize(std::ostream &os)=0;
|
virtual void serialize(std::ostream &os)=0;
|
||||||
virtual void deSerialize(std::istream &is)=0;
|
virtual void deSerialize(std::istream &is)=0;
|
||||||
|
Loading…
Reference in New Issue
Block a user