76 Commits

Author SHA1 Message Date
23b96b9db6 Ajoute messages de chargement des mods dans le journal "action" 2018-12-31 17:26:41 +01:00
2b2faeca02 Fix crash when using the playerkiller
Fixes #9
2018-08-20 10:42:11 +02:00
8a56370ce8 Allow using templates on multiple luacontrollers
Fixes #8
Patch submitted by @oiaohm
2018-02-27 16:33:18 +01:00
ce9544d2bf Remove mod storage checks 2017-06-23 13:47:41 +02:00
4c81b43032 mesechest: add crafts 2017-06-10 10:11:05 +02:00
89b1fe18c5 mesechest: colorize textures 2017-06-09 20:44:25 +02:00
ae5a96cb42 Mesechest: make mesechest work with last mt_game version 2017-06-09 20:44:25 +02:00
fd21b16c02 Mesechest: limit API functions overwriting 2017-06-09 20:44:25 +02:00
6291b4c001 Add the mesechest 2017-06-09 20:44:25 +02:00
dbd5c4cf99 Luacontroller tool: add counter and clock templates (#7) 2017-06-08 16:33:53 +02:00
400e90c9ca Fix luacontroller tool crash
Set "sender" parameter when executing on_receive_fields callback
2017-06-08 16:01:33 +02:00
aa2ae82cc2 Merge branch 'AntumDeluge-settings' 2017-06-04 17:56:30 +02:00
d580e0e974 Merge branch 'master' into settings 2017-06-04 17:57:16 +02:00
6662f92902 Remove empty file .gitmodules 2017-06-03 15:34:39 +02:00
7839aefcdc Add 'moremesecons_luablock/md5_lua/' from commit 'e8cd75ce397da6dd75ddb37cb07eb31663743223'
git-subtree-dir: moremesecons_luablock/md5_lua
git-subtree-mainline: 79e856494a
git-subtree-split: e8cd75ce39
2017-06-03 15:32:33 +02:00
79e856494a Remove md5_lua submodule
This prepares re-adding it as a subtree.
2017-06-03 15:32:05 +02:00
180167110f LuaBlock: store md5 checksums
This avoids changing the LuaBlock code by setting its metadata.
2017-06-02 14:51:10 +02:00
8cac3f8f70 Add a craft for the induction transmitter 2017-05-28 18:02:31 +02:00
482dd4df93 Add an induction transmitter
This node makes the signal goes two nodes forward instead of one
2017-05-28 15:16:01 +02:00
d542d15fa4 Replace deprecated methods:
- 'setting_get' with 'settings:get'
- 'setting_getbool' with 'settings:get_bool'
2017-05-13 01:52:42 -07:00
e8cd75ce39 add 1.1.0 rockspec 2016-07-15 01:30:59 +02:00
520f90795b adds description of iterative version to README 2016-07-15 01:29:04 +02:00
58bfa546fe bump version to 1.1.0. Add changelog 2016-07-15 01:21:56 +02:00
172176713e Merge branch 'pgimeno-incremental-md5' 2016-07-15 01:17:41 +02:00
86da43dbda makes update return self 2016-07-15 01:16:54 +02:00
46b50003f8 Add a simple unit test for the incremental version 2016-07-04 11:18:28 +02:00
51febea6c3 Implement incremental MD5
Two new functions:

md5.new(): returns a new MD5 state object with two methods:
 - MD5State:update(s) - adds the string s to the calculation
 - MD5State:finish()  - returns the final MD5 as a binary string

md5.tohex(): converts to hexadecimal the binary string returned by md5.sum() and MD5State:finish()
2016-07-02 21:31:54 +02:00
21d22c1868 Merge pull request #11 from kikito/pgimeno-fix-large-strings
Pgimeno fix large strings
2016-07-02 20:38:20 +02:00
5297100c7c luacheck install fix
remove luacheck
2016-07-02 20:26:40 +02:00
8603af5e23 delete long example which is too slow in lua 5.1 2016-07-02 18:32:44 +02:00
7e5623a206 luacheck install fix 2016-07-02 18:22:53 +02:00
a2144276e1 Merge branch 'fix-large-strings' of https://github.com/pgimeno/md5.lua into pgimeno-fix-large-strings 2016-07-02 18:04:23 +02:00
51347acd88 renames variables to avoid luacheck errors 2016-07-02 18:03:49 +02:00
1f6eba9a7b updates travis 2016-07-02 18:03:28 +02:00
dd10f1c9de Fix #4 by limiting the sum output to 32 bits. 2016-07-02 10:44:35 +02:00
467f30efb6 Add large strings test to demonstrate failure in current version. 2016-07-02 10:42:54 +02:00
7fc429b519 add rockspec 2015-04-06 21:13:45 +02:00
42b3d5ae5a bump version 2015-04-06 21:11:54 +02:00
bd1dd4bd0f fix typo in LuaJIT 2015-04-06 20:57:59 +02:00
d3c97f950f fix error when adding if 2015-04-06 20:54:06 +02:00
9fcb45d9f2 do not normalize luajit functions 2015-04-06 20:44:11 +02:00
686c18c49e add rockspec for 1.0.1 2015-04-06 18:52:54 +02:00
4dfe7a0698 bump version 2015-04-06 18:47:51 +02:00
f253f5ffd5 Use hex literals everywhere 2015-04-06 18:34:11 +02:00
4e68bf98a8 do not create global variables in 5.1 2015-04-06 18:32:11 +02:00
b096b1f3c1 Revert "separate lua 5.1 functions into number-based and table-based"
This reverts commit 65d03bceef.
2015-04-06 18:30:32 +02:00
1e7902f65b Revert "typo"
This reverts commit 55cff74afc.
2015-04-06 18:30:29 +02:00
f70bf13a41 Revert "Use hex literals everywhere"
This reverts commit 1212664fb7.
2015-04-06 18:30:24 +02:00
1212664fb7 Use hex literals everywhere 2015-04-06 18:21:52 +02:00
55cff74afc typo 2015-04-06 18:17:23 +02:00
65d03bceef separate lua 5.1 functions into number-based and table-based 2015-04-06 18:13:47 +02:00
77ac109e66 Remove unnecessary calculations
The “expand” before the loops ensures that both tables (tbl_m and
tbl_n) have the same length
2015-04-06 17:41:57 +02:00
907bbd1655 Remove unneeded locals 2015-04-06 17:39:17 +02:00
858b23b28d refactor to_bits 2015-04-06 17:37:16 +02:00
332517912d refactor tbl2number 2015-04-06 17:24:46 +02:00
a08ab4f93d Refactor expand in Lua 5.1 2015-04-06 17:23:12 +02:00
0950963cd3 Remove unnecessary checks in lua 5.1 2015-04-06 17:22:48 +02:00
6a83ce8c21 typo 2015-04-06 17:09:13 +02:00
60d897e229 attempt to fix lua 5.2 2015-04-06 16:54:24 +02:00
cfbceec4ac attempt to fix travis 2015-04-06 14:22:03 +02:00
d1fc9bc9f7 add test for long string. Related with #4 2015-04-06 14:09:32 +02:00
9a87570317 add Positive07 to credits 2015-02-09 13:07:59 +01:00
1c76e92944 add rockspecs 2015-02-09 13:05:06 +01:00
b97a79f022 Revert "up luarocks a little more"
This reverts commit af6e779eb8.
2015-02-09 12:16:13 +01:00
af6e779eb8 up luarocks a little more 2015-02-09 12:06:47 +01:00
b75e79ea6d downgrade luarocks 2015-02-09 11:40:43 +01:00
98844a67fe update luarocks version in travis 2015-02-09 11:38:22 +01:00
c3ed7b8713 add travis 2015-02-09 11:27:21 +01:00
3289e9fa7c change README 2015-02-09 11:16:47 +01:00
b56a8a1e93 Merge pull request #2 from Positive07/patch-1
Use BitOp or Bit32 libraries where available
2015-02-09 11:13:46 +01:00
57cc66eba6 Checking the libs doesnt error
Added pcalls instead of raw requires as suggested by Kikito
2015-02-08 07:28:31 -03:00
e7df9d53cf Made md5.lua use BitOp or Bit32 libraries where available 2015-02-07 23:13:01 -03:00
191b026807 Update README.md 2014-02-21 10:09:19 +01:00
a34df17b17 added VERSION, DESCRIPTION, URL and LICENSE 2013-09-14 14:14:06 +02:00
a9905a9c13 more cleanup 2013-08-30 19:16:49 +02:00
dab1b130bd initial commit with working implementation, readme and license 2013-08-30 19:12:29 +02:00
34 changed files with 1010 additions and 67 deletions

View File

@ -64,3 +64,5 @@ minetest.register_craft({
recipe = { {"mesecons_blinkyplant:blinky_plant_off"},
{"default:mese_crystal_fragment"},}
})
minetest.log("action", "[moremesecons_adjustable_blinky_plant] loaded.")

View File

@ -136,3 +136,5 @@ minetest.register_abm({
end
end,
})
minetest.log("action", "[moremesecons_adjustable_player_detector] loaded.")

View File

@ -172,3 +172,5 @@ minetest.register_craft({
{"group:mesecon_conductor_craftable","default:mese_crystal","group:mesecon_conductor_craftable"}
}
})
minetest.log("action", "[moremesecons_commandblock] loaded.")

