mirror of
https://codeberg.org/AntumLuanti/mod-cleaner.git
synced 2025-03-21 15:41:22 +00:00
Flip pencil image when mode changed
This commit is contained in:
parent
6c1104d19b
commit
9dfa90292c
3 changed files with 138 additions and 116 deletions
1
TODO.txt
1
TODO.txt
|
@ -5,7 +5,6 @@ TODO:
|
||||||
- creative
|
- creative
|
||||||
- storage (chests, etc.)
|
- storage (chests, etc.)
|
||||||
- add LBM when removing an item if it is a node
|
- add LBM when removing an item if it is a node
|
||||||
- make pencil image flip when mode set to "erase"
|
|
||||||
- update localization files
|
- update localization files
|
||||||
- add "radius" option for pencil or "xlen", "ylen", & "zlen" options
|
- add "radius" option for pencil or "xlen", "ylen", & "zlen" options
|
||||||
- add "xrotate" & "zrorate" modes for pencil
|
- add "xrotate" & "zrorate" modes for pencil
|
||||||
|
|
100
init.lua
100
init.lua
|
@ -66,91 +66,17 @@ core.register_tool(cleaner.modname .. ":pencil", {
|
||||||
description = S("Master Pencil"),
|
description = S("Master Pencil"),
|
||||||
inventory_image = "cleaner_pencil.png",
|
inventory_image = "cleaner_pencil.png",
|
||||||
liquids_pointable = true,
|
liquids_pointable = true,
|
||||||
on_use = function(itemstack, user, pointed_thing)
|
on_use = aux.tool.on_use,
|
||||||
if not user:is_player() then return end
|
on_secondary_use = aux.tool.on_secondary_use,
|
||||||
|
on_place = aux.tool.on_place,
|
||||||
local pname = user:get_player_name()
|
})
|
||||||
if not core.get_player_privs(pname).server then
|
|
||||||
core.chat_send_player(pname, S("You do not have permission to use this item. Missing privs: server"))
|
core.register_tool(cleaner.modname .. ":pencil_1", {
|
||||||
return itemstack
|
description = S("Master Pencil"),
|
||||||
end
|
inventory_image = "cleaner_pencil.png^[transformFXFY",
|
||||||
|
liquids_pointable = true,
|
||||||
if sound_handle then
|
groups = {not_in_creative_inventory=1},
|
||||||
core.sound_stop(sound_handle)
|
on_use = aux.tool.on_use,
|
||||||
sound_handle = nil
|
on_secondary_use = aux.tool.on_secondary_use,
|
||||||
end
|
on_place = aux.tool.on_place,
|
||||||
|
|
||||||
if pointed_thing.type == "node" then
|
|
||||||
local npos = core.get_pointed_thing_position(pointed_thing)
|
|
||||||
local imeta = itemstack:get_meta()
|
|
||||||
local mode = imeta:get_string("mode")
|
|
||||||
local new_node_name = imeta:get_string("node")
|
|
||||||
|
|
||||||
if mode == "erase" then
|
|
||||||
core.remove_node(npos)
|
|
||||||
sound_handle = core.sound_play("cleaner_pencil_erase", {object=user})
|
|
||||||
return itemstack
|
|
||||||
elseif core.registered_nodes[new_node_name] then
|
|
||||||
if mode == "swap" then
|
|
||||||
core.swap_node(npos, {name=new_node_name})
|
|
||||||
sound_handle = core.sound_play("cleaner_pencil_write", {object=user})
|
|
||||||
return itemstack
|
|
||||||
elseif mode == "write" then
|
|
||||||
local node_above = core.get_node_or_nil(pointed_thing.above)
|
|
||||||
if not node_above or node_above.name == "air" then
|
|
||||||
core.place_node(pointed_thing.above, {name=new_node_name})
|
|
||||||
sound_handle = core.sound_play("cleaner_pencil_write", {object=user})
|
|
||||||
else
|
|
||||||
core.chat_send_player(pname, S("Can't place node there."))
|
|
||||||
end
|
|
||||||
|
|
||||||
return itemstack
|
|
||||||
else
|
|
||||||
core.chat_send_player(pname, S("Unknown mode: @1", mode))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
core.chat_send_player(pname, S("Cannot place unknown node: @1", new_node_name))
|
|
||||||
return itemstack
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
on_secondary_use = function(itemstack, user, pointed_thing)
|
|
||||||
if not user:is_player() then return end
|
|
||||||
|
|
||||||
local pname = user:get_player_name()
|
|
||||||
if not core.get_player_privs(pname).server then
|
|
||||||
core.chat_send_player(pname, S("You do not have permission to use this item. Missing privs: @1", "server"))
|
|
||||||
return itemstack
|
|
||||||
end
|
|
||||||
|
|
||||||
local imeta = itemstack:get_meta()
|
|
||||||
local mode = imeta:get_string("mode")
|
|
||||||
if mode == "erase" or mode == "" then
|
|
||||||
mode = "write"
|
|
||||||
elseif mode == "write" then
|
|
||||||
mode = "swap"
|
|
||||||
else
|
|
||||||
mode = "erase"
|
|
||||||
end
|
|
||||||
|
|
||||||
return aux.tool:set_mode(itemstack, mode, pname)
|
|
||||||
end,
|
|
||||||
on_place = function(itemstack, placer, pointed_thing)
|
|
||||||
if not placer:is_player() then return end
|
|
||||||
|
|
||||||
local pname = placer:get_player_name()
|
|
||||||
if not core.get_player_privs(pname).server then
|
|
||||||
core.chat_send_player(pname, S("You do not have permission to use this item. Missing privs: @1", "server"))
|
|
||||||
return itemstack
|
|
||||||
end
|
|
||||||
|
|
||||||
if pointed_thing.type == "node" then
|
|
||||||
local node = core.get_node_or_nil(core.get_pointed_thing_position(pointed_thing))
|
|
||||||
if node then
|
|
||||||
itemstack = aux.tool:set_node(itemstack, node.name, pname)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return itemstack
|
|
||||||
end,
|
|
||||||
})
|
})
|
||||||
|
|
|
@ -75,48 +75,145 @@ local tool = {
|
||||||
write = true,
|
write = true,
|
||||||
swap = true,
|
swap = true,
|
||||||
},
|
},
|
||||||
|
format_name = function(self, stack)
|
||||||
|
local iname = stack:get_name()
|
||||||
|
if iname == "cleaner:pencil_1" then
|
||||||
|
iname = "cleaner:pencil"
|
||||||
|
end
|
||||||
|
|
||||||
|
return iname
|
||||||
|
end,
|
||||||
|
|
||||||
|
set_mode = function(self, stack, mode, pname)
|
||||||
|
local iname = self:format_name(stack)
|
||||||
|
|
||||||
|
if not self.modes[mode] then
|
||||||
|
if pname then
|
||||||
|
core.chat_send_player(pname, iname .. ": " .. S("unknown mode: @1", mode))
|
||||||
|
end
|
||||||
|
cleaner.log("warning", iname .. ": unknown mode: " .. mode)
|
||||||
|
return stack
|
||||||
|
end
|
||||||
|
|
||||||
|
local imeta = stack:get_meta()
|
||||||
|
imeta:set_string("mode", mode)
|
||||||
|
|
||||||
|
if pname then
|
||||||
|
core.chat_send_player(pname, iname .. ": "
|
||||||
|
.. S("mode set to: @1", imeta:get_string("mode")))
|
||||||
|
end
|
||||||
|
|
||||||
|
local new_stack
|
||||||
|
if mode == "erase" then
|
||||||
|
new_stack = ItemStack("cleaner:pencil_1")
|
||||||
|
else
|
||||||
|
new_stack = ItemStack("cleaner:pencil")
|
||||||
|
end
|
||||||
|
|
||||||
|
local new_meta = new_stack:get_meta()
|
||||||
|
new_meta:from_table(imeta:to_table())
|
||||||
|
|
||||||
|
return new_stack
|
||||||
|
end,
|
||||||
|
|
||||||
|
set_node = function(self, stack, node, pname)
|
||||||
|
local imeta = stack:get_meta()
|
||||||
|
imeta:set_string("node", node)
|
||||||
|
|
||||||
|
if pname then
|
||||||
|
core.chat_send_player(pname, stack:get_name() .. ": "
|
||||||
|
.. S("node set to: @1", imeta:get_string("node")))
|
||||||
|
end
|
||||||
|
|
||||||
|
return stack
|
||||||
|
end,
|
||||||
}
|
}
|
||||||
|
|
||||||
tool.set_mode = function(self, stack, mode, pname)
|
tool.on_use = function(stack, user, pointed_thing)
|
||||||
local iname = stack:get_name()
|
if not user:is_player() then return end
|
||||||
|
|
||||||
if not self.modes[mode] then
|
local pname = user:get_player_name()
|
||||||
if pname then
|
if not core.get_player_privs(pname).server then
|
||||||
core.chat_send_player(pname, iname .. ": " .. S("unknown mode: @1", mode))
|
core.chat_send_player(pname, S("You do not have permission to use this item. Missing privs: server"))
|
||||||
end
|
|
||||||
cleaner.log("warning", iname .. ": unknown mode: " .. mode)
|
|
||||||
return stack
|
return stack
|
||||||
end
|
end
|
||||||
|
|
||||||
--[[ FIXME: want to flip item image when mode is set to "erase"
|
if sound_handle then
|
||||||
local new_item = table.copy(core.registered_nodes[iname])
|
core.sound_stop(sound_handle)
|
||||||
if mode == "erase" then
|
sound_handle = nil
|
||||||
new_item.inventory_image = "cleaner_pencil.png^[transformFXFY"
|
|
||||||
else
|
|
||||||
new_item.inventory_image = "cleaner_pencil.png"
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local new_stack = ItemStack(new_item)
|
if pointed_thing.type == "node" then
|
||||||
]]
|
local npos = core.get_pointed_thing_position(pointed_thing)
|
||||||
|
local imeta = stack:get_meta()
|
||||||
|
local mode = imeta:get_string("mode")
|
||||||
|
local new_node_name = imeta:get_string("node")
|
||||||
|
|
||||||
local imeta = stack:get_meta()
|
if mode == "erase" then
|
||||||
imeta:set_string("mode", mode)
|
core.remove_node(npos)
|
||||||
|
sound_handle = core.sound_play("cleaner_pencil_erase", {object=user})
|
||||||
|
return stack
|
||||||
|
elseif core.registered_nodes[new_node_name] then
|
||||||
|
if mode == "swap" then
|
||||||
|
core.swap_node(npos, {name=new_node_name})
|
||||||
|
sound_handle = core.sound_play("cleaner_pencil_write", {object=user})
|
||||||
|
return stack
|
||||||
|
elseif mode == "write" then
|
||||||
|
local node_above = core.get_node_or_nil(pointed_thing.above)
|
||||||
|
if not node_above or node_above.name == "air" then
|
||||||
|
core.place_node(pointed_thing.above, {name=new_node_name})
|
||||||
|
sound_handle = core.sound_play("cleaner_pencil_write", {object=user})
|
||||||
|
else
|
||||||
|
core.chat_send_player(pname, S("Can't place node there."))
|
||||||
|
end
|
||||||
|
|
||||||
if pname then
|
return stack
|
||||||
core.chat_send_player(pname, iname .. ": "
|
else
|
||||||
.. S("mode set to: @1", imeta:get_string("mode")))
|
core.chat_send_player(pname, S("Unknown mode: @1", mode))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
core.chat_send_player(pname, S("Cannot place unknown node: @1", new_node_name))
|
||||||
|
return stack
|
||||||
end
|
end
|
||||||
|
|
||||||
return stack
|
|
||||||
end
|
end
|
||||||
|
|
||||||
tool.set_node = function(self, stack, node, pname)
|
tool.on_secondary_use = function(stack, user, pointed_thing)
|
||||||
local imeta = stack:get_meta()
|
if not user:is_player() then return end
|
||||||
imeta:set_string("node", node)
|
|
||||||
|
|
||||||
if pname then
|
local pname = user:get_player_name()
|
||||||
core.chat_send_player(pname, stack:get_name() .. ": "
|
if not core.get_player_privs(pname).server then
|
||||||
.. S("node set to: @1", imeta:get_string("node")))
|
core.chat_send_player(pname, S("You do not have permission to use this item. Missing privs: @1", "server"))
|
||||||
|
return stack
|
||||||
|
end
|
||||||
|
|
||||||
|
local imeta = stack:get_meta()
|
||||||
|
local mode = imeta:get_string("mode")
|
||||||
|
if mode == "erase" or mode == "" then
|
||||||
|
mode = "write"
|
||||||
|
elseif mode == "write" then
|
||||||
|
mode = "swap"
|
||||||
|
else
|
||||||
|
mode = "erase"
|
||||||
|
end
|
||||||
|
|
||||||
|
return tool:set_mode(stack, mode, pname)
|
||||||
|
end
|
||||||
|
|
||||||
|
tool.on_place = function(stack, placer, pointed_thing)
|
||||||
|
if not placer:is_player() then return end
|
||||||
|
|
||||||
|
local pname = placer:get_player_name()
|
||||||
|
if not core.get_player_privs(pname).server then
|
||||||
|
core.chat_send_player(pname, S("You do not have permission to use this item. Missing privs: @1", "server"))
|
||||||
|
return stack
|
||||||
|
end
|
||||||
|
|
||||||
|
if pointed_thing.type == "node" then
|
||||||
|
local node = core.get_node_or_nil(core.get_pointed_thing_position(pointed_thing))
|
||||||
|
if node then
|
||||||
|
stack = tool:set_node(stack, node.name, pname)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
return stack
|
return stack
|
||||||
|
|
Loading…
Add table
Reference in a new issue