update castles, areas, areas_protector, bakedclay, signs_lib,
bees, blox, bobblocks, coloredwood, homedecor, technic, currency, digilines, digistguff, facade, farming_redo, framedglass, gloopblocks, ilights, led_marquee, maptools, mesecons, moreblocks, moreores, mymillwork, plasticbox, replacer, ropes, street_signs, solidcolor, stained_glass, teleport_request, unified_inventory, unifieddyes, worldedit, add basic_signs, notify_hud_provider
@ -215,6 +215,9 @@ minetest.register_node("anvil:anvil", {
|
||||
end,
|
||||
|
||||
on_rightclick = function(pos, node, clicker, itemstack)
|
||||
if not clicker or not itemstack then
|
||||
return
|
||||
end
|
||||
local meta = minetest.get_meta(pos)
|
||||
local name = clicker:get_player_name()
|
||||
|
||||
|
@ -1,21 +1,29 @@
|
||||
Areas mod for Minetest 0.4.8+
|
||||
=============================
|
||||
Areas mod for Minetest
|
||||
======================
|
||||
|
||||
Dependencies
|
||||
------------
|
||||
|
||||
Minetest 5.0.0+ is recommended, but 0.4.16+ should work as well.
|
||||
|
||||
|
||||
Configuration
|
||||
-------------
|
||||
|
||||
If you wish to specify configuration options, such as whether players are
|
||||
allowed to protect their own areas with the `protect` command (disabled by
|
||||
default), you should check settings.lua and set the appropriate settings in your
|
||||
server's configuration file (probably `minetest.conf`).
|
||||
Open the tab `Settings -> All Settings -> Mods -> areas` to get a list of all
|
||||
possible settings.
|
||||
|
||||
For server owners: Check `settingtypes.txt` and modify your `minetest.conf`
|
||||
according to the wanted setting changes.
|
||||
|
||||
|
||||
|
||||
Tutorial
|
||||
--------
|
||||
|
||||
To protect an area you must first set the corner positions of the area.
|
||||
In order to set the corner positions you can run:
|
||||
1) Specify the corner positions of the area you would like to protect.
|
||||
Use one of the following commands:
|
||||
|
||||
* `/area_pos set` and punch the two corner nodes to set them.
|
||||
* `/area_pos set1/set2` and punch only the first or second corner node to
|
||||
set them one at a time.
|
||||
@ -23,25 +31,25 @@ In order to set the corner positions you can run:
|
||||
* `/area_pos1/2 X Y Z` to set one of the positions to the specified
|
||||
coordinates.
|
||||
|
||||
Once you have set the border positions you can protect the area by running one
|
||||
of the following commands:
|
||||
2) Protect the selected area by running one of the following commands:
|
||||
|
||||
* `/set_owner <OwnerName> <AreaName>` -- If you have the `areas` privilege.
|
||||
* `/protect <AreaName>` -- If you have the `areas` privilege or the server
|
||||
administrator has enabled area self-protection.
|
||||
|
||||
The area name is used only for informational purposes (so that you know what
|
||||
an area is for). It is not used for any other purpose.
|
||||
The area name is used only for informational purposes and has no functional
|
||||
importance.
|
||||
|
||||
For example: `/set_owner SomePlayer Mese city`
|
||||
|
||||
Now that you own an area you may want to add sub-owners to it. You can do this
|
||||
with the `add_owner` command. Anyone with an area can use the `add_owner`
|
||||
command on their areas. Before using the `add_owner` command you have to
|
||||
select the corners of the sub-area as you did for `set_owner`. If your markers
|
||||
are still around your original area and you want to grant access to your
|
||||
entire area you will not have to re-set them. You can also use `select_area` to
|
||||
place the markers at the corners of an existing area if you've reset your
|
||||
3) You now own an area. You may now add sub-owners to it if you want to (see command `/add_owner`). Before using the `/add_owner` command you have to
|
||||
select the corners of the sub-area as you did in step 1.
|
||||
|
||||
If your markers are still around your original area and you want to grant
|
||||
access to your entire area you will not have to re-set them. Use `/select_area` to place the markers at the corners of an existing area if you've reset your
|
||||
markers and want to grant access to a full area.
|
||||
The `add_owner` command expects three arguments:
|
||||
|
||||
The `/add_owner` command expects three arguments:
|
||||
1. The ID number of the parent area (the area that you want to add a
|
||||
sub-area to).
|
||||
2. The name of the player that will own the sub-area.
|
||||
|
@ -14,7 +14,7 @@ minetest.register_globalstep(function(dtime)
|
||||
|
||||
for _, player in pairs(minetest.get_connected_players()) do
|
||||
local name = player:get_player_name()
|
||||
local pos = vector.round(player:getpos())
|
||||
local pos = vector.round(player:get_pos())
|
||||
pos = vector.apply(pos, function(p)
|
||||
return math.max(math.min(p, 2147483), -2147483)
|
||||
end)
|
||||
|
@ -32,7 +32,7 @@ if not minetest.registered_privileges[areas.config.self_protection_privilege] th
|
||||
})
|
||||
end
|
||||
|
||||
if minetest.settings:get_bool("log_mod") then
|
||||
if minetest.settings:get_bool("log_mods") then
|
||||
local diffTime = os.clock() - areas.startTime
|
||||
minetest.log("action", "areas loaded in "..diffTime.."s.")
|
||||
end
|
||||
|
@ -53,7 +53,7 @@ minetest.register_chatcommand("area_pos1", {
|
||||
elseif param == "" then
|
||||
local player = minetest.get_player_by_name(name)
|
||||
if player then
|
||||
pos = player:getpos()
|
||||
pos = player:get_pos()
|
||||
else
|
||||
return false, "Unable to get position."
|
||||
end
|
||||
@ -80,7 +80,7 @@ minetest.register_chatcommand("area_pos2", {
|
||||
elseif param == "" then
|
||||
local player = minetest.get_player_by_name(name)
|
||||
if player then
|
||||
pos = player:getpos()
|
||||
pos = player:get_pos()
|
||||
else
|
||||
return false, "Unable to get position."
|
||||
end
|
||||
|
@ -2,44 +2,45 @@ local world_path = minetest.get_worldpath()
|
||||
|
||||
areas.config = {}
|
||||
|
||||
local function setting(tp, name, default)
|
||||
local function setting(name, tp, default)
|
||||
local full_name = "areas." .. name
|
||||
local value
|
||||
if tp == "boolean" then
|
||||
if tp == "bool" then
|
||||
value = minetest.settings:get_bool(full_name)
|
||||
default = value == nil and minetest.is_yes(default)
|
||||
elseif tp == "string" then
|
||||
value = minetest.settings:get(full_name)
|
||||
elseif tp == "position" then
|
||||
elseif tp == "v3f" then
|
||||
value = minetest.setting_get_pos(full_name)
|
||||
elseif tp == "number" then
|
||||
default = value == nil and minetest.string_to_pos(default)
|
||||
elseif tp == "float" or tp == "int" then
|
||||
value = tonumber(minetest.settings:get(full_name))
|
||||
local v, other = default:match("^(%S+) (.+)")
|
||||
default = value == nil and tonumber(other and v or default)
|
||||
else
|
||||
error("Invalid setting type!")
|
||||
error("Cannot parse setting type " .. tp)
|
||||
end
|
||||
|
||||
if value == nil then
|
||||
value = default
|
||||
assert(default ~= nil, "Cannot parse default for " .. full_name)
|
||||
end
|
||||
--print("add", name, default, value)
|
||||
areas.config[name] = value
|
||||
end
|
||||
|
||||
local file = io.open(areas.modpath .. "/settingtypes.txt", "r")
|
||||
for line in file:lines() do
|
||||
local name, tp, value = line:match("^areas%.(%S+) %(.*%) (%S+) (.*)")
|
||||
if value then
|
||||
setting(name, tp, value)
|
||||
end
|
||||
end
|
||||
file:close()
|
||||
|
||||
--------------
|
||||
-- Settings --
|
||||
--------------
|
||||
|
||||
setting("string", "filename", world_path.."/areas.dat")
|
||||
setting("filename", "string", world_path.."/areas.dat")
|
||||
|
||||
-- Allow players with a privilege create their own areas
|
||||
-- within the maximum size and number.
|
||||
setting("boolean", "self_protection", false)
|
||||
setting("string", "self_protection_privilege", "interact")
|
||||
setting("position", "self_protection_max_size", {x=64, y=128, z=64})
|
||||
setting("number", "self_protection_max_areas", 4)
|
||||
-- For players with the areas_high_limit privilege.
|
||||
setting("position", "self_protection_max_size_high", {x=512, y=512, z=512})
|
||||
setting("number", "self_protection_max_areas_high", 32)
|
||||
|
||||
-- legacy_table (owner_defs) compatibility. Untested and has known issues.
|
||||
setting("boolean", "legacy_table", false)
|
||||
|
||||
-- configure the refresh delay for the name displays in the HUD
|
||||
setting("number", "tick", 0.5)
|
||||
|
38
areas/settingtypes.txt
Normal file
@ -0,0 +1,38 @@
|
||||
# This file is parsed in "settings.lua". Check regex first.
|
||||
|
||||
# Static paths do not work well with settings
|
||||
#areas.filename (Configuration file path) string (world_path)/areas.dat
|
||||
|
||||
# Allow players with a privilege create their own areas using /protect
|
||||
# within the specified size and amount limits.
|
||||
areas.self_protection (Self protection) bool false
|
||||
|
||||
# Self protection: Privilege required to protect an area
|
||||
areas.self_protection_privilege (Self protection: Required privs) string interact
|
||||
|
||||
# Refresh delay for the name displays in the HUD in seconds
|
||||
areas.tick (HUD update delay) float 0.5 0 100
|
||||
|
||||
# Enable the legacy owner_defs metatable mode. Untested and possibly unstable
|
||||
areas.legacy_table (Legacy owner_defs metatable) bool false
|
||||
|
||||
[Self protection (normal)]
|
||||
|
||||
# Self protection (normal): Maximal size of the protectable area
|
||||
# Only enter positive whole numbers for the coordinate values or you'll mess up stuff.
|
||||
areas.self_protection_max_size (Maximal area size) v3f (64, 128, 64)
|
||||
|
||||
# Self protection (normal): Maximal amount of protected areas per player
|
||||
areas.self_protection_max_areas (Maximal area count) int 4
|
||||
|
||||
[Self protection (high)]
|
||||
|
||||
# Self protection (normal): Maximal size of the protectable area
|
||||
# This setting applies for plyaers with the privilege 'areas_high_limit'
|
||||
areas.self_protection_max_size_high (Maximal area size) v3f (512, 512, 512)
|
||||
|
||||
# Self protection (normal): Maximal amount of protected areas per player
|
||||
# Only enter positive whole numbers for the coordinate values or you'll mess up stuff.
|
||||
# This setting applies for plyaers with the privilege 'areas_high_limit'
|
||||
areas.self_protection_max_areas_high (Maximal area count) float 32
|
||||
|
@ -9,7 +9,21 @@ local function red(str)
|
||||
return minetest.colorize("#FF5555",str)
|
||||
end
|
||||
|
||||
local radius = minetest.setting_get("areasprotector_radius") or 8
|
||||
local radius_large = minetest.setting_get("areasprotector_radius_large")
|
||||
or minetest.setting_get("areasprotector_radius")
|
||||
or 16
|
||||
|
||||
local height_large = minetest.setting_get("areasprotector_height_large")
|
||||
or minetest.setting_get("areasprotector_radius_large")
|
||||
or minetest.setting_get("areasprotector_radius")
|
||||
or 16
|
||||
|
||||
local radius_small = minetest.setting_get("areasprotector_radius_small")
|
||||
or 7
|
||||
|
||||
local height_small = minetest.setting_get("areasprotector_height_small")
|
||||
or minetest.setting_get("areasprotector_radius_small")
|
||||
or 7
|
||||
|
||||
local function remove_display(pos)
|
||||
local objs = minetest.get_objects_inside_radius(pos, 0.5)
|
||||
@ -18,35 +32,21 @@ local function remove_display(pos)
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_node("areasprotector:protector",{
|
||||
description = "Protector Block",
|
||||
groups = {cracky=1},
|
||||
tiles = {
|
||||
"default_steel_block.png",
|
||||
"default_steel_block.png",
|
||||
"default_steel_block.png^basic_materials_padlock.png"
|
||||
},
|
||||
paramtype = "light",
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 },
|
||||
},
|
||||
on_place = function(itemstack,player,pointed)
|
||||
local function on_place(itemstack, player, pointed, radius, height, sizeword)
|
||||
local pos = pointed.above
|
||||
local pos1 = vector.add(pos,vector.new(radius,radius,radius))
|
||||
local pos2 = vector.add(pos,vector.new(-1*radius,-1*radius,-1*radius))
|
||||
local pos1 = vector.add(pos,vector.new(radius, height, radius))
|
||||
local pos2 = vector.add(pos,vector.new(-radius, -height, -radius))
|
||||
local name = player:get_player_name()
|
||||
local perm,err = areas:canPlayerAddArea(pos1,pos2,name)
|
||||
if not perm then
|
||||
minetest.chat_send_player(name,red("You are not allowed to protect that area: ")..err)
|
||||
return itemstack
|
||||
end
|
||||
local id = areas:add(name,"Protected by Protector Block",pos1,pos2)
|
||||
local id = areas:add(name,"Protected by Protector Block at "..minetest.pos_to_string(pos, 0),pos1,pos2)
|
||||
areas:save()
|
||||
local msg = string.format("The area from %s to %s has been protected as #%s",cyan(minetest.pos_to_string(pos1)),cyan(minetest.pos_to_string(pos2)),cyan(id))
|
||||
minetest.chat_send_player(name,msg)
|
||||
minetest.set_node(pos,{name="areasprotector:protector"})
|
||||
minetest.set_node(pos,{name="areasprotector:protector_"..sizeword})
|
||||
local meta = minetest.get_meta(pos)
|
||||
local infotext = string.format("Protecting area %d owned by %s",id,name)
|
||||
meta:set_string("infotext",infotext)
|
||||
@ -56,8 +56,9 @@ minetest.register_node("areasprotector:protector",{
|
||||
itemstack:take_item()
|
||||
end
|
||||
return itemstack
|
||||
end,
|
||||
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
||||
end
|
||||
|
||||
local function after_dig(pos, oldnode, oldmetadata, digger, sizeword)
|
||||
if oldmetadata and oldmetadata.fields then
|
||||
local owner = oldmetadata.fields.owner
|
||||
local id = tonumber(oldmetadata.fields.area_id)
|
||||
@ -67,7 +68,7 @@ minetest.register_node("areasprotector:protector",{
|
||||
local inv = digger:get_inventory()
|
||||
if not creative_mode then
|
||||
if inv:room_for_item("main", "default:steel_ingot 6") then
|
||||
inv:remove_item("main", "areasprotector:protector 1")
|
||||
inv:remove_item("main", "areasprotector:protector_"..sizeword.." 1")
|
||||
inv:add_item("main", "default:steel_ingot 6")
|
||||
else
|
||||
minetest.chat_send_player(playername, "No room for the replacement ingots, just digging the protector and deleting the area normally.")
|
||||
@ -75,7 +76,7 @@ minetest.register_node("areasprotector:protector",{
|
||||
areas:save()
|
||||
end
|
||||
else
|
||||
inv:remove_item("main", "areasprotector:protector 1")
|
||||
inv:remove_item("main", "areasprotector:protector_"..sizeword.." 1")
|
||||
end
|
||||
else
|
||||
areas:remove(id)
|
||||
@ -83,71 +84,178 @@ minetest.register_node("areasprotector:protector",{
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
on_punch = function(pos, node, puncher)
|
||||
end
|
||||
|
||||
local function on_punch(pos, node, puncher, sizeword)
|
||||
local objs = minetest.get_objects_inside_radius(pos,.5) -- a radius of .5 since the entity serialization seems to be not that precise
|
||||
local removed = false
|
||||
for _, o in pairs(objs) do
|
||||
if (not o:is_player()) and o:get_luaentity().name == "areasprotector:display" then
|
||||
if (not o:is_player()) and o:get_luaentity().name == "areasprotector:display_"..sizeword then
|
||||
o:remove()
|
||||
removed = true
|
||||
end
|
||||
end
|
||||
if not removed then -- nothing was removed: there wasn't the entity
|
||||
minetest.add_entity(pos, "areasprotector:display")
|
||||
minetest.add_entity(pos, "areasprotector:display_"..sizeword)
|
||||
minetest.after(4, remove_display, pos)
|
||||
end
|
||||
end
|
||||
|
||||
local function on_step(self, dtime, sizeword)
|
||||
if minetest.get_node(self.object:getpos()).name ~= "areasprotector:protector_"..sizeword then
|
||||
self.object:remove()
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
local function make_display_nodebox(radius, height)
|
||||
local nb_radius = radius + 0.55
|
||||
local nb_height = height + 0.55
|
||||
local t = {
|
||||
-- sides
|
||||
{ -nb_radius, -nb_height, -nb_radius, -nb_radius, nb_height, nb_radius },
|
||||
{ -nb_radius, -nb_height, nb_radius, nb_radius, nb_height, nb_radius },
|
||||
{ nb_radius, -nb_height, -nb_radius, nb_radius, nb_height, nb_radius },
|
||||
{ -nb_radius, -nb_height, -nb_radius, nb_radius, nb_height, -nb_radius },
|
||||
-- top
|
||||
{ -nb_radius, nb_height, -nb_radius, nb_radius, nb_height, nb_radius },
|
||||
-- bottom
|
||||
{ -nb_radius, -nb_height, -nb_radius, nb_radius, -nb_height, nb_radius },
|
||||
-- middle (surround protector)
|
||||
{-.55,-.55,-.55, .55,.55,.55},
|
||||
}
|
||||
return t
|
||||
end
|
||||
|
||||
local nbox = {
|
||||
type = "fixed",
|
||||
fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 },
|
||||
}
|
||||
|
||||
minetest.register_node("areasprotector:protector_large", {
|
||||
description = "Protector Block (large volume)",
|
||||
groups = {cracky=1},
|
||||
tiles = {
|
||||
"default_steel_block.png",
|
||||
"default_steel_block.png",
|
||||
"default_steel_block.png^areasprotector_large_overlay.png^basic_materials_padlock.png"
|
||||
},
|
||||
paramtype = "light",
|
||||
drawtype = "nodebox",
|
||||
node_box = nbox,
|
||||
on_place = function(itemstack, player, pointed_thing)
|
||||
on_place(itemstack, player, pointed_thing, radius_large, height_large, "large")
|
||||
end,
|
||||
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
||||
after_dig(pos, oldnode, oldmetadata, digger, "large")
|
||||
end,
|
||||
on_punch = function(pos, node, puncher)
|
||||
on_punch(pos, node, puncher, "large")
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_node("areasprotector:protector_small", {
|
||||
description = "Protector Block (small volume)",
|
||||
groups = {cracky=1},
|
||||
tiles = {
|
||||
"default_steel_block.png",
|
||||
"default_steel_block.png",
|
||||
"default_steel_block.png^basic_materials_padlock.png"
|
||||
},
|
||||
paramtype = "light",
|
||||
drawtype = "nodebox",
|
||||
node_box = nbox,
|
||||
on_place = function(itemstack, player, pointed_thing)
|
||||
on_place(itemstack, player, pointed_thing, radius_small, height_small, "small")
|
||||
end,
|
||||
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
||||
after_dig(pos, oldnode, oldmetadata, digger, "small")
|
||||
end,
|
||||
on_punch = function(pos, node, puncher)
|
||||
on_punch(pos, node, puncher, "small")
|
||||
end
|
||||
})
|
||||
|
||||
-- entities code below (and above) mostly copied-pasted from Zeg9's protector mod
|
||||
|
||||
minetest.register_entity("areasprotector:display", {
|
||||
-- wielditem seems to be scaled to 1.5 times original node size
|
||||
local vsize = {x=1.0/1.5, y=1.0/1.5}
|
||||
local ecbox = {0, 0, 0, 0, 0, 0}
|
||||
|
||||
minetest.register_entity("areasprotector:display_large", {
|
||||
physical = false,
|
||||
collisionbox = {0,0,0,0,0,0},
|
||||
collisionbox = ecbox,
|
||||
visual = "wielditem",
|
||||
visual_size = {x=1.0/1.5,y=1.0/1.5}, -- wielditem seems to be scaled to 1.5 times original node size
|
||||
textures = {"areasprotector:display_node"},
|
||||
visual_size = vsize,
|
||||
textures = {"areasprotector:display_node_large"},
|
||||
on_step = function(self, dtime)
|
||||
if minetest.get_node(self.object:getpos()).name ~= "areasprotector:protector" then
|
||||
self.object:remove()
|
||||
return
|
||||
on_step(self, dtime, "large")
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
local nb_radius = radius + 0.55
|
||||
minetest.register_entity("areasprotector:display_small", {
|
||||
physical = false,
|
||||
collisionbox = ecbox,
|
||||
visual = "wielditem",
|
||||
visual_size = vsize,
|
||||
textures = {"areasprotector:display_node_small"},
|
||||
on_step = function(self, dtime)
|
||||
on_step(self, dtime, "small")
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_node("areasprotector:display_node", {
|
||||
minetest.register_node("areasprotector:display_node_large", {
|
||||
tiles = {"areasprotector_display.png"},
|
||||
walkable = false,
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
-- sides
|
||||
{ -nb_radius, -nb_radius, -nb_radius, -nb_radius, nb_radius, nb_radius },
|
||||
{ -nb_radius, -nb_radius, nb_radius, nb_radius, nb_radius, nb_radius },
|
||||
{ nb_radius, -nb_radius, -nb_radius, nb_radius, nb_radius, nb_radius },
|
||||
{ -nb_radius, -nb_radius, -nb_radius, nb_radius, nb_radius, -nb_radius },
|
||||
-- top
|
||||
{ -nb_radius, nb_radius, -nb_radius, nb_radius, nb_radius, nb_radius },
|
||||
-- bottom
|
||||
{ -nb_radius, -nb_radius, -nb_radius, nb_radius, -nb_radius, nb_radius },
|
||||
-- middle (surround protector)
|
||||
{-.55,-.55,-.55, .55,.55,.55},
|
||||
},
|
||||
fixed = make_display_nodebox(radius_large, height_large)
|
||||
},
|
||||
selection_box = {
|
||||
type = "regular",
|
||||
},
|
||||
paramtype = "light",
|
||||
groups = {dig_immediate=3,not_in_creative_inventory=1},
|
||||
drop = "",
|
||||
drop = ""
|
||||
})
|
||||
|
||||
minetest.register_node("areasprotector:display_node_small", {
|
||||
tiles = {"areasprotector_display.png"},
|
||||
walkable = false,
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = make_display_nodebox(radius_small, height_small)
|
||||
},
|
||||
selection_box = {
|
||||
type = "regular",
|
||||
},
|
||||
paramtype = "light",
|
||||
groups = {dig_immediate=3,not_in_creative_inventory=1},
|
||||
drop = ""
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "areasprotector:protector",
|
||||
output = "areasprotector:protector_small 2",
|
||||
type = "shapeless",
|
||||
recipe = {"default:steelblock","basic_materials:padlock"},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "areasprotector:protector_large",
|
||||
type = "shapeless",
|
||||
recipe = {
|
||||
"areasprotector:protector_small",
|
||||
"areasprotector:protector_small",
|
||||
"areasprotector:protector_small",
|
||||
"areasprotector:protector_small",
|
||||
"areasprotector:protector_small",
|
||||
"areasprotector:protector_small",
|
||||
"areasprotector:protector_small",
|
||||
"areasprotector:protector_small"
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_alias("areasprotector:protector", "areasprotector:protector_large")
|
||||
minetest.register_alias("areasprotector:display_node", "areasprotector:display_node_large")
|
||||
|
BIN
areasprotector/textures/areasprotector_large_overlay.png
Normal file
After Width: | Height: | Size: 128 B |
@ -7,6 +7,7 @@ https://forum.minetest.net/viewtopic.php?id=8890
|
||||
|
||||
Changelog:
|
||||
|
||||
- 0.8 - Cooking clay block in furnace gives natural baked clay which you can dye
|
||||
- 0.7 - Added support for stairsplus so that stairs are registered properly
|
||||
- 0.6 - Added 3 new flowers and a new grass that are used for missing dyes
|
||||
- 0.5 - Now using minecraft recipe to colour baked clay (8x baked clay, 1x dye in centre)
|
||||
@ -15,4 +16,4 @@ Changelog:
|
||||
- 0.2 - Any colour of baked clay can be re-dyed into another colour
|
||||
- 0.1 - Initial Release
|
||||
|
||||
Lucky Blocks: 8
|
||||
Lucky Blocks: 9
|
||||
|
@ -2,6 +2,7 @@
|
||||
-- Baked Clay by TenPlus1
|
||||
|
||||
local clay = {
|
||||
{"natural", "Natural"},
|
||||
{"white", "White"},
|
||||
{"grey", "Grey"},
|
||||
{"black", "Black"},
|
||||
@ -35,7 +36,7 @@ for _, clay in pairs(clay) do
|
||||
})
|
||||
|
||||
-- craft from dye and any baked clay
|
||||
|
||||
if clay[1] ~= "natural" then
|
||||
minetest.register_craft({
|
||||
output = "bakedclay:" .. clay[1] .. " 8",
|
||||
recipe = {
|
||||
@ -44,6 +45,7 @@ for _, clay in pairs(clay) do
|
||||
{"group:bakedclay", "group:bakedclay", "group:bakedclay"}
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
-- register stairsplus stairs if found
|
||||
if stairsplus_mod then
|
||||
@ -84,7 +86,7 @@ end
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "bakedclay:white",
|
||||
output = "bakedclay:natural",
|
||||
recipe = "default:clay",
|
||||
})
|
||||
|
||||
@ -253,17 +255,35 @@ lucky_block:add_blocks({
|
||||
{"dro", {"bakedclay:"}, 10, true},
|
||||
{"fal", {p.."black", p.."blue", p.."brown", p.."cyan", p.."dark_green",
|
||||
p.."dark_grey", p.."green", p.."grey", p.."magenta", p.."orange",
|
||||
p.."pink", p.."red", p.."violet", p.."white", p.."yellow"}, 0},
|
||||
p.."pink", p.."red", p.."violet", p.."white", p.."yellow", p.."natural"}, 0},
|
||||
{"fal", {p.."black", p.."blue", p.."brown", p.."cyan", p.."dark_green",
|
||||
p.."dark_grey", p.."green", p.."grey", p.."magenta", p.."orange",
|
||||
p.."pink", p.."red", p.."violet", p.."white", p.."yellow"}, 0, true},
|
||||
p.."pink", p.."red", p.."violet", p.."white", p.."yellow", p.."natural"}, 0, true},
|
||||
{"dro", {p.."delphinium"}, 5},
|
||||
{"dro", {p.."lazarus"}, 5},
|
||||
{"dro", {p.."mannagrass"}, 5},
|
||||
{"dro", {p.."thistle"}, 6},
|
||||
{"flo", 5, {p.."black", p.."blue", p.."brown", p.."cyan", p.."dark_green",
|
||||
p.."dark_grey", p.."green", p.."grey", p.."magenta", p.."orange",
|
||||
p.."pink", p.."red", p.."violet", p.."white", p.."yellow"}, 2},
|
||||
{"flo", 5, {p.."natural", p.."black", p.."blue", p.."brown", p.."cyan",
|
||||
p.."dark_green", p.."dark_grey", p.."green", p.."grey", p.."magenta",
|
||||
p.."orange", p.."pink", p.."red", p.."violet", p.."white", p.."yellow"}, 2},
|
||||
{"nod", "default:chest", 0, {
|
||||
{name = p.."natural", max = 30},
|
||||
{name = p.."black", max = 30},
|
||||
{name = p.."blue", max = 30},
|
||||
{name = p.."brown", max = 30},
|
||||
{name = p.."cyan", max = 30},
|
||||
{name = p.."dark_green", max = 30},
|
||||
{name = p.."dark_grey", max = 30},
|
||||
{name = p.."green", max = 30},
|
||||
{name = p.."grey", max = 30},
|
||||
{name = p.."magenta", max = 30},
|
||||
{name = p.."orange", max = 30},
|
||||
{name = p.."pink", max = 30},
|
||||
{name = p.."red", max = 30},
|
||||
{name = p.."violet", max = 30},
|
||||
{name = p.."white", max = 30},
|
||||
{name = p.."yellow", max = 30},
|
||||
}},
|
||||
})
|
||||
end
|
||||
|
||||
|
BIN
bakedclay/textures/baked_clay_natural.png
Normal file
After Width: | Height: | Size: 296 B |
600
basic_signs/LICENSE
Normal file
@ -0,0 +1,600 @@
|
||||
License for code: LGPL 3.0
|
||||
License for media and all other assets: CC-by-SA 4.0
|
||||
|
||||
###############################################################################
|
||||
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
|
||||
This version of the GNU Lesser General Public License incorporates
|
||||
the terms and conditions of version 3 of the GNU General Public
|
||||
License, supplemented by the additional permissions listed below.
|
||||
|
||||
0. Additional Definitions.
|
||||
|
||||
As used herein, "this License" refers to version 3 of the GNU Lesser
|
||||
General Public License, and the "GNU GPL" refers to version 3 of the GNU
|
||||
General Public License.
|
||||
|
||||
"The Library" refers to a covered work governed by this License,
|
||||
other than an Application or a Combined Work as defined below.
|
||||
|
||||
An "Application" is any work that makes use of an interface provided
|
||||
by the Library, but which is not otherwise based on the Library.
|
||||
Defining a subclass of a class defined by the Library is deemed a mode
|
||||
of using an interface provided by the Library.
|
||||
|
||||
A "Combined Work" is a work produced by combining or linking an
|
||||
Application with the Library. The particular version of the Library
|
||||
with which the Combined Work was made is also called the "Linked
|
||||
Version".
|
||||
|
||||
The "Minimal Corresponding Source" for a Combined Work means the
|
||||
Corresponding Source for the Combined Work, excluding any source code
|
||||
for portions of the Combined Work that, considered in isolation, are
|
||||
based on the Application, and not on the Linked Version.
|
||||
|
||||
The "Corresponding Application Code" for a Combined Work means the
|
||||
object code and/or source code for the Application, including any data
|
||||
and utility programs needed for reproducing the Combined Work from the
|
||||
Application, but excluding the System Libraries of the Combined Work.
|
||||
|
||||
1. Exception to Section 3 of the GNU GPL.
|
||||
|
||||
You may convey a covered work under sections 3 and 4 of this License
|
||||
without being bound by section 3 of the GNU GPL.
|
||||
|
||||
2. Conveying Modified Versions.
|
||||
|
||||
If you modify a copy of the Library, and, in your modifications, a
|
||||
facility refers to a function or data to be supplied by an Application
|
||||
that uses the facility (other than as an argument passed when the
|
||||
facility is invoked), then you may convey a copy of the modified
|
||||
version:
|
||||
|
||||
a) under this License, provided that you make a good faith effort to
|
||||
ensure that, in the event an Application does not supply the
|
||||
function or data, the facility still operates, and performs
|
||||
whatever part of its purpose remains meaningful, or
|
||||
|
||||
b) under the GNU GPL, with none of the additional permissions of
|
||||
this License applicable to that copy.
|
||||
|
||||
3. Object Code Incorporating Material from Library Header Files.
|
||||
|
||||
The object code form of an Application may incorporate material from
|
||||
a header file that is part of the Library. You may convey such object
|
||||
code under terms of your choice, provided that, if the incorporated
|
||||
material is not limited to numerical parameters, data structure
|
||||
layouts and accessors, or small macros, inline functions and templates
|
||||
(ten or fewer lines in length), you do both of the following:
|
||||
|
||||
a) Give prominent notice with each copy of the object code that the
|
||||
Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the object code with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
4. Combined Works.
|
||||
|
||||
You may convey a Combined Work under terms of your choice that,
|
||||
taken together, effectively do not restrict modification of the
|
||||
portions of the Library contained in the Combined Work and reverse
|
||||
engineering for debugging such modifications, if you also do each of
|
||||
the following:
|
||||
|
||||
a) Give prominent notice with each copy of the Combined Work that
|
||||
the Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the Combined Work with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
c) For a Combined Work that displays copyright notices during
|
||||
execution, include the copyright notice for the Library among
|
||||
these notices, as well as a reference directing the user to the
|
||||
copies of the GNU GPL and this license document.
|
||||
|
||||
d) Do one of the following:
|
||||
|
||||
0) Convey the Minimal Corresponding Source under the terms of this
|
||||
License, and the Corresponding Application Code in a form
|
||||
suitable for, and under terms that permit, the user to
|
||||
recombine or relink the Application with a modified version of
|
||||
the Linked Version to produce a modified Combined Work, in the
|
||||
manner specified by section 6 of the GNU GPL for conveying
|
||||
Corresponding Source.
|
||||
|
||||
1) Use a suitable shared library mechanism for linking with the
|
||||
Library. A suitable mechanism is one that (a) uses at run time
|
||||
a copy of the Library already present on the user's computer
|
||||
system, and (b) will operate properly with a modified version
|
||||
of the Library that is interface-compatible with the Linked
|
||||
Version.
|
||||
|
||||
e) Provide Installation Information, but only if you would otherwise
|
||||
be required to provide such information under section 6 of the
|
||||
GNU GPL, and only to the extent that such information is
|
||||
necessary to install and execute a modified version of the
|
||||
Combined Work produced by recombining or relinking the
|
||||
Application with a modified version of the Linked Version. (If
|
||||
you use option 4d0, the Installation Information must accompany
|
||||
the Minimal Corresponding Source and Corresponding Application
|
||||
Code. If you use option 4d1, you must provide the Installation
|
||||
Information in the manner specified by section 6 of the GNU GPL
|
||||
for conveying Corresponding Source.)
|
||||
|
||||
5. Combined Libraries.
|
||||
|
||||
You may place library facilities that are a work based on the
|
||||
Library side by side in a single library together with other library
|
||||
facilities that are not Applications and are not covered by this
|
||||
License, and convey such a combined library under terms of your
|
||||
choice, if you do both of the following:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work based
|
||||
on the Library, uncombined with any other library facilities,
|
||||
conveyed under the terms of this License.
|
||||
|
||||
b) Give prominent notice with the combined library that part of it
|
||||
is a work based on the Library, and explaining where to find the
|
||||
accompanying uncombined form of the same work.
|
||||
|
||||
6. Revised Versions of the GNU Lesser General Public License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions
|
||||
of the GNU Lesser General Public License from time to time. Such new
|
||||
versions will be similar in spirit to the present version, but may
|
||||
differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Library as you received it specifies that a certain numbered version
|
||||
of the GNU Lesser General Public License "or any later version"
|
||||
applies to it, you have the option of following the terms and
|
||||
conditions either of that published version or of any later version
|
||||
published by the Free Software Foundation. If the Library as you
|
||||
received it does not specify a version number of the GNU Lesser
|
||||
General Public License, you may choose any version of the GNU Lesser
|
||||
General Public License ever published by the Free Software Foundation.
|
||||
|
||||
If the Library as you received it specifies that a proxy can decide
|
||||
whether future versions of the GNU Lesser General Public License shall
|
||||
apply, that proxy's public statement of acceptance of any version is
|
||||
permanent authorization for you to choose that version for the
|
||||
Library.
|
||||
|
||||
###############################################################################
|
||||
|
||||
Attribution-ShareAlike 4.0 International
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Corporation ("Creative Commons") is not a law firm and
|
||||
does not provide legal services or legal advice. Distribution of
|
||||
Creative Commons public licenses does not create a lawyer-client or
|
||||
other relationship. Creative Commons makes its licenses and related
|
||||
information available on an "as-is" basis. Creative Commons gives no
|
||||
warranties regarding its licenses, any material licensed under their
|
||||
terms and conditions, or any related information. Creative Commons
|
||||
disclaims all liability for damages resulting from their use to the
|
||||
fullest extent possible.
|
||||
|
||||
Using Creative Commons Public Licenses
|
||||
|
||||
Creative Commons public licenses provide a standard set of terms and
|
||||
conditions that creators and other rights holders may use to share
|
||||
original works of authorship and other material subject to copyright
|
||||
and certain other rights specified in the public license below. The
|
||||
following considerations are for informational purposes only, are not
|
||||
exhaustive, and do not form part of our licenses.
|
||||
|
||||
Considerations for licensors: Our public licenses are
|
||||
intended for use by those authorized to give the public
|
||||
permission to use material in ways otherwise restricted by
|
||||
copyright and certain other rights. Our licenses are
|
||||
irrevocable. Licensors should read and understand the terms
|
||||
and conditions of the license they choose before applying it.
|
||||
Licensors should also secure all rights necessary before
|
||||
applying our licenses so that the public can reuse the
|
||||
material as expected. Licensors should clearly mark any
|
||||
material not subject to the license. This includes other CC-
|
||||
licensed material, or material used under an exception or
|
||||
limitation to copyright. More considerations for licensors:
|
||||
wiki.creativecommons.org/Considerations_for_licensors
|
||||
|
||||
Considerations for the public: By using one of our public
|
||||
licenses, a licensor grants the public permission to use the
|
||||
licensed material under specified terms and conditions. If
|
||||
the licensor's permission is not necessary for any reason--for
|
||||
example, because of any applicable exception or limitation to
|
||||
copyright--then that use is not regulated by the license. Our
|
||||
licenses grant only permissions under copyright and certain
|
||||
other rights that a licensor has authority to grant. Use of
|
||||
the licensed material may still be restricted for other
|
||||
reasons, including because others have copyright or other
|
||||
rights in the material. A licensor may make special requests,
|
||||
such as asking that all changes be marked or described.
|
||||
Although not required by our licenses, you are encouraged to
|
||||
respect those requests where reasonable. More considerations
|
||||
for the public:
|
||||
wiki.creativecommons.org/Considerations_for_licensees
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Attribution-ShareAlike 4.0 International Public
|
||||
License
|
||||
|
||||
By exercising the Licensed Rights (defined below), You accept and agree
|
||||
to be bound by the terms and conditions of this Creative Commons
|
||||
Attribution-ShareAlike 4.0 International Public License ("Public
|
||||
License"). To the extent this Public License may be interpreted as a
|
||||
contract, You are granted the Licensed Rights in consideration of Your
|
||||
acceptance of these terms and conditions, and the Licensor grants You
|
||||
such rights in consideration of benefits the Licensor receives from
|
||||
making the Licensed Material available under these terms and
|
||||
conditions.
|
||||
|
||||
|
||||
Section 1 -- Definitions.
|
||||
|
||||
a. Adapted Material means material subject to Copyright and Similar
|
||||
Rights that is derived from or based upon the Licensed Material
|
||||
and in which the Licensed Material is translated, altered,
|
||||
arranged, transformed, or otherwise modified in a manner requiring
|
||||
permission under the Copyright and Similar Rights held by the
|
||||
Licensor. For purposes of this Public License, where the Licensed
|
||||
Material is a musical work, performance, or sound recording,
|
||||
Adapted Material is always produced where the Licensed Material is
|
||||
synched in timed relation with a moving image.
|
||||
|
||||
b. Adapter's License means the license You apply to Your Copyright
|
||||
and Similar Rights in Your contributions to Adapted Material in
|
||||
accordance with the terms and conditions of this Public License.
|
||||
|
||||
c. BY-SA Compatible License means a license listed at
|
||||
creativecommons.org/compatiblelicenses, approved by Creative
|
||||
Commons as essentially the equivalent of this Public License.
|
||||
|
||||
d. Copyright and Similar Rights means copyright and/or similar rights
|
||||
closely related to copyright including, without limitation,
|
||||
performance, broadcast, sound recording, and Sui Generis Database
|
||||
Rights, without regard to how the rights are labeled or
|
||||
categorized. For purposes of this Public License, the rights
|
||||
specified in Section 2(b)(1)-(2) are not Copyright and Similar
|
||||
Rights.
|
||||
|
||||
e. Effective Technological Measures means those measures that, in the
|
||||
absence of proper authority, may not be circumvented under laws
|
||||
fulfilling obligations under Article 11 of the WIPO Copyright
|
||||
Treaty adopted on December 20, 1996, and/or similar international
|
||||
agreements.
|
||||
|
||||
f. Exceptions and Limitations means fair use, fair dealing, and/or
|
||||
any other exception or limitation to Copyright and Similar Rights
|
||||
that applies to Your use of the Licensed Material.
|
||||
|
||||
g. License Elements means the license attributes listed in the name
|
||||
of a Creative Commons Public License. The License Elements of this
|
||||
Public License are Attribution and ShareAlike.
|
||||
|
||||
h. Licensed Material means the artistic or literary work, database,
|
||||
or other material to which the Licensor applied this Public
|
||||
License.
|
||||
|
||||
i. Licensed Rights means the rights granted to You subject to the
|
||||
terms and conditions of this Public License, which are limited to
|
||||
all Copyright and Similar Rights that apply to Your use of the
|
||||
Licensed Material and that the Licensor has authority to license.
|
||||
|
||||
j. Licensor means the individual(s) or entity(ies) granting rights
|
||||
under this Public License.
|
||||
|
||||
k. Share means to provide material to the public by any means or
|
||||
process that requires permission under the Licensed Rights, such
|
||||
as reproduction, public display, public performance, distribution,
|
||||
dissemination, communication, or importation, and to make material
|
||||
available to the public including in ways that members of the
|
||||
public may access the material from a place and at a time
|
||||
individually chosen by them.
|
||||
|
||||
l. Sui Generis Database Rights means rights other than copyright
|
||||
resulting from Directive 96/9/EC of the European Parliament and of
|
||||
the Council of 11 March 1996 on the legal protection of databases,
|
||||
as amended and/or succeeded, as well as other essentially
|
||||
equivalent rights anywhere in the world.
|
||||
|
||||
m. You means the individual or entity exercising the Licensed Rights
|
||||
under this Public License. Your has a corresponding meaning.
|
||||
|
||||
|
||||
Section 2 -- Scope.
|
||||
|
||||
a. License grant.
|
||||
|
||||
1. Subject to the terms and conditions of this Public License,
|
||||
the Licensor hereby grants You a worldwide, royalty-free,
|
||||
non-sublicensable, non-exclusive, irrevocable license to
|
||||
exercise the Licensed Rights in the Licensed Material to:
|
||||
|
||||
a. reproduce and Share the Licensed Material, in whole or
|
||||
in part; and
|
||||
|
||||
b. produce, reproduce, and Share Adapted Material.
|
||||
|
||||
2. Exceptions and Limitations. For the avoidance of doubt, where
|
||||
Exceptions and Limitations apply to Your use, this Public
|
||||
License does not apply, and You do not need to comply with
|
||||
its terms and conditions.
|
||||
|
||||
3. Term. The term of this Public License is specified in Section
|
||||
6(a).
|
||||
|
||||
4. Media and formats; technical modifications allowed. The
|
||||
Licensor authorizes You to exercise the Licensed Rights in
|
||||
all media and formats whether now known or hereafter created,
|
||||
and to make technical modifications necessary to do so. The
|
||||
Licensor waives and/or agrees not to assert any right or
|
||||
authority to forbid You from making technical modifications
|
||||
necessary to exercise the Licensed Rights, including
|
||||
technical modifications necessary to circumvent Effective
|
||||
Technological Measures. For purposes of this Public License,
|
||||
simply making modifications authorized by this Section 2(a)
|
||||
(4) never produces Adapted Material.
|
||||
|
||||
5. Downstream recipients.
|
||||
|
||||
a. Offer from the Licensor -- Licensed Material. Every
|
||||
recipient of the Licensed Material automatically
|
||||
receives an offer from the Licensor to exercise the
|
||||
Licensed Rights under the terms and conditions of this
|
||||
Public License.
|
||||
|
||||
b. Additional offer from the Licensor -- Adapted Material.
|
||||
Every recipient of Adapted Material from You
|
||||
automatically receives an offer from the Licensor to
|
||||
exercise the Licensed Rights in the Adapted Material
|
||||
under the conditions of the Adapter's License You apply.
|
||||
|
||||
c. No downstream restrictions. You may not offer or impose
|
||||
any additional or different terms or conditions on, or
|
||||
apply any Effective Technological Measures to, the
|
||||
Licensed Material if doing so restricts exercise of the
|
||||
Licensed Rights by any recipient of the Licensed
|
||||
Material.
|
||||
|
||||
6. No endorsement. Nothing in this Public License constitutes or
|
||||
may be construed as permission to assert or imply that You
|
||||
are, or that Your use of the Licensed Material is, connected
|
||||
with, or sponsored, endorsed, or granted official status by,
|
||||
the Licensor or others designated to receive attribution as
|
||||
provided in Section 3(a)(1)(A)(i).
|
||||
|
||||
b. Other rights.
|
||||
|
||||
1. Moral rights, such as the right of integrity, are not
|
||||
licensed under this Public License, nor are publicity,
|
||||
privacy, and/or other similar personality rights; however, to
|
||||
the extent possible, the Licensor waives and/or agrees not to
|
||||
assert any such rights held by the Licensor to the limited
|
||||
extent necessary to allow You to exercise the Licensed
|
||||
Rights, but not otherwise.
|
||||
|
||||
2. Patent and trademark rights are not licensed under this
|
||||
Public License.
|
||||
|
||||
3. To the extent possible, the Licensor waives any right to
|
||||
collect royalties from You for the exercise of the Licensed
|
||||
Rights, whether directly or through a collecting society
|
||||
under any voluntary or waivable statutory or compulsory
|
||||
licensing scheme. In all other cases the Licensor expressly
|
||||
reserves any right to collect such royalties.
|
||||
|
||||
|
||||
Section 3 -- License Conditions.
|
||||
|
||||
Your exercise of the Licensed Rights is expressly made subject to the
|
||||
following conditions.
|
||||
|
||||
a. Attribution.
|
||||
|
||||
1. If You Share the Licensed Material (including in modified
|
||||
form), You must:
|
||||
|
||||
a. retain the following if it is supplied by the Licensor
|
||||
with the Licensed Material:
|
||||
|
||||
i. identification of the creator(s) of the Licensed
|
||||
Material and any others designated to receive
|
||||
attribution, in any reasonable manner requested by
|
||||
the Licensor (including by pseudonym if
|
||||
designated);
|
||||
|
||||
ii. a copyright notice;
|
||||
|
||||
iii. a notice that refers to this Public License;
|
||||
|
||||
iv. a notice that refers to the disclaimer of
|
||||
warranties;
|
||||
|
||||
v. a URI or hyperlink to the Licensed Material to the
|
||||
extent reasonably practicable;
|
||||
|
||||
b. indicate if You modified the Licensed Material and
|
||||
retain an indication of any previous modifications; and
|
||||
|
||||
c. indicate the Licensed Material is licensed under this
|
||||
Public License, and include the text of, or the URI or
|
||||
hyperlink to, this Public License.
|
||||
|
||||
2. You may satisfy the conditions in Section 3(a)(1) in any
|
||||
reasonable manner based on the medium, means, and context in
|
||||
which You Share the Licensed Material. For example, it may be
|
||||
reasonable to satisfy the conditions by providing a URI or
|
||||
hyperlink to a resource that includes the required
|
||||
information.
|
||||
|
||||
3. If requested by the Licensor, You must remove any of the
|
||||
information required by Section 3(a)(1)(A) to the extent
|
||||
reasonably practicable.
|
||||
|
||||
b. ShareAlike.
|
||||
|
||||
In addition to the conditions in Section 3(a), if You Share
|
||||
Adapted Material You produce, the following conditions also apply.
|
||||
|
||||
1. The Adapter's License You apply must be a Creative Commons
|
||||
license with the same License Elements, this version or
|
||||
later, or a BY-SA Compatible License.
|
||||
|
||||
2. You must include the text of, or the URI or hyperlink to, the
|
||||
Adapter's License You apply. You may satisfy this condition
|
||||
in any reasonable manner based on the medium, means, and
|
||||
context in which You Share Adapted Material.
|
||||
|
||||
3. You may not offer or impose any additional or different terms
|
||||
or conditions on, or apply any Effective Technological
|
||||
Measures to, Adapted Material that restrict exercise of the
|
||||
rights granted under the Adapter's License You apply.
|
||||
|
||||
|
||||
Section 4 -- Sui Generis Database Rights.
|
||||
|
||||
Where the Licensed Rights include Sui Generis Database Rights that
|
||||
apply to Your use of the Licensed Material:
|
||||
|
||||
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
|
||||
to extract, reuse, reproduce, and Share all or a substantial
|
||||
portion of the contents of the database;
|
||||
|
||||
b. if You include all or a substantial portion of the database
|
||||
contents in a database in which You have Sui Generis Database
|
||||
Rights, then the database in which You have Sui Generis Database
|
||||
Rights (but not its individual contents) is Adapted Material,
|
||||
|
||||
including for purposes of Section 3(b); and
|
||||
c. You must comply with the conditions in Section 3(a) if You Share
|
||||
all or a substantial portion of the contents of the database.
|
||||
|
||||
For the avoidance of doubt, this Section 4 supplements and does not
|
||||
replace Your obligations under this Public License where the Licensed
|
||||
Rights include other Copyright and Similar Rights.
|
||||
|
||||
|
||||
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
|
||||
|
||||
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
|
||||
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
|
||||
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
|
||||
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
|
||||
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
|
||||
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
|
||||
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
|
||||
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
|
||||
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
|
||||
|
||||
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
|
||||
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
|
||||
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
|
||||
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
|
||||
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
|
||||
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
|
||||
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
|
||||
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
|
||||
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
|
||||
|
||||
c. The disclaimer of warranties and limitation of liability provided
|
||||
above shall be interpreted in a manner that, to the extent
|
||||
possible, most closely approximates an absolute disclaimer and
|
||||
waiver of all liability.
|
||||
|
||||
|
||||
Section 6 -- Term and Termination.
|
||||
|
||||
a. This Public License applies for the term of the Copyright and
|
||||
Similar Rights licensed here. However, if You fail to comply with
|
||||
this Public License, then Your rights under this Public License
|
||||
terminate automatically.
|
||||
|
||||
b. Where Your right to use the Licensed Material has terminated under
|
||||
Section 6(a), it reinstates:
|
||||
|
||||
1. automatically as of the date the violation is cured, provided
|
||||
it is cured within 30 days of Your discovery of the
|
||||
violation; or
|
||||
|
||||
2. upon express reinstatement by the Licensor.
|
||||
|
||||
For the avoidance of doubt, this Section 6(b) does not affect any
|
||||
right the Licensor may have to seek remedies for Your violations
|
||||
of this Public License.
|
||||
|
||||
c. For the avoidance of doubt, the Licensor may also offer the
|
||||
Licensed Material under separate terms or conditions or stop
|
||||
distributing the Licensed Material at any time; however, doing so
|
||||
will not terminate this Public License.
|
||||
|
||||
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
|
||||
License.
|
||||
|
||||
|
||||
Section 7 -- Other Terms and Conditions.
|
||||
|
||||
a. The Licensor shall not be bound by any additional or different
|
||||
terms or conditions communicated by You unless expressly agreed.
|
||||
|
||||
b. Any arrangements, understandings, or agreements regarding the
|
||||
Licensed Material not stated herein are separate from and
|
||||
independent of the terms and conditions of this Public License.
|
||||
|
||||
|
||||
Section 8 -- Interpretation.
|
||||
|
||||
a. For the avoidance of doubt, this Public License does not, and
|
||||
shall not be interpreted to, reduce, limit, restrict, or impose
|
||||
conditions on any use of the Licensed Material that could lawfully
|
||||
be made without permission under this Public License.
|
||||
|
||||
b. To the extent possible, if any provision of this Public License is
|
||||
deemed unenforceable, it shall be automatically reformed to the
|
||||
minimum extent necessary to make it enforceable. If the provision
|
||||
cannot be reformed, it shall be severed from this Public License
|
||||
without affecting the enforceability of the remaining terms and
|
||||
conditions.
|
||||
|
||||
c. No term or condition of this Public License will be waived and no
|
||||
failure to comply consented to unless expressly agreed to by the
|
||||
Licensor.
|
||||
|
||||
d. Nothing in this Public License constitutes or may be interpreted
|
||||
as a limitation upon, or waiver of, any privileges and immunities
|
||||
that apply to the Licensor or You, including from the legal
|
||||
processes of any jurisdiction or authority.
|
||||
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons is not a party to its public
|
||||
licenses. Notwithstanding, Creative Commons may elect to apply one of
|
||||
its public licenses to material it publishes and in those instances
|
||||
will be considered the “Licensor.” The text of the Creative Commons
|
||||
public licenses is dedicated to the public domain under the CC0 Public
|
||||
Domain Dedication. Except for the limited purpose of indicating that
|
||||
material is shared under a Creative Commons public license or as
|
||||
otherwise permitted by the Creative Commons policies published at
|
||||
creativecommons.org/policies, Creative Commons does not authorize the
|
||||
use of the trademark "Creative Commons" or any other trademark or logo
|
||||
of Creative Commons without its prior written consent including,
|
||||
without limitation, in connection with any unauthorized modifications
|
||||
to any of its public licenses or any other arrangements,
|
||||
understandings, or agreements concerning use of licensed material. For
|
||||
the avoidance of doubt, this paragraph does not form part of the
|
||||
public licenses.
|
||||
|
||||
Creative Commons may be contacted at creativecommons.org.
|
7
basic_signs/README
Normal file
@ -0,0 +1,7 @@
|
||||
This project provides colored metal wall signs, and an extension to the
|
||||
default wooden signs, to place either a wall sign, a yard sign, or a
|
||||
hanging-from-ceiling sign, depending on where the user points.
|
||||
|
||||
Most items herein were originally part of signs_lib.
|
||||
|
||||
Requires signs_lib commit 4ff54c9a (2019-09-11) or later.
|
138
basic_signs/crafting.lua
Normal file
@ -0,0 +1,138 @@
|
||||
minetest.register_craft({
|
||||
output = "basic_signs:sign_wall_locked",
|
||||
type = "shapeless",
|
||||
recipe = {
|
||||
"default:sign_wall_wood",
|
||||
"basic_materials:padlock",
|
||||
},
|
||||
})
|
||||
|
||||
-- craft recipes for the metal signs
|
||||
|
||||
minetest.register_craft( {
|
||||
output = "basic_signs:sign_wall_green",
|
||||
recipe = {
|
||||
{ "dye:dark_green", "dye:white", "dye:dark_green" },
|
||||
{ "", "default:sign_wall_steel", "" }
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft( {
|
||||
output = "basic_signs:sign_wall_green 2",
|
||||
recipe = {
|
||||
{ "dye:dark_green", "dye:white", "dye:dark_green" },
|
||||
{ "steel:sheet_metal", "steel:sheet_metal", "steel:sheet_metal" }
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft( {
|
||||
output = "basic_signs:sign_wall_yellow",
|
||||
recipe = {
|
||||
{ "dye:yellow", "dye:black", "dye:yellow" },
|
||||
{ "", "default:sign_wall_steel", "" }
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft( {
|
||||
output = "basic_signs:sign_wall_yellow 2",
|
||||
recipe = {
|
||||
{ "dye:yellow", "dye:black", "dye:yellow" },
|
||||
{ "steel:sheet_metal", "steel:sheet_metal", "steel:sheet_metal" }
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft( {
|
||||
output = "basic_signs:sign_wall_red",
|
||||
recipe = {
|
||||
{ "dye:red", "dye:white", "dye:red" },
|
||||
{ "", "default:sign_wall_steel", "" }
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft( {
|
||||
output = "basic_signs:sign_wall_red 2",
|
||||
recipe = {
|
||||
{ "dye:red", "dye:white", "dye:red" },
|
||||
{ "steel:sheet_metal", "steel:sheet_metal", "steel:sheet_metal" }
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft( {
|
||||
output = "basic_signs:sign_wall_white_red",
|
||||
recipe = {
|
||||
{ "dye:white", "dye:red", "dye:white" },
|
||||
{ "", "default:sign_wall_steel", "" }
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft( {
|
||||
output = "basic_signs:sign_wall_white_red 2",
|
||||
recipe = {
|
||||
{ "dye:white", "dye:red", "dye:white" },
|
||||
{ "steel:sheet_metal", "steel:sheet_metal", "steel:sheet_metal" }
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft( {
|
||||
output = "basic_signs:sign_wall_white_black",
|
||||
recipe = {
|
||||
{ "dye:white", "dye:black", "dye:white" },
|
||||
{ "", "default:sign_wall_steel", "" }
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft( {
|
||||
output = "basic_signs:sign_wall_white_black 2",
|
||||
recipe = {
|
||||
{ "dye:white", "dye:black", "dye:white" },
|
||||
{ "steel:sheet_metal", "steel:sheet_metal", "steel:sheet_metal" }
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft( {
|
||||
output = "basic_signs:sign_wall_orange",
|
||||
recipe = {
|
||||
{ "dye:orange", "dye:black", "dye:orange" },
|
||||
{ "", "default:sign_wall_steel", "" }
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft( {
|
||||
output = "basic_signs:sign_wall_orange 2",
|
||||
recipe = {
|
||||
{ "dye:orange", "dye:black", "dye:orange" },
|
||||
{ "steel:sheet_metal", "steel:sheet_metal", "steel:sheet_metal" }
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft( {
|
||||
output = "basic_signs:sign_wall_blue",
|
||||
recipe = {
|
||||
{ "dye:blue", "dye:white", "dye:blue" },
|
||||
{ "", "default:sign_wall_steel", "" }
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft( {
|
||||
output = "basic_signs:sign_wall_blue 2",
|
||||
recipe = {
|
||||
{ "dye:blue", "dye:white", "dye:blue" },
|
||||
{ "steel:sheet_metal", "steel:sheet_metal", "steel:sheet_metal" }
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft( {
|
||||
output = "basic_signs:sign_wall_brown",
|
||||
recipe = {
|
||||
{ "dye:brown", "dye:white", "dye:brown" },
|
||||
{ "", "default:sign_wall_steel", "" }
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft( {
|
||||
output = "basic_signs:sign_wall_brown 2",
|
||||
recipe = {
|
||||
{ "dye:brown", "dye:white", "dye:brown" },
|
||||
{ "steel:sheet_metal", "steel:sheet_metal", "steel:sheet_metal" }
|
||||
},
|
||||
})
|
3
basic_signs/depends.txt
Normal file
@ -0,0 +1,3 @@
|
||||
default
|
||||
signs_lib
|
||||
basic_materials
|
273
basic_signs/init.lua
Normal file
@ -0,0 +1,273 @@
|
||||
-- Basic wall/yard/metal signs
|
||||
-- these were originally part of signs_lib
|
||||
|
||||
basic_signs = {}
|
||||
basic_signs.path = minetest.get_modpath(minetest.get_current_modname())
|
||||
|
||||
dofile(basic_signs.path .. "/crafting.lua")
|
||||
|
||||
local S, NS = dofile(basic_signs.path .. "/intllib.lua")
|
||||
basic_signs.gettext = S
|
||||
|
||||
local cbox
|
||||
|
||||
-- array : color, translated color, default text color
|
||||
local sign_colors = {
|
||||
{"green", S("green"), "f"},
|
||||
{"yellow", S("yellow"), "0"},
|
||||
{"red", S("red"), "f"},
|
||||
{"white_red", S("white_red"), "4"},
|
||||
{"white_black", S("white_black"), "0"},
|
||||
{"orange", S("orange"), "0"},
|
||||
{"blue", S("blue"), "f"},
|
||||
{"brown", S("brown"), "f"},
|
||||
}
|
||||
|
||||
function basic_signs.determine_sign_type(pos, placer, itemstack, pointed_thing)
|
||||
local playername = placer:get_player_name()
|
||||
local pt_name = minetest.get_node(pointed_thing.under).name
|
||||
local node = minetest.get_node(pos) -- since we're in after-place, this will be the wall sign itself
|
||||
|
||||
if minetest.is_protected(pointed_thing.under, playername) then
|
||||
minetest.record_protection_violation(pointed_thing.under, playername)
|
||||
return itemstack
|
||||
end
|
||||
|
||||
if minetest.registered_nodes[pt_name] and
|
||||
minetest.registered_nodes[pt_name].on_rightclick and
|
||||
not placer:get_player_control().sneak then
|
||||
return minetest.registered_nodes[pt_name].on_rightclick(pos, node, placer, itemstack, pointed_thing)
|
||||
elseif signs_lib.check_for_pole(pos, pointed_thing) then
|
||||
minetest.swap_node(pos, {name = "default:sign_wall_wood_onpole", param2 = node.param2})
|
||||
else
|
||||
local lookdir = placer:get_look_dir()
|
||||
print(dump(lookdir))
|
||||
local newparam2 = minetest.dir_to_facedir(lookdir)
|
||||
|
||||
if node.param2 == 0 then
|
||||
minetest.swap_node(pos, {name = "basic_signs:hanging_sign", param2 = newparam2})
|
||||
elseif node.param2 == 1 then
|
||||
minetest.swap_node(pos, {name = "basic_signs:yard_sign", param2 = newparam2})
|
||||
end
|
||||
signs_lib.update_sign(pos)
|
||||
end
|
||||
if not creative.is_enabled_for(playername) then
|
||||
itemstack:take_item()
|
||||
end
|
||||
return itemstack
|
||||
end
|
||||
|
||||
for _, onpole in ipairs({"", "_onpole"}) do
|
||||
|
||||
local nci = nil
|
||||
local on_rotate = signs_lib.wallmounted_rotate
|
||||
local pole_mount_tex = nil
|
||||
|
||||
if onpole == "_onpole" then
|
||||
nci = 1
|
||||
on_rotate = nil
|
||||
pole_mount_tex = "signs_lib_pole_mount.png" -- the metal straps on back, if needed
|
||||
end
|
||||
|
||||
local wood_groups = table.copy(signs_lib.standard_wood_groups)
|
||||
wood_groups.not_in_creative_inventory = nci
|
||||
local steel_groups = table.copy(signs_lib.standard_steel_groups)
|
||||
steel_groups.not_in_creative_inventory = nci
|
||||
|
||||
cbox = signs_lib.make_selection_boxes(35, 25, onpole)
|
||||
|
||||
minetest.override_item("default:sign_wall_wood"..onpole, {
|
||||
after_place_node = basic_signs.determine_sign_type
|
||||
})
|
||||
|
||||
minetest.register_node("basic_signs:sign_wall_locked"..onpole, {
|
||||
description = S("Locked Sign"),
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
paramtype2 = "wallmounted",
|
||||
drawtype = "mesh",
|
||||
node_box = cbox,
|
||||
selection_box = cbox,
|
||||
mesh = "signs_lib_standard_wall_sign"..onpole..".obj",
|
||||
tiles = {
|
||||
"basic_signs_sign_wall_locked.png",
|
||||
"signs_lib_sign_wall_steel_edges.png",
|
||||
pole_mount_tex
|
||||
},
|
||||
inventory_image = "basic_signs_sign_wall_locked_inv.png",
|
||||
wield_image = "basic_signs_sign_wall_locked_inv.png",
|
||||
groups = wood_groups,
|
||||
default_color = "0",
|
||||
on_construct = signs_lib.construct_sign,
|
||||
on_destruct = signs_lib.destruct_sign,
|
||||
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||
signs_lib.after_place_node(pos, placer, itemstack, pointed_thing, true)
|
||||
end,
|
||||
on_receive_fields = signs_lib.receive_fields,
|
||||
on_punch = signs_lib.update_sign,
|
||||
can_dig = signs_lib.can_modify,
|
||||
on_rotate = on_rotate,
|
||||
number_of_lines = signs_lib.standard_lines,
|
||||
horiz_scaling = signs_lib.standard_hscale,
|
||||
vert_scaling = signs_lib.standard_vscale,
|
||||
line_spacing = signs_lib.standard_lspace,
|
||||
font_size = signs_lib.standard_fsize,
|
||||
x_offset = signs_lib.standard_xoffs,
|
||||
y_offset = signs_lib.standard_yoffs,
|
||||
chars_per_line = signs_lib.standard_cpl,
|
||||
entity_info = {
|
||||
mesh = "signs_lib_standard_wall_sign_entity"..onpole..".obj",
|
||||
yaw = signs_lib.wallmounted_yaw
|
||||
},
|
||||
drop = "basic_signs:sign_wall_locked"
|
||||
})
|
||||
table.insert(signs_lib.lbm_restore_nodes, "basic_signs:sign_wall_locked"..onpole)
|
||||
table.insert(signs_lib.lbm_restore_nodes, "locked_sign:sign_wall_locked"..onpole)
|
||||
|
||||
minetest.register_alias("locked_sign:sign_wall_locked", "basic_signs:sign_wall_locked")
|
||||
|
||||
cbox = signs_lib.make_selection_boxes(35, 25, onpole, 0, 0, 0, true)
|
||||
|
||||
for i, color in ipairs(sign_colors) do
|
||||
minetest.register_node("basic_signs:sign_wall_steel_"..color[1]..onpole, {
|
||||
description = S("Sign (@1, steel)", color[2]),
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
paramtype2 = "facedir",
|
||||
drawtype = "mesh",
|
||||
node_box = cbox,
|
||||
selection_box = cbox,
|
||||
mesh = "signs_lib_standard_wall_sign_facedir"..onpole..".obj",
|
||||
tiles = {
|
||||
"basic_signs_steel_"..color[1]..".png",
|
||||
"signs_lib_sign_wall_steel_edges.png",
|
||||
pole_mount_tex
|
||||
},
|
||||
inventory_image = "basic_signs_steel_"..color[1].."_inv.png",
|
||||
wield_image = "basic_signs_steel_"..color[1].."_inv.png",
|
||||
groups = steel_groups,
|
||||
default_color = color[3],
|
||||
on_construct = signs_lib.construct_sign,
|
||||
on_destruct = signs_lib.destruct_sign,
|
||||
after_place_node = signs_lib.after_place_node,
|
||||
on_receive_fields = signs_lib.receive_fields,
|
||||
on_punch = signs_lib.update_sign,
|
||||
on_rotate = on_rotate,
|
||||
number_of_lines = signs_lib.standard_lines,
|
||||
horiz_scaling = signs_lib.standard_hscale,
|
||||
vert_scaling = signs_lib.standard_vscale,
|
||||
line_spacing = signs_lib.standard_lspace,
|
||||
font_size = signs_lib.standard_fsize,
|
||||
x_offset = signs_lib.standard_xoffs,
|
||||
y_offset = signs_lib.standard_yoffs,
|
||||
chars_per_line = signs_lib.standard_cpl,
|
||||
entity_info = {
|
||||
mesh = "signs_lib_standard_wall_sign_entity"..onpole..".obj",
|
||||
yaw = signs_lib.standard_yaw
|
||||
},
|
||||
drop = "signs:sign_wall_steel_"..color[1]
|
||||
})
|
||||
table.insert(signs_lib.lbm_restore_nodes, "basic_signs:sign_wall_steel_"..color[1]..onpole)
|
||||
table.insert(signs_lib.lbm_restore_nodes, "signs:sign_wall_"..color[1]..onpole)
|
||||
|
||||
minetest.register_alias("signs:sign_wall_"..color[1], "basic_signs:sign_wall_steel_"..color[1])
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
cbox = signs_lib.make_selection_boxes(35, 34.5, false, 0, -1.25, -19.69, true)
|
||||
|
||||
local nci_wood_groups = table.copy(signs_lib.standard_wood_groups)
|
||||
nci_wood_groups.not_in_creative_inventory = 1
|
||||
|
||||
minetest.register_node("basic_signs:yard_sign", {
|
||||
description = "Wooden yard sign",
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
paramtype2 = "facedir",
|
||||
drawtype = "mesh",
|
||||
node_box = cbox,
|
||||
selection_box = cbox,
|
||||
mesh = "basic_signs_yard_sign.obj",
|
||||
tiles = {
|
||||
"signs_lib_sign_wall_wooden.png",
|
||||
"signs_lib_sign_wall_wooden_edges.png",
|
||||
"default_wood.png"
|
||||
},
|
||||
inventory_image = "default_sign_wood.png",
|
||||
wield_image = "default_sign_wood.png",
|
||||
groups = nci_wood_groups,
|
||||
default_color = "0",
|
||||
on_construct = signs_lib.construct_sign,
|
||||
on_destruct = signs_lib.destruct_sign,
|
||||
after_place_node = signs_lib.after_place_node,
|
||||
on_receive_fields = signs_lib.receive_fields,
|
||||
on_punch = signs_lib.update_sign,
|
||||
on_rotate = on_rotate,
|
||||
number_of_lines = signs_lib.standard_lines,
|
||||
horiz_scaling = signs_lib.standard_hscale,
|
||||
vert_scaling = signs_lib.standard_vscale,
|
||||
line_spacing = signs_lib.standard_lspace,
|
||||
font_size = signs_lib.standard_fsize,
|
||||
x_offset = signs_lib.standard_xoffs,
|
||||
y_offset = signs_lib.standard_yoffs,
|
||||
chars_per_line = signs_lib.standard_cpl,
|
||||
entity_info = {
|
||||
mesh = "basic_signs_yard_sign_entity.obj",
|
||||
yaw = signs_lib.standard_yaw
|
||||
},
|
||||
drop = "default:sign_wall_wood"
|
||||
})
|
||||
table.insert(signs_lib.lbm_restore_nodes, "basic_signs:yard_sign")
|
||||
table.insert(signs_lib.lbm_restore_nodes, "signs:sign_yard")
|
||||
minetest.register_alias("signs:sign_yard", "basic_signs:yard_sign")
|
||||
|
||||
cbox = signs_lib.make_selection_boxes(35, 32, false, 0, 3, -18.5, true)
|
||||
|
||||
minetest.register_node("basic_signs:hanging_sign", {
|
||||
description = "Wooden sign, hanging",
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
paramtype2 = "facedir",
|
||||
drawtype = "mesh",
|
||||
node_box = cbox,
|
||||
selection_box = cbox,
|
||||
mesh = "basic_signs_hanging_sign.obj",
|
||||
tiles = {
|
||||
"signs_lib_sign_wall_wooden.png",
|
||||
"signs_lib_sign_wall_wooden_edges.png",
|
||||
"basic_signs_ceiling_hangers.png"
|
||||
},
|
||||
inventory_image = "default_sign_wood.png",
|
||||
wield_image = "default_sign_wood.png",
|
||||
groups = nci_wood_groups,
|
||||
default_color = "0",
|
||||
on_construct = signs_lib.construct_sign,
|
||||
on_destruct = signs_lib.destruct_sign,
|
||||
after_place_node = signs_lib.after_place_node,
|
||||
on_receive_fields = signs_lib.receive_fields,
|
||||
on_punch = signs_lib.update_sign,
|
||||
on_rotate = on_rotate,
|
||||
number_of_lines = signs_lib.standard_lines,
|
||||
horiz_scaling = signs_lib.standard_hscale,
|
||||
vert_scaling = signs_lib.standard_vscale,
|
||||
line_spacing = signs_lib.standard_lspace,
|
||||
font_size = signs_lib.standard_fsize,
|
||||
x_offset = signs_lib.standard_xoffs,
|
||||
y_offset = signs_lib.standard_yoffs,
|
||||
chars_per_line = signs_lib.standard_cpl,
|
||||
entity_info = {
|
||||
mesh = "basic_signs_hanging_sign_entity.obj",
|
||||
yaw = signs_lib.standard_yaw
|
||||
},
|
||||
drop = "default:sign_wall_wood"
|
||||
})
|
||||
table.insert(signs_lib.lbm_restore_nodes, "basic_signs:hanging_sign")
|
||||
table.insert(signs_lib.lbm_restore_nodes, "signs:sign_hanging")
|
||||
minetest.register_alias("signs:sign_hanging", "basic_signs:hanging_sign")
|
||||
|
||||
-- insert the old wood sign-on-fencepost into signs_lib's conversion LBM
|
||||
|
||||
table.insert(signs_lib.old_fenceposts_with_signs, "signs:sign_post")
|
||||
signs_lib.old_fenceposts["signs:sign_post"] = "default:fence_wood"
|
||||
signs_lib.old_fenceposts_replacement_signs["signs:sign_post"] = "default:sign_wall_wood_onpole"
|
45
basic_signs/intllib.lua
Normal file
@ -0,0 +1,45 @@
|
||||
|
||||
-- Fallback functions for when `intllib` is not installed.
|
||||
-- Code released under Unlicense <http://unlicense.org>.
|
||||
|
||||
-- Get the latest version of this file at:
|
||||
-- https://raw.githubusercontent.com/minetest-mods/intllib/master/lib/intllib.lua
|
||||
|
||||
local function format(str, ...)
|
||||
local args = { ... }
|
||||
local function repl(escape, open, num, close)
|
||||
if escape == "" then
|
||||
local replacement = tostring(args[tonumber(num)])
|
||||
if open == "" then
|
||||
replacement = replacement..close
|
||||
end
|
||||
return replacement
|
||||
else
|
||||
return "@"..open..num..close
|
||||
end
|
||||
end
|
||||
return (str:gsub("(@?)@(%(?)(%d+)(%)?)", repl))
|
||||
end
|
||||
|
||||
local gettext, ngettext
|
||||
if minetest.get_modpath("intllib") then
|
||||
if intllib.make_gettext_pair then
|
||||
-- New method using gettext.
|
||||
gettext, ngettext = intllib.make_gettext_pair()
|
||||
else
|
||||
-- Old method using text files.
|
||||
gettext = intllib.Getter()
|
||||
end
|
||||
end
|
||||
|
||||
-- Fill in missing functions.
|
||||
|
||||
gettext = gettext or function(msgid, ...)
|
||||
return format(msgid, ...)
|
||||
end
|
||||
|
||||
ngettext = ngettext or function(msgid, msgid_plural, n, ...)
|
||||
return format(n==1 and msgid or msgid_plural, ...)
|
||||
end
|
||||
|
||||
return gettext, ngettext
|
97
basic_signs/locale/de.po
Normal file
@ -0,0 +1,97 @@
|
||||
# German Translation for the signs_lib mod.
|
||||
# Copyright (C) 2018 Vanessa Ezekowitz
|
||||
# This file is distributed under the same license as the signs_lib package.
|
||||
# Xanthin, 2017.
|
||||
# CodeXP <codexp@gmx.net>, 2018.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-07-31 18:31+0200\n"
|
||||
"PO-Revision-Date: 2018-03-24 22:00+0100\n"
|
||||
"Last-Translator: CodeXP <codexp@gmx.net>\n"
|
||||
"Language-Team: \n"
|
||||
"Language: de\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 1.8.12\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: init.lua
|
||||
msgid "Write"
|
||||
msgstr "schreiben"
|
||||
|
||||
#: init.lua
|
||||
msgid "Locked sign, owned by @1\n"
|
||||
msgstr "gesperrter Schild, gehört @1\n"
|
||||
|
||||
#: init.lua
|
||||
msgid "locked "
|
||||
msgstr "gesperrt "
|
||||
|
||||
#: init.lua
|
||||
#, fuzzy
|
||||
msgid "@1 wrote \"@2\" to @3sign at @4"
|
||||
msgstr "@1 schrieb \"@2\" auf das @3Schild bei @4"
|
||||
|
||||
#: init.lua
|
||||
msgid "Sign"
|
||||
msgstr "Schild"
|
||||
|
||||
#: init.lua
|
||||
msgid "Can edit all locked signs"
|
||||
msgstr "Kann alle gesperrte Schilder bearbeiten"
|
||||
|
||||
#: init.lua
|
||||
msgid "Locked Sign"
|
||||
msgstr "gesperrter Schild"
|
||||
|
||||
#: init.lua
|
||||
msgid "green"
|
||||
msgstr "grün"
|
||||
|
||||
#: init.lua
|
||||
msgid "yellow"
|
||||
msgstr "gelb"
|
||||
|
||||
#: init.lua
|
||||
msgid "red"
|
||||
msgstr "rot"
|
||||
|
||||
#: init.lua
|
||||
msgid "white_red"
|
||||
msgstr "weißrot"
|
||||
|
||||
#: init.lua
|
||||
msgid "white_black"
|
||||
msgstr "schwarzweiß"
|
||||
|
||||
#: init.lua
|
||||
msgid "orange"
|
||||
msgstr "orange"
|
||||
|
||||
#: init.lua
|
||||
msgid "blue"
|
||||
msgstr "blau"
|
||||
|
||||
#: init.lua
|
||||
msgid "brown"
|
||||
msgstr "braun"
|
||||
|
||||
#: init.lua
|
||||
msgid "Sign (@1, metal)"
|
||||
msgstr "Schild (@1, Metall)"
|
||||
|
||||
#: init.lua
|
||||
msgid "Attempt to register unknown node as fence"
|
||||
msgstr "Versuch ein unbekanntes Element als Zaun zu registrieren"
|
||||
|
||||
#: init.lua
|
||||
msgid "Registered @1 and @2"
|
||||
msgstr "Registrierte @1 und @2"
|
||||
|
||||
#: init.lua
|
||||
msgid "[MOD] signs loaded"
|
||||
msgstr "[MOD] Schilder-Mod geladen"
|
95
basic_signs/locale/es.po
Normal file
@ -0,0 +1,95 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-07-31 18:22+0200\n"
|
||||
"PO-Revision-Date: 2017-07-31 18:30+0200\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 1.8.12\n"
|
||||
"Last-Translator: Carlos Barraza\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Language: es\n"
|
||||
|
||||
#: init.lua
|
||||
msgid "Locked sign, owned by @1\n"
|
||||
msgstr ""
|
||||
|
||||
#: init.lua
|
||||
msgid "locked "
|
||||
msgstr "bloqueada "
|
||||
|
||||
#: init.lua
|
||||
msgid "@1 wrote \"@2\" to @3sign at @4"
|
||||
msgstr "@1 escribio \"@2\" en el cartel @3en @4"
|
||||
|
||||
#: init.lua
|
||||
msgid "Sign"
|
||||
msgstr "Letrero"
|
||||
|
||||
#: init.lua
|
||||
msgid "Can edit all locked signs"
|
||||
msgstr ""
|
||||
|
||||
#: init.lua
|
||||
#, fuzzy
|
||||
msgid "Locked Sign"
|
||||
msgstr "Letrero bloqueada"
|
||||
|
||||
#: init.lua
|
||||
msgid "green"
|
||||
msgstr "verde"
|
||||
|
||||
#: init.lua
|
||||
msgid "yellow"
|
||||
msgstr "amarillo"
|
||||
|
||||
#: init.lua
|
||||
msgid "red"
|
||||
msgstr "rojo"
|
||||
|
||||
#: init.lua
|
||||
#, fuzzy
|
||||
msgid "white_red"
|
||||
msgstr "rojo y blanco"
|
||||
|
||||
#: init.lua
|
||||
#, fuzzy
|
||||
msgid "white_black"
|
||||
msgstr "negro y blanco"
|
||||
|
||||
#: init.lua
|
||||
msgid "orange"
|
||||
msgstr "naranja"
|
||||
|
||||
#: init.lua
|
||||
msgid "blue"
|
||||
msgstr "azul"
|
||||
|
||||
#: init.lua
|
||||
msgid "brown"
|
||||
msgstr "marrón"
|
||||
|
||||
#: init.lua
|
||||
#, fuzzy
|
||||
msgid "Sign (@1, metal)"
|
||||
msgstr "Letrero (@1, metal)"
|
||||
|
||||
#: init.lua
|
||||
msgid "Attempt to register unknown node as fence"
|
||||
msgstr ""
|
||||
|
||||
#: init.lua
|
||||
msgid "Registered @1 and @2"
|
||||
msgstr "Registrado @1 y @2"
|
||||
|
||||
#: init.lua
|
||||
msgid "[MOD] signs loaded"
|
||||
msgstr "[MOD] signs cargados"
|
91
basic_signs/locale/fr.po
Normal file
@ -0,0 +1,91 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-07-31 18:13+0200\n"
|
||||
"PO-Revision-Date: 2017-07-31 18:22+0200\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 1.8.12\n"
|
||||
"Last-Translator: fat115 <fat115@framasoft.org>\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"Language: fr\n"
|
||||
|
||||
#: init.lua
|
||||
msgid "Locked sign, owned by @1\n"
|
||||
msgstr "Panneau verrouillé, appartient à @1\n"
|
||||
|
||||
#: init.lua
|
||||
msgid "locked "
|
||||
msgstr "verrouillé "
|
||||
|
||||
#: init.lua
|
||||
msgid "@1 wrote \"@2\" to @3sign at @4"
|
||||
msgstr "@1 a écrit \"@2\" sur le panneau @3en @4"
|
||||
|
||||
#: init.lua
|
||||
msgid "Sign"
|
||||
msgstr "Panneau"
|
||||
|
||||
#: init.lua
|
||||
msgid "Can edit all locked signs"
|
||||
msgstr "Peut modifier les panneaux verrouillés"
|
||||
|
||||
#: init.lua
|
||||
msgid "Locked Sign"
|
||||
msgstr "Panneau (verrouillé)"
|
||||
|
||||
#: init.lua
|
||||
msgid "green"
|
||||
msgstr "vert"
|
||||
|
||||
#: init.lua
|
||||
msgid "yellow"
|
||||
msgstr "jaune"
|
||||
|
||||
#: init.lua
|
||||
msgid "red"
|
||||
msgstr "rouge"
|
||||
|
||||
#: init.lua
|
||||
msgid "white_red"
|
||||
msgstr "rouge et blanc"
|
||||
|
||||
#: init.lua
|
||||
msgid "white_black"
|
||||
msgstr "noir et blanc"
|
||||
|
||||
#: init.lua
|
||||
msgid "orange"
|
||||
msgstr "orange"
|
||||
|
||||
#: init.lua
|
||||
msgid "blue"
|
||||
msgstr "bleu"
|
||||
|
||||
#: init.lua
|
||||
msgid "brown"
|
||||
msgstr "marron"
|
||||
|
||||
#: init.lua
|
||||
msgid "Sign (@1, metal)"
|
||||
msgstr "Panneau (@1, métal)"
|
||||
|
||||
#: init.lua
|
||||
msgid "Attempt to register unknown node as fence"
|
||||
msgstr "Tentative d'enregistrer un nœud inconnu comme barrière"
|
||||
|
||||
#: init.lua
|
||||
msgid "Registered @1 and @2"
|
||||
msgstr "Enregistrement de @1 et @"
|
||||
|
||||
#: init.lua
|
||||
msgid "[MOD] signs loaded"
|
||||
msgstr "[MOD] signs chargé"
|
91
basic_signs/locale/ms.po
Normal file
@ -0,0 +1,91 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-07-31 18:00+0200\n"
|
||||
"PO-Revision-Date: 2017-11-17 02:38+0800\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.0.4\n"
|
||||
"Last-Translator: \n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"Language: ms\n"
|
||||
|
||||
#: init.lua
|
||||
msgid "Locked sign, owned by @1\n"
|
||||
msgstr "Papan tanda berkunci, milik @1\n"
|
||||
|
||||
#: init.lua
|
||||
msgid "locked "
|
||||
msgstr "berkunci "
|
||||
|
||||
#: init.lua
|
||||
msgid "@1 wrote \"@2\" to @3sign at @4"
|
||||
msgstr "@1 menulis \"@2\" atas papan tanda @3dekat @4"
|
||||
|
||||
#: init.lua
|
||||
msgid "Sign"
|
||||
msgstr "Papan Tanda"
|
||||
|
||||
#: init.lua
|
||||
msgid "Can edit all locked signs"
|
||||
msgstr "Boleh sunting semua papan tanda berkunci"
|
||||
|
||||
#: init.lua
|
||||
msgid "Locked Sign"
|
||||
msgstr "Papan Tanda Berkunci"
|
||||
|
||||
#: init.lua
|
||||
msgid "green"
|
||||
msgstr "hijau"
|
||||
|
||||
#: init.lua
|
||||
msgid "yellow"
|
||||
msgstr "kuning"
|
||||
|
||||
#: init.lua
|
||||
msgid "red"
|
||||
msgstr "merah"
|
||||
|
||||
#: init.lua
|
||||
msgid "white_red"
|
||||
msgstr "putih_merah"
|
||||
|
||||
#: init.lua
|
||||
msgid "white_black"
|
||||
msgstr "putih_hitam"
|
||||
|
||||
#: init.lua
|
||||
msgid "orange"
|
||||
msgstr "jingga"
|
||||
|
||||
#: init.lua
|
||||
msgid "blue"
|
||||
msgstr "biru"
|
||||
|
||||
#: init.lua
|
||||
msgid "brown"
|
||||
msgstr "perang"
|
||||
|
||||
#: init.lua
|
||||
msgid "Sign (@1, metal)"
|
||||
msgstr "Papan Tanda (@1, logam)"
|
||||
|
||||
#: init.lua
|
||||
msgid "Attempt to register unknown node as fence"
|
||||
msgstr "Cuba untuk mendaftar nod tidak diketahui sebagai pagar"
|
||||
|
||||
#: init.lua
|
||||
msgid "Registered @1 and @2"
|
||||
msgstr "Telah daftar @1 dan @2"
|
||||
|
||||
#: init.lua
|
||||
msgid "[MOD] signs loaded"
|
||||
msgstr "[MODS] signs telah dimuatkan"
|
94
basic_signs/locale/ru.po
Normal file
@ -0,0 +1,94 @@
|
||||
# Russian Translation for the signs_lib mod.
|
||||
# Copyright (C) 2018 Vanessa Ezekowitz
|
||||
# This file is distributed under the same license as the signs_lib package.
|
||||
# CodeXP <codexp@gmx.net>, 2018.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: signs_lib\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-03-24 22:23+0100\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: CodeXP <codexp@gmx.net>\n"
|
||||
"Language-Team: \n"
|
||||
"Language: ru\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: init.lua
|
||||
msgid "Write"
|
||||
msgstr "записать"
|
||||
|
||||
#: init.lua
|
||||
msgid "Locked sign, owned by @1\n"
|
||||
msgstr "защищенная табличка, пренадлежит @1\n"
|
||||
|
||||
#: init.lua
|
||||
msgid "locked "
|
||||
msgstr "защищенный "
|
||||
|
||||
#: init.lua
|
||||
msgid "@1 wrote \"@2\" to @3sign at @4"
|
||||
msgstr "@1 записал \"@2\" в @3sign на @4"
|
||||
|
||||
#: init.lua
|
||||
msgid "Sign"
|
||||
msgstr "табличка"
|
||||
|
||||
#: init.lua
|
||||
msgid "Can edit all locked signs"
|
||||
msgstr "Может редактировать все защищенные таблички"
|
||||
|
||||
#: init.lua
|
||||
msgid "Locked Sign"
|
||||
msgstr "защищенная табличка"
|
||||
|
||||
#: init.lua
|
||||
msgid "green"
|
||||
msgstr "зеленая"
|
||||
|
||||
#: init.lua
|
||||
msgid "yellow"
|
||||
msgstr "желтая"
|
||||
|
||||
#: init.lua
|
||||
msgid "red"
|
||||
msgstr "красная"
|
||||
|
||||
#: init.lua
|
||||
msgid "white_red"
|
||||
msgstr "краснобелая"
|
||||
|
||||
#: init.lua
|
||||
msgid "white_black"
|
||||
msgstr "чернобелая"
|
||||
|
||||
#: init.lua
|
||||
msgid "orange"
|
||||
msgstr "оранжевая"
|
||||
|
||||
#: init.lua
|
||||
msgid "blue"
|
||||
msgstr "синея"
|
||||
|
||||
#: init.lua
|
||||
msgid "brown"
|
||||
msgstr "коричневая"
|
||||
|
||||
#: init.lua
|
||||
msgid "Sign (@1, metal)"
|
||||
msgstr "Табличка (@1, металл)"
|
||||
|
||||
#: init.lua
|
||||
msgid "Attempt to register unknown node as fence"
|
||||
msgstr "Попытка зарегистрировать неизвестный узел как забор"
|
||||
|
||||
#: init.lua
|
||||
msgid "Registered @1 and @2"
|
||||
msgstr "Зарегистрировано @1 для @2"
|
||||
|
||||
#: init.lua
|
||||
msgid "[MOD] signs loaded"
|
||||
msgstr "[MOD] мод табличек загружен"
|
94
basic_signs/locale/template.pot
Normal file
@ -0,0 +1,94 @@
|
||||
# LANGUAGE Translation for the signs_lib mod.
|
||||
# Copyright (C) 2018 Vanessa Ezekowitz
|
||||
# This file is distributed under the same license as the signs_lib package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: signs_lib\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-03-24 22:23+0100\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: init.lua
|
||||
msgid "Write"
|
||||
msgstr ""
|
||||
|
||||
#: init.lua
|
||||
msgid "Locked sign, owned by @1\n"
|
||||
msgstr ""
|
||||
|
||||
#: init.lua
|
||||
msgid "locked "
|
||||
msgstr ""
|
||||
|
||||
#: init.lua
|
||||
msgid "@1 wrote \"@2\" to @3sign at @4"
|
||||
msgstr ""
|
||||
|
||||
#: init.lua
|
||||
msgid "Sign"
|
||||
msgstr ""
|
||||
|
||||
#: init.lua
|
||||
msgid "Can edit all locked signs"
|
||||
msgstr ""
|
||||
|
||||
#: init.lua
|
||||
msgid "Locked Sign"
|
||||
msgstr ""
|
||||
|
||||
#: init.lua
|
||||
msgid "green"
|
||||
msgstr ""
|
||||
|
||||
#: init.lua
|
||||
msgid "yellow"
|
||||
msgstr ""
|
||||
|
||||
#: init.lua
|
||||
msgid "red"
|
||||
msgstr ""
|
||||
|
||||
#: init.lua
|
||||
msgid "white_red"
|
||||
msgstr ""
|
||||
|
||||
#: init.lua
|
||||
msgid "white_black"
|
||||
msgstr ""
|
||||
|
||||
#: init.lua
|
||||
msgid "orange"
|
||||
msgstr ""
|
||||
|
||||
#: init.lua
|
||||
msgid "blue"
|
||||
msgstr ""
|
||||
|
||||
#: init.lua
|
||||
msgid "brown"
|
||||
msgstr ""
|
||||
|
||||
#: init.lua
|
||||
msgid "Sign (@1, metal)"
|
||||
msgstr ""
|
||||
|
||||
#: init.lua
|
||||
msgid "Attempt to register unknown node as fence"
|
||||
msgstr ""
|
||||
|
||||
#: init.lua
|
||||
msgid "Registered @1 and @2"
|
||||
msgstr ""
|
||||
|
||||
#: init.lua
|
||||
msgid "[MOD] signs loaded"
|
||||
msgstr ""
|
62
basic_signs/models/basic_signs_hanging_sign.obj
Normal file
@ -0,0 +1,62 @@
|
||||
# Blender v2.79 (sub 0) OBJ File: 'basic_signs wooden hanging sign.blend'
|
||||
# www.blender.org
|
||||
o Cube
|
||||
v 0.437500 -0.312500 0.031250
|
||||
v 0.437500 -0.312500 -0.031250
|
||||
v 0.437500 0.312500 0.031250
|
||||
v 0.437500 0.312500 -0.031250
|
||||
v -0.437500 -0.312500 0.031250
|
||||
v -0.437500 -0.312500 -0.031250
|
||||
v -0.437500 0.312500 0.031250
|
||||
v -0.437500 0.312500 -0.031250
|
||||
v 0.437500 -0.312500 0.031250
|
||||
v 0.437500 -0.312500 -0.031250
|
||||
v 0.437500 0.312500 0.031250
|
||||
v 0.437500 0.312500 -0.031250
|
||||
v -0.437500 -0.312500 0.031250
|
||||
v -0.437500 -0.312500 -0.031250
|
||||
v -0.437500 0.312500 0.031250
|
||||
v -0.437500 0.312500 -0.031250
|
||||
v 0.500000 0.312500 0.000000
|
||||
v 0.500000 0.500000 0.000000
|
||||
v -0.500000 0.312500 0.000000
|
||||
v -0.500000 0.500000 0.000000
|
||||
vt 0.468750 0.812500
|
||||
vt 0.031250 0.812500
|
||||
vt 0.031250 0.187500
|
||||
vt 0.468750 0.187500
|
||||
vt 0.531250 0.812500
|
||||
vt 0.968750 0.812500
|
||||
vt 0.968750 0.187500
|
||||
vt 0.531250 0.187500
|
||||
vt 0.234375 0.000000
|
||||
vt 0.234375 1.000000
|
||||
vt 0.015625 1.000000
|
||||
vt 0.015625 -0.000000
|
||||
vt 0.609375 -0.000000
|
||||
vt 0.609375 1.000000
|
||||
vt 0.390625 1.000000
|
||||
vt 0.390625 -0.000000
|
||||
vt 0.765625 0.000000
|
||||
vt 0.765625 1.000000
|
||||
vt 1.000000 0.812500
|
||||
vt 1.000000 1.000000
|
||||
vt 0.000000 1.000000
|
||||
vt -0.000000 0.812500
|
||||
vn 0.0000 0.0000 -1.0000
|
||||
vn 0.0000 -0.0000 1.0000
|
||||
vn 0.0000 -1.0000 0.0000
|
||||
vn 0.0000 1.0000 0.0000
|
||||
vn 1.0000 0.0000 0.0000
|
||||
vn -1.0000 0.0000 0.0000
|
||||
g Cube_Cube_front-back
|
||||
s off
|
||||
f 8/1/1 4/2/1 2/3/1 6/4/1
|
||||
f 3/5/2 7/6/2 5/7/2 1/8/2
|
||||
g Cube_Cube_edges
|
||||
f 13/9/3 14/10/3 10/11/3 9/12/3
|
||||
f 11/13/4 12/14/4 16/15/4 15/16/4
|
||||
f 11/13/5 9/17/5 10/18/5 12/14/5
|
||||
f 13/9/6 15/16/6 16/15/6 14/10/6
|
||||
g Cube_Cube_hangers
|
||||
f 19/19/1 20/20/1 18/21/1 17/22/1
|
15
basic_signs/models/basic_signs_hanging_sign_entity.obj
Normal file
@ -0,0 +1,15 @@
|
||||
# Blender v2.79 (sub 0) OBJ File: 'basic_signs wooden hanging sign--entity.blend'
|
||||
# www.blender.org
|
||||
o Cube
|
||||
v 0.406250 -0.281250 -0.039063
|
||||
v 0.406250 0.281250 -0.039062
|
||||
v -0.406250 -0.281250 -0.039063
|
||||
v -0.406250 0.281250 -0.039062
|
||||
vt 0.906250 0.781250
|
||||
vt 0.093750 0.781250
|
||||
vt 0.093750 0.218750
|
||||
vt 0.906250 0.218750
|
||||
vn 0.0000 0.0000 -1.0000
|
||||
g Cube_Cube_None
|
||||
s off
|
||||
f 4/1/1 2/2/1 1/3/1 3/4/1
|
85
basic_signs/models/basic_signs_yard_sign.obj
Normal file
@ -0,0 +1,85 @@
|
||||
# Blender v2.79 (sub 0) OBJ File: 'basic_signs wooden yard sign.blend'
|
||||
# www.blender.org
|
||||
o Cube
|
||||
v 0.437500 -0.250000 -0.000000
|
||||
v 0.437500 -0.250000 -0.062500
|
||||
v 0.437500 0.375000 0.000000
|
||||
v 0.437500 0.375000 -0.062500
|
||||
v -0.437500 -0.250000 -0.000000
|
||||
v -0.437500 -0.250000 -0.062500
|
||||
v -0.437500 0.375000 0.000000
|
||||
v -0.437500 0.375000 -0.062500
|
||||
v 0.437500 -0.250000 -0.000000
|
||||
v 0.437500 -0.250000 -0.062500
|
||||
v 0.437500 0.375000 0.000000
|
||||
v 0.437500 0.375000 -0.062500
|
||||
v -0.437500 -0.250000 -0.000000
|
||||
v -0.437500 -0.250000 -0.062500
|
||||
v -0.437500 0.375000 0.000000
|
||||
v -0.437500 0.375000 -0.062500
|
||||
v 0.062500 -0.500000 0.000000
|
||||
v 0.062500 0.250000 0.000000
|
||||
v 0.062500 -0.500000 0.062500
|
||||
v 0.062500 0.250000 0.062500
|
||||
v -0.062500 -0.500000 0.000000
|
||||
v -0.062500 0.250000 0.000000
|
||||
v -0.062500 -0.500000 0.062500
|
||||
v -0.062500 0.250000 0.062500
|
||||
vt 0.468750 0.812500
|
||||
vt 0.031250 0.812500
|
||||
vt 0.031250 0.187500
|
||||
vt 0.468750 0.187500
|
||||
vt 0.531250 0.812500
|
||||
vt 0.968750 0.812500
|
||||
vt 0.968750 0.187500
|
||||
vt 0.531250 0.187500
|
||||
vt 0.234375 0.000000
|
||||
vt 0.234375 1.000000
|
||||
vt 0.015625 1.000000
|
||||
vt 0.015625 -0.000000
|
||||
vt 0.609375 -0.000000
|
||||
vt 0.609375 1.000000
|
||||
vt 0.390625 1.000000
|
||||
vt 0.390625 -0.000000
|
||||
vt 0.765625 0.000000
|
||||
vt 0.765625 1.000000
|
||||
vt 0.000000 0.750000
|
||||
vt 2.000000 0.750000
|
||||
vt 2.000000 0.875000
|
||||
vt 0.000000 0.875000
|
||||
vt 0.000000 0.125000
|
||||
vt 2.000000 0.125000
|
||||
vt 2.000000 0.375000
|
||||
vt 0.000000 0.375000
|
||||
vt 2.000000 0.500000
|
||||
vt 0.000000 0.500000
|
||||
vt 0.812500 0.875000
|
||||
vt 0.562500 0.875000
|
||||
vt 0.562500 1.000000
|
||||
vt 0.812500 1.000000
|
||||
vt 0.125000 0.875000
|
||||
vt 0.375000 0.875000
|
||||
vt 0.375000 1.000000
|
||||
vt 0.125000 1.000000
|
||||
vn 0.0000 0.0000 -1.0000
|
||||
vn 0.0000 -0.0000 1.0000
|
||||
vn 0.0000 -1.0000 0.0000
|
||||
vn 0.0000 1.0000 0.0000
|
||||
vn 1.0000 0.0000 0.0000
|
||||
vn -1.0000 0.0000 0.0000
|
||||
g Cube_Cube_front-back
|
||||
s off
|
||||
f 8/1/1 4/2/1 2/3/1 6/4/1
|
||||
f 3/5/2 7/6/2 5/7/2 1/8/2
|
||||
g Cube_Cube_edges
|
||||
f 13/9/3 14/10/3 10/11/3 9/12/3
|
||||
f 11/13/4 12/14/4 16/15/4 15/16/4
|
||||
f 11/13/5 9/17/5 10/18/5 12/14/5
|
||||
f 13/9/6 15/16/6 16/15/6 14/10/6
|
||||
g Cube_Cube_default_wood
|
||||
f 17/19/5 18/20/5 20/21/5 19/22/5
|
||||
f 19/23/2 20/24/2 24/25/2 23/26/2
|
||||
f 23/26/6 24/25/6 22/27/6 21/28/6
|
||||
f 21/28/1 22/27/1 18/20/1 17/19/1
|
||||
f 19/29/3 23/30/3 21/31/3 17/32/3
|
||||
f 24/33/4 20/34/4 18/35/4 22/36/4
|
15
basic_signs/models/basic_signs_yard_sign_entity.obj
Normal file
@ -0,0 +1,15 @@
|
||||
# Blender v2.79 (sub 0) OBJ File: 'basic_signs wooden yard sign.blend'
|
||||
# www.blender.org
|
||||
o Cube
|
||||
v 0.406250 -0.218750 -0.070313
|
||||
v 0.406250 0.343750 -0.070312
|
||||
v -0.406250 -0.218750 -0.070313
|
||||
v -0.406250 0.343750 -0.070312
|
||||
vt 0.906250 0.781250
|
||||
vt 0.093750 0.781250
|
||||
vt 0.093750 0.218750
|
||||
vt 0.906250 0.218750
|
||||
vn 0.0000 0.0000 -1.0000
|
||||
g Cube_Cube_None
|
||||
s off
|
||||
f 4/1/1 2/2/1 1/3/1 3/4/1
|
BIN
basic_signs/textures/basic_signs_ceiling_hangers.png
Normal file
After Width: | Height: | Size: 155 B |
BIN
basic_signs/textures/basic_signs_entity_UV.png
Normal file
After Width: | Height: | Size: 123 B |
BIN
basic_signs/textures/basic_signs_sign_wall_locked.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
BIN
basic_signs/textures/basic_signs_sign_wall_locked_inv.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
basic_signs/textures/basic_signs_steel_blue.png
Normal file
After Width: | Height: | Size: 927 B |
BIN
basic_signs/textures/basic_signs_steel_blue_inv.png
Normal file
After Width: | Height: | Size: 114 B |
BIN
basic_signs/textures/basic_signs_steel_brown.png
Normal file
After Width: | Height: | Size: 932 B |
BIN
basic_signs/textures/basic_signs_steel_brown_inv.png
Normal file
After Width: | Height: | Size: 115 B |
BIN
basic_signs/textures/basic_signs_steel_green.png
Normal file
After Width: | Height: | Size: 922 B |
BIN
basic_signs/textures/basic_signs_steel_green_inv.png
Normal file
After Width: | Height: | Size: 110 B |
BIN
basic_signs/textures/basic_signs_steel_orange.png
Normal file
After Width: | Height: | Size: 915 B |
Before Width: | Height: | Size: 106 B After Width: | Height: | Size: 106 B |
BIN
basic_signs/textures/basic_signs_steel_red.png
Normal file
After Width: | Height: | Size: 925 B |
BIN
basic_signs/textures/basic_signs_steel_red_inv.png
Normal file
After Width: | Height: | Size: 115 B |
BIN
basic_signs/textures/basic_signs_steel_white_black.png
Normal file
After Width: | Height: | Size: 898 B |
BIN
basic_signs/textures/basic_signs_steel_white_black_inv.png
Normal file
After Width: | Height: | Size: 101 B |
BIN
basic_signs/textures/basic_signs_steel_white_red.png
Normal file
After Width: | Height: | Size: 935 B |
BIN
basic_signs/textures/basic_signs_steel_white_red_inv.png
Normal file
After Width: | Height: | Size: 116 B |
BIN
basic_signs/textures/basic_signs_steel_yellow.png
Normal file
After Width: | Height: | Size: 913 B |
Before Width: | Height: | Size: 102 B After Width: | Height: | Size: 102 B |
484
bees/init.lua
@ -116,6 +116,7 @@ for _, nodeclass in ipairs(NodeClass) do
|
||||
groups = {cracky=3, ud_param2_colorable = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
on_construct = unifieddyes.on_construct,
|
||||
on_dig = unifieddyes.on_dig
|
||||
})
|
||||
|
||||
minetest.register_node("blox:cobble_"..nodeclass, {
|
||||
@ -133,6 +134,7 @@ for _, nodeclass in ipairs(NodeClass) do
|
||||
groups = {cracky=3, ud_param2_colorable = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
on_construct = unifieddyes.on_construct,
|
||||
on_dig = unifieddyes.on_dig
|
||||
})
|
||||
|
||||
minetest.register_node("blox:wood_"..nodeclass, {
|
||||
@ -150,6 +152,7 @@ for _, nodeclass in ipairs(NodeClass) do
|
||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,flammable=3, ud_param2_colorable = 1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
on_construct = unifieddyes.on_construct,
|
||||
on_dig = unifieddyes.on_dig
|
||||
})
|
||||
|
||||
table.insert(blox.old_89_color_nodes, "blox:stone_"..nodeclass)
|
||||
@ -169,6 +172,7 @@ minetest.register_node("blox:wood_tinted", {
|
||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,flammable=3, ud_param2_colorable = 1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
on_construct = unifieddyes.on_construct,
|
||||
on_dig = unifieddyes.on_dig
|
||||
})
|
||||
|
||||
minetest.register_node("blox:stone_square", {
|
||||
@ -181,6 +185,7 @@ minetest.register_node("blox:stone_square", {
|
||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,flammable=3, ud_param2_colorable = 1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
on_construct = unifieddyes.on_construct,
|
||||
on_dig = unifieddyes.on_dig
|
||||
})
|
||||
|
||||
minetest.register_node("blox:cobble_tinted", {
|
||||
@ -193,6 +198,7 @@ minetest.register_node("blox:cobble_tinted", {
|
||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,flammable=3, not_in_creative_inventory = 1, ud_param2_colorable = 1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
on_construct = unifieddyes.on_construct,
|
||||
on_dig = unifieddyes.on_dig
|
||||
})
|
||||
|
||||
minetest.register_node("blox:stone_tinted", {
|
||||
@ -205,6 +211,7 @@ minetest.register_node("blox:stone_tinted", {
|
||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,flammable=3, not_in_creative_inventory = 1, ud_param2_colorable = 1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
on_construct = unifieddyes.on_construct,
|
||||
on_dig = unifieddyes.on_dig,
|
||||
drop = {
|
||||
items = {
|
||||
{items = {"blox:cobble_tinted"}, inherit_color = true },
|
||||
|
@ -52,6 +52,7 @@ minetest.register_node("bobblocks:block", {
|
||||
},
|
||||
on_rightclick = bobblocks.update_bobblock,
|
||||
on_construct = unifieddyes.on_construct,
|
||||
on_dig = unifieddyes.on_dig,
|
||||
})
|
||||
|
||||
minetest.register_node("bobblocks:block_off", {
|
||||
@ -71,6 +72,7 @@ minetest.register_node("bobblocks:block_off", {
|
||||
},
|
||||
on_rightclick = bobblocks.update_bobblock,
|
||||
on_construct = unifieddyes.on_construct,
|
||||
on_dig = unifieddyes.on_dig,
|
||||
})
|
||||
|
||||
-- Block Poles
|
||||
@ -94,6 +96,7 @@ minetest.register_node("bobblocks:pole", {
|
||||
},
|
||||
on_rightclick = bobblocks.update_bobblock,
|
||||
on_construct = unifieddyes.on_construct,
|
||||
on_dig = unifieddyes.on_dig,
|
||||
})
|
||||
|
||||
minetest.register_node("bobblocks:pole_off", {
|
||||
@ -117,6 +120,7 @@ minetest.register_node("bobblocks:pole_off", {
|
||||
},
|
||||
on_rightclick = bobblocks.update_bobblock,
|
||||
on_construct = unifieddyes.on_construct,
|
||||
on_dig = unifieddyes.on_dig,
|
||||
})
|
||||
|
||||
-- old nodes grandfathered-in because they have a different texture or usage than the colored ones.
|
||||
@ -151,6 +155,7 @@ minetest.register_node("bobblocks:wavyblock", {
|
||||
},
|
||||
on_rightclick = bobblocks.update_bobblock,
|
||||
on_construct = unifieddyes.on_construct,
|
||||
on_dig = unifieddyes.on_dig,
|
||||
})
|
||||
|
||||
minetest.register_node("bobblocks:wavyblock_off", {
|
||||
@ -171,6 +176,7 @@ minetest.register_node("bobblocks:wavyblock_off", {
|
||||
},
|
||||
on_rightclick = bobblocks.update_bobblock,
|
||||
on_construct = unifieddyes.on_construct,
|
||||
on_dig = unifieddyes.on_dig,
|
||||
})
|
||||
|
||||
minetest.register_node("bobblocks:wavypole", {
|
||||
@ -186,6 +192,7 @@ minetest.register_node("bobblocks:wavypole", {
|
||||
sounds = default.node_sound_glass_defaults(),
|
||||
groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3, ud_param2_colorable = 1},
|
||||
on_construct = unifieddyes.on_construct,
|
||||
on_dig = unifieddyes.on_dig,
|
||||
--light_source = LIGHT_MAX-0,
|
||||
})
|
||||
|
||||
|
@ -74,6 +74,7 @@ minetest.register_node("castle_tapestries:tapestry", {
|
||||
wall_side = {-0.5,-0.5,0.4375,0.5,1.5,0.5},
|
||||
},
|
||||
after_place_node = unifieddyes.fix_rotation_nsew,
|
||||
on_dig = unifieddyes.on_dig,
|
||||
on_rotate = unifieddyes.fix_after_screwdriver_nsew
|
||||
})
|
||||
|
||||
@ -95,6 +96,7 @@ minetest.register_node("castle_tapestries:tapestry_long", {
|
||||
wall_side = {-0.5,-0.5,0.4375,0.5,2.5,0.5},
|
||||
},
|
||||
after_place_node = unifieddyes.fix_rotation_nsew,
|
||||
on_dig = unifieddyes.on_dig,
|
||||
on_rotate = unifieddyes.fix_after_screwdriver_nsew
|
||||
})
|
||||
|
||||
@ -116,6 +118,7 @@ minetest.register_node("castle_tapestries:tapestry_very_long", {
|
||||
wall_side = {-0.5,-0.5,0.4375,0.5,3.5,0.5},
|
||||
},
|
||||
after_place_node = unifieddyes.fix_rotation_nsew,
|
||||
on_dig = unifieddyes.on_dig,
|
||||
on_rotate = unifieddyes.fix_after_screwdriver_nsew
|
||||
})
|
||||
|
||||
|
@ -1,3 +1,4 @@
|
||||
default
|
||||
unifieddyes
|
||||
moreblocks?
|
||||
signs_lib?
|
||||
|
@ -88,6 +88,7 @@ for _, color in ipairs(unifieddyes.HUES_WITH_GREY) do
|
||||
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||
minetest.rotate_node(itemstack, placer, pointed_thing)
|
||||
end,
|
||||
on_dig = unifieddyes.on_dig,
|
||||
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=2, not_in_creative_inventory=1, ud_param2_colorable = 1},
|
||||
}
|
||||
)
|
||||
@ -167,7 +168,8 @@ default.register_fence("coloredwood:fence", {
|
||||
palette = "unifieddyes_palette_extended.png",
|
||||
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, ud_param2_colorable = 1, not_in_creative_inventory=1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
material = "coloredwood:wood_block"
|
||||
material = "coloredwood:wood_block",
|
||||
on_dig = unifieddyes.on_dig,
|
||||
})
|
||||
|
||||
groups = table.copy(minetest.registered_items["default:fence_wood"].groups)
|
||||
@ -214,4 +216,8 @@ unifieddyes.register_color_craft({
|
||||
}
|
||||
})
|
||||
|
||||
if minetest.get_modpath("signs_lib") then
|
||||
signs_lib.allowed_poles["coloredwood:fence"] = true
|
||||
end
|
||||
|
||||
print("[Colored Wood] Loaded!")
|
||||
|
@ -258,33 +258,6 @@ minetest.register_node("computer:tower", {
|
||||
|
||||
minetest.register_alias("computer:tower_on", "computer:tower")
|
||||
|
||||
-- Printer/scaner combo
|
||||
minetest.register_node("computer:printer", {
|
||||
description = S("Printer-Scanner Combo"),
|
||||
inventory_image = "computer_printer_inv.png",
|
||||
tiles = {"computer_printer_t.png","computer_printer_bt.png","computer_printer_l.png",
|
||||
"computer_printer_r.png","computer_printer_b.png","computer_printer_f.png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
walkable = true,
|
||||
groups = {snappy=3},
|
||||
sound = default.node_sound_wood_defaults(),
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.4375, -0.3125, -0.125, 0.4375, -0.0625, 0.375},
|
||||
{-0.4375, -0.5, -0.125, 0.4375, -0.4375, 0.375},
|
||||
{-0.4375, -0.5, -0.125, -0.25, -0.0625, 0.375},
|
||||
{0.25, -0.5, -0.125, 0.4375, -0.0625, 0.375},
|
||||
{-0.4375, -0.5, -0.0625, 0.4375, -0.0625, 0.375},
|
||||
{-0.375, -0.4375, 0.25, 0.375, -0.0625, 0.4375},
|
||||
{-0.25, -0.25, 0.4375, 0.25, 0.0625, 0.5},
|
||||
{-0.25, -0.481132, -0.3125, 0.25, -0.4375, 0}
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
--Rack Server
|
||||
minetest.register_node("computer:server", {
|
||||
drawtype = "nodebox",
|
||||
|
@ -1,2 +1,4 @@
|
||||
default
|
||||
homedecor_common
|
||||
basic_materials
|
||||
unifieddyes
|
||||
|
@ -94,6 +94,6 @@ end
|
||||
|
||||
local MODPATH = minetest.get_modpath("computer")
|
||||
dofile(MODPATH.."/computers.lua")
|
||||
dofile(MODPATH.."/miscitems.lua")
|
||||
dofile(MODPATH.."/printers.lua")
|
||||
dofile(MODPATH.."/recipes.lua")
|
||||
dofile(MODPATH.."/tetris.lua")
|
||||
|
@ -1,68 +0,0 @@
|
||||
-- Copyright (C) 2012-2013 Diego Martínez <kaeza@users.sf.net>
|
||||
|
||||
-- This file defines some items in order to not have to depend on other mods.
|
||||
|
||||
local S = homedecor.gettext
|
||||
|
||||
if (not minetest.get_modpath("homedecor")) then
|
||||
|
||||
minetest.register_craftitem(":basic_materials:plastic_sheet", {
|
||||
description = S("Plastic sheet"),
|
||||
inventory_image = "homedecor_plastic_sheeting.png",
|
||||
})
|
||||
|
||||
minetest.register_craftitem(":homedecor:plastic_base", {
|
||||
description = S("Unprocessed Plastic base"),
|
||||
wield_image = "homedecor_plastic_base.png",
|
||||
inventory_image = "homedecor_plastic_base_inv.png",
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = 'homedecor:plastic_base 6',
|
||||
recipe = { "default:junglegrass",
|
||||
"default:junglegrass",
|
||||
"default:junglegrass"
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = 'homedecor:plastic_base 3',
|
||||
recipe = { "default:dry_shrub",
|
||||
"default:dry_shrub",
|
||||
"default:dry_shrub"
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = 'homedecor:plastic_base 4',
|
||||
recipe = { "default:leaves",
|
||||
"default:leaves",
|
||||
"default:leaves",
|
||||
"default:leaves",
|
||||
"default:leaves",
|
||||
"default:leaves"
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "basic_materials:plastic_sheet",
|
||||
recipe = "homedecor:plastic_base",
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = 'fuel',
|
||||
recipe = 'homedecor:plastic_base',
|
||||
burntime = 30,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = 'fuel',
|
||||
recipe = 'basic_materials:plastic_sheet',
|
||||
burntime = 30,
|
||||
})
|
||||
|
||||
end -- not homedecor
|
9835
computer/models/computer_3dprinter_bedflinger.obj
Normal file
61
computer/printers.lua
Normal file
@ -0,0 +1,61 @@
|
||||
-- Printers of some kind or another
|
||||
|
||||
local S = homedecor.gettext
|
||||
|
||||
minetest.register_node("computer:printer", {
|
||||
description = S("Printer-Scanner Combo"),
|
||||
inventory_image = "computer_printer_inv.png",
|
||||
tiles = {"computer_printer_t.png","computer_printer_bt.png","computer_printer_l.png",
|
||||
"computer_printer_r.png","computer_printer_b.png","computer_printer_f.png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
walkable = true,
|
||||
groups = {snappy=3},
|
||||
sound = default.node_sound_wood_defaults(),
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.4375, -0.3125, -0.125, 0.4375, -0.0625, 0.375},
|
||||
{-0.4375, -0.5, -0.125, 0.4375, -0.4375, 0.375},
|
||||
{-0.4375, -0.5, -0.125, -0.25, -0.0625, 0.375},
|
||||
{0.25, -0.5, -0.125, 0.4375, -0.0625, 0.375},
|
||||
{-0.4375, -0.5, -0.0625, 0.4375, -0.0625, 0.375},
|
||||
{-0.375, -0.4375, 0.25, 0.375, -0.0625, 0.4375},
|
||||
{-0.25, -0.25, 0.4375, 0.25, 0.0625, 0.5},
|
||||
{-0.25, -0.481132, -0.3125, 0.25, -0.4375, 0}
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
-- "bedflinger" style 3D Printer (Prusa i3 or equivalent)
|
||||
|
||||
local cbox = {
|
||||
type = "fixed",
|
||||
fixed = {-0.25, -0.25, -0.5, 0.3, 0.3, 0.25 }
|
||||
}
|
||||
|
||||
minetest.register_node("computer:3dprinter_bedflinger", {
|
||||
description = S('3D Printer ("bedflinger")'),
|
||||
inventory_image = "computer_3dprinter_bedflinger_inv.png",
|
||||
tiles = {
|
||||
{ name = "computer_3dprinter_bedflinger.png", color = 0xffffffff },
|
||||
"computer_3dprinter_filament.png"
|
||||
},
|
||||
paramtype = "light",
|
||||
walkable = true,
|
||||
groups = {snappy=3, ud_param2_colorable = 1},
|
||||
sound = default.node_sound_wood_defaults(),
|
||||
drawtype = "mesh",
|
||||
mesh = "computer_3dprinter_bedflinger.obj",
|
||||
paramtype2 = "colorwallmounted",
|
||||
palette = "unifieddyes_palette_colorwallmounted.png",
|
||||
selection_box = cbox,
|
||||
collision_box = cbox,
|
||||
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||
unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing)
|
||||
end,
|
||||
on_dig = unifieddyes.on_dig,
|
||||
on_rotate = unifieddyes.fix_after_screwdriver_nsew,
|
||||
})
|
||||
|
BIN
computer/textures/computer_3dprinter_bedflinger.png
Normal file
After Width: | Height: | Size: 3.5 KiB |
BIN
computer/textures/computer_3dprinter_bedflinger_inv.png
Normal file
After Width: | Height: | Size: 3.8 KiB |
BIN
computer/textures/computer_3dprinter_filament.png
Normal file
After Width: | Height: | Size: 216 B |
7
concrete/locale/fr.txt
Normal file
@ -0,0 +1,7 @@
|
||||
# technic_concrete translation template
|
||||
|
||||
Rebar = Armature
|
||||
Concrete Block = Bloc de béton
|
||||
Blast-resistant Concrete Block = Bloc de béton anti explosions
|
||||
Concrete Post Platform = Plateforme en béton
|
||||
Concrete Post = Pilier en béton
|
10
concrete/locale/pt_BR.txt
Normal file
@ -0,0 +1,10 @@
|
||||
# Braziliam portuguese translation for technic_concrete
|
||||
# Tradução portuguesa brasileira para technic_concrete
|
||||
# By Sires
|
||||
|
||||
Rebar = Vergalhão
|
||||
Concrete Block = Bloco de Concreto
|
||||
Blast-resistant Concrete Block = Bloco de Concreto resistente-a-explosões
|
||||
Concrete Post Platform = Plataforma para Poste de Concreto
|
||||
Concrete Post = Poste de Concreto
|
||||
|
Before Width: | Height: | Size: 311 B After Width: | Height: | Size: 214 B |
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 813 B After Width: | Height: | Size: 583 B |
@ -1,44 +1,42 @@
|
||||
players_income = {}
|
||||
local players_income = {}
|
||||
|
||||
-- internationalization boilerplate
|
||||
local MP = minetest.get_modpath(minetest.get_current_modname())
|
||||
local S, NS = dofile(MP.."/intllib.lua")
|
||||
|
||||
local income_enabled = minetest.settings:get_bool("currency.income_enabled", true)
|
||||
local income_item = minetest.settings:get("currency.income_item") or "currency:minegeld_10"
|
||||
local income_count = tonumber(minetest.settings:get("currency.income_count")) or 1
|
||||
local income_period = tonumber(minetest.settings:get("currency.income_period")) or 720
|
||||
|
||||
if income_enabled then
|
||||
local timer = 0
|
||||
minetest.register_globalstep(function(dtime)
|
||||
timer = timer + dtime;
|
||||
if timer >= 720 then --720 for one day
|
||||
if timer >= income_period then
|
||||
timer = 0
|
||||
for _, player in ipairs(minetest.get_connected_players()) do
|
||||
local name = player:get_player_name()
|
||||
if players_income[name] == nil then
|
||||
players_income[name] = 0
|
||||
end
|
||||
players_income[name] = 1
|
||||
players_income[name] = income_count
|
||||
minetest.log("info", "[Currency] "..S("basic income for @1", name))
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
earn_income = function(player)
|
||||
local function earn_income(player)
|
||||
if not player or player.is_fake_player then return end
|
||||
local name = player:get_player_name()
|
||||
if players_income[name] == nil then
|
||||
players_income[name] = 0
|
||||
end
|
||||
if players_income[name] > 0 then
|
||||
count = players_income[name]
|
||||
|
||||
local income_count = players_income[name]
|
||||
if income_count and income_count > 0 then
|
||||
local inv = player:get_inventory()
|
||||
inv:add_item("main", {name="currency:minegeld_10", count=count})
|
||||
players_income[name] = 0
|
||||
inv:add_item("main", {name=income_item, count=income_count})
|
||||
players_income[name] = nil
|
||||
minetest.log("info", "[Currency] "..S("added basic income for @1 to inventory", name))
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_on_dignode(function(pos, oldnode, digger)
|
||||
earn_income(digger)
|
||||
end)
|
||||
|
||||
minetest.register_on_placenode(function(pos, node, placer)
|
||||
earn_income(placer)
|
||||
end)
|
||||
minetest.register_on_dignode(function(pos, oldnode, digger) earn_income(digger) end)
|
||||
minetest.register_on_placenode(function(pos, node, placer) earn_income(placer) end)
|
||||
minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv) earn_income(player) end)
|
||||
end
|
||||
|
@ -1 +1,3 @@
|
||||
name = currency
|
||||
depends = default
|
||||
optional_depends = intllib,loot,pipeworks
|
||||
|
11
currency/settingtypes.txt
Normal file
@ -0,0 +1,11 @@
|
||||
# Is income enabled?
|
||||
currency.income_enabled (Is currency income enabled?) bool true
|
||||
|
||||
# Item that is given as income by the currency mod
|
||||
currency.income_item (Currency income item) string currency:minegeld_10
|
||||
|
||||
# Number of items given as income
|
||||
currency.income_count (Currency income item) int 1 1 65535
|
||||
|
||||
# Length of time (in seconds) between checking if a user should get income
|
||||
currency.income_period (Currency income period) int 720
|
@ -108,10 +108,10 @@ local lcds = {
|
||||
-- on ground
|
||||
--* [1] = {delta = {x = 0, y =-0.4, z = 0}, pitch = math.pi / 2},
|
||||
-- sides
|
||||
[2] = {delta = {x = 0.437, y = 0, z = 0}, yaw = math.pi / -2},
|
||||
[3] = {delta = {x = -0.437, y = 0, z = 0}, yaw = math.pi / 2},
|
||||
[4] = {delta = {x = 0, y = 0, z = 0.437}, yaw = 0},
|
||||
[5] = {delta = {x = 0, y = 0, z = -0.437}, yaw = math.pi},
|
||||
[2] = {delta = {x = 0.42, y = 0, z = 0}, yaw = math.pi / -2},
|
||||
[3] = {delta = {x = -0.42, y = 0, z = 0}, yaw = math.pi / 2},
|
||||
[4] = {delta = {x = 0, y = 0, z = 0.42}, yaw = 0},
|
||||
[5] = {delta = {x = 0, y = 0, z = -0.42}, yaw = math.pi},
|
||||
}
|
||||
|
||||
local reset_meta = function(pos)
|
||||
|
@ -62,3 +62,12 @@ minetest.register_node("digistuff:noteblock", {
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "digistuff:noteblock",
|
||||
recipe = {
|
||||
{"mesecons_noteblock:noteblock"},
|
||||
{"mesecons_luacontroller:luacontroller0000"},
|
||||
{"digilines:wire_std_00000000"},
|
||||
},
|
||||
})
|
||||
|
@ -78,3 +78,11 @@ minetest.register_node("digistuff:piezo", {
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "digistuff:piezo",
|
||||
recipe = {
|
||||
{"quartz:quartz_crystal_piece","basic_materials:steel_strip"},
|
||||
{"digilines:wire_std_00000000","mesecons_luacontroller:luacontroller0000"},
|
||||
},
|
||||
})
|
||||
|
@ -220,3 +220,12 @@ minetest.register_node("digistuff:piston_pusher", {
|
||||
|
||||
mesecon.register_mvps_stopper("digistuff:piston_ext")
|
||||
mesecon.register_mvps_stopper("digistuff:piston_pusher")
|
||||
|
||||
minetest.register_craft({
|
||||
output = "digistuff:piston",
|
||||
recipe = {
|
||||
{"mesecons_pistons:piston_normal_off"},
|
||||
{"mesecons_luacontroller:luacontroller0000"},
|
||||
{"digilines:wire_std_00000000"},
|
||||
},
|
||||
})
|
||||
|
@ -426,3 +426,12 @@ minetest.register_node("digistuff:wall_knob_configured", {
|
||||
end,
|
||||
sounds = default and default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "digistuff:wall_knob",
|
||||
recipe = {
|
||||
{"", "mesecons_button:button_off", ""},
|
||||
{"digilines:wire_std_00000000","mesecons_luacontroller:luacontroller0000", "digilines:wire_std_00000000"},
|
||||
{"", "digilines:wire_std_00000000", ""},
|
||||
},
|
||||
})
|
||||
|
@ -177,17 +177,20 @@ if minetest.get_modpath("unifieddyes") then
|
||||
unifieddyes.fix_rotation(pos, placer, itemstack, pointed_thing)
|
||||
end
|
||||
iclip_def.groups = {choppy=1, snappy=1, oddly_breakable_by_hand=1, ud_param2_colorable = 1}
|
||||
iclip_def.on_dig = unifieddyes.on_dig
|
||||
|
||||
iclipfence_def.paramtype2 = "color"
|
||||
iclipfence_def.palette = "unifieddyes_palette_extended.png"
|
||||
iclipfence_def.on_construct = unifieddyes.on_construct
|
||||
iclipfence_def.groups = {fence=1, choppy=1, snappy=1, oddly_breakable_by_hand=1, ud_param2_colorable = 1}
|
||||
iclipfence_def.on_dig = unifieddyes.on_dig
|
||||
|
||||
sclip_def.paramtype2 = "colorwallmounted"
|
||||
sclip_def.palette = "unifieddyes_palette_colorwallmounted.png"
|
||||
sclip_def.after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||
unifieddyes.fix_rotation(pos, placer, itemstack, pointed_thing)
|
||||
end
|
||||
sclip_def.on_dig = unifieddyes.on_dig
|
||||
sclip_def.groups = {choppy=1, cracky=1, ud_param2_colorable = 1}
|
||||
end
|
||||
|
||||
|
7
extranodes/locale/fr.txt
Normal file
@ -0,0 +1,7 @@
|
||||
# technic_extranodes translation template
|
||||
|
||||
Marble = Marbre
|
||||
Marble Bricks = Briques en marbre
|
||||
Granite = Granite
|
||||
Concrete = Béton
|
||||
|
9
extranodes/locale/pt_BR.txt
Normal file
@ -0,0 +1,9 @@
|
||||
# Braziliam portuguese translation for technic_extranodes
|
||||
# Tradução portuguesa brasileira para technic_extranodes
|
||||
# By Sires
|
||||
|
||||
Marble = Mármore
|
||||
Marble Bricks = Tijolos de Mármore
|
||||
Granite = Granito
|
||||
Concrete = Concreto
|
||||
|
Before Width: | Height: | Size: 226 B After Width: | Height: | Size: 202 B |
Before Width: | Height: | Size: 123 B After Width: | Height: | Size: 103 B |
@ -1,6 +1,40 @@
|
||||
# facade
|
||||
# Facade
|
||||
Adds decorative clay and stone-type nodes to Minetest Game.
|
||||
|
||||
## Dependencies
|
||||
- default (included in minetest_game)
|
||||
- [mychisel](https://github.com/minetest-mods/mychisel) (**optional dependency!**)
|
||||
|
||||
## Requierments
|
||||
This requieres MT/MTG 0.4.16+ to run (may work on older versions).
|
||||
|
||||
## License
|
||||
Click [here](https://github.com/TumeniNodes/facade/blob/master/license.txt) to see the license.
|
||||
|
||||
## Installation
|
||||
- Unzip the archive, rename the folder to facade and
|
||||
place it in ..minetest/mods/
|
||||
|
||||
- GNU/Linux: If you use a system-wide installation place
|
||||
it in ~/.minetest/mods/.
|
||||
|
||||
- If you only want this to be used in a single world, place
|
||||
the folder in ..worldmods/ in your world directory.
|
||||
|
||||
For further information or help, see:
|
||||
https://wiki.minetest.net/Installing_Mods
|
||||
|
||||
## Bugs, suggestions, features & bugfixes.
|
||||
Report bugs or suggest ideas by [creating an issue](https://github.com/TumeniNodes/facade/issues/new).
|
||||
If you know how to fix an issue, or want something to be added, consider opening a [pull request](https://github.com/TumeniNodes/facade/compare).
|
||||
|
||||
## Screenshots
|
||||
|
||||
![Preview](https://github.com/TumeniNodes/facade/blob/master/screenshot.png)
|
||||
![Preview](https://github.com/TumeniNodes/facade/blob/master/screenshot2.png)
|
||||
![Preview](https://github.com/TumeniNodes/facade/blob/master/screenshot3.png)
|
||||
![Preview](https://github.com/TumeniNodes/facade/blob/master/screenshot4.png)
|
||||
|
||||
|
||||
If you want to get additional info about this mod, go the [Minetest Forums](https://forum.minetest.net/viewtopic.php?f=9&t=18208).
|
||||
Have fun with Facade!
|
||||
|
@ -1,2 +1,3 @@
|
||||
default
|
||||
mychisel?
|
||||
columnia?
|
||||
|
BIN
facade/facade_shaper.xcf
Normal file
650
facade/init.lua
@ -1,648 +1,10 @@
|
||||
facade = {}
|
||||
|
||||
local wehavechisels = minetest.get_modpath("mychisel")
|
||||
-- Define the shapes and registration functions
|
||||
dofile (minetest.get_modpath("facade") .. "/shapes.lua")
|
||||
|
||||
--------------
|
||||
--Bannerstones
|
||||
--------------
|
||||
-- Register the nodes made from compatible materials
|
||||
dofile (minetest.get_modpath("facade") .. "/materials.lua")
|
||||
|
||||
--Node will be called facade:<subname>_bannerstone
|
||||
function facade.register_bannerstone(modname, subname, recipeitem, desc)
|
||||
minetest.register_node("facade:" .. subname .. "_bannerstone" , {
|
||||
description = desc .. " Bannerstone",
|
||||
drawtype = "nodebox",
|
||||
tiles = {
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_bannerstone.png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 2, stone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
{-0.5, 0.25, -0.5625, 0.5, 0.375, -0.5},
|
||||
{-0.5, -0.375, -0.5625, 0.5, -0.25, -0.5},
|
||||
},
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
}
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
--Node will be called facade:<subname>_bannerstone_corner
|
||||
function facade.register_bannerstone_corner(modname, subname, recipeitem, desc)
|
||||
minetest.register_node("facade:" .. subname .. "_bannerstone_corner", {
|
||||
description = desc .. " Bannerstone Corner",
|
||||
drawtype = "nodebox",
|
||||
tiles = {
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_bannerstone.png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_bannerstone.png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_bannerstone.png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_bannerstone.png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 2, stone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
{-0.5625, 0.25, -0.5625, 0.5625, 0.375, 0.5625},
|
||||
{-0.5625, -0.375, -0.5625, 0.5625, -0.25, 0.5625},
|
||||
},
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
}
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
--------------
|
||||
--Centerstones
|
||||
--------------
|
||||
|
||||
--Node will be called facade:<subname>_centerstone
|
||||
function facade.register_centerstone(modname, subname, recipeitem, desc)
|
||||
minetest.register_node("facade:" .. subname .. "_centerstone", {
|
||||
description = desc .. " Centerstone",
|
||||
drawtype = "nodebox",
|
||||
tiles = {"" .. modname.. "_" .. subname .. ".png^facade_centerstone.png"},
|
||||
paramtype = "light",
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 2, stone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.4375, -0.4375, -0.4375, 0.4375, 0.4375, 0.4375},
|
||||
{-0.5, -0.25, 0.0625, 0.5, 0.25, 0.25},
|
||||
{-0.5, -0.25, -0.25, 0.5, 0.25, -0.0625},
|
||||
{-0.25, -0.25, -0.5, -0.0625, 0.25, 0.5},
|
||||
{0.0625, -0.25, -0.5, 0.25, 0.25, 0.5},
|
||||
{-0.5, 0.0625, -0.25, 0.5, 0.25, 0.25},
|
||||
{-0.5, -0.25, -0.25, 0.5, -0.0625, 0.25},
|
||||
{-0.25, -0.25, -0.5, 0.25, -0.0625, 0.5},
|
||||
{-0.25, 0.0625, -0.5, 0.25, 0.25, 0.5},
|
||||
{-0.25, -0.5, -0.25, 0.25, 0.5, -0.0625},
|
||||
{-0.25, -0.5, 0.0625, 0.25, 0.5, 0.25},
|
||||
{0.0625, -0.5, -0.1875, 0.25, 0.5, 0.1875},
|
||||
{-0.25, -0.5, -0.1875, -0.0625, 0.5, 0.1875},
|
||||
{-0.5, 0.3125, 0.3125, 0.5, 0.5, 0.5},
|
||||
{-0.5, 0.3125, -0.5, 0.5, 0.5, -0.3125},
|
||||
{0.3125, 0.3125, -0.5, 0.5, 0.5, 0.5},
|
||||
{-0.5, 0.3125, -0.5, -0.3125, 0.5, 0.5},
|
||||
{-0.5, -0.5, -0.5, -0.3125, -0.3125, 0.5},
|
||||
{0.3125, -0.5, -0.5, 0.5, -0.3125, 0.5},
|
||||
{-0.5, -0.5, -0.5, 0.5, -0.3125, -0.3125},
|
||||
{-0.5, -0.5, 0.3125, 0.5, -0.3125, 0.5},
|
||||
{0.3125, -0.5, -0.5, 0.5, 0.5, -0.3125},
|
||||
{0.3125, -0.5, 0.3125, 0.5, 0.5, 0.5},
|
||||
{-0.5, -0.5, 0.3125, -0.3125, 0.5, 0.5},
|
||||
{-0.5, -0.5, -0.5, -0.3125, 0.5, -0.3125},
|
||||
},
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
}
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
---------
|
||||
--Columns
|
||||
---------
|
||||
|
||||
--Node will be called facade:<subname>_column
|
||||
function facade.register_column(modname, subname, recipeitem, desc)
|
||||
minetest.register_node("facade:" .. subname .. "_column" , {
|
||||
description = desc .. " Column",
|
||||
drawtype = "nodebox",
|
||||
tiles = {
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_column.png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_column.png"
|
||||
},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 2, stone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.4375, 0.5, 0.5, 0.4375},
|
||||
{-0.5, -0.5, -0.5, -0.3125, 0.5, 0.5},
|
||||
{0.3125, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
{0.0625, -0.5, -0.5, 0.1875, 0.5, 0.5},
|
||||
{-0.1875, -0.5, -0.5, -0.0625, 0.5, 0.5},
|
||||
},
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
end
|
||||
|
||||
|
||||
--Node will be called facade:<subname>_column_corner
|
||||
function facade.register_column_corner(modname, subname, recipeitem, desc)
|
||||
minetest.register_node("facade:" .. subname .. "_column_corner", {
|
||||
description = desc .. " Column Corner",
|
||||
drawtype = "nodebox",
|
||||
tiles = {
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_column.png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_column.png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_column.png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_column.png"
|
||||
},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 2, stone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.4375, -0.5, -0.4375, 0.4375, 0.5, 0.4375},
|
||||
{-0.5, -0.5, 0.3125, -0.3125, 0.5, 0.5},
|
||||
{0.3125, -0.5, -0.5, 0.5, 0.5, -0.3125},
|
||||
{0.0625, -0.5, -0.5, 0.1875, 0.5, 0.5},
|
||||
{-0.1875, -0.5, -0.5, -0.0625, 0.5, 0.5},
|
||||
{0.3125, -0.5, 0.3125, 0.5, 0.5, 0.5},
|
||||
{-0.5, -0.5, -0.5, -0.3125, 0.5, -0.3125},
|
||||
{-0.5, -0.5, 0.0625, 0.5, 0.5, 0.1875},
|
||||
{-0.5, -0.5, -0.1875, 0.5, 0.5, -0.0625},
|
||||
},
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
}
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
---------
|
||||
--Corbels
|
||||
---------
|
||||
|
||||
--Node will be called facade:<subname>_corbel
|
||||
function facade.register_corbel(modname, subname, recipeitem, desc)
|
||||
minetest.register_node("facade:" .. subname .. "_corbel", {
|
||||
description = desc .. " Corbel",
|
||||
drawtype = "nodebox",
|
||||
tiles = {"" .. modname.. "_" .. subname .. ".png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 2, stone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, 0, -0.5, 0.5, 0.5, 0.5},
|
||||
{-0.5, -0.5, 0, 0.5, 0.5, 0.5},
|
||||
{-0.1875, -0.3125, -0.3125, 0.1875, 0.5, 0},
|
||||
},
|
||||
},
|
||||
-- selection_box = {
|
||||
-- type = "fixed",
|
||||
-- fixed = {
|
||||
-- {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
-- }
|
||||
-- },
|
||||
})
|
||||
end
|
||||
|
||||
--Node will be called facade:<subname>_corbel_corner
|
||||
function facade.register_corbel_corner(modname, subname, recipeitem, desc)
|
||||
minetest.register_node("facade:" .. subname .. "_corbel_corner", {
|
||||
description = desc .. " Corbel Corner",
|
||||
drawtype = "nodebox",
|
||||
tiles = {"" .. modname.. "_" .. subname .. ".png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 2, stone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, 0, -0.5, 0.5, 0.5, 0.5},
|
||||
{-0.5, -0.5, 0, 0, 0.5, 0.5},
|
||||
{0, -0.3125, -0.3125, 0.3125, 0.5, 0},
|
||||
},
|
||||
},
|
||||
-- selection_box = {
|
||||
-- type = "fixed",
|
||||
-- fixed = {
|
||||
-- {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
-- }
|
||||
-- },
|
||||
})
|
||||
end
|
||||
|
||||
--Node will be called facade:<subname>_corbel_corner_inner
|
||||
function facade.register_corbel_corner_inner(modname, subname, recipeitem, desc)
|
||||
minetest.register_node("facade:" .. subname .. "_corbel_corner_inner", {
|
||||
description = desc .. " Corbel Inner Corner",
|
||||
drawtype = "nodebox",
|
||||
tiles = {"" .. modname.. "_" .. subname .. ".png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 2, stone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, 0, -0.5, 0.5, 0.5, 0.5},
|
||||
{-0.5, -0.5, 0, 0.5, 0.5, 0.5},
|
||||
{0, -0.3125, -0.3125, 0.3125, 0.5, 0},
|
||||
{-0.5, -0.5, -0.5, 0, 0.5, 0.5},
|
||||
},
|
||||
},
|
||||
-- selection_box = {
|
||||
-- type = "fixed",
|
||||
-- fixed = {
|
||||
-- {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
-- }
|
||||
-- },
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
--------------------------
|
||||
--- Carved Stones
|
||||
--------------------------
|
||||
|
||||
--Node will be called facade:<subname>_carved_stone_a
|
||||
function facade.register_carved_stone_a(modname, subname, recipeitem, desc)
|
||||
minetest.register_node("facade:" .. subname .. "_carved_stone_a", {
|
||||
description = desc .. " Carved Stone A",
|
||||
drawtype = "nodebox",
|
||||
tiles = {
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_carved_stone_a.png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 2, stone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.4375, 0.5, 0.5, 0.5},
|
||||
{-0.5, 0.4375, -0.5, 0.5, 0.5, -0.4375},
|
||||
{-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5},
|
||||
{-0.4375, -0.375, -0.5, -0.3125, 0.375, -0.4375},
|
||||
{-0.5, -0.375, -0.5, -0.3125, -0.25, 0.5},
|
||||
{-0.4375, 0.25, -0.5, 0.4375, 0.375, 0.5},
|
||||
{0.3125, -0.125, -0.5, 0.4375, 0.25, 0.5},
|
||||
{-0.1875, -0.375, -0.5, 0.5, -0.25, 0.5},
|
||||
{-0.1875, -0.25, -0.5, -0.0625, 0.125, 0.5},
|
||||
{0.0625, -0.125, -0.5, 0.3125, 0, 0.5},
|
||||
{-0.0625, 0, -0.5, 0.1875, 0.125, 0.5},
|
||||
},
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
},
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
--Node will be called facade:<subname>_carved_stone_a_corner
|
||||
function facade.register_carved_stone_a_corner(modname, subname, recipeitem, desc)
|
||||
minetest.register_node("facade:" .. subname .. "_carved_stone_a_corner", {
|
||||
description = desc .. " Carved Stone A Corner",
|
||||
drawtype = "nodebox",
|
||||
tiles = {
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_carved_stone_a.png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_carved_stone_a.png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 2, stone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.4375, -0.5, -0.4375, 0.5, 0.5, 0.5},
|
||||
{-0.5, 0.4375, -0.5, 0.5, 0.5, -0.4375},
|
||||
{-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5},
|
||||
{-0.4375, -0.375, -0.5, -0.3125, 0.375, -0.4375},
|
||||
{-0.5, -0.375, -0.5, -0.3125, -0.25, 0.1875},
|
||||
{-0.4375, 0.25, -0.5, 0.4375, 0.375, 0.5},
|
||||
{0.3125, -0.125, -0.5, 0.4375, 0.25, 0.5},
|
||||
{-0.1875, -0.375, -0.5, 0.5, -0.25, 0.5},
|
||||
{-0.1875, -0.25, -0.5, -0.0625, 0.125, 0.5},
|
||||
{0.0625, -0.125, -0.5, 0.3125, 0, 0.5},
|
||||
{-0.0625, 0, -0.5, 0.1875, 0.125, 0.5},
|
||||
{-0.5, 0.4375, -0.5, 0.5, 0.5, 0.5},
|
||||
{-0.5, -0.125, -0.4375, 0.5, 0.375, -0.3125},
|
||||
{-0.5, 0.25, -0.3125, 0.5, 0.375, 0.4375},
|
||||
{-0.5, -0.375, 0.3125, 0.4375, 0.375, 0.4375},
|
||||
{-0.5, -0.375, 0.3125, 0.4375, -0.25, 0.5},
|
||||
{-0.5, -0.125, -0.3125, 0.4375, 0, -0.0625},
|
||||
{-0.5, 0, -0.1875, 0.4375, 0.125, 0.1875},
|
||||
{-0.5, -0.25, 0.0625, 0.4375, 0.125, 0.1875},
|
||||
},
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
},
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
--------------------------
|
||||
--- RGSpro Facia
|
||||
--------------------------
|
||||
|
||||
--Node will be called facade:<subname>_rgspro
|
||||
function facade.register_rgspro(modname, subname, recipeitem, desc)
|
||||
minetest.register_node("facade:" .. subname .. "_rgspro", {
|
||||
description = desc .. " RGSpro",
|
||||
drawtype = "nodebox",
|
||||
tiles = {
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_rgspro.png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_rgspro.png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_rgspro.png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_rgspro.png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 2, stone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, 0.375, 0.5, -0.3125, 0.5},
|
||||
{-0.5, -0.3125, 0.25, 0.5, -0.125, 0.5},
|
||||
{-0.5, -0.125, 0.125, 0.5, 0.5, 0.5},
|
||||
},
|
||||
},
|
||||
-- selection_box = {
|
||||
-- type = "fixed",
|
||||
-- fixed = {
|
||||
-- {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
-- },
|
||||
-- },
|
||||
})
|
||||
end
|
||||
|
||||
--Node will be called facade:<subname>_rgspro_inner_corner
|
||||
function facade.register_rgspro_inner_corner(modname, subname, recipeitem, desc)
|
||||
minetest.register_node("facade:" .. subname .. "_rgspro_inner_corner", {
|
||||
description = desc .. " RGSpro Inner Corner",
|
||||
drawtype = "nodebox",
|
||||
tiles = {
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_rgspro.png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_rgspro.png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_rgspro.png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_rgspro.png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 2, stone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, 0.375, 0.5, -0.3125, 0.5},
|
||||
{-0.5, -0.3125, 0.25, 0.5, -0.125, 0.5},
|
||||
{-0.5, -0.125, 0.125, 0.5, 0.5, 0.5},
|
||||
{0.375, -0.5, -0.5, 0.5, -0.3125, 0.375},
|
||||
{0.25, -0.3125, -0.5, 0.5, -0.0625, 0.25},
|
||||
{0.125, -0.125, -0.5, 0.5, 0.5, 0.125},
|
||||
},
|
||||
},
|
||||
-- selection_box = {
|
||||
-- type = "fixed",
|
||||
-- fixed = {
|
||||
-- {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
-- },
|
||||
-- },
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
--Node will be called facade:<subname>_rgspro_outer_corner
|
||||
function facade.register_rgspro_outer_corner(modname, subname, recipeitem, desc)
|
||||
minetest.register_node("facade:" .. subname .. "_rgspro_outer_corner", {
|
||||
description = desc .. " RGSpro Outer Corner",
|
||||
drawtype = "nodebox",
|
||||
tiles = {
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_rgspro.png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_rgspro.png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_rgspro.png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_rgspro.png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 2, stone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, 0.375, 0.5, -0.3125, 0.5},
|
||||
{-0.5, -0.3125, 0.25, 0.5, -0.0625, 0.5},
|
||||
{-0.5, -0.125, 0.125, 0.5, 0.5, 0.5},
|
||||
{-0.625, -0.5, 0.375, -0.5, -0.3125, 1.5},
|
||||
{-0.75, -0.3125, 0.25, -0.5, -0.125, 1.5},
|
||||
{-0.875, -0.125, 0.125, -0.5, 0.5, 1.5},
|
||||
},
|
||||
},
|
||||
-- selection_box = {
|
||||
-- type = "fixed",
|
||||
-- fixed = {
|
||||
-- {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
-- },
|
||||
-- },
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
--------------------------
|
||||
--- Corner Bricks
|
||||
--------------------------
|
||||
|
||||
--Node will be called facade:<subname>_corner_bricks
|
||||
function facade.register_corner_bricks(modname, subname, recipeitem, desc)
|
||||
if not string.match(recipeitem,"clay")
|
||||
then -- do not do for clay things that is ugly
|
||||
minetest.register_node("facade:" .. subname .. "_corner_bricks", {
|
||||
description = desc .. " Corner Bricks",
|
||||
drawtype = "nodebox",
|
||||
tiles = {
|
||||
"" .. modname.. "_" .. subname .. "_brick.png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 2, stone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5625, -0.5, 0.4375, -0.5, 0, 1},
|
||||
{-0.5, -0.5, 0.4375, 0, 0, 0.5},
|
||||
{-0.5625, 0, 0.5, -0.5, 0.5, 1.5},
|
||||
{-0.5625, 0, 0.4375, 0.5, 0.5, 0.5},
|
||||
},
|
||||
},
|
||||
-- selection_box = {
|
||||
-- type = "fixed",
|
||||
-- fixed = {
|
||||
-- {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
-- },
|
||||
-- },
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--------------------------
|
||||
--Register Nodes/Materials
|
||||
--------------------------
|
||||
function facade.register_facade_nodes(modname, subname, recipeitem, desc)
|
||||
facade.register_bannerstone(modname, subname, recipeitem, desc)
|
||||
facade.register_bannerstone_corner(modname, subname, recipeitem, desc)
|
||||
facade.register_centerstone(modname, subname, recipeitem, desc)
|
||||
facade.register_column(modname, subname, recipeitem, desc)
|
||||
facade.register_column_corner(modname, subname, recipeitem, desc)
|
||||
facade.register_corbel(modname, subname, recipeitem, desc)
|
||||
facade.register_corbel_corner(modname, subname, recipeitem, desc)
|
||||
facade.register_corbel_corner_inner(modname, subname, recipeitem, desc)
|
||||
facade.register_carved_stone_a(modname, subname, recipeitem, desc)
|
||||
facade.register_carved_stone_a_corner(modname, subname, recipeitem, desc)
|
||||
facade.register_rgspro(modname, subname, recipeitem, desc)
|
||||
facade.register_rgspro_inner_corner(modname, subname, recipeitem, desc)
|
||||
facade.register_rgspro_outer_corner(modname, subname, recipeitem, desc)
|
||||
facade.register_corner_bricks(modname, subname, recipeitem, desc)
|
||||
if wehavechisels then -- register all nodes with mychisel mod to use them without creative priv
|
||||
chisel.register_node("facade",subname, recipeitem, "bannerstone")
|
||||
chisel.register_node("facade",subname, recipeitem, "bannerstone_corner")
|
||||
chisel.register_node("facade",subname, recipeitem, "centerstone")
|
||||
chisel.register_node("facade",subname, recipeitem, "column")
|
||||
chisel.register_node("facade",subname, recipeitem, "column_corner")
|
||||
chisel.register_node("facade",subname, recipeitem, "corbel")
|
||||
chisel.register_node("facade",subname, recipeitem, "corbel_corner")
|
||||
chisel.register_node("facade",subname, recipeitem, "corbel_corner_inner")
|
||||
chisel.register_node("facade",subname, recipeitem, "carved_stone_a")
|
||||
chisel.register_node("facade",subname, recipeitem, "carved_stone_a_corner")
|
||||
chisel.register_node("facade",subname, recipeitem, "rgspro")
|
||||
chisel.register_node("facade",subname, recipeitem, "rgspro_inner_corner")
|
||||
chisel.register_node("facade",subname, recipeitem, "rgspro_outer_corner")
|
||||
chisel.register_node("facade",subname, recipeitem, "corner_bricks")
|
||||
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
if wehavechisels then chisel.add_mod("facade",14) end -- register the total number of different designs in this mod with mychisel
|
||||
|
||||
facade.register_facade_nodes("default", "clay", "default:clay", "Clay")
|
||||
facade.register_facade_nodes("default", "desert_sandstone", "default:desert_sandstone", "Desert Sandstone")
|
||||
facade.register_facade_nodes("default", "desert_stone", "default:desert_stone", "Desert Stone")
|
||||
facade.register_facade_nodes("default", "sandstone", "default:sandstone", "Sandstone")
|
||||
facade.register_facade_nodes("default", "silver_sandstone", "default:silver_sandstone", "Silver Sandstone")
|
||||
facade.register_facade_nodes("default", "stone", "default:stone", "Stone")
|
||||
--facade.register_facade_nodes("default", "obsidian", "default:obsidian", "Obsidian")
|
||||
|
||||
|
||||
if minetest.get_modpath( "bakedclay") then
|
||||
local clay = {
|
||||
{"white", "White"},
|
||||
{"grey", "Grey"},
|
||||
{"black", "Black"},
|
||||
{"red", "Red"},
|
||||
{"yellow", "Yellow"},
|
||||
{"green", "Green"},
|
||||
{"cyan", "Cyan"},
|
||||
{"blue", "Blue"},
|
||||
{"magenta", "Magenta"},
|
||||
{"orange", "Orange"},
|
||||
{"violet", "Violet"},
|
||||
{"brown", "Brown"},
|
||||
{"pink", "Pink"},
|
||||
{"dark_grey", "Dark Grey"},
|
||||
{"dark_green", "Dark Green"},
|
||||
}
|
||||
|
||||
for _, clay in pairs(clay) do
|
||||
facade.register_facade_nodes("baked_clay", clay[1] , "bakedclay:" .. clay[1], clay[2] .. " Baked Clay")
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
if minetest.get_modpath( "darkage") then
|
||||
facade.register_facade_nodes("darkage", "basalt", "darkage:basalt", "Basalt")
|
||||
facade.register_facade_nodes("darkage", "chalk", "darkage:chalk", "Chalk")
|
||||
facade.register_facade_nodes("darkage", "gneiss", "darkage:gneiss", "Gneiss")
|
||||
facade.register_facade_nodes("darkage", "marble", "darkage:marble", "Marble")
|
||||
facade.register_facade_nodes("darkage", "ors", "darkage:ors", "Ors")
|
||||
facade.register_facade_nodes("darkage", "schist", "darkage:schist", "Schist")
|
||||
facade.register_facade_nodes("darkage", "serpentine", "darkage:serpentine", "Serpentine")
|
||||
facade.register_facade_nodes("darkage", "shale", "darkage:shale", "Shale")
|
||||
facade.register_facade_nodes("darkage", "slate", "darkage:slate", "Slate")
|
||||
end
|
||||
|
||||
|
||||
if minetest.get_modpath( "nether") then
|
||||
facade.register_facade_nodes("nether", "rack", "nether:rack", "Netherrack")
|
||||
end
|
||||
|
||||
|
||||
--[[if minetest.get_modpath( "lapis") then
|
||||
facade.register_facade_nodes("lapis", "lapis_block", "lapis:lapis_block", "Lapis")
|
||||
facade.register_facade_nodes("lapis", "lapis_lazurite", "lapis:lazurite", "Lazurite")
|
||||
end]]--
|
||||
-- Add a dedicated machine to produce the facade shapes
|
||||
dofile (minetest.get_modpath("facade") .. "/shaper.lua")
|
||||
|
58
facade/materials.lua
Normal file
@ -0,0 +1,58 @@
|
||||
-- Registration of materials
|
||||
|
||||
facade.register_facade_nodes("default", "clay", "default:clay", "Clay")
|
||||
facade.register_facade_nodes("default", "stone", "default:stone", "Stone")
|
||||
facade.register_facade_nodes("default", "desert_stone", "default:desert_stone", "Desert Stone")
|
||||
facade.register_facade_nodes("default", "sandstone", "default:sandstone", "Sandstone")
|
||||
facade.register_facade_nodes("default", "desert_sandstone", "default:desert_sandstone", "Desert Sandstone")
|
||||
facade.register_facade_nodes("default", "silver_sandstone", "default:silver_sandstone", "Silver Sandstone")
|
||||
--facade.register_facade_nodes("default", "obsidian", "default:obsidian", "Obsidian")
|
||||
|
||||
|
||||
if minetest.get_modpath( "bakedclay") then
|
||||
local clay = {
|
||||
{"white", "White"},
|
||||
{"grey", "Grey"},
|
||||
{"black", "Black"},
|
||||
{"red", "Red"},
|
||||
{"yellow", "Yellow"},
|
||||
{"green", "Green"},
|
||||
{"cyan", "Cyan"},
|
||||
{"blue", "Blue"},
|
||||
{"magenta", "Magenta"},
|
||||
{"orange", "Orange"},
|
||||
{"violet", "Violet"},
|
||||
{"brown", "Brown"},
|
||||
{"pink", "Pink"},
|
||||
{"dark_grey", "Dark Grey"},
|
||||
{"dark_green", "Dark Green"},
|
||||
}
|
||||
|
||||
for _, clay in pairs(clay) do
|
||||
facade.register_facade_nodes("baked_clay", clay[1] , "bakedclay:" .. clay[1], clay[2] .. " Baked Clay")
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
if minetest.get_modpath( "darkage") then
|
||||
facade.register_facade_nodes("darkage", "basalt", "darkage:basalt", "Basalt")
|
||||
facade.register_facade_nodes("darkage", "chalk", "darkage:chalk", "Chalk")
|
||||
facade.register_facade_nodes("darkage", "gneiss", "darkage:gneiss", "Gneiss")
|
||||
facade.register_facade_nodes("darkage", "marble", "darkage:marble", "Marble")
|
||||
facade.register_facade_nodes("darkage", "ors", "darkage:ors", "Ors")
|
||||
facade.register_facade_nodes("darkage", "schist", "darkage:schist", "Schist")
|
||||
facade.register_facade_nodes("darkage", "serpentine", "darkage:serpentine", "Serpentine")
|
||||
facade.register_facade_nodes("darkage", "shale", "darkage:shale", "Shale")
|
||||
facade.register_facade_nodes("darkage", "slate", "darkage:slate", "Slate")
|
||||
end
|
||||
|
||||
|
||||
if minetest.get_modpath( "nether") then
|
||||
facade.register_facade_nodes("nether", "rack", "nether:rack", "Netherrack")
|
||||
end
|
||||
|
||||
|
||||
--[[if minetest.get_modpath( "lapis") then
|
||||
facade.register_facade_nodes("lapis", "lapis_block", "lapis:lapis_block", "Lapis")
|
||||
facade.register_facade_nodes("lapis", "lapis_lazurite", "lapis:lazurite", "Lazurite")
|
||||
end]]--
|
@ -1 +1,4 @@
|
||||
name = facade
|
||||
depends = default
|
||||
optional_depends = mychisel
|
||||
description = Adds decorative clay and stone-type nodes to Minetest Game.
|
||||
|
377
facade/shaper.lua
Normal file
@ -0,0 +1,377 @@
|
||||
-- Facade Shaper
|
||||
-- This machine serves the same purpose as the circular saw from moreblocks or the milling
|
||||
-- maching from mymillwork. Namely, it provides a tool for creating shaped blocks that does
|
||||
-- not rely on using recipes.
|
||||
|
||||
|
||||
-- Balancing output per 1 input block with respect to apparent volume of output shape.
|
||||
-- All current shapes are added, but shapes not present in this table will still be produced
|
||||
-- one at a time — if that is the desired quantity, adding them is not required.
|
||||
local output_ratios = {
|
||||
bannerstone = 1,
|
||||
bannerstone_corner = 1,
|
||||
centerstone = 1,
|
||||
column = 1,
|
||||
column_corner = 1,
|
||||
corbel = 1,
|
||||
corbel_corner = 1,
|
||||
corbel_corner_inner = 1,
|
||||
carved_stone_a = 1,
|
||||
carved_stone_a_corner = 1,
|
||||
rgspro = 2,
|
||||
rgspro_inner_corner = 1,
|
||||
rgspro_outer_corner = 1,
|
||||
corner_bricks = 2,
|
||||
columnia_mid = 4,
|
||||
columnia_bottom = 1,
|
||||
columnia_top = 1,
|
||||
columnia_crosslink = 1,
|
||||
columnia_link = 4,
|
||||
columnia_linkdown = 4,
|
||||
}
|
||||
|
||||
-- The material to be used for buttons when no material is actually loaded.
|
||||
-- It should be a generic material for which all the facade shapes are defined.
|
||||
local demo_material = "default:stone"
|
||||
|
||||
-- Whether the facade should obey area protection for the inventories (as machines in technic mod)
|
||||
-- or allow anybody to use them, but disallow the removal of machine itself (like circular saw in moreblocks)
|
||||
local protect_inventories = false
|
||||
|
||||
|
||||
|
||||
local function prepare_formspec (material_name)
|
||||
|
||||
local output = string.gsub(material_name, "^.*:", "facade:")
|
||||
|
||||
local shaper_formspec =
|
||||
|
||||
"size[8,11;]"..
|
||||
"label[0,0;" .. "Choose shape to produce:" .. "]"..
|
||||
|
||||
-- row 1, blocky shapes
|
||||
"item_image_button[0,0.5;1,1;" .. output .. "_bannerstone" .. ";bannerstone; ]"..
|
||||
"item_image_button[1,0.5;1,1;" .. output .. "_bannerstone_corner" .. ";bannerstone_corner; ]"..
|
||||
"item_image_button[2,0.5;1,1;" .. output .. "_centerstone" .. ";centerstone; ]"..
|
||||
"item_image_button[3,0.5;1,1;" .. output .. "_carved_stone_a" .. ";carved_stone_a; ]"..
|
||||
"item_image_button[4,0.5;1,1;" .. output .. "_carved_stone_a_corner" .. ";carved_stone_a_corner; ]"..
|
||||
"item_image_button[5,0.5;1,1;" .. output .. "_column" .. ";column; ]"..
|
||||
"item_image_button[6,0.5;1,1;" .. output .. "_column_corner" .. ";column_corner; ]"..
|
||||
|
||||
-- row 2, corbel
|
||||
"item_image_button[0,1.5;1,1;" .. output .. "_corbel" .. ";corbel; ]"..
|
||||
"item_image_button[1,1.5;1,1;" .. output .. "_corbel_corner_inner" .. ";corbel_corner_inner; ]"..
|
||||
"item_image_button[2,1.5;1,1;" .. output .. "_corbel_corner" .. ";corbel_corner; ]"..
|
||||
|
||||
-- row 3, cornice
|
||||
"item_image_button[0,2.5;1,1;" .. output .. "_rgspro" .. ";rgspro; ]"..
|
||||
"item_image_button[1,2.5;1,1;" .. output .. "_rgspro_inner_corner" .. ";rgspro_inner_corner; ]"..
|
||||
"item_image_button[2,2.5;1,1;" .. output .. "_rgspro_outer_corner" .. ";rgspro_outer_corner; ]"
|
||||
|
||||
-- row 4, columnia
|
||||
if not minetest.get_modpath("columnia") then
|
||||
shaper_formspec = shaper_formspec ..
|
||||
"item_image_button[0,3.5;1,1;" .. output .. "_columnia_mid" .. ";columnia_mid; ]"..
|
||||
"item_image_button[1,3.5;1,1;" .. output .. "_columnia_bottom" .. ";columnia_bottom; ]"..
|
||||
"item_image_button[2,3.5;1,1;" .. output .. "_columnia_crosslink" .. ";columnia_crosslink; ]"..
|
||||
"item_image_button[3,3.5;1,1;" .. output .. "_columnia_link" .. ";columnia_link; ]"..
|
||||
"item_image_button[4,3.5;1,1;" .. output .. "_columnia_linkdown" .. ";columnia_linkdown; ]"
|
||||
|
||||
-- this code is a provision in case top column pieces enter service
|
||||
if minetest.registered_nodes[output .. "_columnia_top"] then
|
||||
shaper_formspec = shaper_formspec ..
|
||||
"item_image_button[5,3.5;1,1;" .. output .. "_columnia_top" .. ";columnia_top; ]"
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
-- row 5 for shapes which are not available for all materials
|
||||
-- only one such shape exists so far, but more should be easy to add here
|
||||
|
||||
if minetest.registered_nodes[output .. "_corner_bricks"] then
|
||||
shaper_formspec = shaper_formspec ..
|
||||
"item_image_button[0,4.5;1,1;" .. output .. "_corner_bricks" .. ";corner_bricks; ]"
|
||||
end
|
||||
|
||||
-- inventory part
|
||||
|
||||
shaper_formspec = shaper_formspec ..
|
||||
|
||||
"label[0, 5.5;".."In:".."]"..
|
||||
"list[current_name;src;1,5.5;1,1;]"..
|
||||
"label[3, 5.5;".."Out:".."]"..
|
||||
"list[current_name;dst;4,5.5;4,1;]"..
|
||||
|
||||
"list[current_player;main;0,7;8,4;]"..
|
||||
"listring[current_name;dst]"..
|
||||
"listring[current_player;main]"..
|
||||
"listring[current_name;src]"..
|
||||
"listring[current_player;main]"
|
||||
|
||||
return(shaper_formspec)
|
||||
|
||||
end
|
||||
|
||||
|
||||
-- a simple check for compatibile materials
|
||||
local function check_material_applicability (material)
|
||||
-- using centerstone node here, since it appears to be both one of the oldest
|
||||
-- and defined for all materials as well, making it suitable for a quick check
|
||||
if minetest.registered_nodes[string.gsub(material, "^.*:", "facade:") .. "_centerstone"] then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- update the buttons to show shapes made from the actual material
|
||||
local function update_formspec_put (pos, listname, index, stack, player)
|
||||
|
||||
if protect_inventories and minetest.is_protected(pos, player:get_player_name()) then
|
||||
return
|
||||
end
|
||||
|
||||
if listname ~= "src" then
|
||||
return
|
||||
end
|
||||
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
local material_name = stack:get_name()
|
||||
|
||||
if check_material_applicability(material_name) then
|
||||
meta:set_string("formspec", prepare_formspec(material_name))
|
||||
else
|
||||
return
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
-- update the buttons to show shapes made from demo material if all material is removed
|
||||
local function update_formspec_take (pos, listname, index, stack, player)
|
||||
|
||||
if protect_inventories and minetest.is_protected(pos, player:get_player_name()) then
|
||||
return
|
||||
end
|
||||
|
||||
if listname ~= "src" then
|
||||
return
|
||||
end
|
||||
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
|
||||
if inv:is_empty("src") then
|
||||
meta:set_string("formspec", prepare_formspec(demo_material))
|
||||
end
|
||||
|
||||
return
|
||||
|
||||
end
|
||||
|
||||
|
||||
-- disallow putting in materials which are not supported
|
||||
local function check_inventory_put (pos, listname, index, stack, player)
|
||||
|
||||
if protect_inventories and minetest.is_protected(pos, player:get_player_name()) then
|
||||
return 0
|
||||
end
|
||||
|
||||
if listname ~= "src" then
|
||||
return 0
|
||||
end
|
||||
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
local material_name = stack:get_name()
|
||||
|
||||
if check_material_applicability(material_name) then
|
||||
return(stack:get_count())
|
||||
else
|
||||
return 0
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local function check_inventory_take (pos, listname, index, stack, player)
|
||||
|
||||
if protect_inventories and minetest.is_protected(pos, player:get_player_name()) then
|
||||
return 0
|
||||
end
|
||||
|
||||
if listname ~= "src" and listname ~= "dst" then
|
||||
return 0
|
||||
end
|
||||
|
||||
return(stack:get_count())
|
||||
|
||||
end
|
||||
|
||||
|
||||
local function check_inventory_move (pos, from_list, from_index, to_list, to_index, count, player)
|
||||
|
||||
if protect_inventories and minetest.is_protected(pos, player:get_player_name()) then
|
||||
return 0
|
||||
end
|
||||
|
||||
return(stack:get_count())
|
||||
|
||||
end
|
||||
|
||||
|
||||
-- process the form fields and convert source material to desired shapes
|
||||
local function form_handler(pos, formname, fields, sender)
|
||||
|
||||
if protect_inventories and minetest.is_protected(pos, sender:get_player_name()) then
|
||||
return
|
||||
end
|
||||
|
||||
if fields.quit then
|
||||
return
|
||||
end
|
||||
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
|
||||
if inv:is_empty("src") then
|
||||
return
|
||||
end
|
||||
|
||||
local inputstack = inv:get_stack("src", 1)
|
||||
local inputname = inputstack:get_name()
|
||||
|
||||
for shape,_ in pairs(fields) do
|
||||
|
||||
local result = string.gsub(inputname, "^.*:", "facade:") .. "_" .. shape
|
||||
|
||||
-- one can never be overly paranoid, unlike the quick check before, this one is precise
|
||||
if not minetest.registered_nodes[result] then
|
||||
return
|
||||
end
|
||||
|
||||
-- output quantities are adjusted to preserve roughly same mass of resulting products
|
||||
if output_ratios[shape] then
|
||||
result = result .. " " .. output_ratios[shape]
|
||||
end
|
||||
|
||||
if not inv:room_for_item("dst", result) then
|
||||
return
|
||||
end
|
||||
|
||||
inputstack:take_item(1)
|
||||
inv:set_stack("src", 1, inputstack)
|
||||
inv:add_item("dst", result)
|
||||
|
||||
end
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
local function check_removability (pos, player)
|
||||
|
||||
local meta = minetest.get_meta(pos)
|
||||
local owner = meta:set_string("owner")
|
||||
local pname = player:get_player_name()
|
||||
local inv = meta:get_inventory()
|
||||
|
||||
-- owner may always remove the device
|
||||
if owner and owner ~= "" and pname and pname ~= "" and owner == pname then
|
||||
if inv:is_empty("src") and inv:is_empty("dst") then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
return false
|
||||
end
|
||||
|
||||
if inv:is_empty("src") and inv:is_empty("dst") then
|
||||
return true
|
||||
end
|
||||
|
||||
return false
|
||||
|
||||
end
|
||||
|
||||
|
||||
minetest.register_node("facade:shaper", {
|
||||
description = "Shaper Machine",
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
-- base
|
||||
{-1/2, -1/2, -1/2, 1/2, -14/32, 1/2},
|
||||
-- back
|
||||
{-8/32, -1/2, 12/32, 8/32, 1/2, 16/32},
|
||||
-- table
|
||||
{-8/32, -4/32, -16/32, 8/32, 4/32, 16/32},
|
||||
-- rear table sliding support
|
||||
{-16/32, -4/32, 12/32, 16/32, 4/32, 16/32},
|
||||
-- front table sliding support
|
||||
{-8/32, -14/32, -12/32, 8/32, -4/32, -16/32},
|
||||
-- top tool beam
|
||||
{-4/32, 16/32, -8/32, 4/32, 12/32, 12/32},
|
||||
-- cutter holder
|
||||
{-2/32, 7/32, -2/32, 2/32, 14/32, 2/32},
|
||||
-- cutter
|
||||
{-1/128, 6/32, -1/32, 1/128, 7/32, 1/32},
|
||||
},
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-1/2, -1/2, -1/2, 1/2, 1/2, 1/2},
|
||||
},
|
||||
},
|
||||
tiles = { "facade_shaper_top.png",
|
||||
"facade_shaper_bottom.png",
|
||||
"facade_shaper_right.png",
|
||||
"facade_shaper_left.png",
|
||||
"facade_shaper_back.png",
|
||||
"facade_shaper_front.png"},
|
||||
groups = { oddly_breakable_by_hand=2, cracky=3, dig_immediate=1 },
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
legacy_facedir_simple = true,
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("formspec", prepare_formspec(demo_material))
|
||||
local inv = meta:get_inventory()
|
||||
inv:set_size("src", 1)
|
||||
inv:set_size("dst", 4)
|
||||
end,
|
||||
after_place_node = function(pos, placer)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local owner = placer and placer:get_player_name() or ""
|
||||
meta:set_string("owner", owner)
|
||||
if owner then
|
||||
meta:set_string("infotext", ("Facade Shaper (owned by %s)"):format(owner))
|
||||
else
|
||||
meta:set_string("infotext", "Facade Shaper")
|
||||
end
|
||||
end,
|
||||
can_dig = check_removability,
|
||||
allow_metadata_inventory_put = check_inventory_put,
|
||||
allow_metadata_inventory_take = check_inventory_take,
|
||||
allow_metadata_inventory_move = check_inventory_move,
|
||||
on_metadata_inventory_put = update_formspec_put,
|
||||
on_metadata_inventory_take = update_formspec_take,
|
||||
on_receive_fields = form_handler,
|
||||
})
|
||||
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'facade:shaper',
|
||||
recipe = {
|
||||
{'', 'default:diamond', '' },
|
||||
{'default:steel_ingot', 'default:steelblock', 'default:steel_ingot' },
|
||||
{'', 'default:steelblock' , '' },
|
||||
|
||||
},
|
||||
})
|
799
facade/shapes.lua
Normal file
@ -0,0 +1,799 @@
|
||||
-- Node (shape) definition and registration
|
||||
|
||||
local wehavechisels = minetest.get_modpath("mychisel")
|
||||
|
||||
--------------
|
||||
--Bannerstones
|
||||
--------------
|
||||
|
||||
--Node will be called facade:<subname>_bannerstone
|
||||
function facade.register_bannerstone(modname, subname, recipeitem, desc)
|
||||
minetest.register_node("facade:" .. subname .. "_bannerstone" , {
|
||||
description = desc .. " Bannerstone",
|
||||
drawtype = "nodebox",
|
||||
tiles = {
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_bannerstone.png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 2, stone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
{-0.5, 0.25, -0.5625, 0.5, 0.375, -0.5},
|
||||
{-0.5, -0.375, -0.5625, 0.5, -0.25, -0.5},
|
||||
},
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
}
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
--Node will be called facade:<subname>_bannerstone_corner
|
||||
function facade.register_bannerstone_corner(modname, subname, recipeitem, desc)
|
||||
minetest.register_node("facade:" .. subname .. "_bannerstone_corner", {
|
||||
description = desc .. " Bannerstone Corner",
|
||||
drawtype = "nodebox",
|
||||
tiles = {
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_bannerstone.png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_bannerstone.png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_bannerstone.png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_bannerstone.png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 2, stone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
{-0.5625, 0.25, -0.5625, 0.5625, 0.375, 0.5625},
|
||||
{-0.5625, -0.375, -0.5625, 0.5625, -0.25, 0.5625},
|
||||
},
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
}
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
--------------
|
||||
--Centerstones
|
||||
--------------
|
||||
|
||||
--Node will be called facade:<subname>_centerstone
|
||||
function facade.register_centerstone(modname, subname, recipeitem, desc)
|
||||
minetest.register_node("facade:" .. subname .. "_centerstone", {
|
||||
description = desc .. " Centerstone",
|
||||
drawtype = "nodebox",
|
||||
tiles = {"" .. modname.. "_" .. subname .. ".png^facade_centerstone.png"},
|
||||
paramtype = "light",
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 2, stone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.4375, -0.4375, -0.4375, 0.4375, 0.4375, 0.4375},
|
||||
{-0.5, -0.25, 0.0625, 0.5, 0.25, 0.25},
|
||||
{-0.5, -0.25, -0.25, 0.5, 0.25, -0.0625},
|
||||
{-0.25, -0.25, -0.5, -0.0625, 0.25, 0.5},
|
||||
{0.0625, -0.25, -0.5, 0.25, 0.25, 0.5},
|
||||
{-0.5, 0.0625, -0.25, 0.5, 0.25, 0.25},
|
||||
{-0.5, -0.25, -0.25, 0.5, -0.0625, 0.25},
|
||||
{-0.25, -0.25, -0.5, 0.25, -0.0625, 0.5},
|
||||
{-0.25, 0.0625, -0.5, 0.25, 0.25, 0.5},
|
||||
{-0.25, -0.5, -0.25, 0.25, 0.5, -0.0625},
|
||||
{-0.25, -0.5, 0.0625, 0.25, 0.5, 0.25},
|
||||
{0.0625, -0.5, -0.1875, 0.25, 0.5, 0.1875},
|
||||
{-0.25, -0.5, -0.1875, -0.0625, 0.5, 0.1875},
|
||||
{-0.5, 0.3125, 0.3125, 0.5, 0.5, 0.5},
|
||||
{-0.5, 0.3125, -0.5, 0.5, 0.5, -0.3125},
|
||||
{0.3125, 0.3125, -0.5, 0.5, 0.5, 0.5},
|
||||
{-0.5, 0.3125, -0.5, -0.3125, 0.5, 0.5},
|
||||
{-0.5, -0.5, -0.5, -0.3125, -0.3125, 0.5},
|
||||
{0.3125, -0.5, -0.5, 0.5, -0.3125, 0.5},
|
||||
{-0.5, -0.5, -0.5, 0.5, -0.3125, -0.3125},
|
||||
{-0.5, -0.5, 0.3125, 0.5, -0.3125, 0.5},
|
||||
{0.3125, -0.5, -0.5, 0.5, 0.5, -0.3125},
|
||||
{0.3125, -0.5, 0.3125, 0.5, 0.5, 0.5},
|
||||
{-0.5, -0.5, 0.3125, -0.3125, 0.5, 0.5},
|
||||
{-0.5, -0.5, -0.5, -0.3125, 0.5, -0.3125},
|
||||
},
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
}
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
---------
|
||||
--Columns
|
||||
---------
|
||||
|
||||
--Node will be called facade:<subname>_column
|
||||
function facade.register_column(modname, subname, recipeitem, desc)
|
||||
minetest.register_node("facade:" .. subname .. "_column" , {
|
||||
description = desc .. " Column",
|
||||
drawtype = "nodebox",
|
||||
tiles = {
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_column.png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_column.png"
|
||||
},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 2, stone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.4375, 0.5, 0.5, 0.4375},
|
||||
{-0.5, -0.5, -0.5, -0.3125, 0.5, 0.5},
|
||||
{0.3125, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
{0.0625, -0.5, -0.5, 0.1875, 0.5, 0.5},
|
||||
{-0.1875, -0.5, -0.5, -0.0625, 0.5, 0.5},
|
||||
},
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
end
|
||||
|
||||
|
||||
--Node will be called facade:<subname>_column_corner
|
||||
function facade.register_column_corner(modname, subname, recipeitem, desc)
|
||||
minetest.register_node("facade:" .. subname .. "_column_corner", {
|
||||
description = desc .. " Column Corner",
|
||||
drawtype = "nodebox",
|
||||
tiles = {
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_column.png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_column.png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_column.png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_column.png"
|
||||
},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 2, stone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.4375, -0.5, -0.4375, 0.4375, 0.5, 0.4375},
|
||||
{-0.5, -0.5, 0.3125, -0.3125, 0.5, 0.5},
|
||||
{0.3125, -0.5, -0.5, 0.5, 0.5, -0.3125},
|
||||
{0.0625, -0.5, -0.5, 0.1875, 0.5, 0.5},
|
||||
{-0.1875, -0.5, -0.5, -0.0625, 0.5, 0.5},
|
||||
{0.3125, -0.5, 0.3125, 0.5, 0.5, 0.5},
|
||||
{-0.5, -0.5, -0.5, -0.3125, 0.5, -0.3125},
|
||||
{-0.5, -0.5, 0.0625, 0.5, 0.5, 0.1875},
|
||||
{-0.5, -0.5, -0.1875, 0.5, 0.5, -0.0625},
|
||||
},
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
}
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
---------
|
||||
--Corbels
|
||||
---------
|
||||
|
||||
--Node will be called facade:<subname>_corbel
|
||||
function facade.register_corbel(modname, subname, recipeitem, desc)
|
||||
minetest.register_node("facade:" .. subname .. "_corbel", {
|
||||
description = desc .. " Corbel",
|
||||
drawtype = "nodebox",
|
||||
tiles = {"" .. modname.. "_" .. subname .. ".png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 2, stone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, 0, -0.5, 0.5, 0.5, 0.5},
|
||||
{-0.5, -0.5, 0, 0.5, 0.5, 0.5},
|
||||
{-0.1875, -0.3125, -0.3125, 0.1875, 0.5, 0},
|
||||
},
|
||||
},
|
||||
-- selection_box = {
|
||||
-- type = "fixed",
|
||||
-- fixed = {
|
||||
-- {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
-- }
|
||||
-- },
|
||||
})
|
||||
end
|
||||
|
||||
--Node will be called facade:<subname>_corbel_corner
|
||||
function facade.register_corbel_corner(modname, subname, recipeitem, desc)
|
||||
minetest.register_node("facade:" .. subname .. "_corbel_corner", {
|
||||
description = desc .. " Corbel Corner",
|
||||
drawtype = "nodebox",
|
||||
tiles = {"" .. modname.. "_" .. subname .. ".png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 2, stone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, 0, -0.5, 0.5, 0.5, 0.5},
|
||||
{-0.5, -0.5, 0, 0, 0.5, 0.5},
|
||||
{0, -0.3125, -0.3125, 0.3125, 0.5, 0},
|
||||
},
|
||||
},
|
||||
-- selection_box = {
|
||||
-- type = "fixed",
|
||||
-- fixed = {
|
||||
-- {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
-- }
|
||||
-- },
|
||||
})
|
||||
end
|
||||
|
||||
--Node will be called facade:<subname>_corbel_corner_inner
|
||||
function facade.register_corbel_corner_inner(modname, subname, recipeitem, desc)
|
||||
minetest.register_node("facade:" .. subname .. "_corbel_corner_inner", {
|
||||
description = desc .. " Corbel Inner Corner",
|
||||
drawtype = "nodebox",
|
||||
tiles = {"" .. modname.. "_" .. subname .. ".png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 2, stone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, 0, -0.5, 0.5, 0.5, 0.5},
|
||||
{-0.5, -0.5, 0, 0.5, 0.5, 0.5},
|
||||
{0, -0.3125, -0.3125, 0.3125, 0.5, 0},
|
||||
{-0.5, -0.5, -0.5, 0, 0.5, 0.5},
|
||||
},
|
||||
},
|
||||
-- selection_box = {
|
||||
-- type = "fixed",
|
||||
-- fixed = {
|
||||
-- {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
-- }
|
||||
-- },
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
--------------------------
|
||||
--- Carved Stones
|
||||
--------------------------
|
||||
|
||||
--Node will be called facade:<subname>_carved_stone_a
|
||||
function facade.register_carved_stone_a(modname, subname, recipeitem, desc)
|
||||
minetest.register_node("facade:" .. subname .. "_carved_stone_a", {
|
||||
description = desc .. " Carved Stone A",
|
||||
drawtype = "nodebox",
|
||||
tiles = {
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_carved_stone_a.png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 2, stone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.4375, 0.5, 0.5, 0.5},
|
||||
{-0.5, 0.4375, -0.5, 0.5, 0.5, -0.4375},
|
||||
{-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5},
|
||||
{-0.4375, -0.375, -0.5, -0.3125, 0.375, -0.4375},
|
||||
{-0.5, -0.375, -0.5, -0.3125, -0.25, 0.5},
|
||||
{-0.4375, 0.25, -0.5, 0.4375, 0.375, 0.5},
|
||||
{0.3125, -0.125, -0.5, 0.4375, 0.25, 0.5},
|
||||
{-0.1875, -0.375, -0.5, 0.5, -0.25, 0.5},
|
||||
{-0.1875, -0.25, -0.5, -0.0625, 0.125, 0.5},
|
||||
{0.0625, -0.125, -0.5, 0.3125, 0, 0.5},
|
||||
{-0.0625, 0, -0.5, 0.1875, 0.125, 0.5},
|
||||
},
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
},
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
--Node will be called facade:<subname>_carved_stone_a_corner
|
||||
function facade.register_carved_stone_a_corner(modname, subname, recipeitem, desc)
|
||||
minetest.register_node("facade:" .. subname .. "_carved_stone_a_corner", {
|
||||
description = desc .. " Carved Stone A Corner",
|
||||
drawtype = "nodebox",
|
||||
tiles = {
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_carved_stone_a.png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_carved_stone_a.png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 2, stone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.4375, -0.5, -0.4375, 0.5, 0.5, 0.5},
|
||||
{-0.5, 0.4375, -0.5, 0.5, 0.5, -0.4375},
|
||||
{-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5},
|
||||
{-0.4375, -0.375, -0.5, -0.3125, 0.375, -0.4375},
|
||||
{-0.5, -0.375, -0.5, -0.3125, -0.25, 0.1875},
|
||||
{-0.4375, 0.25, -0.5, 0.4375, 0.375, 0.5},
|
||||
{0.3125, -0.125, -0.5, 0.4375, 0.25, 0.5},
|
||||
{-0.1875, -0.375, -0.5, 0.5, -0.25, 0.5},
|
||||
{-0.1875, -0.25, -0.5, -0.0625, 0.125, 0.5},
|
||||
{0.0625, -0.125, -0.5, 0.3125, 0, 0.5},
|
||||
{-0.0625, 0, -0.5, 0.1875, 0.125, 0.5},
|
||||
{-0.5, 0.4375, -0.5, 0.5, 0.5, 0.5},
|
||||
{-0.5, -0.125, -0.4375, 0.5, 0.375, -0.3125},
|
||||
{-0.5, 0.25, -0.3125, 0.5, 0.375, 0.4375},
|
||||
{-0.5, -0.375, 0.3125, 0.4375, 0.375, 0.4375},
|
||||
{-0.5, -0.375, 0.3125, 0.4375, -0.25, 0.5},
|
||||
{-0.5, -0.125, -0.3125, 0.4375, 0, -0.0625},
|
||||
{-0.5, 0, -0.1875, 0.4375, 0.125, 0.1875},
|
||||
{-0.5, -0.25, 0.0625, 0.4375, 0.125, 0.1875},
|
||||
},
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
},
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
--------------------------
|
||||
--- RGSpro Facia
|
||||
--------------------------
|
||||
|
||||
--Node will be called facade:<subname>_rgspro
|
||||
function facade.register_rgspro(modname, subname, recipeitem, desc)
|
||||
minetest.register_node("facade:" .. subname .. "_rgspro", {
|
||||
description = desc .. " RGSpro",
|
||||
drawtype = "nodebox",
|
||||
tiles = {
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_rgspro.png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_rgspro.png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_rgspro.png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_rgspro.png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 2, stone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, 0.375, 0.5, -0.3125, 0.5},
|
||||
{-0.5, -0.3125, 0.25, 0.5, -0.125, 0.5},
|
||||
{-0.5, -0.125, 0.125, 0.5, 0.5, 0.5},
|
||||
},
|
||||
},
|
||||
-- selection_box = {
|
||||
-- type = "fixed",
|
||||
-- fixed = {
|
||||
-- {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
-- },
|
||||
-- },
|
||||
})
|
||||
end
|
||||
|
||||
--Node will be called facade:<subname>_rgspro_inner_corner
|
||||
function facade.register_rgspro_inner_corner(modname, subname, recipeitem, desc)
|
||||
minetest.register_node("facade:" .. subname .. "_rgspro_inner_corner", {
|
||||
description = desc .. " RGSpro Inner Corner",
|
||||
drawtype = "nodebox",
|
||||
tiles = {
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_rgspro.png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_rgspro.png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_rgspro.png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_rgspro.png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 2, stone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, 0.375, 0.5, -0.3125, 0.5},
|
||||
{-0.5, -0.3125, 0.25, 0.5, -0.125, 0.5},
|
||||
{-0.5, -0.125, 0.125, 0.5, 0.5, 0.5},
|
||||
{0.375, -0.5, -0.5, 0.5, -0.3125, 0.375},
|
||||
{0.25, -0.3125, -0.5, 0.5, -0.0625, 0.25},
|
||||
{0.125, -0.125, -0.5, 0.5, 0.5, 0.125},
|
||||
},
|
||||
},
|
||||
-- selection_box = {
|
||||
-- type = "fixed",
|
||||
-- fixed = {
|
||||
-- {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
-- },
|
||||
-- },
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
--Node will be called facade:<subname>_rgspro_outer_corner
|
||||
function facade.register_rgspro_outer_corner(modname, subname, recipeitem, desc)
|
||||
minetest.register_node("facade:" .. subname .. "_rgspro_outer_corner", {
|
||||
description = desc .. " RGSpro Outer Corner",
|
||||
drawtype = "nodebox",
|
||||
tiles = {
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_rgspro.png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_rgspro.png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_rgspro.png",
|
||||
"" .. modname.. "_" .. subname .. ".png^facade_rgspro.png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 2, stone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, 0.375, 0.5, -0.3125, 0.5},
|
||||
{-0.5, -0.3125, 0.25, 0.5, -0.0625, 0.5},
|
||||
{-0.5, -0.125, 0.125, 0.5, 0.5, 0.5},
|
||||
{-0.625, -0.5, 0.375, -0.5, -0.3125, 1.5},
|
||||
{-0.75, -0.3125, 0.25, -0.5, -0.125, 1.5},
|
||||
{-0.875, -0.125, 0.125, -0.5, 0.5, 1.5},
|
||||
},
|
||||
},
|
||||
-- selection_box = {
|
||||
-- type = "fixed",
|
||||
-- fixed = {
|
||||
-- {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
-- },
|
||||
-- },
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
--------------------------
|
||||
--- Corner Bricks
|
||||
--------------------------
|
||||
|
||||
--Node will be called facade:<subname>_corner_bricks
|
||||
function facade.register_corner_bricks(modname, subname, recipeitem, desc)
|
||||
if not string.match(recipeitem,"clay")
|
||||
then -- do not do for clay things that is ugly
|
||||
minetest.register_node("facade:" .. subname .. "_corner_bricks", {
|
||||
description = desc .. " Corner Bricks",
|
||||
drawtype = "nodebox",
|
||||
tiles = {
|
||||
"" .. modname.. "_" .. subname .. "_brick.png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 2, stone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5625, -0.5, 0.4375, -0.5, 0, 1},
|
||||
{-0.5, -0.5, 0.4375, 0, 0, 0.5},
|
||||
{-0.5625, 0, 0.5, -0.5, 0.5, 1.5},
|
||||
{-0.5625, 0, 0.4375, 0.5, 0.5, 0.5},
|
||||
},
|
||||
},
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--------------------------
|
||||
--- Columnia shapes
|
||||
--------------------------
|
||||
|
||||
-- From mod Columnia (2014 by Glunggi), LGPL 2.1
|
||||
-- The shapes are using stock minetest.rotate_node() for positioning.
|
||||
|
||||
-- These shapes should not be registered if the regular columnia mod is in use
|
||||
if not minetest.get_modpath("columnia") then
|
||||
|
||||
local columnia_rotate = function(itemstack, placer, pointed_thing)
|
||||
if pointed_thing.type ~= "node" then
|
||||
return itemstack
|
||||
end
|
||||
|
||||
local p0 = pointed_thing.under
|
||||
local p1 = pointed_thing.above
|
||||
local param2 = 0
|
||||
|
||||
local placer_pos = placer:getpos()
|
||||
if placer_pos then
|
||||
local dir = {
|
||||
x = p1.x - placer_pos.x,
|
||||
y = p1.y - placer_pos.y,
|
||||
z = p1.z - placer_pos.z
|
||||
}
|
||||
param2 = minetest.dir_to_facedir(dir)
|
||||
end
|
||||
|
||||
if p0.y-1 == p1.y then
|
||||
param2 = param2 + 20
|
||||
if param2 == 21 then
|
||||
param2 = 23
|
||||
elseif param2 == 23 then
|
||||
param2 = 21
|
||||
end
|
||||
end
|
||||
|
||||
return minetest.item_place(itemstack, placer, pointed_thing, param2)
|
||||
end
|
||||
|
||||
-- Node will be called facade:<subname>_columnia_mid
|
||||
function facade.register_columnia_mid(modname, subname, recipeitem, desc)
|
||||
minetest.register_node("facade:" .. subname .. "_columnia_mid", {
|
||||
description = desc .. " Column Middle",
|
||||
drawtype = "nodebox",
|
||||
tiles = {"" .. modname.. "_" .. subname .. ".png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 2, stone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
on_place = minetest.rotate_node,
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.25, -0.5, -0.25, 0.25, 0.5, 0.25},
|
||||
},
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
-- Normally, a single shape should be fine both for bottom and top parts of
|
||||
-- a column. If materials with textures that don't match with themselves
|
||||
-- when rotated upside-down are added later on, then enable the next function.
|
||||
-- Node will be called facade:<subname>_columnia_bottom
|
||||
function facade.register_columnia_bottom(modname, subname, recipeitem, desc)
|
||||
minetest.register_node("facade:" .. subname .. "_columnia_bottom", {
|
||||
description = desc .. " Column Bottom/Top",
|
||||
drawtype = "nodebox",
|
||||
tiles = {"" .. modname.. "_" .. subname .. ".png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 2, stone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
on_place = minetest.rotate_node,
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.25, -0.5, -0.25, 0.25, 0.5, 0.25},
|
||||
{-0.5, -0.5, -0.5, 0.5, -0.25, 0.5},
|
||||
{-0.375, -0.5, -0.375, 0.375, 0, 0.375},
|
||||
},
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
--[[
|
||||
-- This function is commented out, because in the current state, when facade mod
|
||||
-- uses materials without directional textures, having one shape for top
|
||||
-- and bottom of columns is enough. However, for materials which have textures
|
||||
-- that, when rotated, clearly stop matching the other blocks, this function
|
||||
-- is preserved.
|
||||
-- Node will be called facade:<subname>_columnia_top
|
||||
function facade.register_columnia_top(modname, subname, recipeitem, desc)
|
||||
-- whitelist items with textures of clear directionality (e.g. bricks)
|
||||
if string.match(recipeitem, "brick")
|
||||
then
|
||||
minetest.register_node("facade:" .. subname .. "_columnia_top", {
|
||||
description = desc .. " Column Top/Bottom",
|
||||
drawtype = "nodebox",
|
||||
tiles = {"" .. modname.. "_" .. subname .. ".png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 2, stone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
on_place = minetest.rotate_node,
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.25, -0.5, -0.25, 0.25, 0.5, 0.25},
|
||||
{-0.5, 0.25, -0.5, 0.5, 0.5, 0.5},
|
||||
{-0.375, 0, -0.375, 0.375, 0.5, 0.375},
|
||||
},
|
||||
},
|
||||
})
|
||||
end
|
||||
end
|
||||
]]--
|
||||
|
||||
-- Node will be called facade:<subname>_columnia_crosslink
|
||||
function facade.register_columnia_crosslink(modname, subname, recipeitem, desc)
|
||||
minetest.register_node("facade:" .. subname .. "_columnia_crosslink", {
|
||||
description = desc .. " Column Crosslink",
|
||||
drawtype = "nodebox",
|
||||
tiles = {"" .. modname.. "_" .. subname .. ".png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 2, stone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
on_place = columnia_rotate,
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.25, -0.5, -0.25, 0.25, 0.5, 0.25},
|
||||
{-0.5, 0, -0.25, 0.5, 0.5, 0.25},
|
||||
{-0.25, 0, -0.5, 0.25, 0.5, 0.5},
|
||||
{-0.4375, 0.0625, -0.4375, 0.4375, 0.4375, 0.4375},
|
||||
},
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
-- Node will be called facade:<subname>_columnia_link
|
||||
function facade.register_columnia_link(modname, subname, recipeitem, desc)
|
||||
minetest.register_node("facade:" .. subname .. "_columnia_link", {
|
||||
description = desc .. " Column Link",
|
||||
drawtype = "nodebox",
|
||||
tiles = {"" .. modname.. "_" .. subname .. ".png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 2, stone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
on_place = columnia_rotate,
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.25, 0, -0.5, 0.25, 0.5, 0.5},
|
||||
},
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
-- Node will be called facade:<subname>_columnia_linkdown
|
||||
function facade.register_columnia_linkdown(modname, subname, recipeitem, desc)
|
||||
minetest.register_node("facade:" .. subname .. "_columnia_linkdown", {
|
||||
description = desc .. " Column Linkdown",
|
||||
drawtype = "nodebox",
|
||||
tiles = {"" .. modname.. "_" .. subname .. ".png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 2, stone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
on_place = columnia_rotate,
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.25, 0, -0.5, 0.25, 0.5, 0.5},
|
||||
{-0.125, -0.5, -0.125, 0.125, 0, 0.125},
|
||||
{-0.1875, -0.5, -0.1875, 0.1875, -0.375, 0.1875},
|
||||
{-0.1875, -0.125, -0.1875, 0.1875, 0, 0.1875},
|
||||
},
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
--------------------------
|
||||
--Register Nodes
|
||||
--------------------------
|
||||
function facade.register_facade_nodes(modname, subname, recipeitem, desc)
|
||||
|
||||
facade.register_bannerstone(modname, subname, recipeitem, desc)
|
||||
facade.register_bannerstone_corner(modname, subname, recipeitem, desc)
|
||||
facade.register_centerstone(modname, subname, recipeitem, desc)
|
||||
facade.register_column(modname, subname, recipeitem, desc)
|
||||
facade.register_column_corner(modname, subname, recipeitem, desc)
|
||||
facade.register_corbel(modname, subname, recipeitem, desc)
|
||||
facade.register_corbel_corner(modname, subname, recipeitem, desc)
|
||||
facade.register_corbel_corner_inner(modname, subname, recipeitem, desc)
|
||||
facade.register_carved_stone_a(modname, subname, recipeitem, desc)
|
||||
facade.register_carved_stone_a_corner(modname, subname, recipeitem, desc)
|
||||
facade.register_rgspro(modname, subname, recipeitem, desc)
|
||||
facade.register_rgspro_inner_corner(modname, subname, recipeitem, desc)
|
||||
facade.register_rgspro_outer_corner(modname, subname, recipeitem, desc)
|
||||
facade.register_corner_bricks(modname, subname, recipeitem, desc)
|
||||
|
||||
if not minetest.get_modpath("columnia") then
|
||||
facade.register_columnia_mid(modname, subname, recipeitem, desc)
|
||||
facade.register_columnia_bottom(modname, subname, recipeitem, desc)
|
||||
--facade.register_columnia_top(modname, subname, recipeitem, desc)
|
||||
facade.register_columnia_crosslink(modname, subname, recipeitem, desc)
|
||||
facade.register_columnia_link(modname, subname, recipeitem, desc)
|
||||
facade.register_columnia_linkdown(modname, subname, recipeitem, desc)
|
||||
end
|
||||
|
||||
if wehavechisels then
|
||||
-- register all nodes with mychisel mod to use them without creative priv
|
||||
chisel.register_node("facade",subname, recipeitem, "bannerstone")
|
||||
chisel.register_node("facade",subname, recipeitem, "bannerstone_corner")
|
||||
chisel.register_node("facade",subname, recipeitem, "centerstone")
|
||||
chisel.register_node("facade",subname, recipeitem, "column")
|
||||
chisel.register_node("facade",subname, recipeitem, "column_corner")
|
||||
chisel.register_node("facade",subname, recipeitem, "corbel")
|
||||
chisel.register_node("facade",subname, recipeitem, "corbel_corner")
|
||||
chisel.register_node("facade",subname, recipeitem, "corbel_corner_inner")
|
||||
chisel.register_node("facade",subname, recipeitem, "carved_stone_a")
|
||||
chisel.register_node("facade",subname, recipeitem, "carved_stone_a_corner")
|
||||
chisel.register_node("facade",subname, recipeitem, "rgspro")
|
||||
chisel.register_node("facade",subname, recipeitem, "rgspro_inner_corner")
|
||||
chisel.register_node("facade",subname, recipeitem, "rgspro_outer_corner")
|
||||
chisel.register_node("facade",subname, recipeitem, "corner_bricks")
|
||||
|
||||
if not minetest.get_modpath("columnia") then
|
||||
chisel.register_node("facade",subname, recipeitem, "columnia_mid")
|
||||
chisel.register_node("facade",subname, recipeitem, "columnia_bottom")
|
||||
--chisel.register_node("facade",subname, recipeitem, "columnia_top")
|
||||
chisel.register_node("facade",subname, recipeitem, "columnia_crosslink")
|
||||
chisel.register_node("facade",subname, recipeitem, "columnia_link")
|
||||
chisel.register_node("facade",subname, recipeitem, "columnia_linkdown")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- register the total number of different designs in this mod with mychisel
|
||||
if wehavechisels then chisel.add_mod("facade",14) end
|
||||
|
BIN
facade/textures/facade_shaper_back.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
facade/textures/facade_shaper_bottom.png
Normal file
After Width: | Height: | Size: 228 B |
BIN
facade/textures/facade_shaper_front.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
facade/textures/facade_shaper_left.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
facade/textures/facade_shaper_right.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
facade/textures/facade_shaper_top.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
@ -13,7 +13,7 @@ This mod works by adding your new plant to the {growing=1} group and numbering t
|
||||
|
||||
### Changelog:
|
||||
|
||||
- 1.42 - Soil needs water to be present within 3 blocks horizontally and 1 below to make wet soil, Jack 'o Lanterns now check protection.
|
||||
- 1.42 - Soil needs water to be present within 3 blocks horizontally and 1 below to make wet soil, Jack 'o Lanterns now check protection, add chocolate block
|
||||
- 1.41 - Each crop has it's own spawn rate (can be changed in farming.conf)
|
||||
- 1.40 - Added Mithril Scythe to quick harvest and replant crops on right-click. Added Hoe's for MoreOres with Toolrank support.
|
||||
- 1.39 - Added Rice, Rye and Oats thanks to Ademants Grains mod. Added Jaffa Cake and multigrain bread.
|
||||
|
@ -75,8 +75,8 @@ minetest.register_node("farming:barley_4", table.copy(crop_def))
|
||||
crop_def.tiles = {"farming_barley_5.png"}
|
||||
crop_def.drop = {
|
||||
items = {
|
||||
{items = {'farming:barley'}, rarity = 2},
|
||||
{items = {'farming:seed_barley'}, rarity = 2},
|
||||
{items = {"farming:barley"}, rarity = 2},
|
||||
{items = {"farming:seed_barley"}, rarity = 2},
|
||||
}
|
||||
}
|
||||
minetest.register_node("farming:barley_5", table.copy(crop_def))
|
||||
@ -85,8 +85,8 @@ minetest.register_node("farming:barley_5", table.copy(crop_def))
|
||||
crop_def.tiles = {"farming_barley_6.png"}
|
||||
crop_def.drop = {
|
||||
items = {
|
||||
{items = {'farming:barley'}, rarity = 2},
|
||||
{items = {'farming:seed_barley'}, rarity = 1},
|
||||
{items = {"farming:barley"}, rarity = 2},
|
||||
{items = {"farming:seed_barley"}, rarity = 1},
|
||||
}
|
||||
}
|
||||
minetest.register_node("farming:barley_6", table.copy(crop_def))
|
||||
@ -96,10 +96,10 @@ crop_def.tiles = {"farming_barley_7.png"}
|
||||
crop_def.groups.growing = 0
|
||||
crop_def.drop = {
|
||||
items = {
|
||||
{items = {'farming:barley'}, rarity = 1},
|
||||
{items = {'farming:barley'}, rarity = 3},
|
||||
{items = {'farming:seed_barley'}, rarity = 1},
|
||||
{items = {'farming:seed_barley'}, rarity = 3},
|
||||
{items = {"farming:barley"}, rarity = 1},
|
||||
{items = {"farming:barley"}, rarity = 3},
|
||||
{items = {"farming:seed_barley"}, rarity = 1},
|
||||
{items = {"farming:seed_barley"}, rarity = 3},
|
||||
}
|
||||
}
|
||||
minetest.register_node("farming:barley_7", table.copy(crop_def))
|
||||
|
@ -84,7 +84,7 @@ minetest.register_craftitem("farming:beans", {
|
||||
minetest.register_craft({
|
||||
output = "dye:green",
|
||||
recipe = {
|
||||
{'farming:beans'},
|
||||
{"farming:beans"},
|
||||
}
|
||||
})
|
||||
|
||||
@ -162,9 +162,9 @@ minetest.register_node("farming:beanpole", {
|
||||
minetest.register_craft({
|
||||
output = "farming:beanpole",
|
||||
recipe = {
|
||||
{'', '', ''},
|
||||
{'default:stick', '', 'default:stick'},
|
||||
{'default:stick', '', 'default:stick'},
|
||||
{"", "", ""},
|
||||
{"default:stick", "", "default:stick"},
|
||||
{"default:stick", "", "default:stick"},
|
||||
}
|
||||
})
|
||||
|
||||
@ -185,7 +185,7 @@ local crop_def = {
|
||||
sunlight_propagates = true,
|
||||
drop = {
|
||||
items = {
|
||||
{items = {'farming:beanpole'}, rarity = 1},
|
||||
{items = {"farming:beanpole"}, rarity = 1},
|
||||
}
|
||||
},
|
||||
selection_box = farming.select,
|
||||
@ -216,10 +216,10 @@ crop_def.tiles = {"farming_beanpole_5.png"}
|
||||
crop_def.groups.growing = 0
|
||||
crop_def.drop = {
|
||||
items = {
|
||||
{items = {'farming:beanpole'}, rarity = 1},
|
||||
{items = {'farming:beans 3'}, rarity = 1},
|
||||
{items = {'farming:beans 2'}, rarity = 2},
|
||||
{items = {'farming:beans 2'}, rarity = 3},
|
||||
{items = {"farming:beanpole"}, rarity = 1},
|
||||
{items = {"farming:beans 3"}, rarity = 1},
|
||||
{items = {"farming:beans 2"}, rarity = 2},
|
||||
{items = {"farming:beans 2"}, rarity = 3},
|
||||
}
|
||||
}
|
||||
minetest.register_node("farming:beanpole_5", table.copy(crop_def))
|
||||
@ -244,9 +244,9 @@ minetest.register_node("farming:beanbush", {
|
||||
sunlight_propagates = true,
|
||||
drop = {
|
||||
items = {
|
||||
{items = {'farming:beans 1'}, rarity = 1},
|
||||
{items = {'farming:beans 1'}, rarity = 2},
|
||||
{items = {'farming:beans 1'}, rarity = 3},
|
||||
{items = {"farming:beans 1"}, rarity = 1},
|
||||
{items = {"farming:beans 1"}, rarity = 2},
|
||||
{items = {"farming:beans 1"}, rarity = 3},
|
||||
}
|
||||
},
|
||||
selection_box = farming.select,
|
||||
|
@ -76,10 +76,10 @@ crop_def.tiles = {"farming_beetroot_5.png"}
|
||||
crop_def.groups.growing = 0
|
||||
crop_def.drop = {
|
||||
max_items = 4, items = {
|
||||
{items = {'farming:beetroot'}, rarity = 1},
|
||||
{items = {'farming:beetroot'}, rarity = 2},
|
||||
{items = {'farming:beetroot'}, rarity = 3},
|
||||
{items = {'farming:beetroot'}, rarity = 4},
|
||||
{items = {"farming:beetroot"}, rarity = 1},
|
||||
{items = {"farming:beetroot"}, rarity = 2},
|
||||
{items = {"farming:beetroot"}, rarity = 3},
|
||||
{items = {"farming:beetroot"}, rarity = 4},
|
||||
}
|
||||
}
|
||||
minetest.register_node("farming:beetroot_5", table.copy(crop_def))
|
||||
|
@ -78,9 +78,9 @@ crop_def.tiles = {"farming_blueberry_4.png"}
|
||||
crop_def.groups.growing = 0
|
||||
crop_def.drop = {
|
||||
items = {
|
||||
{items = {'farming:blueberries 2'}, rarity = 1},
|
||||
{items = {'farming:blueberries'}, rarity = 2},
|
||||
{items = {'farming:blueberries'}, rarity = 3},
|
||||
{items = {"farming:blueberries 2"}, rarity = 1},
|
||||
{items = {"farming:blueberries"}, rarity = 2},
|
||||
{items = {"farming:blueberries"}, rarity = 3},
|
||||
}
|
||||
}
|
||||
minetest.register_node("farming:blueberry_4", table.copy(crop_def))
|
||||
|