View File

@ -79,3 +79,5 @@ minetest.register_craft({
output = "moremesecons_conductor_signalchanger:conductor_signalchanger_off",
recipe = {{"group:mesecon_conductor_craftable","moremesecons_signalchanger:signalchanger_off"}}
})
minetest.log("action", "[moremesecons_conductor_signalchanger] loaded.")

View File

@ -93,3 +93,5 @@ minetest.register_craft({
output = "moremesecons_dual_delayer:dual_delayer_00 2",
recipe = {"mesecons_delayer:delayer_off_1", "mesecons_delayer:delayer_off_1"}
})
minetest.log("action", "[moremesecons_dual_delayer] loaded.")

View File

@ -139,3 +139,5 @@ minetest.register_abm({
end
end,
})
minetest.log("action", "[moremesecons_entity_detector] loaded.")

View File

@ -46,3 +46,5 @@ minetest.register_craft({
recipe = { {"default:torch"},
{"default:mese_crystal_fragment"},}
})
minetest.log("action", "[moremesecons_igniter] loaded.")

View File

@ -0,0 +1,3 @@
mesecons
mesecons_torch
default

View File

@ -0,0 +1,106 @@
local function induction_transmitter_get_input_rules(node)
-- All horizontal rules, except the output
local 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}
}
for i, r in ipairs(rules) do
if vector.equals(r, minetest.facedir_to_dir(node.param2)) then
table.remove(rules, i)
end
end
return rules
end
local function induction_transmitter_get_output_rules(node)
return {vector.multiply(minetest.facedir_to_dir(node.param2), 2)}
end
local function induction_transmitter_get_virtual_output_rules(node)
return {minetest.facedir_to_dir(node.param2)}
end
local function act(pos, node, state)
minetest.swap_node(pos, {name = "moremesecons_induction_transmitter:induction_transmitter_"..state, param2 = node.param2})
local dir = minetest.facedir_to_dir(node.param2)
local target_pos = vector.add(pos, vector.multiply(dir, 2))
local target_node = minetest.get_node(target_pos)
if mesecon.is_effector(target_node.name) then
-- Switch on an aside node, so it sends a signal to the target node
local aside_rule = mesecon.effector_get_rules(target_node)[1]
if not aside_rule then
return
end
mesecon["receptor_"..state](vector.add(target_pos, aside_rule), {vector.multiply(aside_rule, -1)})
elseif mesecon.is_conductor(target_node.name) then
-- Switch on the conductor itself
mesecon["receptor_"..state](target_pos, mesecon.conductor_get_rules(target_node))
end
end
mesecon.register_node("moremesecons_induction_transmitter:induction_transmitter", {
description = "Induction Transmitter",
drawtype = "nodebox",
paramtype = "light",
paramtype2 = "facedir",
node_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, 0.125, 0.5, 0.5, 0.5},
{-0.375, -0.375, -0.1875, 0.375, 0.375, 0.125},
{-0.25, -0.25, -0.5, 0.25, 0.25, -0.1875},
}
},
selection_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, 0.125, 0.5, 0.5, 0.5},
{-0.375, -0.375, -0.1875, 0.375, 0.375, 0.125},
{-0.25, -0.25, -0.5, 0.25, 0.25, -0.1875},
},
},
}, {
tiles = {"default_mese_block.png"},
groups = {cracky = 3},
mesecons = {
receptor = {
state = mesecon.state.off,
rules = induction_transmitter_get_output_rules
},
effector = {
rules = induction_transmitter_get_input_rules,
action_on = function(pos, node)
act(pos, node, "on")
end
}
}
}, {
light_source = 5,
tiles = {"default_mese_block.png^[brighten"},
groups = {cracky = 3, not_in_creative_inventory = 1},
mesecons = {
receptor = {
state = mesecon.state.on,
rules = induction_transmitter_get_output_rules
},
effector = {
rules = induction_transmitter_get_input_rules,
action_off = function(pos, node)
act(pos, node, "off")
end
}
}
})
minetest.register_craft({
output = "moremesecons_induction_transmitter:induction_transmitter_off",
recipe = {
{"default:mese_crystal_fragment", "mesecons_torch:mesecon_torch_on", "default:mese_crystal_fragment"},
{"", "default:mese_crystal_fragment", ""}
}
})
minetest.log("action", "[moremesecons_induction_transmitter] loaded.")

