From 22c5f0f41eab57db93d7762e8c19840c05f59363 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Mon, 20 Feb 2017 00:51:28 +0100 Subject: [PATCH] Add a map imitation The map item just enables the minimap. It's pretty overpowered at the moment. --- mods/ITEMS/mcl_maps/init.lua | 81 ++++++++++++++++++ mods/ITEMS/mcl_maps/mod.conf | 1 + .../mcl_maps/textures/mcl_maps_map_empty.png | Bin 0 -> 274 bytes .../mcl_maps/textures/mcl_maps_map_filled.png | Bin 0 -> 274 bytes .../textures/mcl_maps_map_filled_markings.png | Bin 0 -> 15348 bytes mods/PLAYER/mcl_player/init.lua | 3 +- 6 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 mods/ITEMS/mcl_maps/init.lua create mode 100644 mods/ITEMS/mcl_maps/mod.conf create mode 100644 mods/ITEMS/mcl_maps/textures/mcl_maps_map_empty.png create mode 100644 mods/ITEMS/mcl_maps/textures/mcl_maps_map_filled.png create mode 100644 mods/ITEMS/mcl_maps/textures/mcl_maps_map_filled_markings.png diff --git a/mods/ITEMS/mcl_maps/init.lua b/mods/ITEMS/mcl_maps/init.lua new file mode 100644 index 000000000..e36a5abc8 --- /dev/null +++ b/mods/ITEMS/mcl_maps/init.lua @@ -0,0 +1,81 @@ +-- Turn empty map into filled map by rightclick +local make_filled_map = function(itemstack, placer, pointed_thing) + local new_map = ItemStack("mcl_maps:filled_map") + itemstack:take_item() + if itemstack:is_empty() then + return new_map + else + local inv = placer:get_inventory() + if inv:room_for_item("main", new_map) then + inv:add_item("main", new_map) + else + minetest.add_item(placer:getpos(), new_map) + end + return itemstack + end +end + +minetest.register_craftitem("mcl_maps:empty_map", { + description = "Empty Map", + inventory_image = "mcl_maps_map_empty.png", + groups = { not_in_creative_inventory = 1 }, + on_place = make_filled_map, + on_secondary_use = make_filled_map, + stack_max = 64, +}) + +-- Enables minimap if carried in hotbar. +-- If this item is NOT in the hotbar, the minimap is unavailable +-- Note: This is not at all like Minecraft right now. Minetest's minimap is pretty overpowered, it +-- has a very greatly zoomed-out version and even a radar mode +minetest.register_craftitem("mcl_maps:filled_map", { + description = "Map", + inventory_image = "mcl_maps_map_filled.png^(mcl_maps_map_filled_markings.png^[colorize:#000000)", + stack_max = 1, +}) + +minetest.register_craft({ + output = "mcl_maps:filled_map", + recipe = { + { "mcl_core:paper", "mcl_core:paper", "mcl_core:paper" }, + { "mcl_core:paper", "group:compass", "mcl_core:paper" }, + { "mcl_core:paper", "mcl_core:paper", "mcl_core:paper" }, + } +}) + +local function has_item_in_hotbar(player, item) + -- Requirement: player carries the tool in the hotbar + local inv = player:get_inventory() + local hotbar = player:hud_get_hotbar_itemcount() + for i=1, hotbar do + if inv:get_stack("main", i):get_name() == item then + return true + end + end + return false +end + +-- Checks if player is still allowed to display the minimap +local function update_minimap(player) + if has_item_in_hotbar(player, "mcl_maps:filled_map") then + player:hud_set_flags({minimap = true}) + else + player:hud_set_flags({minimap = false}) + end +end + +minetest.register_on_joinplayer(function(player) + update_minimap(player) +end) + +local updatetimer = 0 +minetest.register_globalstep(function(dtime) + updatetimer = updatetimer + dtime + if updatetimer > 0.1 then + local players = minetest.get_connected_players() + for i=1, #players do + update_minimap(players[i]) + end + updatetimer = updatetimer - dtime + end +end) diff --git a/mods/ITEMS/mcl_maps/mod.conf b/mods/ITEMS/mcl_maps/mod.conf new file mode 100644 index 000000000..44c4becf0 --- /dev/null +++ b/mods/ITEMS/mcl_maps/mod.conf @@ -0,0 +1 @@ +name = mcl_maps diff --git a/mods/ITEMS/mcl_maps/textures/mcl_maps_map_empty.png b/mods/ITEMS/mcl_maps/textures/mcl_maps_map_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..9b5aa7d6786c4d438b26fc52c4330300000ab766 GIT binary patch literal 274 zcmV+t0qy>YP)QD@YPF zn3d?`CvY4Is--7SdtZ4q9wn#`qGl`Q^x)|lKqS1i?%}RB^hltakOUXo&@17|(ctPv zWJ!1gEV#K7N)lEHW{ZtJ3&s}J;0PExjG6?}Ug0;QSvgj~)P0~yM1biVQ51Op8Et_U YH+FwY(|~K_rvLx|07*qoM6N<$f(!?72LJ#7 literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_maps/textures/mcl_maps_map_filled.png b/mods/ITEMS/mcl_maps/textures/mcl_maps_map_filled.png new file mode 100644 index 0000000000000000000000000000000000000000..9b5aa7d6786c4d438b26fc52c4330300000ab766 GIT binary patch literal 274 zcmV+t0qy>YP)QD@YPF zn3d?`CvY4Is--7SdtZ4q9wn#`qGl`Q^x)|lKqS1i?%}RB^hltakOUXo&@17|(ctPv zWJ!1gEV#K7N)lEHW{ZtJ3&s}J;0PExjG6?}Ug0;QSvgj~)P0~yM1biVQ51Op8Et_U YH+FwY(|~K_rvLx|07*qoM6N<$f(!?72LJ#7 literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_maps/textures/mcl_maps_map_filled_markings.png b/mods/ITEMS/mcl_maps/textures/mcl_maps_map_filled_markings.png new file mode 100644 index 0000000000000000000000000000000000000000..4f7e08cc18b32c907a4f5632d9db555da58f5472 GIT binary patch literal 15348 zcmeI3O>7%Q6vrnt;=`pC>W8R$TDC3XYrS9IwRdGZN#leBa2irWlM1OF?~a{SydUhY zYsY|yN-sTt5JCu{9>@W1<<oQ!#ZPm2f`rjI635LuHpEG zZBap7ShTBthNgo=9a{S`olYXlYiXz1CR>LN%f~r(kdv-;e4MIVX)aCISX4nKvV4!_ zov`RsXc${l)t&BS6ForyMR2q>S}1}6tesS zgLdy5rEYP0))0&gT|259L)?Oq(5-nCLeh29Q72slecLVAb|o90viY`z)Z}Dvs-(C? z-FM8ebi3x=pJw}=x)txnLpkW9Y;YnOPGJPOAc(3Ut33Z8C#f742@=lii;=f=qqN!^ zBUKQ1l}oA#IT|A}vp)v%p$>hxr6|$4kvO`hmTcFAe%3Hy8L^I4PP1KOWM=1Fsgria zcJsE5vSPY>+#=?IUO8K<1_yh>(vaudt{0isZn?v-+-q$QRE%tRap<;Y=-n1j5rT;l zl6gi}bcx}4Br`>k6Bv|GWF0|8mPne zwr)Cc!_ZY!l0}Y7>P&)5@=OsXQcMbRkUP~v2!R7ARnN|LDYT06ynFdI_M7(v}vBLnU79z{?0TH6B^qj~i@(DhJov1I7> z%@XbM4(a9vr9v&Zw6j{!_ef8(J=X5BI<(x3jpf{$1Y!J$`|upKWn^u3YlNYivxW!p z?2=!DE}AGK%ir3S7RK#$>`ySbPyUlqc<|J}E5z3N>K_+k7V-cz4gs+C0sw#90ATG$ z0ID1S*G>YUz7D|M_A4hoo(2HCHJh6#)W81et4CvN+?}JJe|tmCD zD`V8s=;#NlpFDmL`0l48JDp1>Kq_|ES-6MaLG4-{{q<1d2msH$xBKO7>*L?Z&c*9{ z!M+a-|F3(;A6R71z2=V}bZ>dpIDh<})JJ9T$mK7m-o1WqeO&~F3m4P7F1+}QbLFY& z-EUsqzW1~0?|a6#UmZVVem}Ce@r?NA^Or_;I&0g$yCQ+}x6#+Gde5E-zRR7Rn#;X& I_~hxo0XOra#Q*>R literal 0 HcmV?d00001 diff --git a/mods/PLAYER/mcl_player/init.lua b/mods/PLAYER/mcl_player/init.lua index da083bcde..bef53c087 100644 --- a/mods/PLAYER/mcl_player/init.lua +++ b/mods/PLAYER/mcl_player/init.lua @@ -148,9 +148,8 @@ minetest.register_on_joinplayer(function(player) -- Minecraft has no sneak glitch -- sneak is also disabled because it is buggy in Minetest (can be used to negate fall damage) player:set_physics_override({sneak_glitch=false}) - -- Minecraft also offers no minimap for free - player:hud_set_flags({minimap=false}) player:set_local_animation({x=0, y=79}, {x=168, y=187}, {x=189, y=198}, {x=200, y=219}, 30) + -- Note: Minimap is now handled in mcl_maps end) minetest.register_on_leaveplayer(function(player)