Quick guide for installation and running
----------------------------------------
-ElidragonV2 requires a GNU/Linux system to run. The setup and update scripts rely on apt and sudo. Go 1.15 or higher is required.
+Elidragon v2 requires a GNU/Linux system to run. The setup and update scripts rely on apt and sudo. Go 1.15 or higher is required.
1. Create a new user using adduser and switch to it. The user should be able to use sudo.
2. git clone this repository into that user's home directory and rename it to .minetest
--- /dev/null
+local grouplist = elidragon.grouplist
+
+local old_on_dig = minetest.registered_nodes["lucky_block:lucky_block"].on_dig
+
+minetest.override_item("lucky_block:lucky_block", {
+ tiles = {"elidragon_luckyblock.png"},
+ inventory_image = minetest.inventorycube("elidragon_luckyblock.png"),
+ light_source = nil,
+ on_dig = function(pos, node, digger)
+ if not minetest.is_protected(pos, digger:get_player_name()) then old_on_dig(pos, node, digger) end
+ end
+})
+
+minetest.override_item("lucky_block:void_mirror", {
+ tiles = {"default_glass.png^[brighten"},
+})
+
+minetest.register_alias_force("lucky_block:super_lucky_block", "lucky_block:lucky_block")
+
+local armor_parts = {"head", "torso", "legs", "feet"}
+local armor_list = {}
+for _, n in pairs(armor_parts) do
+ armor_list[n] = grouplist.register("armor_" .. n)
+end
+local head_list = grouplist.register("head")
+
+lucky_block:add_blocks({
+ {"cus", function (pos, player)
+ minetest.set_node(pos, {name = "mcl_armor_stand:armor_stand"})
+ local nodedef = minetest.registered_nodes["mcl_armor_stand:armor_stand"]
+ local node = minetest.get_node(pos)
+ local armor_pieces = {}
+ for _, n in ipairs(armor_parts) do
+ local piece_list = armor_list[n]
+ table.insert(armor_pieces, ItemStack(piece_list[math.random(#piece_list)]))
+ end
+ local function equip_armor(i)
+ local piece = armor_pieces[i]
+ if not piece then return end
+ nodedef.on_rightclick(pos, node, player, ItemStack(piece))
+ minetest.after(0.5, equip_armor, i + 1)
+ end
+ minetest.after(0.5, equip_armor, 1)
+ end},
+ {"dro", {"mcl_core:goldblock", "mcl_core:gold_ingot", "mcl_core:gold_nugget"}, 256},
+ {"dro", {"mcl_core:dirt", "mcl_core:sand", "mcl_core:gravel"}, 64},
+ {"spw", "mobs_mc:zombie", 5},
+ {"spw", "mobs_mc:husk", 5},
+ {"spw", "mobs_mc:spider", 4},
+ {"spw", "mobs_mc:cave_spider", 4},
+ {"spw", "mobs_mc:skeleton", 2},
+ {"spw", "mobs_mc:stray", 2},
+ {"spw", "mobs_mc:creeper", 1},
+ {"spw", "mobs_mc:creeper_charged", 1},
+ {"spw", "mobs_mc:enderman", 1},
+ {"spw", "mobs_mc:mooshroom", 1},
+ {"spw", "mobs_mc:slime_big", 1},
+ {"spw", "mobs_mc:bat", 10},
+ {"spw", "mobs_mc:chicken", 3},
+ {"spw", "mobs_mc:cow", 1},
+ {"spw", "mobs_mc:horse", 1},
+ {"spw", "mobs_mc:llama", 1},
+ {"spw", "mobs_mc:ocelot", 1},
+ {"spw", "mobs_mc:parrot", 1},
+ {"spw", "mobs_mc:pig", 1},
+ {"spw", "mobs_mc:rabbit", 3},
+ {"spw", "mobs_mc:sheep", 1},
+ {"spw", "mobs_mc:wolf", 1},
+ {"nod", "mcl_cake:cake"},
+ {"nod", "mcl_farming:pumpkin"},
+ {"dro", ("music_record"), 1},
+ {"dro", grouplist.register("horse_armor"), 1},
+ {"nod", grouplist.register("glazed_terracotta")},
+ {"nod", grouplist.register("hardened_clay")},
+ {"nod", grouplist.register("concrete")},
+})
+
+elidragon.lucky_block = {}
--- /dev/null
+name = elidragon_luckyblock
+author = Fleckenstein
+description = Patch luckyblock to work with MineClone2 properly
+depends = elidragon, elidragon_grouplist, lucky_block
--- /dev/null
+local schems = {}
+schems.loaded = {}
+
+function schems.get(name)
+ return schems.loaded[name].data
+end
+
+function schems.get_raw(name)
+ return schems.loaded[name].raw
+end
+
+function schems.load(name)
+ local schem = {}
+ local file = io.open(minetest.get_modpath(minetest.get_current_modname()) .. "/schems/" .. name .. ".we", "r")
+ schem.raw = file:read()
+ file:seek("set")
+ local _, _, contents = file:read("*number", 1, "*all")
+ file:close()
+ schem.data = minetest.deserialize(contents)
+ schems.loaded[name] = schem
+end
+
+function schems.check(pos, name)
+ local schem = schems.get(name)
+ for _, n in ipairs(schem) do
+ if minetest.get_node(vector.add(pos, n)).name ~= n.name then
+ return false
+ end
+ end
+ return true
+end
+
+function schems.remove(pos, name)
+ local schem = schems.get(name)
+ for _, n in ipairs(schem) do
+ minetest.remove_node(vector.add(pos, n))
+ end
+end
+
+function schems.add_schem(pos, schemname)
+ local schem_raw = schems.get_raw(schemname)
+ worldedit.deserialize(pos, schem_raw)
+end
+
+elidragon.schems = schems
--- /dev/null
+name = elidragon_schems
+author = Fleckenstein
+description = A small schem API for Elidragon v2, runs on top of worldedit
+depends = elidragon, worldedit
--- /dev/null
+elidragon.request.register({
+ name = "tp",
+ main_cmd = "tpa",
+ description = "teleport",
+ progressive = "teleporting",
+ preposition = "to",
+ func = function(target, name)
+ local player = minetest.get_player_by_name(name)
+ local pos = player:get_pos()
+ local target_pos = minetest.get_player_by_name(target):get_pos()
+ minetest.sound_play("elidragon_tp_whoosh", {pos = pos, gain = 0.5, max_hear_distance = 10})
+ minetest.sound_play("elidragon_tp_whoosh", {pos = target_pos, gain = 0.5, max_hear_distance = 10})
+ player:set_pos(elidragon.util.find_free_position_near(target_pos))
+ end,
+})
+
+elidragon.tp = {}
--- /dev/null
+name = elidragon_tp
+author = Fleckenstein
+description = A teleport request system for Elidragon v2
+depends = elidragon, elidragon_request, elidragon_util
--- /dev/null
+# common functions used by Elidragon v2 scripts
+
+function world_lock {
+ echo "/tmp/ElidragonV2_$1_lock"
+}
+
+function world_screenname {
+ echo "Elidragon v2 - $1"
+}
+
+function kill_world {
+ kill `cat \`world_lock $1\``
+}
+
+function is_running {
+ return $(test -f `world_lock $1`)
+}
+
+function loop_worlds {
+ WORLDS=`ls worlds`
+ for WORLD in $WORLDS; do
+ $1 $WORLD
+ done
+}
+
+function assert_running {
+ if ! is_running $1; then
+ echo "\e[31mWorld $1 is not running\e[0m"
+ if [ -z "$2" ]; then
+ exit 1
+ else
+ return 1
+ fi
+ fi
+}
+
+function assert_not_running {
+ if is_running $1; then
+ echo -e "\e[31mWorld $1 is already running\e[0m"
+ if [ -z "$2" ]; then
+ exit 1
+ else
+ return 1
+ fi
+ fi
+}
+
+function start_world {
+ echo -n "Starting $1... "
+ if assert_not_running $1 "true"; then
+ LOCK=`world_lock $1`
+
+ screen -dmS `world_screenname $1` bash -c "
+ while is_running $1; do
+ bash -c \"
+ echo \\$\\$ > $LOCK
+ exec minetest --server --terminal --world worlds/$1 --config worlds/$1/minetest.conf --logfile worlds/$1/debug.txt
+ \"
+ done
+ rm $LOCK
+ "
+
+ echo "\e[32mDone\e[0m"
+ fi
+}
+
+function stop_world {
+ echo -n "Stopping $1..."
+ if assert_running $1 "true"; then
+ kill_world $1
+ rm `world_lock $1`
+
+ echo "\e[32mDone\e[0m"
+ fi
+}
+
+function restart_world {
+ echo -n "Restarting $1..."
+ if assert_running $1 "true"; then
+ kill_world $1
+
+ echo "\e[32mDone\e[0m"
+ fi
+}
+
+function run_one_or_all {
+ if [ -z "$2" ]; then
+ loop_worlds $1
+ else
+ $1 $2
+ fi
+}
# Attach to the console of a world
# Arguments: <worldname>
-source scripts/internal.sh
+source scripts/common.sh
assert_running $1
screen -r `world_screenname $1`
+++ /dev/null
-# internal functions used by Elidragon v2 scripts
-
-function world_lock {
- echo "/tmp/ElidragonV2_$1_lock"
-}
-
-function world_screenname {
- echo "Elidragon v2 - $1"
-}
-
-function kill_world {
- kill `cat \`world_lock $1\``
-}
-
-function is_running {
- return $(test -f `world_lock $1`)
-}
-
-function loop_worlds {
- WORLDS=`ls worlds`
- for WORLD in $WORLDS; do
- $1 $WORLD
- done
-}
-
-function assert_running {
- if ! is_running $1; then
- echo "\e[31mWorld $1 is not running\e[0m"
- if [ -z "$2" ]; then
- exit 1
- else
- return 1
- fi
- fi
-}
-
-function assert_not_running {
- if is_running $1; then
- echo -e "\e[31mWorld $1 is already running\e[0m"
- if [ -z "$2" ]; then
- exit 1
- else
- return 1
- fi
- fi
-}
-
-function start_world {
- echo -n "Starting $1... "
- if assert_not_running $1 "true"; then
- LOCK=`world_lock $1`
-
- screen -dmS `world_screenname $1` bash -c "
- while is_running $1; do
- bash -c \"
- echo \\$\\$ > $LOCK
- exec minetest --server --terminal --world worlds/$1 --config worlds/$1/minetest.conf --logfile worlds/$1/debug.txt
- \"
- done
- rm $LOCK
- "
-
- echo "\e[32mDone\e[0m"
- fi
-}
-
-function stop_world {
- echo -n "Stopping $1..."
- if assert_running $1 "true"; then
- kill_world $1
- rm `world_lock $1`
-
- echo "\e[32mDone\e[0m"
- fi
-}
-
-function restart_world {
- echo -n "Restarting $1..."
- if assert_running $1 "true"; then
- kill_world $1
-
- echo "\e[32mDone\e[0m"
- fi
-}
-
-function run_one_or_all {
- if [ -z "$2" ]; then
- loop_worlds $1
- else
- $1 $2
- fi
-}
# Restart one or all worlds
# Arguments: [<worldname>]
-source scripts/internal.sh
+source source scripts/common.sh
run_one_or_all restart_world $1
sudo apt-get update -y
# Install minetest and screen
-apt install minetest screen -y
+sudo apt install minetest screen -y
# Install multiserver and its dependencies
go get github.com/HimbeerserverDE/multiserver
# Start one or all worlds
# Arguments: [<worldname>]
-source scripts/internal.sh
+source source scripts/common.sh
run_one_or_all start_world $1
gameid = MineClone2
auth_backend = sqlite3
player_backend = sqlite3
+load_mod_default = false
+load_mod_elidragon = true
+load_mod_elidragon_grouplist = false
+load_mod_elidragon_luckyblock = false
+load_mod_elidragon_random = false
+load_mod_elidragon_request = true
+load_mod_elidragon_schems = false
+load_mod_elidragon_tp = true
+load_mod_elidragon_util = true
+load_mod_lucky_block = false
+load_mod_mcl_wither_spawning = true
+load_mod_worldedit = true
+load_mod_worldedit_brush = true
+load_mod_worldedit_commands = true
+load_mod_worldedit_gui = false
+load_mod_worldedit_shortcommands = true
+load_mod_multiserver = true
gameid = MineClone2
auth_backend = sqlite3
player_backend = sqlite3
+load_mod_default = false
+load_mod_elidragon = true
+load_mod_elidragon_grouplist = false
+load_mod_elidragon_luckyblock = false
+load_mod_elidragon_random = false
+load_mod_elidragon_request = false
+load_mod_elidragon_schems = false
+load_mod_elidragon_tp = false
+load_mod_elidragon_util = false
+load_mod_lucky_block = false
+load_mod_mcl_wither_spawning = true
+load_mod_worldedit = true
+load_mod_worldedit_brush = true
+load_mod_worldedit_commands = true
+load_mod_worldedit_gui = false
+load_mod_worldedit_shortcommands = true
+load_mod_multiserver = true
gameid = MineClone2
auth_backend = sqlite3
player_backend = sqlite3
+load_mod_default = true
+load_mod_elidragon = true
+load_mod_elidragon_grouplist = true
+load_mod_elidragon_luckyblock = true
+load_mod_elidragon_random = false
+load_mod_elidragon_request = true
+load_mod_elidragon_schems = false
+load_mod_elidragon_tp = true
+load_mod_elidragon_util = true
+load_mod_lucky_block = true
+load_mod_mcl_wither_spawning = true
+load_mod_worldedit = true
+load_mod_worldedit_brush = true
+load_mod_worldedit_commands = true
+load_mod_worldedit_gui = false
+load_mod_worldedit_shortcommands = true
+load_mod_multiserver = true
gameid = MineClone2
auth_backend = sqlite3
player_backend = sqlite3
+load_mod_default = false
+load_mod_elidragon = true
+load_mod_elidragon_grouplist = false
+load_mod_elidragon_luckyblock = false
+load_mod_elidragon_random = false
+load_mod_elidragon_request = true
+load_mod_elidragon_schems = false
+load_mod_elidragon_tp = true
+load_mod_elidragon_util = true
+load_mod_lucky_block = false
+load_mod_mcl_wither_spawning = true
+load_mod_worldedit = true
+load_mod_worldedit_brush = true
+load_mod_worldedit_commands = true
+load_mod_worldedit_gui = false
+load_mod_worldedit_shortcommands = true
+load_mod_multiserver = true