View File

@ -82,3 +82,5 @@ minetest.register_craft({
output = "moremesecons_injector_controller:injector_controller_off",
recipe = {{"mesecons_blinkyplant:blinky_plant_off","mesecons_gates:and_off"}}
})
minetest.log("action", "[moremesecons_injector_controller] loaded.")

View File

@ -3,21 +3,11 @@ local get = vector.get_data_from_pos
local set = vector.set_data_to_pos
local remove = vector.remove_data_from_pos
local jammers
local enable_lbm = moremesecons.setting("jammer", "enable_lbm", false)
local storage
if not minetest.get_mod_storage then
enable_lbm = true -- No mod storage (<= 0.4.15-stable): force registration of LBM
jammers = {}
else
storage = minetest.get_mod_storage()
jammers = minetest.deserialize(storage:get_string("jammers")) or {}
end
local storage = minetest.get_mod_storage()
local jammers = minetest.deserialize(storage:get_string("jammers")) or {}
local function update_mod_storage()
if not storage then
return
end
storage:set_string("jammers", minetest.serialize(jammers))
end
@ -143,7 +133,7 @@ minetest.register_craft({
{"", "moremesecons_wireless:jammer_off", ""}}
})
if enable_lbm then
if moremesecons.setting("jammer", "enable_lbm", false) then
minetest.register_lbm({
name = "moremesecons_jammer:add_jammer",
nodenames = {"moremesecons_jammer:jammer_on"},
@ -151,3 +141,5 @@ if enable_lbm then
action = add_jammer
})
end
minetest.log("action", "[moremesecons_jammer] loaded.")

View File

@ -1 +1,2 @@
mesecons
moremesecons_utils

View File

