update biome_lib, bonemeal, digidisplay, digistuff, dreambuilder hotbar,

farming redo, roads, maptools, mesecons, moretrees, pipeworks,
rgblightstone, signs_lib, technic (except I kept it back from that
broken commit), unifiedmesecons, and worldedit

removed the inventory sorter mod

added my two dreambuilder management scripts (look in
dreambuilder_mp_extras)
This commit is contained in:
VanessaE 2020-04-30 02:41:17 -04:00
parent e5357b2191
commit ddf955db23
83 changed files with 2080 additions and 1826 deletions

View File

@ -85,7 +85,7 @@ biome_lib.perlin_humidity = PerlinNoise(humidity_seeddiff, humidity_octaves, hum
-- Local functions
local function get_biome_data(pos, perlin_fertile)
local fertility = perlin_fertile:get2d({x=pos.x, y=pos.z})
local fertility = perlin_fertile:get_2d({x=pos.x, y=pos.z})
if type(minetest.get_biome_data) == "function" then
local data = minetest.get_biome_data(pos)

View File

@ -460,8 +460,8 @@ function bonemeal:on_use(pos, strength, node)
end
-- check for tree growth if pointing at sapling
-- if minetest.get_item_group(node.name, "sapling") > 0
if random(5 - strength) == 1 then
if minetest.get_item_group(node.name, "sapling") > 0
and random(5 - strength) == 1 then
check_sapling(pos, node.name)
return
end

View File

@ -71,7 +71,7 @@ local function updateDisplay(pos)
end
entity:set_properties({textures={etex}})
entity:set_yaw((fdir.x ~= 0) and math.pi/2 or 0)
entity:setpos(vector.add(pos,vector.multiply(fdir,0.39)))
entity:set_pos(vector.add(pos,vector.multiply(fdir,0.39)))
end
minetest.register_entity("digidisplay:text",{
@ -97,6 +97,7 @@ for _,i in pairs({"tiny","small","medium","large","huge"}) do
type = "fixed",
fixed = {-0.5,-0.5,0.4,0.5,0.5,0.5},
},
_digistuff_channelcopier_fieldname = "channel",
on_construct = function(pos)
local meta = minetest.get_meta(pos)
meta:set_string("formspec","field[channel;Channel;${channel}]")

View File

@ -11,6 +11,7 @@ minetest.register_node("digistuff:camera", {
{
receptor = {}
},
_digistuff_channelcopier_fieldname = "channel",
groups = {cracky=2},
paramtype = "light",
paramtype2 = "facedir",

View File

@ -58,6 +58,7 @@ minetest.register_node("digistuff:card_reader",{
local meta = minetest.get_meta(pos)
if fields.channel then meta:set_string("channel",fields.channel) end
end,
_digistuff_channelcopier_fieldname = "channel",
paramtype = "light",
paramtype2 = "facedir",
tiles = {

View File

@ -0,0 +1,90 @@
minetest.register_tool("digistuff:channelcopier",{
description = "Digilines Channel Copier (shift-click to copy, click to paste)",
inventory_image = "digistuff_channelcopier.png",
on_use = function(itemstack,player,pointed)
if not (pointed and pointed.under) then return itemstack end
if not (player and player:get_player_name()) then return end
local pos = pointed.under
local name = player:get_player_name()
local node = minetest.get_node(pos)
if not node then return itemstack end
if minetest.registered_nodes[node.name]._digistuff_channelcopier_fieldname then
if player:get_player_control().sneak then
local channel = minetest.get_meta(pointed.under):get_string(minetest.registered_nodes[node.name]._digistuff_channelcopier_fieldname)
if type(channel) == "string" and channel ~= "" then
local stackmeta = itemstack:get_meta()
stackmeta:set_string("channel",channel)
stackmeta:set_string("description","Digilines Channel Copier, set to: "..channel)
if player and player:get_player_name() then minetest.chat_send_player(player:get_player_name(),"Digilines channel copier set to "..minetest.colorize("#00FFFF",channel)..". Click another node to paste this channel there.") end
end
else
if minetest.is_protected(pos,name) and not minetest.check_player_privs(name,{protection_bypass=true}) then
minetest.record_protection_violation(pos,name)
return itemstack
end
if minetest.registered_nodes[node.name]._digistuff_channelcopier_fieldname then
local channel = itemstack:get_meta():get_string("channel")
if type(channel) ~= "string" or channel == "" then
minetest.chat_send_player(name,minetest.colorize("#FF5555","Error:").." No channel has been set yet. Shift-click to copy one.")
return itemstack
end
local oldchannel = minetest.get_meta(pos):get_string(minetest.registered_nodes[node.name]._digistuff_channelcopier_fieldname)
minetest.get_meta(pos):set_string(minetest.registered_nodes[node.name]._digistuff_channelcopier_fieldname,channel)
if type(oldchannel) == "string" and oldchannel ~= "" then
if channel == oldchannel then
minetest.chat_send_player(name,"Channel of target node is already "..minetest.colorize("#00FFFF",oldchannel)..".")
else
minetest.chat_send_player(name,string.format("Channel of target node changed from %s to %s.",minetest.colorize("#00FFFF",oldchannel),minetest.colorize("#00FFFF",channel)))
end
else
minetest.chat_send_player(name,"Channel of target node set to "..minetest.colorize("#00FFFF",channel)..".")
end
if type(minetest.registered_nodes[node.name]._digistuff_channelcopier_onset) == "function" then
minetest.registered_nodes[node.name]._digistuff_channelcopier_onset(pos,node,player,channel,oldchannel)
end
end
end
end
return itemstack
end,
})
minetest.register_craft({
output = "digistuff:channelcopier",
recipe = {
{"mesecons_fpga:programmer"},
{"digilines:wire_std_00000000"}
}
})
--NOTE: Asking to have your own mod added to here is not the right way to add compatibility with the channel copier.
--Instead, include a _digistuff_channelcopier_fieldname field in your nodedef set to the name of the metadata field that contains the channel.
--If you need an action to occur after the channel is set, place a function in _digistuff_channelcopier_onset.
--Function signature is _digistuff_channelcopier_onset(pos,node,player,new_channel,old_channel)
local additionalnodes = {
["digilines:chest"] = "channel",
["digilines:lcd"] = "channel",
["digilines:lightsensor"] = "channel",
["digilines:rtc"] = "channel",
["pipeworks:digiline_detector_tube_1"] = "channel",
["pipeworks:digiline_detector_tube_2"] = "channel",
["pipeworks:digiline_detector_tube_3"] = "channel",
["pipeworks:digiline_detector_tube_4"] = "channel",
["pipeworks:digiline_detector_tube_5"] = "channel",
["pipeworks:digiline_detector_tube_6"] = "channel",
["pipeworks:digiline_detector_tube_7"] = "channel",
["pipeworks:digiline_detector_tube_8"] = "channel",
["pipeworks:digiline_detector_tube_9"] = "channel",
["pipeworks:digiline_detector_tube_10"] = "channel",
["pipeworks:digiline_filter"] = "channel",
}
for name,field in pairs(additionalnodes) do
if minetest.registered_nodes[name] and not minetest.registered_nodes[name]._digistuff_channelcopier_fieldname then
minetest.override_item(name,{_digistuff_channelcopier_fieldname = field})
end
end

View File

@ -3,3 +3,4 @@ digilines
mesecons?
mesecons_mvps?
screwdriver?
pipeworks?

View File

@ -12,6 +12,7 @@ minetest.register_node("digistuff:detector", {
local meta = minetest.get_meta(pos)
meta:set_string("formspec","size[8,4;]field[1,1;6,2;channel;Channel;${channel}]field[1,2;6,2;radius;Radius;${radius}]button_exit[2.25,3;3,1;submit;Save]")
end,
_digistuff_channelcopier_fieldname = "channel",
on_receive_fields = function(pos, formname, fields, sender)
local name = sender:get_player_name()
if minetest.is_protected(pos,name) and not minetest.check_player_privs(name,{protection_bypass=true}) then

View File

@ -14,6 +14,7 @@ local components = {
"piston",
"timer",
"cardreader",
"channelcopier",
}
if minetest.get_modpath("mesecons_luacontroller") then table.insert(components,"ioexpander") end
@ -24,8 +25,8 @@ end
local http = minetest.request_http_api()
if not http then
minetest.log("error","digistuff is not allowed to use the HTTP API - digilines NIC will not be available!")
minetest.log("error","If this functionality is desired, please add digistuff to your secure.http_mods setting")
minetest.log("warning","digistuff is not allowed to use the HTTP API - digilines NIC will not be available!")
minetest.log("warning","If this functionality is desired, please add digistuff to your secure.http_mods setting")
else
loadfile(string.format("%s%s%s.lua",minetest.get_modpath(minetest.get_current_modname()),DIR_DELIM,"nic"))(http)
end

View File

@ -17,7 +17,7 @@ local implode_port_states = function(port)
end
local gettiles = function(state)
tiles = {
local tiles = {
"digistuff_ioexp_top.png",
"jeija_microcontroller_bottom.png",
"jeija_microcontroller_sides.png",
@ -118,6 +118,7 @@ for i=0,15,1 do
meta:set_int("don",0)
meta:set_int("outstate",i)
end,
_digistuff_channelcopier_fieldname = "channel",
tiles = gettiles(i),
inventory_image = "digistuff_ioexp_top.png",
drawtype = "nodebox",

View File

@ -13,6 +13,7 @@ for i=0,14,1 do
{-0.25,0.4,-0.25,0.25,0.5,0.25},
}
},
_digistuff_channelcopier_fieldname = "channel",
groups = i > 0 and {cracky = 1, not_in_creative_inventory = 1} or {cracky = 1},
is_ground_content = false,
light_source = i,

View File

@ -29,9 +29,10 @@ local valid_sounds = {
crash = "mesecons_noteblock_crash",
litecrash = "mesecons_noteblock_litecrash",
fire = "fire_large",
explosion = "tnt_explode",
digistuff_piezo_short = "digistuff_piezo_short_single",
digistuff_piezo_long = "digistuff_piezo_long_single"
digistuff_piezo_long = "digistuff_piezo_long_single",
digistuff_piston_extend = "digistuff_piston_extend",
digistuff_piston_retract = "digistuff_piston_retract",
}
local mod_sounds = {
@ -54,19 +55,28 @@ local mod_sounds = {
fake_fire = {
fake_fire_extinguish = "fire_extinguish"
},
homedecor = {
homedecor_doors_and_gates = {
homedecor_book_close = "homedecor_book_close",
homedecor_doorbell = "homedecor_doorbell",
homedecor_door_close = "homedecor_door_close",
homedecor_door_open = "homedecor_door_open",
homedecor_faucet = "homedecor_faucet",
homedecor_gate = "homedecor_gate_open_close",
homedecor_gate = "homedecor_gate_open_close",
},
homedecor_bathroom = {
homedecor_shower = "homedecor_shower",
homedecor_telephone = "homedecor_telephone_ringing",
homedecor_toilet = "homedecor_toilet_flush",
homedecor_trash = "homedecor_trash_all",
},
homedecor_common = {
homedecor_faucet = "homedecor_faucet",
},
homedecor_electrical = {
homedecor_doorbell = "homedecor_doorbell",
},
homedecor_gastronomy = {
homedecor_insert_coin = "insert_coin",
homedecor_toaster = "toaster"
homedecor_toaster = "toaster",
},
homedecor_trash_cans = {
homedecor_trash = "homedecor_trash_all",
},
infrastructure = {
infrastructure_emergency_phone = "infrastructure_emergency_phone"

View File

@ -21,6 +21,7 @@ minetest.register_node("digistuff:nic", {
type = "fixed",
fixed = { -8/16, -8/16, -8/16, 8/16, -5/16, 8/16 },
},
_digistuff_channelcopier_fieldname = "channel",
node_box = {
--From Luacontroller
type = "fixed",

View File

@ -1,5 +1,5 @@
if not minetest.get_modpath("mesecons_noteblock") then
minetest.log("error","mesecons_noteblock is not installed - digilines noteblock will not be available!")
minetest.log("warning","mesecons_noteblock is not installed - digilines noteblock will not be available!")
return
end
@ -21,6 +21,7 @@ minetest.register_node("digistuff:noteblock", {
tiles = {
"mesecons_noteblock.png"
},
_digistuff_channelcopier_fieldname = "channel",
on_receive_fields = function(pos, formname, fields, sender)
local name = sender:get_player_name()
if minetest.is_protected(pos,name) and not minetest.check_player_privs(name,{protection_bypass=true}) then
@ -51,12 +52,23 @@ minetest.register_node("digistuff:noteblock", {
if sound then minetest.sound_play(sound,{pos=pos}) end
elseif type(msg) == "table" then
if type(msg.sound) ~= "string" then return end
for _,i in ipairs({"pitch","speed","volume","gain",}) do
if type(msg[i]) == "string" then
msg[i] = tonumber(msg[i])
end
end
local sound = validnbsounds[msg.sound]
if not msg.volume then msg.volume = msg.gain end
local volume = 1
if type(msg.volume) == "number" then
volume = math.max(0,math.min(1,msg.volume))
end
if sound then minetest.sound_play({name=sound,gain=volume},{pos=pos}) end
if not msg.pitch then msg.pitch = msg.speed end
local pitch = 1
if type(msg.pitch) == "number" then
pitch = math.max(0.05,math.min(10,msg.pitch))
end
if sound then minetest.sound_play({name = sound,gain = volume,},{pos = pos,pitch = pitch,},true) end
end
end
},

View File

@ -123,6 +123,11 @@ minetest.register_node("digistuff:panel", {
"digistuff_panel_back.png",
"digistuff_panel_front.png"
},
_digistuff_channelcopier_fieldname = "channel",
_digistuff_channelcopier_onset = function(pos)
local helpmsg = "Channel has been set. Waiting for data..."
digistuff.update_panel_formspec(pos,helpmsg)
end,
paramtype = "light",
paramtype2 = "facedir",
node_box = {

View File

@ -14,6 +14,7 @@ minetest.register_node("digistuff:piezo", {
digistuff.sounds_playing[pos_hash] = nil
end
end,
_digistuff_channelcopier_fieldname = "channel",
tiles = {
"digistuff_piezo_top.png",
"digistuff_piezo_sides.png",

View File

@ -66,6 +66,7 @@ minetest.register_node("digistuff:piston", {
local meta = minetest.get_meta(pos)
if fields.channel then meta:set_string("channel",fields.channel) end
end,
_digistuff_channelcopier_fieldname = "channel",
digiline = {
wire = {
rules = {
@ -124,6 +125,7 @@ minetest.register_node("digistuff:piston_ext", {
{-0.5,-0.5,-1.5,0.5,0.5,0.5},
}
},
_digistuff_channelcopier_fieldname = "channel",
on_rotate = function() return false end,
on_receive_fields = function(pos, formname, fields, sender)
local name = sender:get_player_name()

View File

@ -95,6 +95,7 @@ minetest.register_node("digistuff:button", {
rules = digistuff.button_get_rules,
},
},
_digistuff_channelcopier_fieldname = "channel",
groups = {dig_immediate = 2,digiline_receiver = 1,},
description = "Digilines Button",
on_construct = function(pos)
@ -160,6 +161,7 @@ minetest.register_node("digistuff:button_off", {
action = digistuff.button_handle_digilines,
},
},
_digistuff_channelcopier_fieldname = "channel",
groups = {dig_immediate = 2,not_in_creative_inventory = 1,digiline_receiver = 1,},
drop = "digistuff:button",
after_destruct = digistuff.remove_receiver,
@ -204,6 +206,7 @@ minetest.register_node("digistuff:button_off_pushed", {
action = digistuff.button_handle_digilines,
},
},
_digistuff_channelcopier_fieldname = "channel",
on_timer = digistuff.button_turnoff,
groups = {dig_immediate = 2,not_in_creative_inventory = 1,digiline_receiver = 1,},
drop = "digistuff:button",
@ -240,6 +243,7 @@ minetest.register_node("digistuff:button_on", {
{ -4/16, -2/16, 4/16, 4/16, 2/16, 6/16 } -- the button itself
}
},
_digistuff_channelcopier_fieldname = "channel",
digiline =
{
receptor = {},
@ -279,6 +283,7 @@ minetest.register_node("digistuff:button_on_pushed", {
type = "fixed",
fixed = { -6/16, -6/16, 5/16, 6/16, 6/16, 8/16 }
},
_digistuff_channelcopier_fieldname = "channel",
node_box = {
type = "fixed",
fixed = {
@ -338,6 +343,7 @@ minetest.register_node("digistuff:wall_knob", {
{-0.4,-0.4,0,0.4,0.4,0.5},
},
},
_digistuff_channelcopier_fieldname = "channel",
groups = {dig_immediate = 2,digiline_receiver = 1,},
description = "Digilines Wall Knob",
on_construct = function(pos)
@ -397,6 +403,7 @@ minetest.register_node("digistuff:wall_knob_configured", {
{-0.4,-0.4,0,0.4,0.4,0.5},
},
},
_digistuff_channelcopier_fieldname = "channel",
groups = {dig_immediate = 2,digiline_receiver = 1,not_in_creative_inventory = 1,},
description = "Digilines Wall Knob (configured state - you hacker you!)",
drop = "digistuff:wall_knob",

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -29,6 +29,7 @@ minetest.register_node("digistuff:timer", {
{-3/16, -6/16, -3/16, 3/16, -5/16, 3/16}, -- IC
}
},
_digistuff_channelcopier_fieldname = "channel",
paramtype = "light",
sunlight_propagates = true,
on_receive_fields = function(pos, formname, fields, sender)

View File

@ -2,6 +2,9 @@ digistuff.update_ts_formspec = function (pos)
local meta = minetest.get_meta(pos)
local fs = "size[10,8]"..
"background[0,0;0,0;digistuff_ts_bg.png;true]"
if meta:get_int("realcoordinates") > 0 then
fs = fs.."real_coordinates[true]"
end
if meta:get_int("init") == 0 then
fs = fs.."field[3.75,3;3,1;channel;Channel;]"..
"button_exit[4,3.75;2,1;save;Save]"
@ -80,6 +83,8 @@ end
digistuff.process_command = function (meta, data, msg)
if msg.command == "clear" then
data = {}
elseif msg.command == "realcoordinates" then
meta:set_int("realcoordinates",msg.enabled and 1 or 0)
elseif msg.command == "addimage" then
for _,i in pairs({"X","Y","W","H"}) do
if not msg[i] or type(msg[i]) ~= "number" then
@ -285,6 +290,11 @@ minetest.register_node("digistuff:touchscreen", {
{ -0.5, -0.5, 0.4, 0.5, 0.5, 0.5 }
}
},
_digistuff_channelcopier_fieldname = "channel",
_digistuff_channelcopier_onset = function(pos)
minetest.get_meta(pos):set_int("init",1)
digistuff.update_ts_formspec(pos)
end,
on_receive_fields = digistuff.ts_on_receive_fields,
digiline =
{

View File

@ -3,7 +3,7 @@ local maxslots = (string.sub(mtver.string, 1, 4) ~= "0.4.") and 32 or 23
local function validate_size(s)
local size = s and tonumber(s) or 16
if (size == 8 or size == 16 or size == 23 or size == 24 or size == 32)
if (size == 8 or size == 10 or size == 16 or size == 23 or size == 24 or size == 32)
and size <= maxslots then
return size
else
@ -11,7 +11,7 @@ local function validate_size(s)
end
end
local hotbar_size_default = validate_size(minetest.setting_get("hotbar_size"))
local hotbar_size_default = validate_size(minetest.settings:get("hotbar_size"))
local player_hotbar_settings = {}

Binary file not shown.

After

Width:  |  Height:  |  Size: 542 B

View File

@ -0,0 +1,184 @@
#!/bin/bash
upstream_mods_path="/home/vanessa/Minetest-related/mods"
modpack_path=$upstream_mods_path"/my_mods/dreambuilder_modpack"
# This script manages all of the various individual changes
# for dreambuilder, e.g. updating mods, copying file components,
# making changes to the code, etc.
rm -rf $modpack_path/*
touch $modpack_path/modpack.txt
echo -e "\nBring all mods up-to-date from "$upstream_mods_path
cd $upstream_mods_path
# No trailing slashes on these items' paths!
MODS_LIST="ShadowNinjas_mods/bedrock \
my_mods/biome_lib \
my_mods/coloredwood \
my_mods/currency \
my_mods/gloopblocks \
my_mods/ilights \
my_mods/moretrees \
my_mods/misc_overrides \
my_mods/nixie_tubes \
my_mods/led_marquee \
my_mods/pipeworks \
my_mods/signs_lib \
my_mods/basic_signs \
my_mods/street_signs \
my_mods/unifieddyes \
my_mods/dreambuilder_mp_extras \
my_mods/simple_streetlights \
my_mods/basic_materials \
my_mods/dreambuilder_hotbar \
Calinous_mods/bedrock \
Calinous_mods/maptools \
Calinous_mods/moreblocks \
Calinous_mods/moreores \
Sokomines_mods/cottages \
Sokomines_mods/locks \
Sokomines_mods/travelnet \
Sokomines_mods/windmill \
RBAs_mods/datastorage \
RBAs_mods/framedglass \
RBAs_mods/unified_inventory \
Mossmanikins_mods/memorandum \
cheapies_mods/plasticbox \
cheapies_mods/prefab_redo \
cheapies_mods/invsaw \
cheapies_mods/unifiedmesecons \
cheapies_mods/digistuff \
cheapies_mods/rgblightstone \
cheapies_mods/solidcolor \
cheapies_mods/arrowboards \
cheapies_mods/digidisplay \
Jeijas_mods/digilines \
Jeijas_mods/jumping \
CWzs_mods/player_textures \
CWzs_mods/replacer \
nekogloops_mods/glooptest \
TenPlus1s_mods/farming \
TenPlus1s_mods/bees \
TenPlus1s_mods/bakedclay \
TenPlus1s_mods/cblocks \
TenPlus1s_mods/bonemeal \
tumeninodes-mods/facade \
Zeg9s_mods/steel \
DonBatmans_mods/mymillwork \
quartz \
stained_glass \
titanium \
unifiedbricks \
display_blocks \
gardening \
caverealms_lite \
deezls_mods/extra_stairsplus \
blox \
bobblocks \
campfire \
notify_hud_provider"
MODPACKS_LIST="$(ls -d worldedit/*/) \
$(ls -d my_mods/homedecor_modpack/*/) \
$(ls -d RBAs_mods/technic/*/) \
$(ls -d my_mods/plantlife_modpack/*/) \
$(ls -d Zeg9s_mods/ufos/*/) \
$(ls -d Jeijas_mods/mesecons/*/) \
$(ls -d Philipbenrs_mods/castle-modpack/*/) \
$(ls -d cheapies_mods/roads/*/) \
$(ls -d cool_trees/*/)"
for i in $MODS_LIST; do
rsync -a $i $modpack_path --exclude .git*
done
for i in $(echo $MODPACKS_LIST |sed "s:/ : :g; s:/$::"); do
rsync -a $i $modpack_path --exclude .git*
done
# above, all the stuff of the form $(ls -d foo/*/) are modpacks
# those special commands copy out just the folders from within.
echo -e "\nConfigure Dreambuilder and its mods..."
# Disable some components
rm -f $modpack_path/dreambuilder_mp_extras/models/character.b3d
rm -rf $modpack_path/orbs_of_time
rm -f $modpack_path/bobblocks/trap.lua
touch $modpack_path/bobblocks/trap.lua
rm -f $modpack_path/replacer/inspect.lua
touch $modpack_path/replacer/inspect.lua
rm -rf $modpack_path/wrench
sed -i "s/bucket//" \
$modpack_path/unifiedbricks/depends.txt
sed -i "s/mesecons =/foo =/" \
$modpack_path/bobblocks/blocks.lua
sed -i "s/LOAD_OTHERGEN_MODULE = true/LOAD_OTHERGEN_MODULE = false/" \
$modpack_path/glooptest/module.cfg
sed -i 's/"stairsplus_in_creative_inventory", true)/"stairsplus_in_creative_inventory", false)/' \
$modpack_path/moreblocks/config.lua
echo "moreblocks.stairsplus_in_creative_inventory (Display Stairs+ nodes in creative inventory) bool false" \
> $modpack_path/moreblocks/settingtypes.txt
rm -rf $modpack_path/worldedit_brush
# Add in all of the regular player skins for the player_textures mod
rm -f $modpack_path/player_textures/textures/*
LIST="player_Calinou.png
player_cheapie.png
player_crazyginger72.png
player_Evergreen.png
player_Jordach.png
player_kaeza.png
player_oOChainLynxOo.png
player_PilzAdam_back.png
player_PilzAdam.png
player_playzooki.png
player_sdzen.png
player_ShadowNinja.png
player_shadowzone.png
player_Sokomine.png
player_VanessaE.png
player_Zeg9.png"
while read -r FILE; do
cp /home/vanessa/Minetest-related/player_skins/$FILE \
$modpack_path/player_textures/textures
done <<< "$LIST"
cp -a /home/vanessa/Minetest-related/mods/my_mods/dreambuilder_mp_upstream_files/readme.md $modpack_path
cp /home/vanessa/Minetest-related/Scripts/customize-dreambuilder.sh $modpack_path"/dreambuilder_mp_extras/"
cp /home/vanessa/Minetest-related/Scripts/update-dreambuilder-online-files.sh $modpack_path"/dreambuilder_mp_extras"
echo "Copying Dreambuilder to mods directory..."
rsync -a -v --delete $modpack_path /home/vanessa/.minetest/mods/
echo -e "\nCustomization completed. Here's what will be included in the modpack:\n"
ls $modpack_path
echo -e "\nUploading to the server..."
rsync -L --delete --progress -a -v -z -e "ssh" \
--exclude=".git*" \
--chown=minetest:minetest \
/home/vanessa/Minetest-related/mods/my_mods/dreambuilder_modpack \
minetest@daconcepts.com:/home/minetest/mods/my_mods

View File

@ -0,0 +1,52 @@
#!/bin/bash
echo -e "\nBuilding Dreambuilder ..."
echo -e "=================================================================\n"
/home/vanessa/Minetest-related/Scripts/customize-dreambuilder.sh
timestamp=`date +%Y%m%d-%H%M`
echo -e "\nCopy the Dreambuilder to /home/vanessa/.minetest/mods..."
echo -e "=================================================================\n"
rsync -a --exclude=".git/" \
/home/vanessa/Minetest-related/mods/my_mods/dreambuilder_modpack \
/home/vanessa/.minetest/mods/
echo -e "\nUpdate git repo..."
echo -e "=================================================================\n"
cd /home/vanessa/Minetest-related/mods/my_mods/dreambuilder_modpack
git add .
git commit -a
git push
git tag $timestamp
git push --tags
echo -e "\nRecreate secondary game archive ..."
echo -e "=================================================================\n"
echo "Build timestamp: $timestamp" > \
/home/vanessa/Minetest-related/mods/my_mods/dreambuilder_modpack/build-date.txt
rm -f /home/vanessa/Minetest-related/Dreambuilder_Modpack.tar.bz2
cd /home/vanessa/Minetest-related/mods/my_mods/
tar -jcf /home/vanessa/Digital-Audio-Concepts-Website/vanessa/hobbies/minetest/Dreambuilder_Modpack.tar.bz2 \
--exclude=".git/*" \
dreambuilder_modpack
rm /home/vanessa/Minetest-related/mods/my_mods/dreambuilder_modpack/build-date.txt
echo -e "\nSync the local mod cache to the web server ..."
echo -e "================================================\n"
rsync -L --exclude=\*.git \
--delete --progress -a -v -z -O --checksum -e "ssh" \
/home/vanessa/Minetest-related/mods/ \
minetest@daconcepts.com:/home/minetest/www/my-main-mod-archive
/home/vanessa/Scripts/sync-website.sh
echo -e "\nDone. Build timestamp: $timestamp \n"

View File

@ -13,6 +13,7 @@ This mod works by adding your new plant to the {growing=1} group and numbering t
### Changelog:
- 1.44 - Added 'farming_stage_length' in mod settings for speed of crop growth, also thanks to TheDarkTiger for translation updates
- 1.43 - Scythe works on use instead of right-click, added seed=1 groups to actual seeds and seed=2 group for plantable food items.
- 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)

View File

@ -1,4 +1,6 @@
local S = farming.intllib
--= Helpers
local eth = minetest.get_modpath("ethereal")
@ -29,7 +31,7 @@ if eth then
alias("farming_plus:banana", "ethereal:banana")
else
minetest.register_node(":ethereal:banana", {
description = "Banana",
description = S("Banana"),
drawtype = "torchlike",
tiles = {"banana_single.png"},
inventory_image = "banana_single.png",
@ -47,7 +49,7 @@ else
})
minetest.register_node(":ethereal:bananaleaves", {
description = "Banana Leaves",
description = S("Banana Leaves"),
tiles = {"banana_leaf.png"},
inventory_image = "banana_leaf.png",
wield_image = "banana_leaf.png",
@ -87,7 +89,7 @@ if eth then
alias("farming_plus:orange_seed", "ethereal:orange_tree_sapling")
else
minetest.register_node(":ethereal:orange", {
description = "Orange",
description = S("Orange"),
drawtype = "plantlike",
tiles = {"farming_orange.png"},
inventory_image = "farming_orange.png",
@ -145,7 +147,7 @@ if eth then
alias("farming_plus:strawberry", "ethereal:strawberry_7")
else
minetest.register_craftitem(":ethereal:strawberry", {
description = "Strawberry",
description = S("Strawberry"),
inventory_image = "strawberry.png",
wield_image = "strawberry.png",
groups = {food_strawberry = 1, flammable = 2},

View File

@ -74,6 +74,7 @@ minetest.register_craft( {
recipe = {
{ "vessels:glass_bottle", "group:food_corn", "group:food_corn"},
{ "group:food_corn", "group:food_corn", "group:food_corn"},
{ "group:food_corn", "group:food_corn", "group:food_corn"},
}
})

View File

@ -78,7 +78,7 @@ crop_def.tiles = {"farming_melon_top.png", "farming_melon_top.png", "farming_mel
crop_def.selection_box = {-.5, -.5, -.5, .5, .5, .5}
crop_def.walkable = true
crop_def.groups = {
food_melon = 1, snappy = 1, oddly_breakable_by_hand = 1,
food_melon = 1, snappy = 2, oddly_breakable_by_hand = 1,
flammable = 2, plant = 1
}
--crop_def.drop = "farming:melon_slice 9"

View File

@ -33,7 +33,7 @@ minetest.register_craft({
-- ground pepper
minetest.register_node("farming:pepper_ground", {
description = ("Ground Pepper"),
description = S("Ground Pepper"),
inventory_image = "crops_pepper_ground.png",
wield_image = "crops_pepper_ground.png",
drawtype = "plantlike",

View File

@ -88,6 +88,7 @@ minetest.register_craft({
--- wooden scarecrow base
minetest.register_node("farming:scarecrow_bottom", {
description = S("Scarecrow Bottom"),
paramtype = "light",
sunlight_propagates = true,
paramtype2 = "facedir",
@ -203,9 +204,10 @@ minetest.register_node("farming:pumpkin_8", {
"farming_pumpkin_side.png"
},
groups = {
food_pumpkin = 1, choppy = 1, oddly_breakable_by_hand = 1,
food_pumpkin = 1, choppy = 2, oddly_breakable_by_hand = 1,
flammable = 2, plant = 1
},
drop = "farming:pumpkin_8",
sounds = default.node_sound_wood_defaults(),
})

View File

@ -6,7 +6,7 @@ local S = farming.intllib
-- Rye
farming.register_plant("farming:rye", {
description = "Rye seed",
description = S("Rye seed"),
paramtype2 = "meshoptions",
inventory_image = "farming_rye_seed.png",
steps = 8,
@ -14,6 +14,7 @@ farming.register_plant("farming:rye", {
})
minetest.override_item("farming:rye", {
description = S("Rye"),
groups = {food_rye = 1, flammable = 4}
})
@ -30,7 +31,7 @@ minetest.register_craft({
-- Oats
farming.register_plant("farming:oat", {
description = "Oat seed",
description = S("Oat seed"),
paramtype2 = "meshoptions",
inventory_image = "farming_oat_seed.png",
steps = 8,
@ -38,6 +39,7 @@ farming.register_plant("farming:oat", {
})
minetest.override_item("farming:oat", {
description = S("Oats"),
groups = {food_oats = 1, flammable = 4}
})
@ -54,7 +56,7 @@ minetest.register_craft({
-- Rice
farming.register_plant("farming:rice", {
description = "Rice grains",
description = S("Rice grains"),
paramtype2 = "meshoptions",
inventory_image = "farming_rice_seed.png",
steps = 8,
@ -62,18 +64,19 @@ farming.register_plant("farming:rice", {
})
minetest.override_item("farming:rice", {
description = S("Rice"),
groups = {food_rice = 1, flammable = 4}
})
minetest.register_craftitem("farming:rice_bread", {
description = "Rice Bread",
description = S("Rice Bread"),
inventory_image = "farming_rice_bread.png",
on_use = minetest.item_eat(5),
groups = {food_rice_bread = 1, flammable = 2},
})
minetest.register_craftitem("farming:rice_flour", {
description = "Rice Flour",
description = S("Rice Flour"),
inventory_image = "farming_rice_flour.png",
groups = {food_rice_flour = 1, flammable = 1},
})

View File

@ -20,7 +20,7 @@ minetest.register_craft({
--= Salt
minetest.register_node("farming:salt", {
description = ("Salt"),
description = S("Salt"),
inventory_image = "farming_salt.png",
wield_image = "farming_salt.png",
drawtype = "plantlike",
@ -47,7 +47,7 @@ minetest.register_craft({
--= Rose Water
minetest.register_node("farming:rose_water", {
description = ("Rose Water"),
description = S("Rose Water"),
inventory_image = "farming_rose_water.png",
wield_image = "farming_rose_water.png",
drawtype = "plantlike",

View File

@ -321,7 +321,7 @@ end
-- hoe bomb item
minetest.register_craftitem("farming:hoe_bomb", {
description = S("Hoe Bomb (use or throw on grassy areas to hoe land"),
description = S("Hoe Bomb (use or throw on grassy areas to hoe land)"),
inventory_image = "farming_hoe_bomb.png",
groups = {flammable = 2, not_in_creative_inventory = 1},
on_use = function(itemstack, user, pointed_thing)
@ -350,7 +350,7 @@ farming.add_to_scythe_not_drops = function(item)
end
minetest.register_tool("farming:scythe_mithril", {
description = S("Mithril Scythe (Use to harvest and replant crops)"),
description = S("Mithril Scythe (Right-click to harvest and replant crops)"),
inventory_image = "farming_scythe_mithril.png",
sound = {breaks = "default_tool_breaks"},

View File

@ -7,7 +7,7 @@
farming = {
mod = "redo",
version = "20191202",
version = "20200426",
path = minetest.get_modpath("farming"),
select = {
type = "fixed",
@ -79,7 +79,8 @@ end
-- Growth Logic
local STAGE_LENGTH_AVG = 160.0
local STAGE_LENGTH_AVG = tonumber(
minetest.settings:get("farming_stage_length")) or 160
local STAGE_LENGTH_DEV = STAGE_LENGTH_AVG / 6

View File

@ -1,262 +0,0 @@
# German Translation for farming mod.
# Copyright (C) 2017
# This file is distributed under the same license as the farming package.
# Xanthin.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: 1.27\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-03-31 HO:MI+ZONE\n"
"PO-Revision-Date: 2016-03-31 HO:MI+ZONE\n"
"Last-Translator: Xanthin\n"
"Language-Team: \n"
"Language: German \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: barley.lua
msgid "Barley Seed"
msgstr "Gerstenkörner"
#: barley.lua
msgid "Barley"
msgstr "Gerste"
#: beanpole.lua
msgid "Green Beans"
msgstr "Grüne Bohnen"
#: beanpole.lua
msgid "Bean Pole (place on soil before planting beans)"
msgstr "Bohnenstange (vor dem Pflanzen der Bohnen auf den\nAckerboden stellen)"
#: blueberry.lua
msgid "Blueberries"
msgstr "Blaubeeren"
#: blueberry.lua
msgid "Blueberry Muffin"
msgstr "Blaubeermuffin"
#: carrot.lua
msgid "Carrot"
msgstr "Möhre"
#: carrot.lua
msgid "Golden Carrot"
msgstr "Goldene Möhre"
#: cocoa.lua
msgid "Cocoa Beans"
msgstr "Kakaobohne"
#: cocoa.lua
msgid "Cookie"
msgstr "Keks"
#: cocoa.lua
msgid "Bar of Dark Chocolate"
msgstr "Tafel Zartbitterschokolade"
#: coffee.lua
msgid "Coffee Beans"
msgstr "Kaffeebohnen"
#: coffee.lua
msgid "Drinking Cup (empty)"
msgstr "Tasse (leer)"
#: coffee.lua
msgid "Cold Cup of Coffee"
msgstr "Kalte Tasse Kaffee"
#: coffee.lua
msgid "Hot Cup of Coffee"
msgstr "Heiße Tasse Kaffee"
#: corn.lua
msgid "Corn"
msgstr "Mais"
#: corn.lua
msgid "Corn on the Cob"
msgstr "Maiskolben"
#: corn.lua
msgid "Bottle of Ethanol"
msgstr "Flasche Ethanol"
#: cotton.lua
msgid "Cotton Seed"
msgstr "Baumwollsamen"
#: cotton.lua
msgid "Cotton"
msgstr "Baumwolle"
#: cucumber.lua
msgid "Cucumber"
msgstr "Gurke"
#: donut.lua
msgid "Donut"
msgstr "Donut"
#: donut.lua
msgid "Chocolate Donut"
msgstr "Schokodonut"
#: donut.lua
msgid "Apple Donut"
msgstr "Apfeldonut"
#: grapes.lua
msgid "Grapes"
msgstr "Weintrauben"
#: grapes.lua
msgid "Trellis (place on soil before planting grapes)"
msgstr "Spalier (vor dem Pflanzen der Weintrauben auf den\nAckerboden stellen)"
#: hemp.lua
msgid "Hemp Seed"
msgstr "Hanfsamen"
#: hemp.lua
msgid "Hemp Leaf"
msgstr "Hanfblatt"
#: hemp.lua
msgid "Bottle of Hemp Oil"
msgstr "Flasche mit Hanföl"
#: hemp.lua
msgid "Hemp Fibre"
msgstr "Hanffaser"
#: hemp.lua
msgid "Hemp Rope"
msgstr "Hanfseil"
#: hoes.lua
msgid "Hoe"
msgstr "Hacke"
#: hoes.lua
msgid "Wooden Hoe"
msgstr "Holzhacke"
#: hoes.lua
msgid "Stone Hoe"
msgstr "Steinhacke"
#: hoes.lua
msgid "Steel Hoe"
msgstr "Stahlhacke"
#: hoes.lua
msgid "Bronze Hoe"
msgstr "Bronzehacke"
#: hoes.lua
msgid "Mese Hoe"
msgstr "Mesehacke"
#: hoes.lua
msgid "Diamond Hoe"
msgstr "Diamanthacke"
#: init.lua
msgid "Seed"
msgstr "Saatgut"
#: melon.lua
msgid "Melon Slice"
msgstr "Melonenscheibe"
#: melon.lua
msgid "Melon"
msgstr "Melone"
#: potato.lua
msgid "Potato"
msgstr "Kartoffel"
#: potato.lua
msgid "Baked Potato"
msgstr "Ofenkartoffel"
#: pumpkin.lua
msgid "Pumpkin"
msgstr "Kürbis"
#: pumpkin.lua
msgid "Pumpkin Slice"
msgstr "Kürbisscheibe"
#: pumpkin.lua
msgid "Jack 'O Lantern (punch to turn on and off)"
msgstr "Kürbislaterne (Punch zum Ein- und Ausschalten)"
#: pumpkin.lua
msgid "Pumpkin Bread"
msgstr "Kürbisbrot"
#: pumpkin.lua
msgid "Pumpkin Dough"
msgstr "Kürbisteig"
#: raspberry.lua
msgid "Raspberries"
msgstr "Himbeeren"
#: raspberry.lua
msgid "Raspberry Smoothie"
msgstr "Himbeersmoothie"
#: rhubarb.lua
msgid "Rhubarb"
msgstr "Rhabarber"
#: rhubarb.lua
msgid "Rhubarb Pie"
msgstr "Rhabarberkuchen"
#: soil.lua
msgid "Soil"
msgstr "Ackerboden"
#: soil.lua
msgid "Wet Soil"
msgstr "Bewässerter Ackerboden"
#: sugar.lua
msgid "Sugar"
msgstr "Zucker"
#: tomato.lua
msgid "Tomato"
msgstr "Tomate"
#: wheat.lua
msgid "Wheat Seed"
msgstr "Weizenkörner"
#: wheat.lua
msgid "Wheat"
msgstr "Weizen"
#: wheat.lua
msgid "Straw"
msgstr "Stroh"
#: wheat.lua
msgid "Flour"
msgstr "Mehl"
#: wheat.lua
msgid "Bread"
msgstr "Brot"

195
farming/locale/de.txt Normal file
View File

@ -0,0 +1,195 @@
# German translation of the farming mod by TenPlus1
# textdomain: farming
# author: Xanthin
# author: TheDarkTiger
# last update: 2020/Apr/26
###### folder . ######
### init.lua ###
Seed=Saatgut
### compatibility.lua ###
Banana=
Banana Leaves=
Orange=
Strawberry=
### food.lua ###
Sugar=Zucker
Salt=
Rose Water=
Turkish Delight=
Garlic Bread=
Donut=Donut
Chocolate Donut=Schokodonut
Apple Donut=Apfeldonut
Porridge=
Jaffa Cake=
### hoes.lua ###
Hoe=Hacke
Wooden Hoe=Holzhacke
Stone Hoe=Steinhacke
Steel Hoe=Stahlhacke
Bronze Hoe=Bronzehacke
Mese Hoe=Mesehacke
Diamond Hoe=Diamanthacke
# Surcharge du mod [Toolranks] à faire #
Hoe Bomb (use or throw on grassy areas to hoe land)=
Mithril Scythe (Right-click to harvest and replant crops)=
# Surcharge du mod [Toolranks] à faire #
### soil.lua ###
Soil=Ackerboden
Wet Soil=Bewässerter Ackerboden
### utensils.lua ###
Wooden Bowl=
Saucepan=
Cooking Pot=
Baking Tray=
Skillet=
Mortar and Pestle=
Cutting Board=
Juicer=
Glass Mixing Bowl=
###### folder ./crops ######
### barley.lua ###
Barley Seed=Gerstenkörner
Barley=Gerste
### beans.lua ###
Green Beans=Grüne Bohnen
Bean Pole (place on soil before planting beans)=Bohnenstange (vor dem Pflanzen der Bohnen auf den\nAckerboden stellen)
### beetroot.lua ###
Beetroot=
Beetroot Soup=
### blueberry.lua ###
Blueberries=Blaubeeren
Blueberry Muffin=Blaubeermuffin
Blueberry Pie=
### carrot.lua ##
Carrot=Möhre
Carrot Juice=
Golden Carrot=Goldene Möhre
### chili.lua ###
Chili Pepper=
Bowl of Chili=
### cocoa.lua ###
Cocoa Beans=Kakaobohne
Cookie=Keks
Bar of Dark Chocolate=Tafel Zartbitterschokolade
Chocolate Block=
### coffee.lua ###
Coffee Beans=Kaffeebohnen
Cup of Coffee=Tasse Kaffee
### corn.lua ###
Corn=Mais
Corn on the Cob=Maiskolben
Cornstarch=
Bottle of Ethanol=Flasche Ethanol
### cotton.lua ###
Cotton Seed=Baumwollsamen
Cotton=Baumwolle
String=
### cucumber.lua ###
Cucumber=Gurke
### garlic.lua ###
Garlic clove=
Garlic=
Garlic Braid=
### grapes.lua ###
Grapes=Weintrauben
Trellis (place on soil before planting grapes)=Spalier (vor dem Pflanzen der Weintrauben auf den\nAckerboden stellen)
### hemp.lua ###
Hemp Seed=Hanfsamen
Hemp Leaf=Hanfblatt
Bottle of Hemp Oil=Flasche mit Hanföl
Hemp Fibre=Hanffaser
Hemp Block=
Hemp Rope=Hanfseil
### melon.lua ###
Melon Slice=Melonenscheibe
Melon=Melone
### onion.lua ###
Onion=
### peas.lua ###
Pea Pod=
Peas=
Pea Soup=
### pepper.lua ###
Peppercorn=
Pepper=
Ground Pepper=
### pinapple.lua ###
Pineapple Top=
Pineapple=
Pineapple Ring=
Pineapple Juice=
### potato.lua ###
Potato=Kartoffel
Baked Potato=Ofenkartoffel
Cucumber and Potato Salad=
### pumpkin.lua ###
Pumpkin Slice=Kürbisscheibe
Jack 'O Lantern (punch to turn on and off)=Kürbislaterne (Punch zum Ein- und Ausschalten)
Scarecrow Bottom=
Pumpkin Bread=Kürbisbrot
Pumpkin Dough=Kürbisteig
Pumpkin=Kürbis
### raspberry.lua ###
Raspberries=Himbeeren
Raspberry Smoothie=Himbeersmoothie
### rhubarb.lua ###
Rhubarb=Rhabarber
Rhubarb Pie=Rhabarberkuchen
### ryeoatrice.lua ###
Rye=
Rye seed=
Oat=
Oat seed=
Rice=
Rice grains=
Rice Bread=
Rice Flour=
Multigrain Flour=
Multigrain Bread=
### tomato.lua ###
Tomato=Tomate
### wheat.lua ###
Wheat Seed=Weizenkörner
Wheat=Weizen
Straw=Stroh
Flour=Mehl
Bread=Brot
Sliced Bread=
Toast=
Toast Sandwich=

View File

@ -1,259 +0,0 @@
# 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: 2018-03-27 20:21+0200\n"
"PO-Revision-Date: 2018-03-27 22:16+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.7.1\n"
"Last-Translator: \n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"Language: fr\n"
#: barley.lua
msgid "Barley Seed"
msgstr "Graine d'orge"
#: barley.lua
msgid "Barley"
msgstr "Orge"
#: beanpole.lua
msgid "Green Beans"
msgstr "Haricots verts"
#: beanpole.lua
msgid "Bean Pole (place on soil before planting beans)"
msgstr "Tuteur pour haricots (placer sur le sol avant de planter des haricots)"
#: blueberry.lua
msgid "Blueberries"
msgstr "Myrtilles"
#: blueberry.lua
msgid "Blueberry Muffin"
msgstr "Gâteau aux myrtilles"
#: carrot.lua
msgid "Carrot"
msgstr "Carotte"
#: carrot.lua
msgid "Golden Carrot"
msgstr "Carotte dorée"
#: cocoa.lua
msgid "Cocoa Beans"
msgstr "Fèves de chocolat"
#: cocoa.lua
msgid "Cookie"
msgstr "Biscuit"
#: cocoa.lua
msgid "Bar of Dark Chocolate"
msgstr "Barre de chocolat noir"
#: coffee.lua
msgid "Coffee Beans"
msgstr "Grains de café"
#: coffee.lua
msgid "Drinking Cup (empty)"
msgstr "Tasse (vide)"
#: coffee.lua
msgid "Cold Cup of Coffee"
msgstr "Tasse de café froid"
#: coffee.lua
msgid "Hot Cup of Coffee"
msgstr "Tasse de café chaud"
#: corn.lua
msgid "Corn"
msgstr "Maïs"
#: corn.lua
msgid "Corn on the Cob"
msgstr "Épi de maïs"
#: corn.lua
msgid "Bottle of Ethanol"
msgstr "Bouteille de'éthanol"
#: cotton.lua
msgid "Cotton Seed"
msgstr "Graines de coton"
#: cotton.lua
msgid "Cotton"
msgstr "Coton"
#: cucumber.lua
msgid "Cucumber"
msgstr "Concombre"
#: donut.lua
msgid "Donut"
msgstr "Beignet"
#: donut.lua
msgid "Chocolate Donut"
msgstr "Beignet au chocolat"
#: donut.lua
msgid "Apple Donut"
msgstr "Beignet aux pommes"
#: grapes.lua
msgid "Grapes"
msgstr "Raisins"
#: grapes.lua
msgid "Trellis (place on soil before planting grapes)"
msgstr "Treillis (placer sur le sol avant de planter les raisins)"
#: hemp.lua
msgid "Hemp Seed"
msgstr "Graines de chanvre"
#: hemp.lua
msgid "Hemp Leaf"
msgstr "Feuille de chanvre"
#: hemp.lua
msgid "Bottle of Hemp Oil"
msgstr "Bouteille d'huile de chanvre"
#: hemp.lua
msgid "Hemp Fibre"
msgstr "Fibre de chanvre"
#: hemp.lua
msgid "Hemp Rope"
msgstr "Corde de chanvre"
#: hoes.lua
msgid "Wooden Hoe"
msgstr "Houe en bois"
#: hoes.lua
msgid "Stone Hoe"
msgstr "Houe en pierre"
#: hoes.lua
msgid "Steel Hoe"
msgstr "Houe en acier"
#: hoes.lua
msgid "Bronze Hoe"
msgstr "Houe en bronze"
#: hoes.lua
msgid "Mese Hoe"
msgstr "Houe en mese"
#: hoes.lua
msgid "Diamond Hoe"
msgstr "Houe en diamant"
#: init.lua
msgid "Seed"
msgstr "Graine"
#: melon.lua
msgid "Melon Slice"
msgstr "Tranche de melon"
#: melon.lua
msgid "Melon"
msgstr "Melon"
#: potato.lua
msgid "Potato"
msgstr "Pomme de terre"
#: potato.lua
msgid "Baked Potato"
msgstr "Pomme de terre cuite"
#: pumpkin.lua
msgid "Pumpkin"
msgstr "Citrouille"
#: pumpkin.lua
msgid "Pumpkin Slice"
msgstr "Tranche de citrouille"
#: pumpkin.lua
msgid "Jack 'O Lantern (punch to turn on and off)"
msgstr "Jack 'O Lantern (tapé pour allumer et éteindre)"
#: pumpkin.lua
msgid "Pumpkin Bread"
msgstr "Pain à la citrouille"
#: pumpkin.lua
msgid "Pumpkin Dough"
msgstr "Pâte à la citrouille"
#: raspberry.lua
msgid "Raspberries"
msgstr "Framboises"
#: raspberry.lua
msgid "Raspberry Smoothie"
msgstr "Smoothie aux framboises"
#: rhubarb.lua
msgid "Rhubarb"
msgstr "Rhubarbe"
#: rhubarb.lua
msgid "Rhubarb Pie"
msgstr "Tarte à la rhubarbe"
#: soil.lua
msgid "Soil"
msgstr "Sol"
#: soil.lua
msgid "Wet Soil"
msgstr "Sol humide"
#: sugar.lua
msgid "Sugar"
msgstr "Sucre"
#: tomato.lua
msgid "Tomato"
msgstr "Tomate"
#: wheat.lua
msgid "Wheat Seed"
msgstr "Graine de blé"
#: wheat.lua
msgid "Wheat"
msgstr "Blé"
#: wheat.lua
msgid "Straw"
msgstr "Paille"
#: wheat.lua
msgid "Flour"
msgstr "Farine"
#: wheat.lua
msgid "Bread"
msgstr "Pain"

195
farming/locale/fr.txt Normal file
View File

@ -0,0 +1,195 @@
# Traduction Française du mod farming par TenPlus1
# textdomain: farming
# author: Papaou30
# author: TheDarkTiger
# last update: 2020/Apr/26
###### folder . ######
### init.lua ###
Seed=Graine
### compatibility.lua ###
Banana=Banane
Banana Leaves=Feuilles de Banane
Orange=Orange
Strawberry=Fraise
### food.lua ###
Sugar=Sucre
Salt=Sel
Rose Water=Eau de Rose
Turkish Delight=Douceur Turque
Garlic Bread=Pain à l'Ail
Donut=Beignet
Chocolate Donut=Beignet au chocolat
Apple Donut=Beignet aux pommes
Porridge=Gruau de céréales
Jaffa Cake=Petit gâteau à l'orange "Jaffa"
### hoes.lua ###
Hoe=Binette
Wooden Hoe=Binette en Bois
Stone Hoe=Binette en Pierre
Steel Hoe=Binette en Acier
Bronze Hoe=Binette en Bronze
Mese Hoe=Binette en Mese
Diamond Hoe=Binette en Diamant
# Surcharge du mod [Toolranks] à faire #
Hoe Bomb (use or throw on grassy areas to hoe land)=Bombe à binnage (Actionner ou lancer sur une zone herbeuse pour la binner)
Mithril Scythe (Right-click to harvest and replant crops)=Faux en Mithril (Récolte et replante des graines)
# Surcharge du mod [Toolranks] à faire #
### soil.lua ###
Soil=Sol binné
Wet Soil=Sol binné humide
### utensils.lua ###
Wooden Bowl=Bol en Bois
Saucepan=Casserole
Cooking Pot=Fait-tout
Baking Tray=Lèche-frite
Skillet=Poêle
Mortar and Pestle=Mortier et Pilon
Cutting Board=Planche à découper
Juicer=Presse-agrumes
Glass Mixing Bowl=Terrine en Verre
###### folder ./crops ######
### barley.lua ###
Barley Seed=Graine d'Orge
Barley=Orge
### beans.lua ###
Green Beans=Haricots verts
Bean Pole (place on soil before planting beans)=Tuteur pour haricots (placer sur le sol avant de planter des haricots)
### beetroot.lua ###
Beetroot=Betrave
Beetroot Soup=Soupe de Betrave
### blueberry.lua ###
Blueberries=Myrtilles
Blueberry Muffin=Muffin aux Myrtilles
Blueberry Pie=Tarte aux Myrtilles
### carrot.lua ##
Carrot=Carotte
Carrot Juice=Jus de Carotte
Golden Carrot=Carotte dorée
### chili.lua ###
Chili Pepper=Piment Rouge
Bowl of Chili=Assiette de Chilli
### cocoa.lua ###
Cocoa Beans=Fèves de Cacao
Cookie=Cookie
Bar of Dark Chocolate=Tablette de Chocolat noir
Chocolate Block=Block de Chocolat
### coffee.lua ###
Coffee Beans=Grains de café
Cup of Coffee=Tasse de café
### corn.lua ###
Corn=Maïs
Corn on the Cob=Cobette (Maïs cuit)
Cornstarch=Fécule de Maïs
Bottle of Ethanol=Bouteille d'Éthanol
### cotton.lua ###
Cotton Seed=Graines de Coton
Cotton=Coton
String=Ficelle
### cucumber.lua ###
Cucumber=Concombre
### garlic.lua ###
Garlic clove=Gousse d'Ail
Garlic=Tête d'Ail
Garlic Braid=Ail tressé
### grapes.lua ###
Grapes=Raisins
Trellis (place on soil before planting grapes)=Treillis (placer sur le sol avant de planter la vigne)
### hemp.lua ###
Hemp Seed=Graines de Chanvre
Hemp Leaf=Feuille de Chanvre
Bottle of Hemp Oil=Bouteille d'huile de Chanvre
Hemp Fibre=Fibre de Chanvre
Hemp Block=Bloc de Chanvre
Hemp Rope=Corde de Chanvre
### melon.lua ###
Melon Slice=Tranche de Melon
Melon=Melon
### onion.lua ###
Onion=Oignon
### peas.lua ###
Pea Pod=Cosse de Petit-poids
Peas=Petit-poids
Pea Soup=Soupe de Petit-poids
### pepper.lua ###
Peppercorn=Grain de Poivre
Pepper=Poivron
Ground Pepper=Poivre moulu
### pinapple.lua ###
Pineapple Top=Pousse d'Ananas
Pineapple=Ananas
Pineapple Ring=Tranche d'Ananas
Pineapple Juice=Jus d'Ananas
### potato.lua ###
Potato=Pomme de terre
Baked Potato=Pomme de terre cuite
Cucumber and Potato Salad=Salade de Pomme de terre au Concombre
### pumpkin.lua ###
Pumpkin Slice=Tranche de Citrouille
Jack 'O Lantern (punch to turn on and off)=Jack 'O Lantern (Frapper pour allumer et éteindre)
Scarecrow Bottom=Base d'Epouventail
Pumpkin Bread=Pain à la Citrouille
Pumpkin Dough=Pâton de pain à la Citrouille
Pumpkin=Citrouille
### raspberry.lua ###
Raspberries=Framboises
Raspberry Smoothie=Smoothie aux Framboises
### rhubarb.lua ###
Rhubarb=Rhubarbe
Rhubarb Pie=Tarte à la rhubarbe
### ryeoatrice.lua ###
Rye=Seigle
Rye seed=Grains de Seigle
Oat=Orge
Oat seed=Grains d'Orge
Rice=Riz
Rice grains=Grain de Riz
Rice Bread=Pain de Riz
Rice Flour=Farine de Riz
Multigrain Flour=Farine Multi-céréales
Multigrain Bread=Pain aux Céréales
### tomato.lua ###
Tomato=Tomate
### wheat.lua ###
Wheat Seed=Grain de blé
Wheat=Blé
Straw=Paille
Flour=Farine
Bread=Pain
Sliced Bread=Tranche de Pain
Toast=Pain Grillé
Toast Sandwich=Sandwich au Pain

View File

@ -1,258 +0,0 @@
# Portuguese Translation for farming mod.
# Copyright (C) 2017
# This file is distributed under the same license as the farming package.
# BrunoMine <borgesdossantosbruno@gmail.com>, 2017.
#
msgid ""
msgstr ""
"Project-Id-Version: 1.27\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-08-16 17:38-0300\n"
"PO-Revision-Date: 2017-08-17 17:01-0300\n"
"Last-Translator: BrunoMine <borgesdossantosbruno@gmail.com>\n"
"Language-Team: \n"
"Language: Portuguese\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Gtranslator 2.91.7\n"
#: barley.lua
msgid "Barley Seed"
msgstr "Sementes de Cevada"
#: barley.lua
msgid "Barley"
msgstr "Cevada"
#: beanpole.lua
msgid "Green Beans"
msgstr "Feijoes Verdes"
#: beanpole.lua
msgid "Bean Pole (place on soil before planting beans)"
msgstr "Apoio de feijao (coloque no solo antes de plantar feijao)"
#: blueberry.lua
msgid "Blueberries"
msgstr "Mirtilos"
#: blueberry.lua
msgid "Blueberry Muffin"
msgstr "Muffin de Mirtilos"
#: carrot.lua
msgid "Carrot"
msgstr "Cenoura"
#: carrot.lua
msgid "Golden Carrot"
msgstr "Cenoura Dourada"
#: cocoa.lua
msgid "Cocoa Beans"
msgstr "Amendoas de Cacau"
#: cocoa.lua
msgid "Cookie"
msgstr "Cookie"
#: cocoa.lua
msgid "Bar of Dark Chocolate"
msgstr "Barra de Chocolate Preto"
#: coffee.lua
msgid "Coffee Beans"
msgstr "Grao de Cafe"
#: coffee.lua
msgid "Drinking Cup (empty)"
msgstr "Xicara (vazia)"
#: coffee.lua
msgid "Cold Cup of Coffee"
msgstr "Xicara de Cafe Frio"
#: coffee.lua
msgid "Hot Cup of Coffee"
msgstr "Xicara de Cafe Quente"
#: corn.lua
msgid "Corn"
msgstr "Milho"
#: corn.lua
msgid "Corn on the Cob"
msgstr "Espiga de Milho"
#: corn.lua
msgid "Bottle of Ethanol"
msgstr "Garrafa de Etanol"
#: cotton.lua
msgid "Cotton Seed"
msgstr "Sementes de Algodao"
#: cotton.lua
msgid "Cotton"
msgstr "Algodao"
#: cucumber.lua
msgid "Cucumber"
msgstr "Pepino"
#: donut.lua
msgid "Donut"
msgstr "Donut"
#: donut.lua
msgid "Chocolate Donut"
msgstr "Donut de Chocolate"
#: donut.lua
msgid "Apple Donut"
msgstr "Donut de Maça"
#: grapes.lua
msgid "Grapes"
msgstr "Uvas"
#: grapes.lua
msgid "Trellis (place on soil before planting grapes)"
msgstr "Grade de Ripas (colocar no solo antes de plantar uvas)"
#: hemp.lua
msgid "Hemp Seed"
msgstr "Sementes de Canhamo"
#: hemp.lua
msgid "Hemp Leaf"
msgstr "Folha de Canhamo"
#: hemp.lua
msgid "Bottle of Hemp Oil"
msgstr "Garrafa de Oleo de Canhamo"
#: hemp.lua
msgid "Hemp Fibre"
msgstr "Fibra de Canhamo"
#: hemp.lua
msgid "Hemp Rope"
msgstr "Corda de Canhamo"
#: hoes.lua
msgid "Wooden Hoe"
msgstr "Enxada de Madeira"
#: hoes.lua
msgid "Stone Hoe"
msgstr "Enxada de Pedra"
#: hoes.lua
msgid "Steel Hoe"
msgstr "Enxada de Aço"
#: hoes.lua
msgid "Bronze Hoe"
msgstr "Enxada de Bronze"
#: hoes.lua
msgid "Mese Hoe"
msgstr "Enxada de Mese"
#: hoes.lua
msgid "Diamond Hoe"
msgstr "Enxada de Diamante"
#: init.lua
msgid "Seed"
msgstr "Sementes"
#: melon.lua
msgid "Melon Slice"
msgstr "Sementes de Melancia"
#: melon.lua
msgid "Melon"
msgstr "Melancia"
#: potato.lua
msgid "Potato"
msgstr "Batata"
#: potato.lua
msgid "Baked Potato"
msgstr "Batata Cozida"
#: pumpkin.lua
msgid "Pumpkin"
msgstr "Abobora"
#: pumpkin.lua
msgid "Pumpkin Slice"
msgstr "Pedaço de Abobora"
#: pumpkin.lua
msgid "Jack 'O Lantern (punch to turn on and off)"
msgstr "Jack 'O Lantern (Socos para ligar e desligar)"
#: pumpkin.lua
msgid "Pumpkin Bread"
msgstr "Pao de Abobora"
#: pumpkin.lua
msgid "Pumpkin Dough"
msgstr "Massa de Abobora"
#: raspberry.lua
msgid "Raspberries"
msgstr "Framboesa"
#: raspberry.lua
msgid "Raspberry Smoothie"
msgstr "Batida de Framboesa"
#: rhubarb.lua
msgid "Rhubarb"
msgstr "Ruibarbo"
#: rhubarb.lua
msgid "Rhubarb Pie"
msgstr "Torta de Ruibarbo"
#: soil.lua
msgid "Soil"
msgstr "Solo"
#: soil.lua
msgid "Wet Soil"
msgstr "Solo Seco"
#: sugar.lua
msgid "Sugar"
msgstr "Açucar"
#: tomato.lua
msgid "Tomato"
msgstr "Tomate"
#: wheat.lua
msgid "Wheat Seed"
msgstr "Sementes de Trigo"
#: wheat.lua
msgid "Wheat"
msgstr "Trigo"
#: wheat.lua
msgid "Straw"
msgstr "Palha"
#: wheat.lua
msgid "Flour"
msgstr "Farinha"
#: wheat.lua
msgid "Bread"
msgstr "Pao"

195
farming/locale/pt.txt Normal file
View File

@ -0,0 +1,195 @@
# Portuguese translation of the farming mod by TenPlus1
# textdomain: farming
# author: BrunoMine <borgesdossantosbruno@gmail.com>
# author: TheDarkTiger
# last update: 2020/Apr/26
###### folder . ######
### init.lua ###
Seed=Sementes
### compatibility.lua ###
Banana=
Banana Leaves=
Orange=
Strawberry=
### food.lua ###
Sugar=Açucar
Salt=
Rose Water=
Turkish Delight=
Garlic Bread=
Donut=Donut
Chocolate Donut=Donut de Chocolate
Apple Donut=Donut de Maça
Porridge=
Jaffa Cake=
### hoes.lua ###
Hoe=Enxada
Wooden Hoe=Enxada de Madeira
Stone Hoe=Enxada de Pedra
Steel Hoe=Enxada de Aço
Bronze Hoe=Enxada de Bronze
Mese Hoe=Enxada de Mese
Diamond Hoe=Enxada de Diamante
# Surcharge du mod [Toolranks] à faire #
Hoe Bomb (use or throw on grassy areas to hoe land)=
Mithril Scythe (Right-click to harvest and replant crops)=
# Surcharge du mod [Toolranks] à faire #
### soil.lua ###
Soil=Solo
Wet Soil=Solo Seco
### utensils.lua ###
Wooden Bowl=
Saucepan=
Cooking Pot=
Baking Tray=
Skillet=
Mortar and Pestle=
Cutting Board=
Juicer=
Glass Mixing Bowl=
###### folder ./crops ######
### barley.lua ###
Barley Seed=Sementes de Cevada
Barley=Cevada
### beans.lua ###
Green Beans=Feijoes Verdes
Bean Pole (place on soil before planting beans)=Apoio de feijao (coloque no solo antes de plantar feijao)
### beetroot.lua ###
Beetroot=
Beetroot Soup=
### blueberry.lua ###
Blueberries=Mirtilos
Blueberry Muffin=Muffin de Mirtilos
Blueberry Pie=
### carrot.lua ##
Carrot=Cenoura
Carrot Juice=
Golden Carrot=Cenoura Dourada
### chili.lua ###
Chili Pepper=
Bowl of Chili=
### cocoa.lua ###
Cocoa Beans=Amendoas de Cacau
Cookie=Cookie
Bar of Dark Chocolate=Barra de Chocolate Preto
Chocolate Block=
### coffee.lua ###
Coffee Beans=Grao de Cafe
Cup of Coffee=Xicara de Cafe
### corn.lua ###
Corn=Milho
Corn on the Cob=Espiga de Milho
Cornstarch=
Bottle of Ethanol=Garrafa de Etanol
### cotton.lua ###
Cotton Seed=Sementes de Algodao
Cotton=Algodao
String=
### cucumber.lua ###
Cucumber=Pepino
### garlic.lua ###
Garlic clove=
Garlic=
Garlic Braid=
### grapes.lua ###
Grapes=Uvas
Trellis (place on soil before planting grapes)=Grade de Ripas (colocar no solo antes de plantar uvas)
### hemp.lua ###
Hemp Seed=Sementes de Canhamo
Hemp Leaf=Folha de Canhamo
Bottle of Hemp Oil=Garrafa de Oleo de Canhamo
Hemp Fibre=Fibra de Canhamo
Hemp Block=
Hemp Rope=Corda de Canhamo
### melon.lua ###
Melon Slice=Sementes de Melancia
Melon=Melancia
### onion.lua ###
Onion=
### peas.lua ###
Pea Pod=
Peas=
Pea Soup=
### pepper.lua ###
Peppercorn=
Pepper=
Ground Pepper=
### pinapple.lua ###
Pineapple Top=
Pineapple=
Pineapple Ring=
Pineapple Juice=
### potato.lua ###
Potato=Batata
Baked Potato=Batata Cozida
Cucumber and Potato Salad=
### pumpkin.lua ###
Pumpkin Slice=Pedaço de Abobora
Jack 'O Lantern (punch to turn on and off)=Jack 'O Lantern (Socos para ligar e desligar)
Scarecrow Bottom=
Pumpkin Bread=Pao de Abobora
Pumpkin Dough=Massa de Abobora
Pumpkin=Abobora
### raspberry.lua ###
Raspberries=Framboesa
Raspberry Smoothie=Batida de Framboesa
### rhubarb.lua ###
Rhubarb=Ruibarbo
Rhubarb Pie=Torta de Ruibarbo
### ryeoatrice.lua ###
Rye=
Rye seed=
Oat=
Oat seed=
Rice=
Rice grains=
Rice Bread=
Rice Flour=
Multigrain Flour=
Multigrain Bread=
### tomato.lua ###
Tomato=Tomate
### wheat.lua ###
Wheat Seed=Sementes de Trigo
Wheat=Trigo
Straw=Palha
Flour=Farinha
Bread=Pao
Sliced Bread=
Toast=
Toast Sandwich=

View File

@ -1,262 +0,0 @@
# Russian translation for farming mod.
# Copyright (C) 2018
# This file is distributed under the same license as the farming package.
# codexp <codexp@gmx.net>, 2018.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: 1.27\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 01:25+0100\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: Russian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: barley.lua
msgid "Barley Seed"
msgstr "семена ячменя"
#: barley.lua
msgid "Barley"
msgstr "ячмень"
#: beanpole.lua
msgid "Green Beans"
msgstr "зеленая фасоль"
#: beanpole.lua
msgid "Bean Pole (place on soil before planting beans)"
msgstr "жердь для бобовых (установите на почву перед посадкой бобовых)"
#: blueberry.lua
msgid "Blueberries"
msgstr "голубика"
#: blueberry.lua
msgid "Blueberry Muffin"
msgstr "кекс из голубики"
#: carrot.lua
msgid "Carrot"
msgstr "морковь"
#: carrot.lua
msgid "Golden Carrot"
msgstr "золотая морковь"
#: cocoa.lua
msgid "Cocoa Beans"
msgstr "бобы какао"
#: cocoa.lua
msgid "Cookie"
msgstr "печенье"
#: cocoa.lua
msgid "Bar of Dark Chocolate"
msgstr "плитка темного шоколада"
#: coffee.lua
msgid "Coffee Beans"
msgstr "кофе в зернах"
#: coffee.lua
msgid "Drinking Cup (empty)"
msgstr "чашка (пустая)"
#: coffee.lua
msgid "Cold Cup of Coffee"
msgstr "холодная чашка кофе"
#: coffee.lua
msgid "Hot Cup of Coffee"
msgstr "горячая чашка кофе"
#: corn.lua
msgid "Corn"
msgstr "кукуруза"
#: corn.lua
msgid "Corn on the Cob"
msgstr "початок кукурузы"
#: corn.lua
msgid "Bottle of Ethanol"
msgstr "бутылка этилового спирта"
#: cotton.lua
msgid "Cotton Seed"
msgstr "семена хлопка"
#: cotton.lua
msgid "Cotton"
msgstr "хлопок"
#: cucumber.lua
msgid "Cucumber"
msgstr "огурец"
#: donut.lua
msgid "Donut"
msgstr "пончик"
#: donut.lua
msgid "Chocolate Donut"
msgstr "шоколадный пончик"
#: donut.lua
msgid "Apple Donut"
msgstr "яблочный пончик"
#: grapes.lua
msgid "Grapes"
msgstr "виноград"
#: grapes.lua
msgid "Trellis (place on soil before planting grapes)"
msgstr "решетка (поставьте на почву для посадки винограда)"
#: hemp.lua
msgid "Hemp Seed"
msgstr "семена конопли"
#: hemp.lua
msgid "Hemp Leaf"
msgstr "листья конопли"
#: hemp.lua
msgid "Bottle of Hemp Oil"
msgstr "бутылка конопляного масла"
#: hemp.lua
msgid "Hemp Fibre"
msgstr ""
#: hemp.lua
msgid "Hemp Rope"
msgstr "Пенька"
#: hoes.lua
msgid "Hoe"
msgstr "мотыга"
#: hoes.lua
msgid "Wooden Hoe"
msgstr "деревянная мотыга"
#: hoes.lua
msgid "Stone Hoe"
msgstr "каменная мотыга"
#: hoes.lua
msgid "Steel Hoe"
msgstr "стальная мотыга"
#: hoes.lua
msgid "Bronze Hoe"
msgstr "бронзовая мотыга"
#: hoes.lua
msgid "Mese Hoe"
msgstr "магическая мотыга"
#: hoes.lua
msgid "Diamond Hoe"
msgstr "алмазная мотыга"
#: init.lua
msgid "Seed"
msgstr "семена"
#: melon.lua
msgid "Melon Slice"
msgstr "ломтик арбуза"
#: melon.lua
msgid "Melon"
msgstr "арбуз"
#: potato.lua
msgid "Potato"
msgstr "картофель"
#: potato.lua
msgid "Baked Potato"
msgstr "запеченный картофель"
#: pumpkin.lua
msgid "Pumpkin"
msgstr "тыква"
#: pumpkin.lua
msgid "Pumpkin Slice"
msgstr "ломтик тыквы"
#: pumpkin.lua
msgid "Jack 'O Lantern (punch to turn on and off)"
msgstr "светильник джека (удар для включения и отключения)"
#: pumpkin.lua
msgid "Pumpkin Bread"
msgstr "тыквенный хлеб"
#: pumpkin.lua
msgid "Pumpkin Dough"
msgstr "тыквенное тесто"
#: raspberry.lua
msgid "Raspberries"
msgstr "малина"
#: raspberry.lua
msgid "Raspberry Smoothie"
msgstr "малиновый коктейль"
#: rhubarb.lua
msgid "Rhubarb"
msgstr "ревень"
#: rhubarb.lua
msgid "Rhubarb Pie"
msgstr "пирог из ревеня"
#: soil.lua
msgid "Soil"
msgstr "земля"
#: soil.lua
msgid "Wet Soil"
msgstr "мокрая земля"
#: sugar.lua
msgid "Sugar"
msgstr "сахар"
#: tomato.lua
msgid "Tomato"
msgstr "помидор"
#: wheat.lua
msgid "Wheat Seed"
msgstr ""
#: wheat.lua
msgid "Wheat"
msgstr "семена пшеницы"
#: wheat.lua
msgid "Straw"
msgstr "солома"
#: wheat.lua
msgid "Flour"
msgstr "мука"
#: wheat.lua
msgid "Bread"
msgstr "хлеб"

195
farming/locale/ru.txt Normal file
View File

@ -0,0 +1,195 @@
# Russian translation of the farming mod by TenPlus1
# textdomain: farming
# author: codexp <codexp@gmx.net>
# author: TheDarkTiger
# last update: 2020/Apr/26
###### folder . ######
### init.lua ###
Seed=семена
### compatibility.lua ###
Banana=
Banana Leaves=
Orange=
Strawberry=
### food.lua ###
Sugar=сахар
Salt=
Rose Water=
Turkish Delight=
Garlic Bread=
Donut=пончик
Chocolate Donut=шоколадный пончик
Apple Donut=яблочный пончик
Porridge=
Jaffa Cake=
### hoes.lua ###
Hoe=мотыга
Wooden Hoe=деревянная мотыга
Stone Hoe=каменная мотыга
Steel Hoe=стальная мотыга
Bronze Hoe=бронзовая мотыга
Mese Hoe=магическая мотыга
Diamond Hoe=алмазная мотыга
# Surcharge du mod [Toolranks] à faire #
Hoe Bomb (use or throw on grassy areas to hoe land)=
Mithril Scythe (Right-click to harvest and replant crops)=
# Surcharge du mod [Toolranks] à faire #
### soil.lua ###
Soil=земля
Wet Soil=мокрая земля
### utensils.lua ###
Wooden Bowl=
Saucepan=
Cooking Pot=
Baking Tray=
Skillet=
Mortar and Pestle=
Cutting Board=
Juicer=
Glass Mixing Bowl=
###### folder ./crops ######
### barley.lua ###
Barley Seed=семена ячменя
Barley=ячмень
### beans.lua ###
Green Beans=зеленая фасоль
Bean Pole (place on soil before planting beans)=жердь для бобовых (установите на почву перед посадкой бобовых)
### beetroot.lua ###
Beetroot=
Beetroot Soup=
### blueberry.lua ###
Blueberries=голубика
Blueberry Muffin=кекс из голубики
Blueberry Pie=
### carrot.lua ##
Carrot=морковь
Carrot Juice=
Golden Carrot=золотая морковь
### chili.lua ###
Chili Pepper=
Bowl of Chili=
### cocoa.lua ###
Cocoa Beans=бобы какао
Cookie=печенье
Bar of Dark Chocolate=плитка темного шоколада
Chocolate Block=
### coffee.lua ###
Coffee Beans=кофе в зернах
Cup of Coffee=чашка кофе
### corn.lua ###
Corn=кукуруза
Corn on the Cob=початок кукурузы
Cornstarch=
Bottle of Ethanol=бутылка этилового спирта
### cotton.lua ###
Cotton Seed=семена хлопка
Cotton=хлопок
String=
### cucumber.lua ###
Cucumber=огурец
### garlic.lua ###
Garlic clove=
Garlic=
Garlic Braid=
### grapes.lua ###
Grapes=виноград
Trellis (place on soil before planting grapes)=решетка (поставьте на почву для посадки винограда)
### hemp.lua ###
Hemp Seed=семена конопли
Hemp Leaf=листья конопли
Bottle of Hemp Oil=бутылка конопляного масла
Hemp Fibre=
Hemp Block=
Hemp Rope=Пенька
### melon.lua ###
Melon Slice=ломтик арбуза
Melon=арбуз
### onion.lua ###
Onion=
### peas.lua ###
Pea Pod=
Peas=
Pea Soup=
### pepper.lua ###
Peppercorn=
Pepper=
Ground Pepper=
### pinapple.lua ###
Pineapple Top=
Pineapple=
Pineapple Ring=
Pineapple Juice=
### potato.lua ###
Potato=картофель
Baked Potato=запеченный картофель
Cucumber and Potato Salad=
### pumpkin.lua ###
Pumpkin Slice=ломтик тыквы
Jack 'O Lantern (punch to turn on and off)=светильник джека (удар для включения и отключения)
Scarecrow Bottom=
Pumpkin Bread=тыквенный хлеб
Pumpkin Dough=тыквенное тесто
Pumpkin=тыква
### raspberry.lua ###
Raspberries=малина
Raspberry Smoothie=малиновый коктейль
### rhubarb.lua ###
Rhubarb=ревень
Rhubarb Pie=пирог из ревеня
### ryeoatrice.lua ###
Rye=
Rye seed=
Oat=
Oat seed=
Rice=
Rice grains=
Rice Bread=
Rice Flour=
Multigrain Flour=
Multigrain Bread=
### tomato.lua ###
Tomato=помидор
### wheat.lua ###
Wheat Seed=
Wheat=семена пшеницы
Straw=солома
Flour=мука
Bread=хлеб
Sliced Bread=
Toast=
Toast Sandwich=

View File

@ -1,258 +0,0 @@
# 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.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-08-16 17:38-0300\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=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: barley.lua
msgid "Barley Seed"
msgstr ""
#: barley.lua
msgid "Barley"
msgstr ""
#: beanpole.lua
msgid "Green Beans"
msgstr ""
#: beanpole.lua
msgid "Bean Pole (place on soil before planting beans)"
msgstr ""
#: blueberry.lua
msgid "Blueberries"
msgstr ""
#: blueberry.lua
msgid "Blueberry Muffin"
msgstr ""
#: carrot.lua
msgid "Carrot"
msgstr ""
#: carrot.lua
msgid "Golden Carrot"
msgstr ""
#: cocoa.lua
msgid "Cocoa Beans"
msgstr ""
#: cocoa.lua
msgid "Cookie"
msgstr ""
#: cocoa.lua
msgid "Bar of Dark Chocolate"
msgstr ""
#: coffee.lua
msgid "Coffee Beans"
msgstr ""
#: coffee.lua
msgid "Drinking Cup (empty)"
msgstr ""
#: coffee.lua
msgid "Cold Cup of Coffee"
msgstr ""
#: coffee.lua
msgid "Hot Cup of Coffee"
msgstr ""
#: corn.lua
msgid "Corn"
msgstr ""
#: corn.lua
msgid "Corn on the Cob"
msgstr ""
#: corn.lua
msgid "Bottle of Ethanol"
msgstr ""
#: cotton.lua
msgid "Cotton Seed"
msgstr ""
#: cotton.lua
msgid "Cotton"
msgstr ""
#: cucumber.lua
msgid "Cucumber"
msgstr ""
#: donut.lua
msgid "Donut"
msgstr ""
#: donut.lua
msgid "Chocolate Donut"
msgstr ""
#: donut.lua
msgid "Apple Donut"
msgstr ""
#: grapes.lua
msgid "Grapes"
msgstr ""
#: grapes.lua
msgid "Trellis (place on soil before planting grapes)"
msgstr ""
#: hemp.lua
msgid "Hemp Seed"
msgstr ""
#: hemp.lua
msgid "Hemp Leaf"
msgstr ""
#: hemp.lua
msgid "Bottle of Hemp Oil"
msgstr ""
#: hemp.lua
msgid "Hemp Fibre"
msgstr ""
#: hemp.lua
msgid "Hemp Rope"
msgstr ""
#: hoes.lua
msgid "Wooden Hoe"
msgstr ""
#: hoes.lua
msgid "Stone Hoe"
msgstr ""
#: hoes.lua
msgid "Steel Hoe"
msgstr ""
#: hoes.lua
msgid "Bronze Hoe"
msgstr ""
#: hoes.lua
msgid "Mese Hoe"
msgstr ""
#: hoes.lua
msgid "Diamond Hoe"
msgstr ""
#: init.lua
msgid "Seed"
msgstr ""
#: melon.lua
msgid "Melon Slice"
msgstr ""
#: melon.lua
msgid "Melon"
msgstr ""
#: potato.lua
msgid "Potato"
msgstr ""
#: potato.lua
msgid "Baked Potato"
msgstr ""
#: pumpkin.lua
msgid "Pumpkin"
msgstr ""
#: pumpkin.lua
msgid "Pumpkin Slice"
msgstr ""
#: pumpkin.lua
msgid "Jack 'O Lantern (punch to turn on and off)"
msgstr ""
#: pumpkin.lua
msgid "Pumpkin Bread"
msgstr ""
#: pumpkin.lua
msgid "Pumpkin Dough"
msgstr ""
#: raspberry.lua
msgid "Raspberries"
msgstr ""
#: raspberry.lua
msgid "Raspberry Smoothie"
msgstr ""
#: rhubarb.lua
msgid "Rhubarb"
msgstr ""
#: rhubarb.lua
msgid "Rhubarb Pie"
msgstr ""
#: soil.lua
msgid "Soil"
msgstr ""
#: soil.lua
msgid "Wet Soil"
msgstr ""
#: sugar.lua
msgid "Sugar"
msgstr ""
#: tomato.lua
msgid "Tomato"
msgstr ""
#: wheat.lua
msgid "Wheat Seed"
msgstr ""
#: wheat.lua
msgid "Wheat"
msgstr ""
#: wheat.lua
msgid "Straw"
msgstr ""
#: wheat.lua
msgid "Flour"
msgstr ""
#: wheat.lua
msgid "Bread"
msgstr ""

194
farming/locale/template.txt Normal file
View File

@ -0,0 +1,194 @@
# Translation of the farming mod by TenPlus1
# textdomain: farming
# author: (you)
# last update: 2020/Apr/26
###### folder . ######
### init.lua ###
Seed=
### compatibility.lua ###
Banana=
Banana Leaves=
Orange=
Strawberry=
### food.lua ###
Sugar=
Salt=
Rose Water=
Turkish Delight=
Garlic Bread=
Donut=
Chocolate Donut=
Apple Donut=
Porridge=
Jaffa Cake=
### hoes.lua ###
Hoe=
Wooden Hoe=
Stone Hoe=
Steel Hoe=
Bronze Hoe=
Mese Hoe=
Diamond Hoe=
# Surcharge du mod [Toolranks] à faire #
Hoe Bomb (use or throw on grassy areas to hoe land)=
Mithril Scythe (Right-click to harvest and replant crops)=
# Surcharge du mod [Toolranks] à faire #
### soil.lua ###
Soil=
Wet Soil=
### utensils.lua ###
Wooden Bowl=
Saucepan=
Cooking Pot=
Baking Tray=
Skillet=
Mortar and Pestle=
Cutting Board=
Juicer=
Glass Mixing Bowl=
###### folder ./crops ######
### barley.lua ###
Barley Seed=
Barley=
### beans.lua ###
Green Beans=
Bean Pole (place on soil before planting beans)=
### beetroot.lua ###
Beetroot=
Beetroot Soup=
### blueberry.lua ###
Blueberries=
Blueberry Muffin=
Blueberry Pie=
### carrot.lua ##
Carrot=
Carrot Juice=
Golden Carrot=
### chili.lua ###
Chili Pepper=
Bowl of Chili=
### cocoa.lua ###
Cocoa Beans=
Cookie=
Bar of Dark Chocolate=
Chocolate Block=
### coffee.lua ###
Coffee Beans=
Cup of Coffee=
### corn.lua ###
Corn=
Corn on the Cob=
Cornstarch=
Bottle of Ethanol=
### cotton.lua ###
Cotton Seed=
Cotton=
String=
### cucumber.lua ###
Cucumber=
### garlic.lua ###
Garlic clove=
Garlic=
Garlic Braid=
### grapes.lua ###
Grapes=
Trellis (place on soil before planting grapes)=
### hemp.lua ###
Hemp Seed=
Hemp Leaf=
Bottle of Hemp Oil=
Hemp Fibre=
Hemp Block=
Hemp Rope=
### melon.lua ###
Melon Slice=
Melon=
### onion.lua ###
Onion=
### peas.lua ###
Pea Pod=
Peas=
Pea Soup=
### pepper.lua ###
Peppercorn=
Pepper=
Ground Pepper=
### pinapple.lua ###
Pineapple Top=
Pineapple=
Pineapple Ring=
Pineapple Juice=
### potato.lua ###
Potato=
Baked Potato=
Cucumber and Potato Salad=
### pumpkin.lua ###
Pumpkin Slice=
Jack 'O Lantern (punch to turn on and off)=
Scarecrow Bottom=
Pumpkin Bread=
Pumpkin Dough=
Pumpkin=
### raspberry.lua ###
Raspberries=
Raspberry Smoothie=
### rhubarb.lua ###
Rhubarb=
Rhubarb Pie=
### ryeoatrice.lua ###
Rye=
Rye seed=
Oat=
Oat seed=
Rice=
Rice grains=
Rice Bread=
Rice Flour=
Multigrain Flour=
Multigrain Bread=
### tomato.lua ###
Tomato=
### wheat.lua ###
Wheat Seed=
Wheat=
Straw=
Flour=
Bread=
Sliced Bread=
Toast=
Toast Sandwich=

2
farming/settingtypes.txt Normal file
View File

@ -0,0 +1,2 @@
# Contains a value used for speed of crop growth in seconds
farming_stage_length (Farming Stage Length) float 160.0

View File

@ -2,10 +2,38 @@
infrastructure.sound_handles = {}
local soundnames = {
"gstype2",
"safetrantype1",
"safetrantype3",
"wch",
"nl",
"uk",
"de",
}
local soundfriendlynames = {
["gstype2"] = "US - GS \"Type 2\"",
["safetrantype1"] = "US - Safetran \"Type 1\"",
["safetrantype3"] = "US - Safetran \"Type 3\"",
["wch"] = "US - WCH",
["nl"] = "Netherlands",
["uk"] = "UK",
["de"] = "Germany",
}
function infrastructure.play_bell(pos)
local pos_hash = minetest.hash_node_position(pos)
if not infrastructure.sound_handles[pos_hash] then
infrastructure.sound_handles[pos_hash] = minetest.sound_play("infrastructure_ebell",
local meta = minetest.get_meta(pos)
local soundname = "infrastructure_ebell_"
local selectedsound = meta:get_string("selectedsound")
if selectedsound and string.len(selectedsound) > 0 then
soundname = soundname..selectedsound
else
soundname = soundname.."gstype2"
end
infrastructure.sound_handles[pos_hash] = minetest.sound_play(soundname,
{pos = pos, gain = AUTOMATIC_WARNING_DEVICE_VOLUME, loop = true, max_hear_distance = 30,})
end
end
@ -74,6 +102,96 @@ function infrastructure.activate_lights(pos)
end
end
local function ebell_updateformspec(pos)
local meta = minetest.get_meta(pos)
local fs = "size[5,3]"
fs = fs.."field[0.3,0.3;5,1;channel;Channel;${channel}]"
fs = fs.."label[0,0.7;Model (changes will be applied on next start)]"
fs = fs.."dropdown[0,1.1;5;sound;"
for _,model in ipairs(soundnames) do
fs = fs..minetest.formspec_escape(soundfriendlynames[model])..","
end
fs = string.sub(fs,1,-2)
local idx = 1
local selected = meta:get_string("selectedsound")
for k,v in ipairs(soundnames) do
if selected == v then idx = k end
end
fs = fs..";"..idx.."]"
fs = fs.."button_exit[1,2.1;2,1;save;OK]"
meta:set_string("formspec",fs)
end
minetest.register_node("infrastructure:ebell",{
description = "Railroad Crossing Electronic Bell",
tiles = {
"streets_pole.png",
"streets_pole.png",
"infrastructure_ebell_sides.png",
"infrastructure_ebell_sides.png",
"infrastructure_ebell_sides.png",
"infrastructure_ebell_sides.png",
},
paramtype = "light",
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {
{-0.2,-0.5,-0.2,0.2,-0.35,0.2,},
{-0.12,-0.35,-0.12,0.12,0.2,0.12,},
},
},
_digistuff_channelcopier_fieldname = "channel",
groups = {cracky = 3,},
on_destruct = infrastructure.stop_bell,
after_place_node = ebell_updateformspec,
on_receive_fields = function(pos,formname,fields,sender)
if not fields.save then return end
local name = sender:get_player_name()
if minetest.is_protected(pos,name) and not minetest.check_player_privs(name,{protection_bypass=true}) then
minetest.record_protection_violation(pos,name)
return
end
local meta = minetest.get_meta(pos)
if fields.channel then
meta:set_string("channel",fields.channel)
end
if fields.sound then
for _,sound in ipairs(soundnames) do
if fields.sound == soundfriendlynames[sound] then
meta:set_string("selectedsound",sound)
ebell_updateformspec(pos)
end
end
end
end,
digiline = {
wire = {
rules = {
{x = 1,y = 0,z = 0},
{x = -1,y = 0,z = 0},
{x = 0,y = 0,z = 1},
{x = 0,y = 0,z = -1},
{x = 0,y = -1,z = 0},
},
},
receptor = {},
effector = {
action = function(pos,node,channel,msg)
local setchan = minetest.get_meta(pos):get_string("channel")
if setchan ~= channel then
return
end
if msg == "bell_on" or msg == "on" then
infrastructure.play_bell(pos)
elseif msg == "bell_off" or msg == "off" then
infrastructure.stop_bell(pos)
end
end
}
}
})
minetest.register_node("infrastructure:automatic_warning_device_top", {
tiles = {
"infrastructure_traffic_lights_side.png",
@ -364,6 +482,7 @@ minetest.register_node("infrastructure:automatic_warning_device_bottom", {
{-1/16, 0, -1/16, 1/16, 3, 1/16}
}
},
_digistuff_channelcopier_fieldname = "channel",
on_construct = function(pos)
local node = minetest.get_node(pos)

View File

@ -336,6 +336,7 @@ minetest.register_node("infrastructure:boom_barrier_bottom", {
{-1/8, -1/2, -1/8, 1/8, 0, 1/8}
}
},
_digistuff_channelcopier_fieldname = "channel",
after_dig_node = function(pos)
pos.y = pos.y + 1

View File

@ -25,6 +25,7 @@ for i = 1, 6 do
local meta = minetest.get_meta(pos)
meta:set_string("formspec", "field[channel;Channel;${channel}]")
end,
_digistuff_channelcopier_fieldname = "channel",
groups = {cracky = 3, not_in_creative_inventory = (i == 1 and 0 or 1)},
light_source = TRAFFIC_LIGHTS_LIGHT_RANGE,
drop = "infrastructure:lane_control_lights_1",

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -1,9 +0,0 @@
To craft a sorting wand:
S S X
S S X
X S X
To sort your own inventory use /sort
TODO: sort your hotbar separately

View File

@ -1 +0,0 @@
default

View File

@ -1,245 +0,0 @@
--------------------------------------------------------
-- supporting junk
function min(a,b)
if a < b then
return a
else
return b
end
end
if not string.starts then
function string.starts(String,Start)
return string.sub(String,1,string.len(Start))==Start
end
end
--------------------------------------------------------
function sortInventory(inv,sorter)
local tabl = inv:get_list("main")
if(tabl == nil) then
-- we don't sort furnaces!
return false
end
table.sort(tabl,sorter)
-- note take_item will set the name to '' when empty
-- NEVER reduce the inventory array size for chests
inv:set_list('main',tabl)
return true
end
sorters = {
wise = function(a,b)
-- XXX: this needs to have stricter ordering!
-- (why is air scoring higher than the end?)
if(a == nil) then
if b == nil then
return true
else
return false
end
elseif b == nil then
return true
end
local aname = a:get_name()
local bname = b:get_name()
-- make sure empty slots go at the end
if(string.len(aname) == 0) then
return false
end
if(string.len(bname) == 0) then
return true
end
-- if the nodes are entirely different, sorted
if (aname ~= bname) then
return aname < bname
end
-- same node types
-- may need to collapse the two together!
local bothmax = a:get_stack_max()
if bothmax == 1 then
-- it's unstackable
local awear = a:get_wear()
local bwear = b:get_wear()
return awear < bwear
end
local acount = a:get_count()
local bcount = b:get_count()
if(acount == bothmax) then
--print('same?',acount,bcount,bothmax)
return bcount ~= bothmax
elseif (bcount == bothmax) then
--print('bcount bothmax derp')
return false
end
local num = min(bcount,bothmax-acount)
a:add_item(b:take_item(num))
-- nothing can have both count AND wear, right?
-- now a:count > b:count so a should go first
--print('numnum',num)
return true
end,
amount = function(a,b)
return a:get_count() > b:get_count()
end,
wear = function(a,b)
return a:get_wear() < b:get_wear()
end,
-- etc...
}
function registerWand(method,sorter)
if method == nil then
name = "inventory_sorter:wand"
sorter = sorters.wise
assert(sorter ~= nil)
desc = 'Chest Sorter'
image = 'inventory_sorter_wand.png'
else
name = "inventory_sorter:wand_"..method
desc = "Chest Sorter ("..method..')'
image = 'inventory_sorter_wand_'..method..'.png'
end
minetest.register_tool(name, {
description = desc,
inventory_image = image,
wield_image = image,
stack_max = 1,
tool_capabilities = {
full_punch_interval=0,
max_drop_level=0
},
on_use = function(self,user,punched)
local pos = minetest.get_pointed_thing_position(punched)
if pos==nil then
return
end
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
if(inv == nil) then
minetest.chat_send_player(user:get_player_name(),"That can't be sorted.","Sorter -!-")
return
end
-- this isn't exported, but default locked chest does this
local owner = meta:get_string("owner")
if(owner ~= nil and string.len(owner) ~= 0 and user:get_player_name() ~= owner) then
minetest.chat_send_player(user:get_player_name(),"That's not yours!","Sorter -!-")
return
end
-- Sokomine's shared chest locks
if locks ~= nil then
if punched == nil or punched.name == nil then
punched = minetest.get_node(pos)
end
if punched and punched.name:starts('locks:') and not locks:lock_allow_use(pos,user) then
-- the error has already been reported (yay side effects)
return
end
end
if(sortInventory(inv,sorter)) then
minetest.chat_send_player(user:get_player_name(),"Chest sorted.","Sorter -!-")
end
end
})
end
function debugSorter(a,b)
result = sorters.wise(a,b)
function derp(a)
return a:get_name()..":"..a:get_count()..":"..a:get_wear()
end
if a then
a = derp(a)
end
if b then
b = derp(b)
end
if result then
print('a goes first',a,b)
else
print('b goes first',a,b)
end
return result
end
function test()
function thingy(name,stack_max)
return {
get_name=function(self) return name end,
get_stack_max=function(self) return stack_max end,
get_count=function(self) return stack_max end,
get_wear=function(self) return 1/stack_max end,
take_item=function() end,
add_item=function() end,
derp=function()
return name..', '..tostring(stack_max)
end
}
end
tabl = {thingy('thing1',1),thingy('hting2',1),nil,thingy('thing1',2),thingy('thing1',4),thingy('thing1',10)}
table.sort(tabl,sorter)
for n,v in pairs(tabl) do
print(n,v:get_name(),v:get_count())
end
end
-- test()
-- print('yay')
-- error('...')
for name,sorter in pairs(sorters) do
registerWand(name,sorter)
end
registerWand()
minetest.register_craft({
output = 'inventory_sorter:wand',
recipe = {
{'default:stick','default:stick',''},
{'default:stick','default:stick',''},
{'','default:stick',''}
}
})
-- is this one automatic...?
minetest.register_craft({
output = 'inventory_sorter:wand',
recipe = {
{'','default:stick','default:stick'},
{'','default:stick','default:stick'},
{'','','default:stick'}
}
})
minetest.register_chatcommand('sort',{
params = '[optional algorithm: amount,wear]',
description = 'Sort your inventory! No takebacks.',
privs={interact=true},
func = function(name,param)
local sorter = sorters.wise;
if string.len(param) > 0 then
sorter = sorters[param];
if sorter == nil then
minetest.chat_send_player(name,"/sort [algorithm]","Sorter -!-")
minetest.chat_send_player(name,"Valid algorithms:","Sorter -!-")
for n,v in pairs(sorters) do
minetest.chat_send_player(name,' '..n,"Sorter -!-")
end
return;
end
end
if(sortInventory(minetest.get_player_by_name(name):get_inventory(),sorter)) then
minetest.chat_send_player(name,"Sorted.","Sorter -!-")
end
end
})

Binary file not shown.

Before

Width:  |  Height:  |  Size: 192 B

View File

@ -1 +0,0 @@
inventory_sorter_wand.png

View File

@ -1 +0,0 @@
inventory_sorter_wand.png

View File

@ -1 +0,0 @@
inventory_sorter_wand.png

View File

@ -14,7 +14,13 @@ minetest.register_craftitem("maptools:copper_coin", {
inventory_image = "maptools_copper_coin.png",
wield_scale = {x = 0.5, y = 0.5, z = 0.25},
stack_max = 10000,
groups = {not_in_creative_inventory = maptools.creative},
})
minetest.register_craft ({
output = "maptools:copper_coin 10",
type = "shapeless",
recipe = { "default:copper_ingot", "default:copper_ingot" }
})
minetest.register_craftitem("maptools:silver_coin", {
@ -22,15 +28,27 @@ minetest.register_craftitem("maptools:silver_coin", {
inventory_image = "maptools_silver_coin.png",
wield_scale = {x = 0.5, y = 0.5, z = 0.25},
stack_max = 10000,
groups = {not_in_creative_inventory = maptools.creative},
})
if minetest.get_modpath("moreores") then
minetest.register_craft ({
output = "maptools:silver_coin 10",
type = "shapeless",
recipe = { "moreores:silver_ingot", "moreores:silver_ingot" }
})
end
minetest.register_craftitem("maptools:gold_coin", {
description = S("Gold Coin"),
inventory_image = "maptools_gold_coin.png",
wield_scale = {x = 0.5, y = 0.5, z = 0.25},
stack_max = 10000,
groups = {not_in_creative_inventory = maptools.creative},
})
minetest.register_craft ({
output = "maptools:gold_coin 10",
type = "shapeless",
recipe = { "default:gold_ingot", "default:gold_ingot" }
})
minetest.register_craftitem("maptools:infinitefuel", {

View File

@ -1,4 +1,4 @@
name = maptools
description = Adds various special versions of normal blocks, tools, and other map maintainer tools.
depends = default
optional_depends = intllib
optional_depends = intllib, moreores

View File

@ -285,7 +285,7 @@ function mesecon.mvps_move_objects(pos, dir, nodestack, movefactor)
end
movefactor = movefactor or 1
dir = vector.multiply(dir, movefactor)
for id, obj in pairs(minetest.object_refs) do
for id, obj in pairs(minetest.get_objects_inside_radius(pos, #nodestack + 1)) do
local obj_pos = obj:get_pos()
local cbox = obj:get_properties().collisionbox
local min_pos = vector.add(obj_pos, vector.new(cbox[1], cbox[2], cbox[3]))

View File

@ -1,3 +1,3 @@
name = moretrees
depends = default, biome_lib, vessels
optional_depends = doors stairs, moreblocks, intllib, farming
optional_depends = doors, stairs, moreblocks, intllib, farming

View File

@ -119,6 +119,18 @@ for i in ipairs(moretrees.treelist) do
},
groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1,sapling=1},
sounds = default.node_sound_defaults(),
on_place = function(itemstack, placer, pointed_thing)
itemstack = default.sapling_on_place(itemstack, placer, pointed_thing,
"moretrees:" ..treename.. "_sapling",
-- minp, maxp to be checked, relative to sapling pos
-- minp_relative.y = 1 because sapling pos has been checked
{x = -3, y = 1, z = -3},
{x = 3, y = 6, z = 3},
-- maximum interval of interior volume check
4)
return itemstack
end,
})
local moretrees_leaves_inventory_image = nil
@ -261,7 +273,19 @@ for i in ipairs(moretrees.treelist) do
},
groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1,sapling=1},
sounds = default.node_sound_defaults(),
drop = "moretrees:"..treename.."_sapling"
drop = "moretrees:"..treename.."_sapling",
on_place = function(itemstack, placer, pointed_thing)
itemstack = default.sapling_on_place(itemstack, placer, pointed_thing,
"moretrees:" ..treename.. "_sapling_ongen",
-- minp, maxp to be checked, relative to sapling pos
-- minp_relative.y = 1 because sapling pos has been checked
{x = -3, y = 1, z = -3},
{x = 3, y = 6, z = 3},
-- maximum interval of interior volume check
4)
return itemstack
end,
})
local fruitname = nil

View File

@ -80,7 +80,7 @@ if digiline_enabled and pipeworks.enable_digiline_detector_tube then
local setchan = meta:get_string("channel")
digiline:receptor_send(pos, digiline.rules.default, setchan, stack:to_string())
digiline:receptor_send(pos, digiline.rules.default, setchan, stack:to_table())
return pipeworks.notvel(pipeworks.meseadjlist, velocity)
end},

View File

@ -4,21 +4,17 @@ License:
---Code: WTFPL
---Textures: "white" image by VanessaE (WTFPL), "palette" image is from here: https://commons.wikimedia.org/wiki/File:256colour.png
Depends: mesecons_lightstone, digilines
(neither is in depends.txt since the order doesn't matter)
Depends: digilines
(should load without it but won't be real useful)
Instructions:
* Grab one from the creative inventory, or craft one:
nothing green lightstone nothing
red lightstone luacontroller blue lightstone
nothing digiline nothing
* Place the thing
* Right-click and set a channel
* Send a digilines message to it on that channel with the color you want (choices listed below)
Colors available: Any 6-digit hex color, such as "FF0000", "#c0ffee", "123456"... (will be set to the nearest color available)
Colors available for 256-color version: Any 6-digit hex color, such as "FF0000", "#c0ffee", "123456"... (will be set to the nearest color available)
Colors available for true-color version: Any 6-digit hex color, all values are supported
Group addressing mode:
@ -36,8 +32,8 @@ blue yellow
send this:
{{"red","green"},
{"blue","yellow"}}
{{"FF0000","00FF00"},
{"0000FF","FFFF00"}}
Note that if you are using group addressing mode, if there is an already-configured RGB lightstone node directly above the one you are setting up,
punching the one you are setting up (or right-clicking and selecting the Auto-Fill option) will attempt to auto-fill it (incrementing the Y address) from the one above.

View File

@ -8,7 +8,7 @@ else
end
end
function rgblightstone.autofill(pos, player)
function rgblightstone.autofill(pos,player)
local name = player:get_player_name()
if minetest.is_protected(pos, name) and not minetest.check_player_privs(name, { protection_bypass = true }) then
minetest.record_protection_violation(pos, name)
@ -37,119 +37,247 @@ function rgblightstone.autofill(pos, player)
end
end
minetest.register_node("rgblightstone:rgblightstone", {
tiles = {"rgblightstone_white.png"},
palette = "rgblightstone_palette.png",
groups = {cracky=2},
description = "RGB Lightstone",
paramtype2 = "color",
on_construct = function(pos)
local meta = minetest.get_meta(pos)
meta:set_string("formspec", "size[8,5;]field[1,1;6,2;channel;Channel;${channel}]field[1,2;2,2;addrx;X Address;${addrx}]field[5,2;2,2;addry;Y Address;${addry}]button_exit[2.25,3;3,1;submit;Save]button_exit[2.25,4;3,1;autofill;Auto-Fill From Node Above]label[3,2;Leave address blank\nfor individual mode]")
meta:set_string("infotext","Not configured! Right-click to set up manually, or punch to auto-fill from the node above.")
meta:set_string("color","000000")
end,
on_punch = function(pos, node, player, pointed_thing)
rgblightstone.autofill(pos,player)
end,
on_receive_fields = function(pos, formname, fields, sender)
local name = sender:get_player_name()
if minetest.is_protected(pos, name) and not minetest.check_player_privs(name, { protection_bypass = true }) then
minetest.record_protection_violation(pos, name)
function rgblightstone.handle_digilines(pos,node,channel,msg,truecolor)
local meta = minetest.get_meta(pos)
local setchan = meta:get_string("channel")
if channel ~= setchan then
return
end
local addrx = tonumber(meta:get_string("addrx"))
local addry = tonumber(meta:get_string("addry"))
if type(msg) == "table" then
if not (addrx and addry and type(msg[addry]) == "table" and msg[addry][addrx]) then
return
end
local meta = minetest.get_meta(pos)
if fields.autofill then
rgblightstone.autofill(pos,sender)
msg = msg[addry][addrx]
end
--Validation starts here
if type(msg) ~= "string" then
return
end
msg = string.upper(msg)
--Drop a leading # if present (e.g. "#FF55AA")
if string.sub(msg,1,1) == "#" then
msg = string.sub(msg,2)
end
--Check length
if string.len(msg) ~= 6 then
return
end
--Make sure there aren't any invalid chars
local acceptable_chars = {["0"]=true,["1"]=true,["2"]=true,["3"]=true,["4"]=true,["5"]=true,["6"]=true,["7"]=true,["8"]=true,["9"]=true,["A"]=true,["B"]=true,["C"]=true,["D"]=true,["E"]=true,["F"]=true}
for i = 1,6,1 do
if not acceptable_chars[string.sub(msg,i,i)] then
return
else
if fields.channel then
meta:set_string("channel", fields.channel)
meta:set_string("infotext","")
end
if fields.addrx then meta:set_string("addrx",fields.addrx) end
if fields.addry then meta:set_string("addry",fields.addry) end
end
end,
light_source = 0,
digiline = {
wire = {
rules = {
{x = 1,y = 0,z = 0},
{x = -1,y = 0,z = 0},
{x = 0,y = 0,z = 1},
{x = 0,y = 0,z = -1},
{x = 0,y = 1,z = 0},
{x = 0,y = -1,z = 0},
},
},
receptor = {},
effector = {
action = function(pos, node, channel, msg)
local meta = minetest.get_meta(pos)
local setchan = meta:get_string("channel")
if channel ~= setchan then
return
end
end
--Should be a valid hex color by this point
meta:set_string("color",msg)
--Split into three colors
local r = tonumber(string.sub(msg,1,2),16)
local g = tonumber(string.sub(msg,3,4),16)
local b = tonumber(string.sub(msg,5,6),16)
--Convert RGB to HSV... or at least V, for the light
local v = math.max(r,g,b)
v = math.floor(v/255*14)
v = math.max(0,math.min(14,v))
local addrx = tonumber(meta:get_string("addrx"))
local addry = tonumber(meta:get_string("addry"))
if truecolor then
node.name = "rgblightstone:rgblightstone_truecolor_"..v
minetest.swap_node(pos,node)
rgblightstone.update_entity(pos)
else
--Round to nearest available values and convert to a pixel count in the palette
r = math.floor(r/32)
g = math.floor(g/32)
b = math.floor(b/64) --Blue has one fewer bit
local paletteidx = 32*g+4*r+b
if type(msg) == "table" then
if not (addrx and addry and type(msg[addry]) == "table" and msg[addry][addrx]) then
return
end
msg = msg[addry][addrx]
end
--Set the color
node.name = "rgblightstone:rgblightstone_"..v
node.param2 = paletteidx
minetest.swap_node(pos,node)
end
end
--Validation starts here
if type(msg) ~= "string" then
return
end
msg = string.upper(msg)
--Drop a leading # if present (e.g. "#FF55AA")
if string.sub(msg,1,1) == "#" then
msg = string.sub(msg,2)
end
--Check length
if string.len(msg) ~= 6 then
return
end
--Make sure there aren't any invalid chars
local acceptable_chars = {["0"]=true,["1"]=true,["2"]=true,["3"]=true,["4"]=true,["5"]=true,["6"]=true,["7"]=true,["8"]=true,["9"]=true,["A"]=true,["B"]=true,["C"]=true,["D"]=true,["E"]=true,["F"]=true}
for i = 1,6,1 do
if not acceptable_chars[string.sub(msg,i,i)] then
return
else
end
end
--Should be a valid hex color by this point
--Split into three colors
local r = tonumber(string.sub(msg,1,2),16)
local g = tonumber(string.sub(msg,3,4),16)
local b = tonumber(string.sub(msg,5,6),16)
--Round to nearest available values and convert to a pixel count in the palette
r = math.floor(r/32)
g = math.floor(g/32)
b = math.floor(b/64) --Blue has one fewer bit
local paletteidx = 32*g+4*r+b
--Set the color
node.param2 = paletteidx
minetest.swap_node(pos,node)
function rgblightstone.handle_fields(pos,formname,fields,sender)
local name = sender:get_player_name()
if minetest.is_protected(pos, name) and not minetest.check_player_privs(name, { protection_bypass = true }) then
minetest.record_protection_violation(pos, name)
return
end
}
}
local meta = minetest.get_meta(pos)
if fields.autofill then
rgblightstone.autofill(pos,sender)
else
if fields.channel then
meta:set_string("channel", fields.channel)
meta:set_string("infotext","")
end
if fields.addrx then meta:set_string("addrx",fields.addrx) end
if fields.addry then meta:set_string("addry",fields.addry) end
end
end
function rgblightstone.update_entity(pos)
local objs = minetest.get_objects_inside_radius(pos,0.5)
for _,obj in ipairs(objs) do
if obj:get_luaentity() and obj:get_luaentity().name == "rgblightstone:entity" then
obj:remove()
end
end
local obj = minetest.add_entity(pos,"rgblightstone:entity")
local tex = "rgblightstone_white.png^[colorize:#"..minetest.get_meta(pos):get_string("color")..":255"
obj:set_properties({textures = {tex,tex,tex,tex,tex,tex}})
end
minetest.register_entity("rgblightstone:entity",{
hp_max = 1,
physical = false,
collisionbox = {0,0,0,0,0,0},
visual_size = {x=1,y=1},
visual = "cube",
static_save = false,
})
for i=0,14,1 do
minetest.register_node("rgblightstone:rgblightstone_"..i, {
tiles = {"rgblightstone_white.png"},
palette = "rgblightstone_palette.png",
groups = i == 0 and {cracky = 2,} or {cracky = 2,not_in_creative_inventory = 1,},
description = i == 0 and "256-Color RGB Lightstone" or "256-Color RGB Lightstone (lit state - you hacker you!)",
paramtype2 = "color",
light_source = i,
drop = "rgblightstone:rgblightstone_0",
on_construct = function(pos)
local meta = minetest.get_meta(pos)
meta:set_string("formspec", "size[8,5;]field[1,1;6,2;channel;Channel;${channel}]field[1,2;2,2;addrx;X Address;${addrx}]field[5,2;2,2;addry;Y Address;${addry}]button_exit[2.25,3;3,1;submit;Save]button_exit[2.25,4;3,1;autofill;Auto-Fill From Node Above]label[3,2;Leave address blank\nfor individual mode]")
meta:set_string("infotext","Not configured! Right-click to set up manually, or punch to auto-fill from the node above.")
meta:set_string("color","000000")
end,
on_punch = function(pos,node,player,pointed_thing)
rgblightstone.autofill(pos,player)
end,
on_receive_fields = rgblightstone.handle_fields,
light_source = 0,
digiline = {
wire = {
rules = {
{x = 1,y = 0,z = 0},
{x = -1,y = 0,z = 0},
{x = 0,y = 0,z = 1},
{x = 0,y = 0,z = -1},
{x = 0,y = 1,z = 0},
{x = 0,y = -1,z = 0},
},
},
receptor = {},
effector = {
action = function(pos,node,channel,msg)
rgblightstone.handle_digilines(pos,node,channel,msg,false)
end
}
}
})
minetest.register_node("rgblightstone:rgblightstone_truecolor_"..i, {
tiles = {"rgblightstone_white.png^[colorize:#000000:255"},
groups = i == 0 and {cracky = 2,} or {cracky = 2,not_in_creative_inventory = 1,},
description = i == 0 and "True-Color RGB Lightstone" or "True-Color RGB Lightstone (lit state - you hacker you!)",
light_source = i,
drop = "rgblightstone:rgblightstone_truecolor_0",
on_construct = function(pos)
local meta = minetest.get_meta(pos)
meta:set_string("formspec", "size[8,5;]field[1,1;6,2;channel;Channel;${channel}]field[1,2;2,2;addrx;X Address;${addrx}]field[5,2;2,2;addry;Y Address;${addry}]button_exit[2.25,3;3,1;submit;Save]button_exit[2.25,4;3,1;autofill;Auto-Fill From Node Above]label[3,2;Leave address blank\nfor individual mode]")
meta:set_string("infotext","Not configured! Right-click to set up manually, or punch to auto-fill from the node above.")
meta:set_string("color","000000")
rgblightstone.update_entity(pos)
end,
on_punch = function(pos,node,player,pointed_thing)
rgblightstone.autofill(pos,player)
end,
after_destruct = function(pos)
local objs = minetest.get_objects_inside_radius(pos,0.5)
for _,obj in ipairs(objs) do
if obj:get_luaentity() and obj:get_luaentity().name == "rgblightstone:entity" then
obj:remove()
end
end
end,
paramtype = "light",
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {{-0.45,-0.45,-0.45,0.45,0.45,0.45}}
},
collision_box = {
type = "fixed",
fixed = {{-0.5,-0.5,-0.5,0.5,0.5,0.5}}
},
selection_box = {
type = "fixed",
fixed = {{-0.5,-0.5,-0.5,0.5,0.5,0.5}}
},
on_receive_fields = rgblightstone.handle_fields,
light_source = 0,
digiline = {
wire = {
rules = {
{x = 1,y = 0,z = 0},
{x = -1,y = 0,z = 0},
{x = 0,y = 0,z = 1},
{x = 0,y = 0,z = -1},
{x = 0,y = 1,z = 0},
{x = 0,y = -1,z = 0},
},
},
receptor = {},
effector = {
action = function(pos,node,channel,msg)
rgblightstone.handle_digilines(pos,node,channel,msg,true)
end
}
}
})
end
local tclist = {}
for i=0,14,1 do table.insert(tclist,"rgblightstone:rgblightstone_truecolor_"..i) end
minetest.register_lbm({
name = "rgblightstone:restore_entities",
label = "Restore true-color rgblightstone entities",
nodenames = tclist,
run_at_every_load = true,
action = rgblightstone.update_entity,
})
minetest.register_alias("rgblightstone:rgblightstone","rgblightstone:rgblightstone_0")
minetest.register_alias("rgblightstone:rgblightstone_truecolor","rgblightstone:rgblightstone_truecolor_0")
minetest.register_craft({
output = "rgblightstone:rgblightstone",
output = "rgblightstone:rgblightstone_0",
recipe = {
{"","mesecons_lightstone:lightstone_green_off",""},
{"mesecons_lightstone:lightstone_red_off","mesecons_luacontroller:luacontroller0000","mesecons_lightstone:lightstone_blue_off"},
{"","digilines:wire_std_00000000",""}
}
})
minetest.register_craft({
output = "rgblightstone:rgblightstone_truecolor_0",
recipe = {
{"","rgblightstone:rgblightstone_0",""},
{"rgblightstone:rgblightstone_0","mesecons_luacontroller:luacontroller0000","rgblightstone:rgblightstone_0"},
{"","digilines:wire_std_00000000",""}
}
})

2
rgblightstone/mod.conf Normal file
View File

@ -0,0 +1,2 @@
name = rgblightstone
description = RGB Lightstone

View File

@ -159,7 +159,7 @@ local ctexcache = {}
minetest.register_entity("signs_lib:text", {
collisionbox = { 0, 0, 0, 0, 0, 0 },
visual = "mesh",
mesh = "signs_lib_standard_wall_sign_entity.obj",
mesh = "signs_lib_standard_sign_entity_wall.obj",
textures = {},
static_save = false,
backface_culling = false

View File

@ -159,6 +159,16 @@ local function get_receive_fields(name, data)
return function(pos, formname, fields, sender)
local meta = minetest.get_meta(pos)
local page = "main"
local owner = meta:get_string("owner")
if owner ~= "" then
-- prevent modification of locked chests
if owner ~= sender:get_player_name() then return end
elseif not fields.quit then
-- prevent modification of protected chests
if minetest.is_protected(pos, sender:get_player_name()) then return end
end
if fields.sort or (data.autosort and fields.quit and meta:get_int("autosort") == 1) then
sort_inventory(meta:get_inventory())
end

View File

@ -391,6 +391,7 @@ minetest.register_node(":streets:beacon_hybrid_off",{
type = "fixed",
fixed = streets.hbBox
},
_digistuff_channelcopier_fieldname = "channel",
tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_hb_off.png"},
digiline = {
receptor = {},
@ -425,6 +426,7 @@ minetest.register_node(":streets:beacon_hybrid_yellow",{
type = "fixed",
fixed = streets.hbBox
},
_digistuff_channelcopier_fieldname = "channel",
tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_hb_yellow.png"},
digiline = {
receptor = {},
@ -459,6 +461,7 @@ minetest.register_node(":streets:beacon_hybrid_red",{
type = "fixed",
fixed = streets.hbBox
},
_digistuff_channelcopier_fieldname = "channel",
tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_hb_red.png"},
digiline = {
receptor = {},
@ -493,6 +496,7 @@ minetest.register_node(":streets:beacon_hybrid_flashyellow",{
type = "fixed",
fixed = streets.hbBox
},
_digistuff_channelcopier_fieldname = "channel",
tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png",{
name="streets_hb_flashyellow.png",
animation={type="vertical_frames", aspect_w=64, aspect_h=64, length=1.2},
@ -530,6 +534,7 @@ minetest.register_node(":streets:beacon_hybrid_flashred",{
type = "fixed",
fixed = streets.hbBox
},
_digistuff_channelcopier_fieldname = "channel",
tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png",{
name="streets_hb_flashred.png",
animation={type="vertical_frames", aspect_w=64, aspect_h=64, length=1.2},
@ -568,6 +573,7 @@ minetest.register_node(":streets:beacon_off",{
type = "fixed",
fixed = streets.bBox
},
_digistuff_channelcopier_fieldname = "channel",
tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_off.png"},
digiline = {
receptor = {},
@ -602,6 +608,7 @@ minetest.register_node(":streets:beacon_red",{
type = "fixed",
fixed = streets.bBox
},
_digistuff_channelcopier_fieldname = "channel",
tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_b_red.png"},
digiline = {
receptor = {},
@ -636,6 +643,7 @@ minetest.register_node(":streets:beacon_yellow",{
type = "fixed",
fixed = streets.bBox
},
_digistuff_channelcopier_fieldname = "channel",
tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_yellow.png"},
digiline = {
receptor = {},
@ -670,6 +678,7 @@ minetest.register_node(":streets:beacon_flashred",{
type = "fixed",
fixed = streets.bBox
},
_digistuff_channelcopier_fieldname = "channel",
tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png",{
name="streets_b_flashred.png",
animation={type="vertical_frames", aspect_w=64, aspect_h=64, length=1.2},
@ -707,6 +716,7 @@ minetest.register_node(":streets:beacon_flashyellow",{
type = "fixed",
fixed = streets.bBox
},
_digistuff_channelcopier_fieldname = "channel",
tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png",{
name="streets_tl_warn.png",
animation={type="vertical_frames", aspect_w=64, aspect_h=64, length=1.2},
@ -745,6 +755,7 @@ minetest.register_node(":streets:trafficlight_top_extender_left_off",{
type = "fixed",
fixed = streets.tleBox
},
_digistuff_channelcopier_fieldname = "channel",
tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_left_off.png"},
digiline = {
receptor = {},
@ -780,6 +791,7 @@ minetest.register_node(":streets:trafficlight_top_extender_left_yellow",{
type = "fixed",
fixed = streets.tleBox
},
_digistuff_channelcopier_fieldname = "channel",
tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tle_left_yellow.png"},
digiline = {
receptor = {},
@ -815,6 +827,7 @@ minetest.register_node(":streets:trafficlight_top_extender_left_flashyellow",{
type = "fixed",
fixed = streets.tleBox
},
_digistuff_channelcopier_fieldname = "channel",
tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png",{
name="streets_tl_left_warn.png",
animation={type="vertical_frames", aspect_w=64, aspect_h=64, length=1.2},
@ -853,6 +866,7 @@ minetest.register_node(":streets:trafficlight_top_extender_left_flashyellow_alt"
type = "fixed",
fixed = streets.tleBox
},
_digistuff_channelcopier_fieldname = "channel",
tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png",{
name="streets_tl_left_warn_alt.png",
animation={type="vertical_frames", aspect_w=64, aspect_h=64, length=1.2},
@ -891,6 +905,7 @@ minetest.register_node(":streets:trafficlight_top_extender_left_flashgreen",{
type = "fixed",
fixed = streets.tleBox
},
_digistuff_channelcopier_fieldname = "channel",
tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png",{
name="streets_tle_left_flashgreen.png",
animation={type="vertical_frames", aspect_w=64, aspect_h=64, length=1.2},
@ -929,6 +944,7 @@ minetest.register_node(":streets:trafficlight_top_extender_left_green",{
type = "fixed",
fixed = streets.tleBox
},
_digistuff_channelcopier_fieldname = "channel",
tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tle_left_green.png"},
digiline = {
receptor = {},
@ -964,6 +980,7 @@ minetest.register_node(":streets:trafficlight_top_extender_right_off",{
type = "fixed",
fixed = streets.tleBox
},
_digistuff_channelcopier_fieldname = "channel",
tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_right_off.png"},
digiline = {
receptor = {},
@ -999,6 +1016,7 @@ minetest.register_node(":streets:trafficlight_top_extender_right_yellow",{
type = "fixed",
fixed = streets.tleBox
},
_digistuff_channelcopier_fieldname = "channel",
tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tle_right_yellow.png"},
digiline = {
receptor = {},
@ -1034,6 +1052,7 @@ minetest.register_node(":streets:trafficlight_top_extender_right_flashyellow",{
type = "fixed",
fixed = streets.tleBox
},
_digistuff_channelcopier_fieldname = "channel",
tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png",{
name="streets_tl_right_warn.png",
animation={type="vertical_frames", aspect_w=64, aspect_h=64, length=1.2},
@ -1072,6 +1091,7 @@ minetest.register_node(":streets:trafficlight_top_extender_right_flashyellow_alt
type = "fixed",
fixed = streets.tleBox
},
_digistuff_channelcopier_fieldname = "channel",
tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png",{
name="streets_tl_right_warn_alt.png",
animation={type="vertical_frames", aspect_w=64, aspect_h=64, length=1.2},
@ -1110,6 +1130,7 @@ minetest.register_node(":streets:trafficlight_top_extender_right_flashgreen",{
type = "fixed",
fixed = streets.tleBox
},
_digistuff_channelcopier_fieldname = "channel",
tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png",{
name="streets_tle_right_flashgreen.png",
animation={type="vertical_frames", aspect_w=64, aspect_h=64, length=1.2},
@ -1148,6 +1169,7 @@ minetest.register_node(":streets:trafficlight_top_extender_right_green",{
type = "fixed",
fixed = streets.tleBox
},
_digistuff_channelcopier_fieldname = "channel",
tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tle_right_green.png"},
digiline = {
receptor = {},
@ -1185,6 +1207,7 @@ minetest.register_node(":streets:pedlight_top_off",{
type = "fixed",
fixed = streets.plBox
},
_digistuff_channelcopier_fieldname = "channel",
tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_pl_off.png"},
digiline = {
receptor = {},
@ -1219,6 +1242,7 @@ minetest.register_node(":streets:pedlight_top_dontwalk",{
type = "fixed",
fixed = streets.plBox
},
_digistuff_channelcopier_fieldname = "channel",
light_source = 6,
digiline = {
receptor = {},
@ -1243,6 +1267,7 @@ minetest.register_node(":streets:pedlight_top_walk",{
type = "fixed",
fixed = streets.plBox
},
_digistuff_channelcopier_fieldname = "channel",
light_source = 6,
digiline = {
receptor = {},
@ -1270,6 +1295,7 @@ minetest.register_node(":streets:pedlight_top_flashingdontwalk",{
type = "fixed",
fixed = streets.plBox
},
_digistuff_channelcopier_fieldname = "channel",
light_source = 6,
digiline = {
receptor = {},
@ -1297,6 +1323,7 @@ minetest.register_node(":streets:pedlight_top_flashingwalk",{
type = "fixed",
fixed = streets.plBox
},
_digistuff_channelcopier_fieldname = "channel",
light_source = 6,
digiline = {
receptor = {},
@ -1371,6 +1398,7 @@ for _,i in pairs({"","_left","_right"}) do
type = "fixed",
fixed = streets.tlBox
},
_digistuff_channelcopier_fieldname = "channel",
tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl"..i.."_off.png"},
digiline = {
receptor = {},
@ -1405,6 +1433,7 @@ for _,i in pairs({"","_left","_right"}) do
type = "fixed",
fixed = streets.tlBox
},
_digistuff_channelcopier_fieldname = "channel",
light_source = 6,
digiline = {
receptor = {},
@ -1429,6 +1458,7 @@ for _,i in pairs({"","_left","_right"}) do
type = "fixed",
fixed = streets.tlBox
},
_digistuff_channelcopier_fieldname = "channel",
light_source = 6,
digiline = {
receptor = {},
@ -1453,6 +1483,7 @@ for _,i in pairs({"","_left","_right"}) do
type = "fixed",
fixed = streets.tlBox
},
_digistuff_channelcopier_fieldname = "channel",
light_source = 6,
digiline = {
receptor = {},
@ -1477,6 +1508,7 @@ for _,i in pairs({"","_left","_right"}) do
type = "fixed",
fixed = streets.tlBox
},
_digistuff_channelcopier_fieldname = "channel",
light_source = 6,
digiline = {
receptor = {},
@ -1504,6 +1536,7 @@ for _,i in pairs({"","_left","_right"}) do
type = "fixed",
fixed = streets.tlBox
},
_digistuff_channelcopier_fieldname = "channel",
light_source = 6,
digiline = {
receptor = {},
@ -1531,6 +1564,7 @@ for _,i in pairs({"","_left","_right"}) do
type = "fixed",
fixed = streets.tlBox
},
_digistuff_channelcopier_fieldname = "channel",
light_source = 6,
digiline = {
receptor = {},
@ -1558,6 +1592,7 @@ for _,i in pairs({"","_left","_right"}) do
type = "fixed",
fixed = streets.tlBox
},
_digistuff_channelcopier_fieldname = "channel",
light_source = 6,
digiline = {
receptor = {},
@ -1585,6 +1620,7 @@ for _,i in pairs({"","_left","_right"}) do
type = "fixed",
fixed = streets.tlBox
},
_digistuff_channelcopier_fieldname = "channel",
light_source = 6,
digiline = {
receptor = {},
@ -1612,6 +1648,7 @@ for _,i in pairs({"","_left","_right"}) do
type = "fixed",
fixed = streets.tlBox
},
_digistuff_channelcopier_fieldname = "channel",
light_source = 6,
digiline = {
receptor = {},
@ -1638,6 +1675,7 @@ minetest.register_node(":streets:trafficlight_rrfb_off",{
type = "fixed",
fixed = streets.rrfbBox
},
_digistuff_channelcopier_fieldname = "channel",
tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_rrfb_off.png"},
digiline = {
receptor = {},
@ -1672,6 +1710,7 @@ minetest.register_node(":streets:trafficlight_rrfb_on",{
type = "fixed",
fixed = streets.rrfbBox
},
_digistuff_channelcopier_fieldname = "channel",
tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png",{
name="streets_rrfb_on.png",
animation={type="vertical_frames", aspect_w=64, aspect_h=64, length=0.75},

View File

@ -277,35 +277,6 @@ minetest.override_item("mesecons_extrawires:crossover_on",{
},
})
minetest.register_lbm({
name = "unifiedmesecons:convert",
label = "Convert insulated mesecons to use param2 coloring",
nodenames = {
"mesecons_insulated:insulated_off",
"mesecons_insulated:insulated_on",
"mesecons_extrawires:corner_off",
"mesecons_extrawires:corner_on",
"mesecons_extrawires:tjunction_off",
"mesecons_extrawires:tjunction_on",
},
action = function(pos,node)
local name = node.name
if string.find(name,"insulated") then
name = "mesecons_insulated:insulated_blue_"
elseif string.find(name,"corner") then
name = "mesecons_extrawires:insulated_corner_blue_"
elseif string.find(name,"tjunction") then
name = "mesecons_extrawires:insulated_tjunction_blue_"
end
if string.sub(node.name,-3,-1) == "_on" then
node.name = name.."on"
else
node.name = name.."off"
end
node.param2 = (node.param2 % 32) + 128
minetest.swap_node(pos,node)
end,
})
minetest.register_craft({
output = "mesecons_extrawires:insulated_corner_white_off 3",

View File

@ -98,21 +98,6 @@ worldedit.marker_move = function(name, marker, deltavector)
return true
end
-- Updates the location ingame of the markers
worldedit.marker_update = function(name, marker)
if marker == nil then
worldedit.mark_pos1(name)
worldedit.mark_pos2(name)
elseif marker == 1 then
worldedit.mark_pos1(name)
elseif marker == 2 then
worldedit.mark_pos2(name)
else
minetest.debug(
"worldedit: Invalid execution of function update_markers")
end
end
-- Returns two vectors with the directions for volumetric expansion
worldedit.get_expansion_directions = function(mark1, mark2)

View File

@ -1,5 +1,5 @@
worldedit.register_command("outset", {
params = "[h|v] <amount>",
params = "[h/v] <amount>",
description = "Outset the selected region.",
privs = {worldedit=true},
require_pos = 2,
@ -38,7 +38,7 @@ worldedit.register_command("outset", {
worldedit.register_command("inset", {
params = "[h|v] <amount>",
params = "[h/v] <amount>",
description = "Inset the selected region.",
privs = {worldedit=true},
require_pos = 2,
@ -47,9 +47,7 @@ worldedit.register_command("inset", {
if find == nil then
return false
end
local hv_test = dir:find("[^hv]+")
if hv_test ~= nil then
if dir:find("[^hv]") ~= nil then
return false, "Invalid direction."
end
@ -77,8 +75,8 @@ worldedit.register_command("inset", {
worldedit.register_command("shift", {
params = "[x|y|z|?|up|down|left|right|front|back] [+|-]<amount>",
description = "Moves the selection region. Does not move contents.",
params = "x/y/z/?/up/down/left/right/front/back [+/-]<amount>",
description = "Shifts the selection area without moving its contents",
privs = {worldedit=true},
require_pos = 2,
parse = function(param)
@ -112,8 +110,8 @@ worldedit.register_command("shift", {
worldedit.register_command("expand", {
params = "[+|-]<x|y|z|?|up|down|left|right|front|back> <amount> [reverse-amount]",
description = "expand the selection in one or two directions at once",
params = "[+/-]x/y/z/?/up/down/left/right/front/back <amount> [reverse amount]",
description = "Expands the selection in the selected absolute or relative axis",
privs = {worldedit=true},
require_pos = 2,
parse = function(param)
@ -161,8 +159,8 @@ worldedit.register_command("expand", {
worldedit.register_command("contract", {
params = "[+|-]<x|y|z|?|up|down|left|right|front|back> <amount> [reverse-amount]",
description = "contract the selection in one or two directions at once",
params = "[+/-]x/y/z/?/up/down/left/right/front/back <amount> [reverse amount]",
description = "Contracts the selection in the selected absolute or relative axis",
privs = {worldedit=true},
require_pos = 2,
parse = function(param)
@ -207,3 +205,62 @@ worldedit.register_command("contract", {
return true, "Region contracted by " .. (amount + rev_amount) .. " nodes"
end,
})
worldedit.register_command("cubeapply", {
params = "<size>/(<sizex> <sizey> <sizez>) <command> [parameters]",
description = "Select a cube with side length <size> around position 1 and run <command> on region",
privs = {worldedit=true},
require_pos = 1,
parse = function(param)
local found, _, sidex, sidey, sidez, cmd, args =
param:find("^(%d+)%s+(%d+)%s+(%d+)%s+([^%s]+)%s*(.*)$")
if found == nil then
found, _, sidex, cmd, args = param:find("^(%d+)%s+([^%s]+)%s*(.*)$")
if found == nil then
return false
end
sidey = sidex
sidez = sidex
end
sidex = tonumber(sidex)
sidey = tonumber(sidey)
sidez = tonumber(sidez)
if sidex < 1 or sidey < 1 or sidez < 1 then
return false
end
local cmddef = worldedit.registered_commands[cmd]
if cmddef == nil or cmddef.require_pos ~= 2 then
return false, "invalid usage: //" .. cmd .. " cannot be used with cubeapply"
end
-- run parsing of target command
local parsed = {cmddef.parse(args)}
if not table.remove(parsed, 1) then
return false, parsed[1]
end
return true, sidex, sidey, sidez, cmd, parsed
end,
nodes_needed = function(name, sidex, sidey, sidez, cmd, parsed)
-- its not possible to defer to the target command at this point
return sidex * sidey * sidez
end,
func = function(name, sidex, sidey, sidez, cmd, parsed)
local cmddef = assert(worldedit.registered_commands[cmd])
local success, missing_privs = minetest.check_player_privs(name, cmddef.privs)
if not success then
worldedit.player_notify(name, "Missing privileges: " ..
table.concat(missing_privs, ", "))
return
end
-- update region to be the cuboid the user wanted
local half = vector.divide(vector.new(sidex, sidey, sidez), 2)
local sizea, sizeb = vector.apply(half, math.floor), vector.apply(half, math.ceil)
local center = worldedit.pos1[name]
worldedit.pos1[name] = vector.subtract(center, sizea)
worldedit.pos2[name] = vector.add(center, vector.subtract(sizeb, 1))
worldedit.marker_update(name)
-- actually run target command
return cmddef.func(name, unpack(parsed))
end,
})

View File

@ -216,7 +216,10 @@ worldedit.register_command("about", {
params = "",
description = "Get information about the WorldEdit mod",
func = function(name)
worldedit.player_notify(name, "WorldEdit " .. worldedit.version_string .. " is available on this server. Type //help to get a list of commands, or get more information at https://github.com/Uberi/Minetest-WorldEdit")
worldedit.player_notify(name, "WorldEdit " .. worldedit.version_string..
" is available on this server. Type //help to get a list of "..
"commands, or get more information at "..
"https://github.com/Uberi/Minetest-WorldEdit")
end,
})
@ -333,8 +336,7 @@ worldedit.register_command("reset", {
func = function(name)
worldedit.pos1[name] = nil
worldedit.pos2[name] = nil
worldedit.mark_pos1(name)
worldedit.mark_pos2(name)
worldedit.marker_update(name)
worldedit.set_pos[name] = nil
--make sure the user does not try to confirm an operation after resetting pos:
reset_pending(name)
@ -347,8 +349,7 @@ worldedit.register_command("mark", {
description = "Show markers at the region positions",
privs = {worldedit=true},
func = function(name)
worldedit.mark_pos1(name)
worldedit.mark_pos2(name)
worldedit.marker_update(name)
worldedit.player_notify(name, "region marked")
end,
})
@ -361,8 +362,7 @@ worldedit.register_command("unmark", {
local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name]
worldedit.pos1[name] = nil
worldedit.pos2[name] = nil
worldedit.mark_pos1(name)
worldedit.mark_pos2(name)
worldedit.marker_update(name)
worldedit.pos1[name] = pos1
worldedit.pos2[name] = pos2
worldedit.player_notify(name, "region unmarked")
@ -431,7 +431,7 @@ worldedit.register_command("p", {
})
worldedit.register_command("fixedpos", {
params = "set1/set2 x y z",
params = "set1/set2 <x> <y> <z>",
description = "Set a WorldEdit region position to the position at (<x>, <y>, <z>)",
privs = {worldedit=true},
parse = function(param)
@ -540,7 +540,7 @@ worldedit.register_command("param2", {
parse = function(param)
local param2 = tonumber(param)
if not param2 then
return false, "Invalid or missing param2 argument"
return false
elseif param2 < 0 or param2 > 255 then
return false, "Param2 is out of range (must be between 0 and 255 inclusive!)"
end
@ -554,7 +554,7 @@ worldedit.register_command("param2", {
})
worldedit.register_command("mix", {
params = "<node1> [<weighting1>] [<node2> [<weighting2>]] ...",
params = "<node1> [count1] <node2> [count2] ...",
description = "Fill the current WorldEdit region with a random mix of <node1>, ...",
privs = {worldedit=true},
require_pos = 2,
@ -774,7 +774,7 @@ end
worldedit.register_command("hollowcylinder", {
params = "x/y/z/? <length> <radius1> [radius2] <node>",
description = "Add hollow cylinder at WorldEdit position 1 along the x/y/z/? axis with length <length>, base radius <radius1> (and top radius [radius2]), composed of <node>",
description = "Add hollow cylinder at WorldEdit position 1 along the given axis with length <length>, base radius <radius1> (and top radius [radius2]), composed of <node>",
privs = {worldedit=true},
require_pos = 1,
parse = check_cylinder,
@ -795,7 +795,7 @@ worldedit.register_command("hollowcylinder", {
worldedit.register_command("cylinder", {
params = "x/y/z/? <length> <radius1> [radius2] <node>",
description = "Add cylinder at WorldEdit position 1 along the x/y/z/? axis with length <length>, base radius <radius1> (and top radius [radius2]), composed of <node>",
description = "Add cylinder at WorldEdit position 1 along the given axis with length <length>, base radius <radius1> (and top radius [radius2]), composed of <node>",
privs = {worldedit=true},
require_pos = 1,
parse = check_cylinder,
@ -828,7 +828,7 @@ end
worldedit.register_command("hollowpyramid", {
params = "x/y/z/? <height> <node>",
description = "Add hollow pyramid centered at WorldEdit position 1 along the x/y/z/? axis with height <height>, composed of <node>",
description = "Add hollow pyramid centered at WorldEdit position 1 along the given axis with height <height>, composed of <node>",
privs = {worldedit=true},
require_pos = 1,
parse = check_pyramid,
@ -848,7 +848,7 @@ worldedit.register_command("hollowpyramid", {
worldedit.register_command("pyramid", {
params = "x/y/z/? <height> <node>",
description = "Add pyramid centered at WorldEdit position 1 along the x/y/z/? axis with height <height>, composed of <node>",
description = "Add pyramid centered at WorldEdit position 1 along the given axis with height <height>, composed of <node>",
privs = {worldedit=true},
require_pos = 1,
parse = check_pyramid,
@ -893,7 +893,7 @@ worldedit.register_command("spiral", {
worldedit.register_command("copy", {
params = "x/y/z/? <amount>",
description = "Copy the current WorldEdit region along the x/y/z/? axis by <amount> nodes",
description = "Copy the current WorldEdit region along the given axis by <amount> nodes",
privs = {worldedit=true},
require_pos = 2,
parse = function(param)
@ -920,7 +920,7 @@ worldedit.register_command("copy", {
worldedit.register_command("move", {
params = "x/y/z/? <amount>",
description = "Move the current WorldEdit region along the x/y/z/? axis by <amount> nodes",
description = "Move the current WorldEdit region along the given axis by <amount> nodes",
privs = {worldedit=true},
require_pos = 2,
parse = function(param)
@ -945,15 +945,14 @@ worldedit.register_command("move", {
pos1[axis] = pos1[axis] + amount
pos2[axis] = pos2[axis] + amount
worldedit.mark_pos1(name)
worldedit.mark_pos2(name)
worldedit.marker_update(name)
worldedit.player_notify(name, count .. " nodes moved")
end,
})
worldedit.register_command("stack", {
params = "x/y/z/? <count>",
description = "Stack the current WorldEdit region along the x/y/z/? axis <count> times",
description = "Stack the current WorldEdit region along the given axis <count> times",
privs = {worldedit=true},
require_pos = 2,
parse = function(param)
@ -1037,8 +1036,7 @@ worldedit.register_command("stretch", {
--reset markers to scaled positions
worldedit.pos1[name] = pos1
worldedit.pos2[name] = pos2
worldedit.mark_pos1(name)
worldedit.mark_pos2(name)
worldedit.marker_update(name)
worldedit.player_notify(name, count .. " nodes stretched")
end,
@ -1046,7 +1044,7 @@ worldedit.register_command("stretch", {
worldedit.register_command("transpose", {
params = "x/y/z/? x/y/z/?",
description = "Transpose the current WorldEdit region along the x/y/z/? and x/y/z/? axes",
description = "Transpose the current WorldEdit region along the given axes",
privs = {worldedit=true},
require_pos = 2,
parse = function(param)
@ -1068,8 +1066,7 @@ worldedit.register_command("transpose", {
--reset markers to transposed positions
worldedit.pos1[name] = pos1
worldedit.pos2[name] = pos2
worldedit.mark_pos1(name)
worldedit.mark_pos2(name)
worldedit.marker_update(name)
worldedit.player_notify(name, count .. " nodes transposed")
end,
@ -1077,7 +1074,7 @@ worldedit.register_command("transpose", {
worldedit.register_command("flip", {
params = "x/y/z/?",
description = "Flip the current WorldEdit region along the x/y/z/? axis",
description = "Flip the current WorldEdit region along the given axis",
privs = {worldedit=true},
require_pos = 2,
parse = function(param)
@ -1095,8 +1092,8 @@ worldedit.register_command("flip", {
})
worldedit.register_command("rotate", {
params = "<axis> <angle>",
description = "Rotate the current WorldEdit region around the axis <axis> by angle <angle> (90 degree increment)",
params = "x/y/z/? <angle>",
description = "Rotate the current WorldEdit region around the given axis by angle <angle> (90 degree increment)",
privs = {worldedit=true},
require_pos = 2,
parse = function(param)
@ -1119,8 +1116,7 @@ worldedit.register_command("rotate", {
--reset markers to rotated positions
worldedit.pos1[name] = pos1
worldedit.pos2[name] = pos2
worldedit.mark_pos1(name)
worldedit.mark_pos2(name)
worldedit.marker_update(name)
worldedit.player_notify(name, count .. " nodes rotated")
end,
@ -1187,6 +1183,85 @@ worldedit.register_command("drain", {
end,
})
local clearcut_cache
local function clearcut(pos1, pos2)
-- decide which nodes we consider plants
if clearcut_cache == nil then
clearcut_cache = {}
for name, def in pairs(minetest.registered_nodes) do
local groups = def.groups or {}
if (
-- the groups say so
groups.flower or groups.grass or groups.flora or groups.plant or
groups.leaves or groups.tree or groups.leafdecay or groups.sapling or
-- drawtype heuristic
(def.is_ground_content and def.buildable_to and
(def.sunlight_propagates or not def.walkable)
and def.drawtype == "plantlike") or
-- if it's flammable, it probably needs to go too
(def.is_ground_content and not def.walkable and groups.flammable)
) then
clearcut_cache[name] = true
end
end
end
local plants = clearcut_cache
local count = 0
local prev, any
for x = pos1.x, pos2.x do
for z = pos1.z, pos2.z do
prev = false
any = false
-- first pass: remove floating nodes that would be left over
for y = pos1.y, pos2.y do
local n = minetest.get_node({x=x, y=y, z=z}).name
if plants[n] then
prev = true
any = true
elseif prev then
local def = minetest.registered_nodes[n] or {}
local groups = def.groups or {}
if groups.attached_node or (def.buildable_to and groups.falling_node) then
minetest.remove_node({x=x, y=y, z=z})
count = count + 1
else
prev = false
end
end
end
-- second pass: remove plants, top-to-bottom to avoid item drops
if any then
for y = pos2.y, pos1.y, -1 do
local n = minetest.get_node({x=x, y=y, z=z}).name
if plants[n] then
minetest.remove_node({x=x, y=y, z=z})
count = count + 1
end
end
end
end
end
return count
end
worldedit.register_command("clearcut", {
params = "",
description = "Remove any plant, tree or foilage-like nodes in the selected region",
privs = {worldedit=true},
require_pos = 2,
nodes_needed = check_region,
func = function(name)
local pos1, pos2 = worldedit.sort_pos(worldedit.pos1[name], worldedit.pos2[name])
local count = clearcut(pos1, pos2)
worldedit.player_notify(name, count .. " nodes removed")
end,
})
worldedit.register_command("hide", {
params = "",
description = "Hide all nodes in the current WorldEdit region non-destructively",
@ -1346,9 +1421,8 @@ worldedit.register_command("allocate", {
end
worldedit.pos1[name] = nodepos1
worldedit.mark_pos1(name)
worldedit.pos2[name] = nodepos2
worldedit.mark_pos2(name)
worldedit.marker_update(name)
worldedit.player_notify(name, count .. " nodes allocated")
end,

View File

@ -2,57 +2,60 @@ worldedit.marker1 = {}
worldedit.marker2 = {}
worldedit.marker_region = {}
local init_sentinel = "new" .. tostring(math.random(99999))
--marks worldedit region position 1
worldedit.mark_pos1 = function(name)
worldedit.mark_pos1 = function(name, region_too)
local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name]
if pos1 ~= nil then
--make area stay loaded
local manip = minetest.get_voxel_manip()
manip:read_from_map(pos1, pos1)
end
if worldedit.marker1[name] ~= nil then --marker already exists
worldedit.marker1[name]:remove() --remove marker
worldedit.marker1[name] = nil
end
if pos1 ~= nil then
--make area stay loaded
local manip = minetest.get_voxel_manip()
manip:read_from_map(pos1, pos1)
--add marker
worldedit.marker1[name] = minetest.add_entity(pos1, "worldedit:pos1")
worldedit.marker1[name] = minetest.add_entity(pos1, "worldedit:pos1", init_sentinel)
if worldedit.marker1[name] ~= nil then
worldedit.marker1[name]:get_luaentity().player_name = name
end
end
worldedit.mark_region(name)
if region_too == nil or region_too then
worldedit.mark_region(name)
end
end
--marks worldedit region position 2
worldedit.mark_pos2 = function(name)
worldedit.mark_pos2 = function(name, region_too)
local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name]
if pos2 ~= nil then
--make area stay loaded
local manip = minetest.get_voxel_manip()
manip:read_from_map(pos2, pos2)
end
if worldedit.marker2[name] ~= nil then --marker already exists
worldedit.marker2[name]:remove() --remove marker
worldedit.marker2[name] = nil
end
if pos2 ~= nil then
--make area stay loaded
local manip = minetest.get_voxel_manip()
manip:read_from_map(pos2, pos2)
--add marker
worldedit.marker2[name] = minetest.add_entity(pos2, "worldedit:pos2")
worldedit.marker2[name] = minetest.add_entity(pos2, "worldedit:pos2", init_sentinel)
if worldedit.marker2[name] ~= nil then
worldedit.marker2[name]:get_luaentity().player_name = name
end
end
worldedit.mark_region(name)
if region_too == nil or region_too then
worldedit.mark_region(name)
end
end
worldedit.mark_region = function(name)
local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name]
if worldedit.marker_region[name] ~= nil then --marker already exists
--wip: make the area stay loaded somehow
for _, entity in ipairs(worldedit.marker_region[name]) do
entity:remove()
end
@ -82,7 +85,8 @@ worldedit.mark_region = function(name)
--XY plane markers
for _, z in ipairs({pos1.z - 0.5, pos2.z + 0.5}) do
local marker = minetest.add_entity({x=pos1.x + sizex - 0.5, y=pos1.y + sizey - 0.5, z=z}, "worldedit:region_cube")
local entpos = {x=pos1.x + sizex - 0.5, y=pos1.y + sizey - 0.5, z=z}
local marker = minetest.add_entity(entpos, "worldedit:region_cube", init_sentinel)
if marker ~= nil then
marker:set_properties({
visual_size={x=sizex * 2, y=sizey * 2},
@ -95,7 +99,8 @@ worldedit.mark_region = function(name)
--YZ plane markers
for _, x in ipairs({pos1.x - 0.5, pos2.x + 0.5}) do
local marker = minetest.add_entity({x=x, y=pos1.y + sizey - 0.5, z=pos1.z + sizez - 0.5}, "worldedit:region_cube")
local entpos = {x=x, y=pos1.y + sizey - 0.5, z=pos1.z + sizez - 0.5}
local marker = minetest.add_entity(entpos, "worldedit:region_cube", init_sentinel)
if marker ~= nil then
marker:set_properties({
visual_size={x=sizez * 2, y=sizey * 2},
@ -111,6 +116,13 @@ worldedit.mark_region = function(name)
end
end
--convenience function that calls everything
worldedit.marker_update = function(name)
worldedit.mark_pos1(name, false)
worldedit.mark_pos2(name, false)
worldedit.mark_region(name)
end
minetest.register_entity(":worldedit:pos1", {
initial_properties = {
visual = "cube",
@ -120,9 +132,11 @@ minetest.register_entity(":worldedit:pos1", {
"worldedit_pos1.png", "worldedit_pos1.png"},
collisionbox = {-0.55, -0.55, -0.55, 0.55, 0.55, 0.55},
physical = false,
static_save = false,
},
on_step = function(self, dtime)
if worldedit.marker1[self.player_name] == nil then
on_activate = function(self, staticdata, dtime_s)
if staticdata ~= init_sentinel then
-- we were loaded from before static_save = false was added
self.object:remove()
end
end,
@ -144,9 +158,11 @@ minetest.register_entity(":worldedit:pos2", {
"worldedit_pos2.png", "worldedit_pos2.png"},
collisionbox = {-0.55, -0.55, -0.55, 0.55, 0.55, 0.55},
physical = false,
static_save = false,
},
on_step = function(self, dtime)
if worldedit.marker2[self.player_name] == nil then
on_activate = function(self, staticdata, dtime_s)
if staticdata ~= init_sentinel then
-- we were loaded from before static_save = false was added
self.object:remove()
end
end,
@ -165,11 +181,12 @@ minetest.register_entity(":worldedit:region_cube", {
textures = {"worldedit_cube.png"},
visual_size = {x=10, y=10},
physical = false,
static_save = false,
},
on_step = function(self, dtime)
if worldedit.marker_region[self.player_name] == nil then
on_activate = function(self, staticdata, dtime_s)
if staticdata ~= init_sentinel then
-- we were loaded from before static_save = false was added
self.object:remove()
return
end
end,
on_punch = function(self, hitter)