diff --git a/biome_lib/init.lua b/biome_lib/init.lua index e54f9a48..b8635b9d 100644 --- a/biome_lib/init.lua +++ b/biome_lib/init.lua @@ -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) diff --git a/bonemeal/init.lua b/bonemeal/init.lua index e05b1ac7..5784fd02 100644 --- a/bonemeal/init.lua +++ b/bonemeal/init.lua @@ -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 diff --git a/digidisplay/init.lua b/digidisplay/init.lua index 606842a3..8ede06cd 100644 --- a/digidisplay/init.lua +++ b/digidisplay/init.lua @@ -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}]") diff --git a/digistuff/camera.lua b/digistuff/camera.lua index 3a2a1296..e2287907 100644 --- a/digistuff/camera.lua +++ b/digistuff/camera.lua @@ -11,6 +11,7 @@ minetest.register_node("digistuff:camera", { { receptor = {} }, + _digistuff_channelcopier_fieldname = "channel", groups = {cracky=2}, paramtype = "light", paramtype2 = "facedir", diff --git a/digistuff/cardreader.lua b/digistuff/cardreader.lua index 3279e90b..2592d6d0 100644 --- a/digistuff/cardreader.lua +++ b/digistuff/cardreader.lua @@ -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 = { diff --git a/digistuff/channelcopier.lua b/digistuff/channelcopier.lua new file mode 100644 index 00000000..7a865144 --- /dev/null +++ b/digistuff/channelcopier.lua @@ -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 + + diff --git a/digistuff/depends.txt b/digistuff/depends.txt index a3bfdda9..5a8efa07 100644 --- a/digistuff/depends.txt +++ b/digistuff/depends.txt @@ -3,3 +3,4 @@ digilines mesecons? mesecons_mvps? screwdriver? +pipeworks? diff --git a/digistuff/detector.lua b/digistuff/detector.lua index f6542da5..8cb4170e 100644 --- a/digistuff/detector.lua +++ b/digistuff/detector.lua @@ -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 diff --git a/digistuff/init.lua b/digistuff/init.lua index 90d8ea0a..765ed746 100644 --- a/digistuff/init.lua +++ b/digistuff/init.lua @@ -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 diff --git a/digistuff/ioexpander.lua b/digistuff/ioexpander.lua index 7e257720..59da390b 100644 --- a/digistuff/ioexpander.lua +++ b/digistuff/ioexpander.lua @@ -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", diff --git a/digistuff/light.lua b/digistuff/light.lua index aeca08de..ec9b6df1 100644 --- a/digistuff/light.lua +++ b/digistuff/light.lua @@ -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, diff --git a/digistuff/nbsounds.lua b/digistuff/nbsounds.lua index 33952bfc..f9ccb2c1 100644 --- a/digistuff/nbsounds.lua +++ b/digistuff/nbsounds.lua @@ -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" diff --git a/digistuff/nic.lua b/digistuff/nic.lua index 50bf105f..03019fed 100644 --- a/digistuff/nic.lua +++ b/digistuff/nic.lua @@ -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", diff --git a/digistuff/noteblock.lua b/digistuff/noteblock.lua index 665c201e..80c49364 100644 --- a/digistuff/noteblock.lua +++ b/digistuff/noteblock.lua @@ -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 }, diff --git a/digistuff/panel.lua b/digistuff/panel.lua index d543af13..7ecc633d 100644 --- a/digistuff/panel.lua +++ b/digistuff/panel.lua @@ -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 = { diff --git a/digistuff/piezo.lua b/digistuff/piezo.lua index 39fce0d6..3f040c85 100644 --- a/digistuff/piezo.lua +++ b/digistuff/piezo.lua @@ -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", diff --git a/digistuff/piston.lua b/digistuff/piston.lua index 070da431..bd8860b8 100644 --- a/digistuff/piston.lua +++ b/digistuff/piston.lua @@ -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() diff --git a/digistuff/switches.lua b/digistuff/switches.lua index 87d7a876..6f184325 100644 --- a/digistuff/switches.lua +++ b/digistuff/switches.lua @@ -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", diff --git a/digistuff/textures/digistuff_channelcopier.png b/digistuff/textures/digistuff_channelcopier.png new file mode 100644 index 00000000..deb07e44 Binary files /dev/null and b/digistuff/textures/digistuff_channelcopier.png differ diff --git a/digistuff/timer.lua b/digistuff/timer.lua index 47555645..fd624f25 100644 --- a/digistuff/timer.lua +++ b/digistuff/timer.lua @@ -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) diff --git a/digistuff/touchscreen.lua b/digistuff/touchscreen.lua index 71191d5a..e3255f21 100644 --- a/digistuff/touchscreen.lua +++ b/digistuff/touchscreen.lua @@ -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 = { diff --git a/dreambuilder_hotbar/init.lua b/dreambuilder_hotbar/init.lua index a2f4de2a..c948e338 100644 --- a/dreambuilder_hotbar/init.lua +++ b/dreambuilder_hotbar/init.lua @@ -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 = {} diff --git a/dreambuilder_hotbar/textures/gui_hb_bg_10.png b/dreambuilder_hotbar/textures/gui_hb_bg_10.png new file mode 100644 index 00000000..555524ce Binary files /dev/null and b/dreambuilder_hotbar/textures/gui_hb_bg_10.png differ diff --git a/dreambuilder_mp_extras/customize-dreambuilder.sh b/dreambuilder_mp_extras/customize-dreambuilder.sh new file mode 100755 index 00000000..9bcd59bf --- /dev/null +++ b/dreambuilder_mp_extras/customize-dreambuilder.sh @@ -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 diff --git a/dreambuilder_mp_extras/update-dreambuilder-online-files.sh b/dreambuilder_mp_extras/update-dreambuilder-online-files.sh new file mode 100755 index 00000000..34dcc565 --- /dev/null +++ b/dreambuilder_mp_extras/update-dreambuilder-online-files.sh @@ -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" + diff --git a/farming/README.md b/farming/README.md index 128bf762..04cc853e 100644 --- a/farming/README.md +++ b/farming/README.md @@ -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) diff --git a/farming/compatibility.lua b/farming/compatibility.lua index 808000dc..dc9aff60 100644 --- a/farming/compatibility.lua +++ b/farming/compatibility.lua @@ -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}, diff --git a/farming/crops/corn.lua b/farming/crops/corn.lua index eef547a3..8e39fb79 100644 --- a/farming/crops/corn.lua +++ b/farming/crops/corn.lua @@ -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"}, } }) diff --git a/farming/crops/melon.lua b/farming/crops/melon.lua index 3fda9f6a..88f4a1bf 100644 --- a/farming/crops/melon.lua +++ b/farming/crops/melon.lua @@ -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" diff --git a/farming/crops/pepper.lua b/farming/crops/pepper.lua index 6770888c..ea07b4ea 100644 --- a/farming/crops/pepper.lua +++ b/farming/crops/pepper.lua @@ -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", diff --git a/farming/crops/pumpkin.lua b/farming/crops/pumpkin.lua index 1e937db7..57f8a149 100644 --- a/farming/crops/pumpkin.lua +++ b/farming/crops/pumpkin.lua @@ -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(), }) diff --git a/farming/crops/ryeoatrice.lua b/farming/crops/ryeoatrice.lua index d0646261..d362d09a 100644 --- a/farming/crops/ryeoatrice.lua +++ b/farming/crops/ryeoatrice.lua @@ -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}, }) diff --git a/farming/food.lua b/farming/food.lua index 00f32678..33106f08 100644 --- a/farming/food.lua +++ b/farming/food.lua @@ -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", diff --git a/farming/hoes.lua b/farming/hoes.lua index fc7823dc..050184bc 100644 --- a/farming/hoes.lua +++ b/farming/hoes.lua @@ -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"}, diff --git a/farming/init.lua b/farming/init.lua index 0625f0a0..dc03ef07 100644 --- a/farming/init.lua +++ b/farming/init.lua @@ -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 diff --git a/farming/locale/de.po b/farming/locale/de.po deleted file mode 100644 index 731b31d8..00000000 --- a/farming/locale/de.po +++ /dev/null @@ -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" diff --git a/farming/locale/de.txt b/farming/locale/de.txt new file mode 100644 index 00000000..a18f79e5 --- /dev/null +++ b/farming/locale/de.txt @@ -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= diff --git a/farming/locale/fr.po b/farming/locale/fr.po deleted file mode 100644 index 7b506403..00000000 --- a/farming/locale/fr.po +++ /dev/null @@ -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 , 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" diff --git a/farming/locale/fr.txt b/farming/locale/fr.txt new file mode 100644 index 00000000..04a5b1be --- /dev/null +++ b/farming/locale/fr.txt @@ -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 diff --git a/farming/locale/pt.po b/farming/locale/pt.po deleted file mode 100644 index bc4352fe..00000000 --- a/farming/locale/pt.po +++ /dev/null @@ -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 , 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 \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" diff --git a/farming/locale/pt.txt b/farming/locale/pt.txt new file mode 100644 index 00000000..a4c504cd --- /dev/null +++ b/farming/locale/pt.txt @@ -0,0 +1,195 @@ +# Portuguese translation of the farming mod by TenPlus1 +# textdomain: farming +# author: BrunoMine +# 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= diff --git a/farming/locale/ru.po b/farming/locale/ru.po deleted file mode 100644 index 607c96d7..00000000 --- a/farming/locale/ru.po +++ /dev/null @@ -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 , 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 "хлеб" diff --git a/farming/locale/ru.txt b/farming/locale/ru.txt new file mode 100644 index 00000000..8235b3fd --- /dev/null +++ b/farming/locale/ru.txt @@ -0,0 +1,195 @@ +# Russian translation of the farming mod by TenPlus1 +# textdomain: farming +# author: codexp +# 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= diff --git a/farming/locale/template.pot b/farming/locale/template.pot deleted file mode 100644 index 210d9465..00000000 --- a/farming/locale/template.pot +++ /dev/null @@ -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 , 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 \n" -"Language-Team: LANGUAGE \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 "" diff --git a/farming/locale/template.txt b/farming/locale/template.txt new file mode 100644 index 00000000..905d9e00 --- /dev/null +++ b/farming/locale/template.txt @@ -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= diff --git a/farming/settingtypes.txt b/farming/settingtypes.txt new file mode 100644 index 00000000..05f50afb --- /dev/null +++ b/farming/settingtypes.txt @@ -0,0 +1,2 @@ +# Contains a value used for speed of crop growth in seconds +farming_stage_length (Farming Stage Length) float 160.0 diff --git a/infrastructure/advanced_automatic_warning_device.lua b/infrastructure/advanced_automatic_warning_device.lua index f6fc08dc..1049c560 100644 --- a/infrastructure/advanced_automatic_warning_device.lua +++ b/infrastructure/advanced_automatic_warning_device.lua @@ -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) diff --git a/infrastructure/advanced_boom_barrier.lua b/infrastructure/advanced_boom_barrier.lua index 67a9b8b5..ffc04a69 100644 --- a/infrastructure/advanced_boom_barrier.lua +++ b/infrastructure/advanced_boom_barrier.lua @@ -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 diff --git a/infrastructure/advanced_lane_control_lights.lua b/infrastructure/advanced_lane_control_lights.lua index 94d7ce1a..4c75a06f 100644 --- a/infrastructure/advanced_lane_control_lights.lua +++ b/infrastructure/advanced_lane_control_lights.lua @@ -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", diff --git a/infrastructure/sounds/infrastructure_ebell.ogg b/infrastructure/sounds/infrastructure_ebell.ogg deleted file mode 100644 index d59d1b9b..00000000 Binary files a/infrastructure/sounds/infrastructure_ebell.ogg and /dev/null differ diff --git a/infrastructure/sounds/infrastructure_ebell_de.ogg b/infrastructure/sounds/infrastructure_ebell_de.ogg new file mode 100644 index 00000000..78b1c75f Binary files /dev/null and b/infrastructure/sounds/infrastructure_ebell_de.ogg differ diff --git a/infrastructure/sounds/infrastructure_ebell_gstype2.ogg b/infrastructure/sounds/infrastructure_ebell_gstype2.ogg new file mode 100644 index 00000000..be5c09b8 Binary files /dev/null and b/infrastructure/sounds/infrastructure_ebell_gstype2.ogg differ diff --git a/infrastructure/sounds/infrastructure_ebell_nl.ogg b/infrastructure/sounds/infrastructure_ebell_nl.ogg new file mode 100644 index 00000000..74b24ff6 Binary files /dev/null and b/infrastructure/sounds/infrastructure_ebell_nl.ogg differ diff --git a/infrastructure/sounds/infrastructure_ebell_safetrantype1.ogg b/infrastructure/sounds/infrastructure_ebell_safetrantype1.ogg new file mode 100644 index 00000000..7aa48284 Binary files /dev/null and b/infrastructure/sounds/infrastructure_ebell_safetrantype1.ogg differ diff --git a/infrastructure/sounds/infrastructure_ebell_safetrantype3.ogg b/infrastructure/sounds/infrastructure_ebell_safetrantype3.ogg new file mode 100644 index 00000000..86ba1cc0 Binary files /dev/null and b/infrastructure/sounds/infrastructure_ebell_safetrantype3.ogg differ diff --git a/infrastructure/sounds/infrastructure_ebell_uk.ogg b/infrastructure/sounds/infrastructure_ebell_uk.ogg new file mode 100644 index 00000000..2063af95 Binary files /dev/null and b/infrastructure/sounds/infrastructure_ebell_uk.ogg differ diff --git a/infrastructure/sounds/infrastructure_ebell_wch.ogg b/infrastructure/sounds/infrastructure_ebell_wch.ogg new file mode 100644 index 00000000..14234606 Binary files /dev/null and b/infrastructure/sounds/infrastructure_ebell_wch.ogg differ diff --git a/infrastructure/textures/infrastructure_ebell_sides.png b/infrastructure/textures/infrastructure_ebell_sides.png new file mode 100644 index 00000000..7631fb61 Binary files /dev/null and b/infrastructure/textures/infrastructure_ebell_sides.png differ diff --git a/inventory_sorter/README b/inventory_sorter/README deleted file mode 100644 index 2fe55bbd..00000000 --- a/inventory_sorter/README +++ /dev/null @@ -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 diff --git a/inventory_sorter/depends.txt b/inventory_sorter/depends.txt deleted file mode 100644 index 4ad96d51..00000000 --- a/inventory_sorter/depends.txt +++ /dev/null @@ -1 +0,0 @@ -default diff --git a/inventory_sorter/init.lua b/inventory_sorter/init.lua deleted file mode 100644 index b758529d..00000000 --- a/inventory_sorter/init.lua +++ /dev/null @@ -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 -}) diff --git a/inventory_sorter/textures/inventory_sorter_wand.png b/inventory_sorter/textures/inventory_sorter_wand.png deleted file mode 100644 index 9ebb4885..00000000 Binary files a/inventory_sorter/textures/inventory_sorter_wand.png and /dev/null differ diff --git a/inventory_sorter/textures/inventory_sorter_wand_amount.png b/inventory_sorter/textures/inventory_sorter_wand_amount.png deleted file mode 120000 index d17e14b3..00000000 --- a/inventory_sorter/textures/inventory_sorter_wand_amount.png +++ /dev/null @@ -1 +0,0 @@ -inventory_sorter_wand.png \ No newline at end of file diff --git a/inventory_sorter/textures/inventory_sorter_wand_wear.png b/inventory_sorter/textures/inventory_sorter_wand_wear.png deleted file mode 120000 index d17e14b3..00000000 --- a/inventory_sorter/textures/inventory_sorter_wand_wear.png +++ /dev/null @@ -1 +0,0 @@ -inventory_sorter_wand.png \ No newline at end of file diff --git a/inventory_sorter/textures/inventory_sorter_wand_wise.png b/inventory_sorter/textures/inventory_sorter_wand_wise.png deleted file mode 120000 index d17e14b3..00000000 --- a/inventory_sorter/textures/inventory_sorter_wand_wise.png +++ /dev/null @@ -1 +0,0 @@ -inventory_sorter_wand.png \ No newline at end of file diff --git a/maptools/craftitems.lua b/maptools/craftitems.lua index 58127bfa..74aa8d87 100644 --- a/maptools/craftitems.lua +++ b/maptools/craftitems.lua @@ -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", { diff --git a/maptools/mod.conf b/maptools/mod.conf index 363f651b..697858ba 100644 --- a/maptools/mod.conf +++ b/maptools/mod.conf @@ -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 diff --git a/mesecons_mvps/init.lua b/mesecons_mvps/init.lua index 807692e2..3792d26f 100644 --- a/mesecons_mvps/init.lua +++ b/mesecons_mvps/init.lua @@ -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])) diff --git a/moretrees/mod.conf b/moretrees/mod.conf index 4eef24a1..4d9e1ef5 100644 --- a/moretrees/mod.conf +++ b/moretrees/mod.conf @@ -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 diff --git a/moretrees/node_defs.lua b/moretrees/node_defs.lua index 9fb42252..0fbec2c2 100644 --- a/moretrees/node_defs.lua +++ b/moretrees/node_defs.lua @@ -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 diff --git a/pipeworks/signal_tubes.lua b/pipeworks/signal_tubes.lua index 4b148d3e..b59586e6 100644 --- a/pipeworks/signal_tubes.lua +++ b/pipeworks/signal_tubes.lua @@ -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}, diff --git a/rgblightstone/README b/rgblightstone/README index 1b042a06..df7488e1 100644 --- a/rgblightstone/README +++ b/rgblightstone/README @@ -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. diff --git a/rgblightstone/depends.txt b/rgblightstone/depends.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/rgblightstone/init.lua b/rgblightstone/init.lua index 812ca2b2..36714daf 100644 --- a/rgblightstone/init.lua +++ b/rgblightstone/init.lua @@ -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",""} + } +}) diff --git a/rgblightstone/mod.conf b/rgblightstone/mod.conf new file mode 100644 index 00000000..59518e81 --- /dev/null +++ b/rgblightstone/mod.conf @@ -0,0 +1,2 @@ +name = rgblightstone +description = RGB Lightstone diff --git a/signs_lib/api.lua b/signs_lib/api.lua index d15be3ff..aad4d361 100644 --- a/signs_lib/api.lua +++ b/signs_lib/api.lua @@ -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 diff --git a/technic_chests/register.lua b/technic_chests/register.lua index 0d5150e3..9f63617b 100644 --- a/technic_chests/register.lua +++ b/technic_chests/register.lua @@ -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 diff --git a/trafficlight/init.lua b/trafficlight/init.lua index f0991280..df677f25 100644 --- a/trafficlight/init.lua +++ b/trafficlight/init.lua @@ -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}, diff --git a/unifiedmesecons/init.lua b/unifiedmesecons/init.lua index de346c32..39ec8c01 100644 --- a/unifiedmesecons/init.lua +++ b/unifiedmesecons/init.lua @@ -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", diff --git a/worldedit/cuboid.lua b/worldedit/cuboid.lua index d98e25c3..d27e2333 100644 --- a/worldedit/cuboid.lua +++ b/worldedit/cuboid.lua @@ -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) diff --git a/worldedit_commands/cuboid.lua b/worldedit_commands/cuboid.lua index d12ace8f..93e45fae 100644 --- a/worldedit_commands/cuboid.lua +++ b/worldedit_commands/cuboid.lua @@ -1,5 +1,5 @@ worldedit.register_command("outset", { - params = "[h|v] ", + params = "[h/v] ", 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] ", + params = "[h/v] ", 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] [+|-]", - description = "Moves the selection region. Does not move contents.", + params = "x/y/z/?/up/down/left/right/front/back [+/-]", + 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 = "[+|-] [reverse-amount]", - description = "expand the selection in one or two directions at once", + params = "[+/-]x/y/z/?/up/down/left/right/front/back [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 = "[+|-] [reverse-amount]", - description = "contract the selection in one or two directions at once", + params = "[+/-]x/y/z/?/up/down/left/right/front/back [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 = "/( ) [parameters]", + description = "Select a cube with side length around position 1 and run 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, +}) diff --git a/worldedit_commands/init.lua b/worldedit_commands/init.lua index 91c16443..4e5edbe4 100644 --- a/worldedit_commands/init.lua +++ b/worldedit_commands/init.lua @@ -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 ", description = "Set a WorldEdit region position to the position at (, , )", 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 = " [] [ []] ...", + params = " [count1] [count2] ...", description = "Fill the current WorldEdit region with a random mix of , ...", privs = {worldedit=true}, require_pos = 2, @@ -774,7 +774,7 @@ end worldedit.register_command("hollowcylinder", { params = "x/y/z/? [radius2] ", - description = "Add hollow cylinder at WorldEdit position 1 along the x/y/z/? axis with length , base radius (and top radius [radius2]), composed of ", + description = "Add hollow cylinder at WorldEdit position 1 along the given axis with length , base radius (and top radius [radius2]), composed of ", 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/? [radius2] ", - description = "Add cylinder at WorldEdit position 1 along the x/y/z/? axis with length , base radius (and top radius [radius2]), composed of ", + description = "Add cylinder at WorldEdit position 1 along the given axis with length , base radius (and top radius [radius2]), composed of ", privs = {worldedit=true}, require_pos = 1, parse = check_cylinder, @@ -828,7 +828,7 @@ end worldedit.register_command("hollowpyramid", { params = "x/y/z/? ", - description = "Add hollow pyramid centered at WorldEdit position 1 along the x/y/z/? axis with height , composed of ", + description = "Add hollow pyramid centered at WorldEdit position 1 along the given axis with height , composed of ", 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/? ", - description = "Add pyramid centered at WorldEdit position 1 along the x/y/z/? axis with height , composed of ", + description = "Add pyramid centered at WorldEdit position 1 along the given axis with height , composed of ", 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/? ", - description = "Copy the current WorldEdit region along the x/y/z/? axis by nodes", + description = "Copy the current WorldEdit region along the given axis by 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/? ", - description = "Move the current WorldEdit region along the x/y/z/? axis by nodes", + description = "Move the current WorldEdit region along the given axis by 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/? ", - description = "Stack the current WorldEdit region along the x/y/z/? axis times", + description = "Stack the current WorldEdit region along the given axis 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 = " ", - description = "Rotate the current WorldEdit region around the axis by angle (90 degree increment)", + params = "x/y/z/? ", + description = "Rotate the current WorldEdit region around the given axis by 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, diff --git a/worldedit_commands/mark.lua b/worldedit_commands/mark.lua index cb45075c..a195280b 100644 --- a/worldedit_commands/mark.lua +++ b/worldedit_commands/mark.lua @@ -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)