@ -1,3 +1,26 @@
local md5 = dofile(minetest.get_modpath(minetest.get_current_modname()).."/md5_lua/md5.lua")
local storage = minetest.get_mod_storage()
local hash_table = minetest.deserialize(storage:get_string("hash_table")) or {}
local function set_md5(pos, code)
vector.set_data_to_pos(hash_table, pos.z,pos.y,pos.x, md5.sum(code))
storage:set_string("hash_table", minetest.serialize(hash_table))
end
local function check_md5(pos, code)
local stored_sum = vector.get_data_from_pos(hash_table, pos.z,pos.y,pos.x)
if not stored_sum then
-- Legacy
set_md5(pos, code)
return true
end
if md5.sum(code) ~= stored_sum then
return false
end
return true
end
local function make_formspec(meta, pos)
local code = meta:get_string("code")
local errmsg = minetest.formspec_escape(meta:get_string("errmsg"))
@ -74,6 +97,7 @@ minetest.register_node("moremesecons_luablock:luablock", {
end
meta:set_string("code", fields.code)
set_md5(pos, fields.code)
make_formspec(meta, pos)
end,
can_dig = function(pos, player)
@ -87,6 +111,10 @@ minetest.register_node("moremesecons_luablock:luablock", {
if code == "" then
return
end
if not check_md5(npos, code) then
minetest.log("warning", "[moremesecons_luablock] Code of LuaBlock at pos "..minetest.pos_to_string(npos).." does not match with its md5 checksum!")
return
end
-- We do absolutely no check there.
-- There is no limitation in the number of instruction the LuaBlock can execute
-- or the usage it can make of loops.
@ -115,3 +143,5 @@ minetest.register_node("moremesecons_luablock:luablock", {
end
}}
})
minetest.log("action", "[moremesecons_luablock] loaded.")

View File

@ -0,0 +1,34 @@
language: python
sudo: false
env:
- LUA="lua=5.1"
- LUA="lua=5.2"
- LUA="lua=5.3"
- LUA="luajit=2.0"
- LUA="luajit=2.1"
before_install:
- pip install hererocks
- hererocks lua_install -r^ --$LUA
- export PATH=$PATH:$PWD/lua_install/bin # Add directory with all installed binaries to PATH
install:
- luarocks install busted
- luarocks install luacov
- luarocks install luacov-coveralls
script:
- busted --verbose --coverage
after_success:
- luacov-coveralls --exclude $TRAVIS_BUILD_DIR/lua_install
branches:
except:
- gh-pages
notifications:
email:
on_success: change
on_failure: always

View File

@ -0,0 +1,5 @@
# 1.1.0
* Fixes error with long strings in Lua 5.1 (@pgimeno)
* Adds incremental mode (@pgimeno)

View File

@ -0,0 +1,20 @@
Copyright (c) 2013 Enrique García Cota + Adam Baldwin + hanzao + Equi 4 Software
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@ -0,0 +1,55 @@
md5.lua [![Build Status](https://travis-ci.org/kikito/md5.lua.svg)](https://travis-ci.org/kikito/md5.lua)
=========================================================================================================
This pure-Lua module computes md5 in Lua 5.1, Lua 5.2 and LuaJIT, using native bit-manipulation libraries when available, and falling back to table-based manipulation of integers in 5.1.
It implements md5.sum and md5.sumhex like the [kernel project md5 package](http://www.keplerproject.org/md5/), but it's done completely in Lua, with no dependencies on other libs or C files.
Usage
=====
Simple example:
local md5 = require 'md5'
local md5_as_data = md5.sum(message) -- returns raw bytes
local md5_as_hex = md5.sumhexa(message) -- returns a hex string
local md5_as_hex2 = md5.tohex(md5_as_data) -- returns the same string as md5_as_hex
Incremental example (for computing md5 of streams, or big files which have to be loaded in chunks - new since 1.1.0):
local m = md5.new()
m:update('some bytes')
m:update('some more bytes')
m:update('etc')
return md5.tohex(m:finish())
Credits
=======
This is a cleanup of an implementation by Adam Baldwin - https://gist.github.com/evilpacket/3647908
Which in turn was a mix of the bitwise lib, http://luaforge.net/projects/bit/ by hanzhao (`abrash_han - at - hotmail.com`),
and http://equi4.com/md5/md5calc.lua, by Equi 4 Software.
Lua 5.2 and LuaJIT compatibility by [Positive07](https://github.com/kikito/md5.lua/pull/2)
A very important fix and the incremental variant by [pgimeno](https://github.com/kikito/md5.lua/pull/10)
License
=======
This library, as well as all the previous ones in which is based, is released under the MIT license (See license file for details).
Specs
=====
The specs for this library are implemented with [busted](http://ovinelabs.com/busted/). In order to run them, install busted and then:
cd path/to/where/the/spec/folder/is
busted

View File

@ -0,0 +1,396 @@
local md5 = {
_VERSION = "md5.lua 1.1.0",
_DESCRIPTION = "MD5 computation in Lua (5.1-3, LuaJIT)",
_URL = "https://github.com/kikito/md5.lua",
_LICENSE = [[
MIT LICENSE
Copyright (c) 2013 Enrique García Cota + Adam Baldwin + hanzao + Equi 4 Software
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
]]
}
-- bit lib implementions
local char, byte, format, rep, sub =
string.char, string.byte, string.format, string.rep, string.sub
local bit_or, bit_and, bit_not, bit_xor, bit_rshift, bit_lshift
local ok, bit = pcall(require, 'bit')
if ok then
bit_or, bit_and, bit_not, bit_xor, bit_rshift, bit_lshift = bit.bor, bit.band, bit.bnot, bit.bxor, bit.rshift, bit.lshift
else
ok, bit = pcall(require, 'bit32')
if ok then
bit_not = bit.bnot
local tobit = function(n)
return n <= 0x7fffffff and n or -(bit_not(n) + 1)
end
local normalize = function(f)
return function(a,b) return tobit(f(tobit(a), tobit(b))) end
end
bit_or, bit_and, bit_xor = normalize(bit.bor), normalize(bit.band), normalize(bit.bxor)
bit_rshift, bit_lshift = normalize(bit.rshift), normalize(bit.lshift)
else
local function tbl2number(tbl)
local result = 0
local power = 1
for i = 1, #tbl do
result = result + tbl[i] * power
power = power * 2
end
return result
end
local function expand(t1, t2)
local big, small = t1, t2
if(#big < #small) then
big, small = small, big
end
-- expand small
for i = #small + 1, #big do
small[i] = 0
end
end
local to_bits -- needs to be declared before bit_not
bit_not = function(n)
local tbl = to_bits(n)
local size = math.max(#tbl, 32)
for i = 1, size do
if(tbl[i] == 1) then
tbl[i] = 0
else
tbl[i] = 1
end
end
return tbl2number(tbl)
end
-- defined as local above
to_bits = function (n)
if(n < 0) then
-- negative
return to_bits(bit_not(math.abs(n)) + 1)
end
-- to bits table
local tbl = {}
local cnt = 1
local last
while n > 0 do
last = n % 2
tbl[cnt] = last
n = (n-last)/2
cnt = cnt + 1
end
return tbl
end
bit_or = function(m, n)
local tbl_m = to_bits(m)
local tbl_n = to_bits(n)
expand(tbl_m, tbl_n)
local tbl = {}
for i = 1, #tbl_m do
if(tbl_m[i]== 0 and tbl_n[i] == 0) then
tbl[i] = 0
else
tbl[i] = 1
end
end
return tbl2number(tbl)
end
bit_and = function(m, n)
local tbl_m = to_bits(m)
local tbl_n = to_bits(n)
expand(tbl_m, tbl_n)
local tbl = {}
for i = 1, #tbl_m do
if(tbl_m[i]== 0 or tbl_n[i] == 0) then
tbl[i] = 0
else
tbl[i] = 1
end
end
return tbl2number(tbl)
end
bit_xor = function(m, n)
local tbl_m = to_bits(m)
local tbl_n = to_bits(n)
expand(tbl_m, tbl_n)
local tbl = {}
for i = 1, #tbl_m do
if(tbl_m[i] ~= tbl_n[i]) then
tbl[i] = 1
else
tbl[i] = 0
end
end
return tbl2number(tbl)
end
bit_rshift = function(n, bits)
local high_bit = 0
if(n < 0) then
-- negative
n = bit_not(math.abs(n)) + 1
high_bit = 0x80000000
end
local floor = math.floor
for i=1, bits do
n = n/2
n = bit_or(floor(n), high_bit)
end
return floor(n)
end
bit_lshift = function(n, bits)
if(n < 0) then
-- negative
n = bit_not(math.abs(n)) + 1
end
for i=1, bits do
n = n*2
end
return bit_and(n, 0xFFFFFFFF)
end
end
end
-- convert little-endian 32-bit int to a 4-char string
local function lei2str(i)
local f=function (s) return char( bit_and( bit_rshift(i, s), 255)) end
return f(0)..f(8)..f(16)..f(24)
end
-- convert raw string to big-endian int
local function str2bei(s)
local v=0
for i=1, #s do
v = v * 256 + byte(s, i)
end
return v
end
-- convert raw string to little-endian int
local function str2lei(s)
local v=0
for i = #s,1,-1 do
v = v*256 + byte(s, i)
end
return v
end
-- cut up a string in little-endian ints of given size
local function cut_le_str(s,...)
local o, r = 1, {}
local args = {...}
for i=1, #args do
table.insert(r, str2lei(sub(s, o, o + args[i] - 1)))
o = o + args[i]
end
return r
end
local swap = function (w) return str2bei(lei2str(w)) end
-- An MD5 mplementation in Lua, requires bitlib (hacked to use LuaBit from above, ugh)
-- 10/02/2001 jcw@equi4.com
local CONSTS = {
0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee,
0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501,
0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be,
0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821,
0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa,
0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8,
0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed,
0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a,
0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c,
0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70,
0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05,
0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665,
0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039,
0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1,
0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1,
0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391,
0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476
}
local f=function (x,y,z) return bit_or(bit_and(x,y),bit_and(-x-1,z)) end
local g=function (x,y,z) return bit_or(bit_and(x,z),bit_and(y,-z-1)) end
local h=function (x,y,z) return bit_xor(x,bit_xor(y,z)) end
local i=function (x,y,z) return bit_xor(y,bit_or(x,-z-1)) end
local z=function (ff,a,b,c,d,x,s,ac)
a=bit_and(a+ff(b,c,d)+x+ac,0xFFFFFFFF)
-- be *very* careful that left shift does not cause rounding!
return bit_or(bit_lshift(bit_and(a,bit_rshift(0xFFFFFFFF,s)),s),bit_rshift(a,32-s))+b
end
local function transform(A,B,C,D,X)
local a,b,c,d=A,B,C,D
local t=CONSTS
a=z(f,a,b,c,d,X[ 0], 7,t[ 1])
d=z(f,d,a,b,c,X[ 1],12,t[ 2])
c=z(f,c,d,a,b,X[ 2],17,t[ 3])
b=z(f,b,c,d,a,X[ 3],22,t[ 4])
a=z(f,a,b,c,d,X[ 4], 7,t[ 5])
d=z(f,d,a,b,c,X[ 5],12,t[ 6])
c=z(f,c,d,a,b,X[ 6],17,t[ 7])
b=z(f,b,c,d,a,X[ 7],22,t[ 8])
a=z(f,a,b,c,d,X[ 8], 7,t[ 9])
d=z(f,d,a,b,c,X[ 9],12,t[10])
c=z(f,c,d,a,b,X[10],17,t[11])
b=z(f,b,c,d,a,X[11],22,t[12])
a=z(f,a,b,c,d,X[12], 7,t[13])
d=z(f,d,a,b,c,X[13],12,t[14])
c=z(f,c,d,a,b,X[14],17,t[15])
b=z(f,b,c,d,a,X[15],22,t[16])
a=z(g,a,b,c,d,X[ 1], 5,t[17])
d=z(g,d,a,b,c,X[ 6], 9,t[18])
c=z(g,c,d,a,b,X[11],14,t[19])
b=z(g,b,c,d,a,X[ 0],20,t[20])
a=z(g,a,b,c,d,X[ 5], 5,t[21])
d=z(g,d,a,b,c,X[10], 9,t[22])
c=z(g,c,d,a,b,X[15],14,t[23])
b=z(g,b,c,d,a,X[ 4],20,t[24])
a=z(g,a,b,c,d,X[ 9], 5,t[25])
d=z(g,d,a,b,c,X[14], 9,t[26])
c=z(g,c,d,a,b,X[ 3],14,t[27])
b=z(g,b,c,d,a,X[ 8],20,t[28])
a=z(g,a,b,c,d,X[13], 5,t[29])
d=z(g,d,a,b,c,X[ 2], 9,t[30])
c=z(g,c,d,a,b,X[ 7],14,t[31])
b=z(g,b,c,d,a,X[12],20,t[32])
a=z(h,a,b,c,d,X[ 5], 4,t[33])
d=z(h,d,a,b,c,X[ 8],11,t[34])
c=z(h,c,d,a,b,X[11],16,t[35])
b=z(h,b,c,d,a,X[14],23,t[36])
a=z(h,a,b,c,d,X[ 1], 4,t[37])
d=z(h,d,a,b,c,X[ 4],11,t[38])
c=z(h,c,d,a,b,X[ 7],16,t[39])
b=z(h,b,c,d,a,X[10],23,t[40])
a=z(h,a,b,c,d,X[13], 4,t[41])
d=z(h,d,a,b,c,X[ 0],11,t[42])
c=z(h,c,d,a,b,X[ 3],16,t[43])
b=z(h,b,c,d,a,X[ 6],23,t[44])
a=z(h,a,b,c,d,X[ 9], 4,t[45])
d=z(h,d,a,b,c,X[12],11,t[46])
c=z(h,c,d,a,b,X[15],16,t[47])
b=z(h,b,c,d,a,X[ 2],23,t[48])
a=z(i,a,b,c,d,X[ 0], 6,t[49])
d=z(i,d,a,b,c,X[ 7],10,t[50])
c=z(i,c,d,a,b,X[14],15,t[51])
b=z(i,b,c,d,a,X[ 5],21,t[52])
a=z(i,a,b,c,d,X[12], 6,t[53])
d=z(i,d,a,b,c,X[ 3],10,t[54])
c=z(i,c,d,a,b,X[10],15,t[55])
b=z(i,b,c,d,a,X[ 1],21,t[56])
a=z(i,a,b,c,d,X[ 8], 6,t[57])
d=z(i,d,a,b,c,X[15],10,t[58])
c=z(i,c,d,a,b,X[ 6],15,t[59])
b=z(i,b,c,d,a,X[13],21,t[60])
a=z(i,a,b,c,d,X[ 4], 6,t[61])
d=z(i,d,a,b,c,X[11],10,t[62])
c=z(i,c,d,a,b,X[ 2],15,t[63])
b=z(i,b,c,d,a,X[ 9],21,t[64])
return bit_and(A+a,0xFFFFFFFF),bit_and(B+b,0xFFFFFFFF),
bit_and(C+c,0xFFFFFFFF),bit_and(D+d,0xFFFFFFFF)
end
----------------------------------------------------------------
local function md5_update(self, s)
self.pos = self.pos + #s
s = self.buf .. s
for ii = 1, #s - 63, 64 do
local X = cut_le_str(sub(s,ii,ii+63),4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4)
assert(#X == 16)
X[0] = table.remove(X,1) -- zero based!
self.a,self.b,self.c,self.d = transform(self.a,self.b,self.c,self.d,X)
end
self.buf = sub(s, math.floor(#s/64)*64 + 1, #s)
return self
end
local function md5_finish(self)
local msgLen = self.pos
local padLen = 56 - msgLen % 64
if msgLen % 64 > 56 then padLen = padLen + 64 end
if padLen == 0 then padLen = 64 end
local s = char(128) .. rep(char(0),padLen-1) .. lei2str(bit_and(8*msgLen, 0xFFFFFFFF)) .. lei2str(math.floor(msgLen/0x20000000))
md5_update(self, s)
assert(self.pos % 64 == 0)
return lei2str(self.a) .. lei2str(self.b) .. lei2str(self.c) .. lei2str(self.d)
end
----------------------------------------------------------------
function md5.new()
return { a = CONSTS[65], b = CONSTS[66], c = CONSTS[67], d = CONSTS[68],
pos = 0,
buf = '',
update = md5_update,
finish = md5_finish }
end
function md5.tohex(s)
return format("%08x%08x%08x%08x", str2bei(sub(s, 1, 4)), str2bei(sub(s, 5, 8)), str2bei(sub(s, 9, 12)), str2bei(sub(s, 13, 16)))
end
function md5.sum(s)
return md5.new():update(s):finish()
end
function md5.sumhexa(s)
return md5.tohex(md5.sum(s))
end
return md5

View File

@ -0,0 +1,21 @@
package = "md5"
version = "1.0-0"
source = {
url = "https://github.com/kikito/md5.lua/archive/v1.0.0.tar.gz",
dir = "md5.lua-1.0.0"
}
description = {
summary = "MD5 sum in pure Lua, with no C and no external dependencies",
detailed = "This pure-Lua module computes md5 in Lua 5.1, Lua 5.2 and LuaJIT, using native bit-manipulation libraries when available, and falling back to table-based manipulation of integers in 5.1",
homepage = "https://github.com/kikito/md5.lua",
license = "MIT"
}
dependencies = {
"lua >= 5.1"
}
build = {
type = "builtin",
modules = {
md5 = "md5.lua"
}
}

View File

@ -0,0 +1,21 @@
package = "md5"
version = "1.0-1"
source = {
url = "https://github.com/kikito/md5.lua/archive/v1.0.1.tar.gz",
dir = "md5.lua-1.0.1"
}
description = {
summary = "MD5 sum in pure Lua, with no C and no external dependencies",
detailed = "This pure-Lua module computes md5 in Lua 5.1, Lua 5.2 and LuaJIT, using native bit-manipulation libraries when available, and falling back to table-based manipulation of integers in 5.1",
homepage = "https://github.com/kikito/md5.lua",
license = "MIT"
}
dependencies = {
"lua >= 5.1"
}
build = {
type = "builtin",
modules = {
md5 = "md5.lua"
}
}

View File

@ -0,0 +1,21 @@
package = "md5"
version = "1.0-2"
source = {
url = "https://github.com/kikito/md5.lua/archive/v1.0.2.tar.gz",
dir = "md5.lua-1.0.2"
}
description = {
summary = "MD5 sum in pure Lua, with no C and no external dependencies",
detailed = "This pure-Lua module computes md5 in Lua 5.1, Lua 5.2 and LuaJIT, using native bit-manipulation libraries when available, and falling back to table-based manipulation of integers in 5.1",
homepage = "https://github.com/kikito/md5.lua",
license = "MIT"
}
dependencies = {
"lua >= 5.1"
}
build = {
type = "builtin",
modules = {
md5 = "md5.lua"
}
}

View File

@ -0,0 +1,21 @@
package = "md5"
version = "1.1-0"
source = {
url = "https://github.com/kikito/md5.lua/archive/v1.1.0.tar.gz",
dir = "md5.lua-1.1.0"
}
description = {
summary = "MD5 sum in pure Lua, with no C and no external dependencies",
detailed = "This pure-Lua module computes md5 in Lua 5.1, Lua 5.2 and LuaJIT, using native bit-manipulation libraries when available, and falling back to table-based manipulation of integers in 5.1",
homepage = "https://github.com/kikito/md5.lua",
license = "MIT"
}
dependencies = {
"lua >= 5.1"
}
build = {
type = "builtin",
modules = {
md5 = "md5.lua"
}
}

View File

@ -0,0 +1,40 @@
local md5 = require('md5')
local function hex2bin(hex)
local result, _ = hex:gsub('..', function(hexval)
return string.char(tonumber(hexval, 16))
end)
return result
end
describe('md5', function()
describe('md5.sumhexa', function()
it('works', function()
assert.equal(md5.sumhexa("asdf"), '912ec803b2ce49e4a541068d495ab570')
assert.equal(md5.sumhexa('The quick brown fox jumps over the lazy dog'), '9e107d9d372bb6826bd81d3542a419d6')
assert.equal(md5.sumhexa('The quick brown fox jumps over the lazy dog.'), 'e4d909c290d0fb1ca068ffaddf22cbd0')
assert.equal(md5.sumhexa(''), 'd41d8cd98f00b204e9800998ecf8427e')
assert.equal(md5.sumhexa(('1'):rep(824)), 'a126fd3611ab8d9b7e8a3384e2fa78a0')
assert.equal(md5.sumhexa(('1'):rep(1528)), '3750b6a29d923b633e05d6ae76895664')
local state = md5.new()
state:update('Hello')
state:update(', World!')
assert.equal(md5.tohex(state:finish()), '65a8e27d8879283831b664bd8b7f0ad4')
end)
end)
describe('md5.sum', function()
it('works', function()
assert.equal(md5.sum("asdf"), hex2bin '912ec803b2ce49e4a541068d495ab570')
assert.equal(md5.sum('The quick brown fox jumps over the lazy dog'), hex2bin '9e107d9d372bb6826bd81d3542a419d6')
assert.equal(md5.sum('The quick brown fox jumps over the lazy dog.'), hex2bin 'e4d909c290d0fb1ca068ffaddf22cbd0')
assert.equal(md5.sum(''), hex2bin 'd41d8cd98f00b204e9800998ecf8427e')
assert.equal(md5.sum(('1'):rep(824)), hex2bin 'a126fd3611ab8d9b7e8a3384e2fa78a0')
assert.equal(md5.sum(('1'):rep(1528)), hex2bin '3750b6a29d923b633e05d6ae76895664')
local state = md5.new()
state:update('Hello')
state:update(', World!')
assert.equal(state:finish(), hex2bin '65a8e27d8879283831b664bd8b7f0ad4')
end)
end)
end)

View File

@ -17,11 +17,63 @@ port.a = not (pin.b or pin.c)
port.a = pin.b ~= pin.c
-- XNOR / NXOR
port.a = pin.b == pin.c]],
digilinesth = [[digiline_send(channel, msg)
if event.type == "digiline" then
print(event.channel)
print(event.msg)
end]],
clock = [[number_of_oscillations = 0 -- 0 for infinity
interval = 1
input_port = "A"
output_port = "C"
if event.type == "on" and event.pin.name == input_port and not mem.running then
if not mem.counter then
mem.counter = 0
end
mem.running = true
port[string.lower(output_port)] = true
interrupt(interval)
mem.counter = mem.counter + 1
elseif event.type == "off" and event.pin.name == input_port and mem.running and number_of_oscillations == 0 then
mem.running = false
mem.counter = 0
elseif event.type == "interrupt" then
if not port[string.lower(output_port)] and mem.running then
port[string.lower(output_port)] = true
interrupt(interval)
mem.counter = mem.counter + 1
else
port[string.lower(output_port)] = false
if mem.counter < number_of_oscillations or number_of_oscillations == 0 and mem.running then
interrupt(interval)
else
mem.running = false
mem.counter = 0
end
end
end]],
counter = [[counter_limit = 5
output_time = 0.5
input_port = "A"
output_port = "C"
if event.type == "on" and event.pin.name == input_port then
if not mem.counter then
mem.counter = 0
end
mem.counter = mem.counter + 1
if mem.counter >= counter_limit then
port[string.lower(output_port)] = true
interrupt(output_time)
mem.counter = 0
end
elseif event.type == "interrupt" then
port[string.lower(output_port)] = false
end]]
}}
@ -126,7 +178,7 @@ local function get_selection_formspec(pname, selected_template)
fill_formspec_dropdown_list(pl_templates, selected_template)..
-- show selected template
"textarea[0,1;10.5,8.5;template_code;template code:;"..template_code.."]"..
"textarea[0,1;10.5,8.5;template_code;template code:;"..minetest.formspec_escape(template_code).."]"..
-- save name
"field[5,9.5;5,0;save_name;savename;"..selected_template.."]"..
@ -150,8 +202,8 @@ end
-- do not localize the function directly here to support possible overwritten luacontrollers
local luac_def = minetest.registered_nodes["mesecons_luacontroller:luacontroller0000"]
local function set_luacontroller_code(pos, code)
luac_def.on_receive_fields(pos, nil, {code=code, program=""})
local function set_luacontroller_code(pos, code, sender)
luac_def.on_receive_fields(pos, nil, {code=code, program=""}, sender)
end
minetest.register_tool("moremesecons_luacontroller_tool:lctt", {
@ -171,10 +223,10 @@ minetest.register_tool("moremesecons_luacontroller_tool:lctt", {
return
end
pdata[pname] = pdata[pname] or {
pdata[pname] = {
pos = pos,
player_name = pname,
template_name = next(templates[pname] or templates[next(templates)]),
template_name = pdata[pname] and pdata[pname].template_name or next(templates[pname] or templates[next(templates)]),
}
minetest.show_formspec(pname, "moremesecons:luacontroller_tool", get_selection_formspec(pdata[pname].player_name, pdata[pname].template_name))
end,
@ -254,7 +306,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
-- replace the code of the luacontroller with the template
local code = get_code_or_nil(pname, fields.player_name, fields.template_name)
if code then
set_luacontroller_code(pos, code)
set_luacontroller_code(pos, code, player)
minetest.chat_send_player(pname, "code set to template at "..minetest.pos_to_string(pos))
end
return
@ -264,7 +316,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
-- add the template to the end of the code of the luacontroller
local code = get_code_or_nil(pname, fields.player_name, fields.template_name)
if code then
set_luacontroller_code(pos, meta:get_string("code").."\r"..code)
set_luacontroller_code(pos, meta:get_string("code").."\r"..code, player)
minetest.chat_send_player(pname, "code added to luacontroller at "..minetest.pos_to_string(pos))
end
return
@ -304,3 +356,5 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
return
end
end)
minetest.log("action", "[moremesecons_luacontroller_tool] loaded.")

View File

@ -0,0 +1,2 @@
default
mesecons

View File

@ -0,0 +1,120 @@
local function mesechest_get_output_rules(node)
local rules = {{x=-1, y=0, z=0},
{x=0, y=0, z=-1},
{x=0, y=0, z=1}}
for i = 0, node.param2 do
rules = mesecon.rotate_rules_left(rules)
end
return rules
end
local open_chests = {}
-- Override minetest.register_node so it adds a prefix ":"
local old_minetest_register_node = minetest.register_node
minetest.register_node = function(name, def)
local old_on_metadata_inventory_put = def.on_metadata_inventory_put
local old_on_metadata_inventory_take = def.on_metadata_inventory_take
local old_on_rightclick = def.on_rightclick
def.on_metadata_inventory_put = function(pos, ...)
old_on_metadata_inventory_put(pos, ...)
mesecon.receptor_on(pos, {mesechest_get_output_rules(minetest.get_node(pos))[2]})
minetest.after(1, function(pos)
mesecon.receptor_off(pos, {mesechest_get_output_rules(minetest.get_node(pos))[2]})
end, pos)
end
def.on_metadata_inventory_take = function(pos, ...)
old_on_metadata_inventory_take(pos, ...)
mesecon.receptor_on(pos, {mesechest_get_output_rules(minetest.get_node(pos))[3]})
minetest.after(1, function(pos)
mesecon.receptor_off(pos, {mesechest_get_output_rules(minetest.get_node(pos))[3]})
end, pos)
end
def.on_rightclick = function(pos, node, clicker, ...)
if old_on_rightclick(pos, node, clicker, ...) == nil then
mesecon.receptor_on(pos, {mesechest_get_output_rules(node)[1]})
open_chests[clicker:get_player_name()] = pos
end
end
old_minetest_register_node(":"..name, def)
end
local old_minetest_register_lbm = minetest.register_lbm
minetest.register_lbm = function() end
-- Get the on_player_receive_fields function. That's a huge hack
for i, f in ipairs(minetest.registered_on_player_receive_fields) do
local serialized = minetest.serialize(f)
if string.find(serialized, "default:chest") then
minetest.registered_on_player_receive_fields[i] = function(player, formname, fields)
if f(player, formname, fields) == true then
local pn = player:get_player_name()
if open_chests[pn] then
mesecon.receptor_off(open_chests[pn], {mesechest_get_output_rules(minetest.get_node(open_chests[pn]))[1]})
open_chests[pn] = nil
end
end
end
break
end
end
default.register_chest("mesechest", {
description = "Mese Chest",
tiles = {
"default_chest_top.png^[colorize:#d8e002:70",
"default_chest_top.png^[colorize:#d8e002:70",
"default_chest_side.png^[colorize:#d8e002:70",
"default_chest_side.png^[colorize:#d8e002:70",
"default_chest_front.png^[colorize:#d8e002:70",
"default_chest_inside.png^[colorize:#d8e002:70"
},
sounds = default.node_sound_wood_defaults(),
sound_open = "default_chest_open",
sound_close = "default_chest_close",
groups = {choppy = 2, oddly_breakable_by_hand = 2},
mesecons = {
receptor = {
rules = mesechest_get_output_rules
}
}
})
default.register_chest("mesechest_locked", {
description = "Locked Mese Chest",
tiles = {
"default_chest_top.png^[colorize:#d8e002:70",
"default_chest_top.png^[colorize:#d8e002:70",
"default_chest_side.png^[colorize:#d8e002:70",
"default_chest_side.png^[colorize:#d8e002:70",
"default_chest_lock.png^[colorize:#d8e002:70",
"default_chest_inside.png^[colorize:#d8e002:70"
},
sounds = default.node_sound_wood_defaults(),
sound_open = "default_chest_open",
sound_close = "default_chest_close",
groups = {choppy = 2, oddly_breakable_by_hand = 2},
protected = true,
mesecons = {
receptor = {
rules = mesechest_get_output_rules
}
}
})
minetest.register_node = old_minetest_register_node
minetest.register_lbm = old_minetest_register_lbm
minetest.register_craft({
output = "default:mesechest",
recipe = {{"group:mesecon_conductor_craftable", "default:chest", "group:mesecon_conductor_craftable"}}
})
minetest.register_craft({
output = "default:mesechest_locked",
recipe = {{"group:mesecon_conductor_craftable", "default:chest_locked", "group:mesecon_conductor_craftable"}}
})
minetest.log("action", "[moremesecons_mesechest] loaded.")

View File

@ -30,7 +30,7 @@ local kill_nearest_player = function(pos)
-- And kill him
nearest:set_hp(0)
minetest.log("action", "Player "..owner.." kills player "..nearest.." using a MoreMesecons Player Killer.")
minetest.log("action", "Player "..owner.." kills player "..nearest:get_player_name().." using a MoreMesecons Player Killer.")
end
minetest.register_craft({
@ -60,3 +60,5 @@ minetest.register_node("moremesecons_playerkiller:playerkiller", {
end,
sounds = default.node_sound_stone_defaults(),
})
minetest.log("action", "[moremesecons_playerkiller] loaded.")

View File

@ -35,7 +35,7 @@ if use_speech_dispatcher then
nil,
""
}
local language = minetest.setting_get("language") or "en"
local language = minetest.settings:get("language") or "en"
if language ~= "en" then
tab[3] = "-l "..language
end
@ -121,3 +121,5 @@ minetest.register_craft({
recipe = {{"mesecons_luacontroller:luacontroller0000", "mesecons_noteblock:noteblock"},
{"group:wood", "group:wood"}}
})
minetest.log("action", "[moremesecons_sayer] loaded.")

View File

@ -79,3 +79,5 @@ minetest.register_craft({
output = "moremesecons_signalchanger:signalchanger_off",
recipe = {{"group:mesecon_conductor_craftable","moremesecons_switchtorch:switchtorch_off","group:mesecon_conductor_craftable"}}
})
minetest.log("action", "[moremesecons_signalchanger] loaded.")

View File

@ -127,3 +127,5 @@ minetest.register_abm({
-- 2 = x+1
-- 0 = y+1
-- 1 = y-1
minetest.log("action", "[moremesecons_switchtorch] loaded.")

View File

@ -1,25 +1,10 @@
local teleporters
local teleporters_rids
local storage = minetest.get_mod_storage()
local enable_lbm = moremesecons.setting("teleporter", "enable_lbm", false)
local storage
if not minetest.get_mod_storage then
enable_lbm = true -- No mod storage (<= 0.4.15-stable): force registration of LBM
teleporters = {}
teleporters_rids = {}
jammers = {}
else
storage = minetest.get_mod_storage()
teleporters = minetest.deserialize(storage:get_string("teleporters")) or {}
teleporters_rids = minetest.deserialize(storage:get_string("teleporters_rids")) or {}
jammers = minetest.deserialize(storage:get_string("jammers")) or {}
end
local teleporters = minetest.deserialize(storage:get_string("teleporters")) or {}
local teleporters_rids = minetest.deserialize(storage:get_string("teleporters_rids")) or {}
local jammers = minetest.deserialize(storage:get_string("jammers")) or {}
local function update_mod_storage()
if not storage then
return
end
storage:set_string("teleporters", minetest.serialize(teleporters))
storage:set_string("teleporters_rids", minetest.serialize(teleporters_rids))
end
@ -113,7 +98,7 @@ minetest.register_node("moremesecons_teleporter:teleporter", {
end,
})
if enable_lbm then
if moremesecons.setting("teleporter", "enable_lbm", false) then
minetest.register_lbm({
name = "moremesecons_teleporter:add_teleporter",
nodenames = {"moremesecons_teleporter:teleporter"},
@ -121,3 +106,5 @@ if enable_lbm then
action = register
})
end
minetest.log("action", "[moremesecons_teleporter] loaded.")

View File

@ -125,3 +125,5 @@ minetest.register_craft({
minetest.register_alias("moremesecons_temporarygate:temporarygate_off", "moremesecons_timegate:timegate_off")
minetest.register_alias("moremesecons_temporarygate:temporarygate_on", "moremesecons_timegate:timegate_on")
minetest.log("action", "[moremesecons_timegate] loaded.")

View File

@ -4,15 +4,15 @@ function moremesecons.setting(modname, settingname, default, min)
local setting = "moremesecons_" .. modname .. "." .. settingname
if type(default) == "boolean" then
local ret = minetest.setting_getbool(setting)
local ret = minetest.settings:get_bool(setting)
if ret == nil then
ret = default
end
return ret
elseif type(default) == "string" then
return minetest.setting_get(setting) or default
return minetest.settings:get(setting) or default
elseif type(default) == "number" then
local ret = tonumber(minetest.setting_get(setting)) or default
local ret = tonumber(minetest.settings:get(setting)) or default
if not ret then
minetest.log("warning", "[moremesecons_"..modname.."]: setting '"..setting.."' must be a number. Set to default value ("..tostring(default)..").")
ret = default
@ -78,3 +78,5 @@ if not vector.unpack then
return pos.z, pos.y, pos.x
end
end
minetest.log("action", "[moremesecons_utils] loaded.")

View File

@ -1,26 +1,10 @@
local wireless
local wireless_meta -- This table contains wireless metadatas, it is a lot faster to access
local jammers
local storage = minetest.get_mod_storage()
local enable_lbm = moremesecons.setting("wireless", "enable_lbm", false)
local storage
if not minetest.get_mod_storage then
enable_lbm = true -- No mod storage (<= 0.4.15-stable): force registration of LBM
wireless = {}
wireless_meta = {owners = {}, channels = {}, ids = {}}
jammers = {}
else
storage = minetest.get_mod_storage()
wireless = minetest.deserialize(storage:get_string("wireless")) or {}
wireless_meta = minetest.deserialize(storage:get_string("wireless_meta")) or {owners = {}, channels = {}, ids = {}}
jammers = minetest.deserialize(storage:get_string("jammers")) or {}
end
local wireless = minetest.deserialize(storage:get_string("wireless")) or {}
local wireless_meta = minetest.deserialize(storage:get_string("wireless_meta")) or {owners = {}, channels = {}, ids = {}}
local jammers = minetest.deserialize(storage:get_string("jammers")) or {}
local function update_mod_storage()
if not storage then
return
end
storage:set_string("wireless", minetest.serialize(wireless))
storage:set_string("wireless_meta", minetest.serialize(wireless_meta))
storage:set_string("jammers", minetest.serialize(jammers))
@ -377,7 +361,7 @@ minetest.register_craft({
}
})
if enable_lbm then
if moremesecons.setting("wireless", "enable_lbm", false) then
minetest.register_lbm({
name = "moremesecons_wireless:add_jammer",
nodenames = {"moremesecons_wireless:jammer_on"},
@ -433,3 +417,5 @@ if storage and storage:get_string("wireless_rids") and storage:get_string("wirel
wireless = wireless
})
end
minetest.log("action", "[moremesecons_wireless] loaded.")